目录
网络协议头分析
MTU
MSS
粘包和拆包
粘包
粘包原因
解决粘包
拆包
包头分析
以太网头
IP头
编辑
Tcp头
三次握手和四次挥手
三次握手
四次挥手
TCP可靠性的保证
1. 数据包顺序
2. 数据完整性
3.. 确认应答(ACK)
4. 重传机制
5. 流量控制
6. 拥塞控制
7. 连接管理
网络协议头分析
MTU
Maximum Transmit Unit 最大传输单元
物理接口(数据链路层)提供给上层(网络层(IP层))最大一次传输数据的大小。
规定了数据链路层所能传送最大数据长度
以太网为例,缺省MTU=1500字节,这是以太网接口对IP层的约束
如果IP层<=1500字节需要发送,只需要一个IP包就可以
如果IP层>1500字节需要发送,需要分片才能发送(分片:帧)
限制数据包大小的协议是:MTU MSS
MSS
Maximum Segment Size 最大报文长度
TCP提交给IP层最大分段大小,指TCP报文所允许传送数据部分最大长度。
不包含TCP头,MSS式TCP来限制应用层最大发送字节数。
如果MTU=1500,MSS=1500-20-20=1460;
如果有2000字节需要发送
第一个 1460 第二个 540--->拆包
以太网帧完整帧格式
粘包和拆包
粘包
粘包原因
带发送的数据太小,远小于协议允许的最大值。
解决粘包
1.设置相同大小的接收发送数组
2.使用sleep(一般不使用)
3.每个包发送前都加一个尾,接收方识别到特殊的尾部就认为这是一个包
4.在包前面加一个头,这个头是此包的长度,然后接收方先读到的的肯定是头,识别包的大小,然后读刚别到的个数
拆包
拆包:包体长度大于协议规定的最大长度,所以必须做出拆分。
包头分析
以太网头
以太网中封装了源mac地址以及目的mac地址,还有ip类型,以太网又称之为mac头
IP头
Tcp头
Seq:序列号,占4个字节,用于给数据段进行编号的。所有非应答包的数据段,都有seq。
Ack:应答号,用于应答非应答包(握手包,挥手包,数据包)。告诉对方下一次从这个seq编号发送数据包。
SYN:握手包,连接的时候产生的包
FIN:挥手包,断开连接产生的包
PSH:数据包,传输数据时候产生的包
ACK:应答包
PSH Ack = Seq+len;
SYN FIN Ack = Seq+1;
UDP头
三次握手和四次挥手
三次握手
发起方肯定是客户端
第一次握手:客户端发送SYN包(SYN=1, seq=0)给服务器,并进入SYN_SENT状态,等待服务器返回确认包。
第二次握手:服务器接收到SYN包,确认客户端的SYN,发送ACK包(ACK=1 , ack=1),同时发送一个SYN包(SYN=1, seq=0),并进入SYN_RCVD状态。
第三次握手:客户端接收到服务器的SYN包,以及ACK包,进入establish状态,同时向服务器发送ACK包(ACK=1, ack=1)。此时三次握手包发送完毕,服务器也进入establish状态
四次挥手
四次挥手的发起方可能是服务器,也可能是客户端
第一次挥手:主动关闭方发送一个FIN包(FIN=1, seq = u)给被动方,进入FIN_WAIT_1状态;
第二次挥手:被动方接收到FIN包,给主动方发送一个ACK包(ACK=1, ack=u+1);并进入CLOKSE_WAIT状态。主动方接受到ACK包后,进入FIN_WAIT_2状态。如果有数据没有发送完毕,则继续发送,直到发送完毕为止;
第三次挥手:被动方发送一个FIN包(FIN=1, seq=w),进入LAST_ACK状态.
第四次挥手:主动关闭方收到FIN包,回复一个ACK包(ACK=1, ack=w+1)。被动关闭方收到主动关闭方的ACK后关闭连接。
TCP可靠性的保证
1. 数据包顺序
TCP会在数据包中添加序列号,以确保接收方能够按照正确的顺序重组数据。即使数据包在网络中以不同的顺序到达,TCP也会重新排序。
2. 数据完整性
TCP使用校验和(Checksum)来确保数据在传输过程中没有损坏。发送方计算数据段的校验和,接收方在接收时进行重新计算并进行比对,确保数据完整。
3.. 确认应答(ACK)
每当接收方成功接收到一个数据包时,便会发送一个ACK(确认应答)返回给发送方。发送方在收到ACK后知道数据已被成功接收。
4. 重传机制
如果发送方在一定时间内没有收到ACK,或者接收到的ACK表明数据包丢失或错误,TCP会自动重传这些数据包。这种机制确保了即使在网络中发生丢包,数据仍然能够最终到达。
5. 流量控制
TCP使用滑动窗口(Sliding Window)机制来控制数据流量,确保接收方不会被淹没(overwhelmed)而丢失数据。接收方会告知发送方自己的接收能力,发送方可以根据这个信息调整发送速率。
6. 拥塞控制
TCP还实现了拥塞控制机制,以避免网络拥塞。通过算法(如慢启动、拥塞避免、快重传和快恢复等),TCP可以根据网络的当前状况自适应调整数据发送速率,确保可靠传输。
7. 连接管理
TCP连接的建立(通过三次握手)和关闭(通过四次挥手)也是可靠性的一个方面。这确保了双方在发送和接收数据前都已准备就绪,并能正确地完成数据传输和资源释放。