网络编程
网络协议讲解
有两个架构
C/S架构也可以叫cs架构
C:client(客户端) S:server(服务端)
这种架构的软件有:qq(电脑端的),微信(电脑端的)
B/S架构也可以叫bs架构
B:browser(浏览器) S:server(服务端)
这类架构的软件有:京东、天猫
B/S架构本质也是C/S
为什么要学习网络编程
学习网络编程为了写一个cs架构的软件
软件的工作流程大致:
先从c端再到网络最后是s端,然后再从s端到网络最后再到c端
先将网络来讲讲
网络
网路:网络连接介质 + 网络协议(osi七层协议)
网络协议:osi七层协议分别是哪七层?
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
物理层:电信号
数据链路层:
把物理层的电信号分组,每一个组叫一个数据报/数据帧,每一个数据帧分成:报头head和数据data两部分。
每一个数据报到由报头和数据部分组成
报头有固定的18个字节,6个字节是发送者/源地址, 6个字节是接收者/目标地址, 6个字节是数据类型
mac地址:发送者,接收者地址,就是mac地址,同时每一个网卡都有一个唯一的mac地址:12位16进制数表示(前六为是厂商编号,后六位是流水线号)
广播:同一个局域网内通信,会出现广播风暴
网络层:
ip :ipv4:32位2进制表示: 点分十进制表示 从0.0.0.0到255.255.255.255,范围是有限的,不能表示所有的网络设备,于是出现了ipv6
子网掩码:通过子网掩码和ip判断两个ip是否处于同一个网段,通过ip地址和子网掩码做按位与运算
例子如下
ip地址:172.16.10.1: 10101100.00010000.00001010.00000001
子网掩码:255.255.255.0: 11111111.11111111.11111111.00000000
按位与运算:172.16.10.0: 10101100.00010000.00001010.00000000
ip跟mac有转换关系
ARP协议:广播的方式发送数据包,获取目标主机的mac地址
任何一种协议都有头和内容
传输层:
tcp协议:
三次握手,四次挥手
三次握手:
1.客户端请求连接:客户端首先向服务器发送一个同步请求(SYN),表示要建立连接。此时客户端进入SYN-SENT
状态。
2.服务器确认请求:如果服务器愿意接受连接,它会回应一个同步确认(SYN-ACK)以及对客户端请求的确认 ACK。服务器此时进入SYN-RECEIVED
状态。
3.客户端确认连接:最后,客户端发送一个确认 ACK,表示连接已经建立。服务器和客户端都进入ESTABLISHED
状态,连接已建立。
四次挥手:
1.客户端请求断开连接:客户端发送一个终止请求(FIN),表示它已经没有数据要发送。客户端进入FIN-WAIT-1
状态。
2.服务器确认收到请求:服务器接收到终止请求后,发送一个 ACK 确认客户端的请求,但服务器仍然可以向客户端发送数据。服务器进入CLOSE-WAIT
状态,客户端进入FIN-WAIT-2
状态。
3.服务器发送终止请求:服务器发送一个终止请求(FIN)给客户端,表示服务器的数据已经发送完毕,准备断开连接。服务器进入LAST-ACK
状态。
4.客户端确认断开连接:客户端接收到服务器的终止请求后,发送一个确认 ACK 给服务器,表示同意断开连接。客户端进入TIME-WAIT
状态。服务器接收到确认 ACK 后进入CLOSED
状态。客户端经过一段时间后也进入CLOSED
状态,连接被完全终止。
dos和ddos攻击:
拒绝服务攻击,分布式的拒绝服务攻击
端口
端口范围0-65535,0-1023为系统占用端口
通过ip + 子网掩码唯一确定一台设备
通过ip + 子网掩码 + 端口号唯一确定一个软件
半连接池
活跃连接:这些是当前处于活跃状态的连接,可以用于数据传输。
半连接:半连接是一种连接状态,表示连接已经建立,但没有完全连接,无法进行数据传输。它通常用于限制同时处于活跃状态的连接数量。在半连接状态下,服务器可以接受新的连接请求,但连接还没有完全建立。
工作原理如下:
1.当客户端发送连接请求是,服务器接受请求并将连接置于半连接状态。
2.在半连接状态下,服务器验证客户端的请求,确保请求合法,然后将连接从半连接状态切换到活跃连接状态,开始进行数据传输。
3.如果服务器无法处理连接请求,它可以将连接关闭,使其不进入活跃连接状态,以避免占用过多资源(这是关键的)
半连接池的主要优势是可以防止恶意或非法的连接请求导致服务器资源耗尽。它还可以防止服务器在繁忙时期过载,因为只有限定数量的连接能够进入活跃状态。这对于确保服务器的稳定性和性能至关重要。
半连接池通常由操作系统或应用程序框架提供,以便开发人员能够有效地管理网络连接。
也可以这么理解:把半连接池,当成一个餐厅,当顾客(客户端)到达餐厅后,服务员(服务器)先记录他们的到来,但不立即引导他们到座位上,这个步骤可以称为半连接状态。服务员(服务器)这个时候检查是否有足够的座位、查看顾客的预约情况等。
当确定有位置是就引导就座,服务员(服务器)将顾客(客户端)引导到他们的座位上,就像建立了完全的连接。
半连接池就好比餐厅的等候区,它允许餐厅有一个限制的等候区域,以便更好的管理顾客的到来,避免餐厅座位满员或混乱的情况。所以半连接池有利于提高服务器的性能
udp协议:
不可靠传输协议有概率会让数据在传输中丢失或损坏。
小结
这里罗列一下udp协议和tcp协议之间的优缺点
tcp协议:
- 可靠性:TCP是一种可靠的协议,它确保数据的可靠传输。当数据在传输过程中丢失或损坏时,TCP会重新发送丢失的数据,直到接收方确认接收成功。
- 连接导向:TCP是面向连接的协议,它在通信之前需要建立连接,然后进行数据传输,最后释放连接。这种连接方式适用于需要确保数据完整性的应用,如文件传输、电子邮件等。
- 高开销:TCP协议的额外开销较大,因为它需要进行握手、维护连接状态等操作,这会占用较多的网络资源。
- 有序性:TCP会保持数据的有序性,确保数据按发送的顺序接收。
udp协议:
- 不可靠性:UDP是一种不可靠的协议,它不提供数据的可靠性保证。如果数据在传输中丢失或损坏,UDP不会重新发送,而是直接丢弃。
- 无连接:UDP是面向无连接的协议,不需要建立连接,直接发送数据包。这种方式适用于实时性要求高、丢失一些数据不会影响整体应用的情况,如音频/视频流、在线游戏等。
- 低开销:UDP协议的开销较低,因为它不需要进行连接的建立和维护,适合在网络上发送小量数据或实时数据。
- 无序性:UDP不保证数据的有序性,因此接收方可能会以不同的顺序接收到数据包。
应用层
首先需要了解socket,什么是socket呢?socket是在应用层和传输层之间的一个抽象层。它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
上网流程:以百度为例
第一步在浏览器输入www.baidu.com
第二步DNS服务器通过域名解析成ip地址
第三步ip+ 端口号这个地址发送请求,就可以访问到百度的服务器
这里提一个上网时的问题,假设你的微信可以聊天但是你无法查看了浏览器的内容这种情况是网络是通的只是DNS服务器坏了,换个DNS服务器即可