TCP数据包分片机制详解
来源:互联网 发布:网络贩枪 编辑:程序博客网 时间:2024/06/06 04:25
TCP数据包分片机制详解
IP分片在以太网上,由于电气限制,一帧不能超过1518字节,除去以太网帧头14字节(mac地址等)和帧尾4字节校验,还剩1500字节,这个大小称为MTU(最大传输单元)。 如果你的IP包大于1500字节,IP层就会分片了。
而1492的MTU值的来源,是因为PPPoE协议。PPP协议是宽带运营商用于对用户认证计费的(TCP/IP以太网无此功能)。PPPoE头尾一共8字节,所以有效载荷MTU变小了,原来有1500字节,现在只剩1492了。这1492还包含20字节IP头,8字节UDP头或者20字节TCP头。所以真正的不分片数据,UDP为1492-28=1464,TCP为1492-40=1452字节。
TCP的确是流的,所以TCP一个包可以包含的数据大小为65536(包头长度定义为2字节).a向b连续发送数据,b在每次接受到数据大小大于其低水位后,你的recv就会返回(假设是阻塞模式),并得到数据长度。当然你要持续接受和处理数据。 如果实际数据大于1452字节,IP会分片,但IP也会重组分片,所以还是一次recv就可以收到(不一定全,但跟分片无关)。 如果一个分片丢失,则整个TCP包都会重发,因为IP层不会将没收完的分片交给传输层。
ACK确认的时机,是收到了就会确认上一次的完整包的TCP序列号,如果不完整当然要等收完整,也不会交互到应用层,也不会发送ACK确认(可以通过3次确认上一个完整的序列号以让发送方快传)。
握手协商和ACK TCP在发起3次握手时,会协商MSS(最大分节大小),这个值一般是路径最小MTU-IP头-TCP头,如果MTU是1500,则1500-20-20=1460字节。这样,每个包就不用IP层再分片了。所以你发2000字节,你调用一次send,如果发送缓冲区移动窗口够大,应该会全部成功。否则,会返回实际发送的字节。假设2000字节全部成功,tcp实际会将其分为1460和540两个包发送,接受端接受到1460这个包就会回一次ACK,接到540大小这个再ACK一次。每个分节都带有IP头和TCP头的。 IP分片只有第一个带有传输层头,其余的分片只有IP头。
转自:http://www.cnitblog.com/donne/archive/2010/12/23/72500.html
0 0
- TCP数据包分片机制详解
- TCP数据包分片机制详解
- TCP数据包分片机制详解
- TCP数据包分片机制详解, MTU, MSS
- tcp业务层数据包分片
- IP、TCP、UDP数据包头部抓包及IP分片传输详解
- TCP/IP数据包详解
- TCP/IP数据包结构详解
- TCP/IP数据包结构详解
- TCP/IP数据包结构详解
- TCP/IP数据包结构详解
- TCP IP数据包结构详解
- TCP/IP数据包结构详解
- TCP/IP数据包结构详解
- TCP/IP数据包结构详解
- TCP/IP数据包结构详解
- TCP/IP数据包结构详解
- TCP/IP数据包结构详解
- Android实现登录小demo
- shell步步进阶---测试文件是否存在的2种shell写法
- Android 权限
- mybatils的基本配置及增删改查
- andorid ndk 各种坑啊 记录下
- TCP数据包分片机制详解
- Activity传值时防止onActivityResult方法中的data为null
- POJ1833排列
- android framework SystemUI 修改NavigationBar靠右边
- 计蒜客429根据输入特点划分圆求扇形面积
- jquery获取表单类型为radio的元素
- CSS伪类before和after的应用
- qt 中文乱码 处理QByteArray类型里含中文的数据
- android开源框架emojicon,妈妈再也不用担心我没表情了