网络编程(学习)2024.9.5

目录

网络协议头分析

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值