Segment和Fragment的区别,做个实验就很清楚了

tcp socket, send一个超过mtu的数据包出去,网卡是发两个分片包出去,还是发两个独立的数据包出去呢?

不知道,那就做个实验吧。

TCP send

写一个tcp client 和 tcp server .

tcp client 一次调用send 10240 bytes的包

[root@node-3 tcpt]# ./a.out             
========waiting for client's request========
recv msg from client: , 10240 bytes

tcp server一次recv 10240 bytes。

抓包查看

很明显,client一次性发出了8个包,每个包都是TCP segment, TCP分段。

而IP头里的是明确 Don't fragment的,说明这不是分片包。

这些包的关系是

1. 独立的IP包

2. 关联的TCP分段包

那为什么没有分片,而是TCP分段呢。

TCP三次握手,协商出mss, 确保每个分段的包长度不会超过mtu,从而避免了IP层的分片。

IP分片是在网络层(IP层)进行分片和重组

TCP分段是在传输层进行分段和重组

UDP send

所以发UDP大包,应该就会分片了,再做一个UDP的小实验。

用UDP client一次send 10240个bytes

[root@node-3 tcpt]# ./usrv 8888
select start......
select end..........ret=1.
recv client:,  10240 bytes

UDP server 一样一次收到10240bytes.

抓包查看

都是IP层的分片包。

总结

发送大包

TCP包分段(segment):传输层按照mss做的分段,从而避免了IP层分片

UDP包分片(fragment):传输层如若无物,全靠IP层自己分片

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值