目录
网络协议头分析
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连接的建立(通过三次握手)和关闭(通过四次挥手)也是可靠性的一个方面。这确保了双方在发送和接收数据前都已准备就绪,并能正确地完成数据传输和资源释放。