前言

在使用UDP传输的时候,每次接收的最大字节数为1472个字节,然后数据就会被分包,重新进行发送,在进行数据接收的时候,经常会遇到本次数据还没有接收完,数据就被分包的情况,那么为什么是1472个字节对数据进行分片呢,我们下面做一个详细的介绍。

TCP/IP协议 数据传输封装过程

首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。   
其中以太网(Ethernet)的数据帧在链路层

当我们应用程序用TCP/UDP传输数据的时候,数据被送入协议栈中,然后逐个通过每一层,直到最后到物理层将数据帧转换成比特流,送入网络。而在这个过程中,每一层都会对要发送的数据加一些首部信息。整个过程如下图,每层数据向下传输时都会进行封装,帧有效数据来源于上级网络层。


 
 如图可以看出,每一层数据是由上一层数据+本层首部信息组成的,其中每一层的数据 ,称为本层的协议数据单元 ,即PDU.

  • 应用层数据在传输层添加TCP报头后得到的PDU被称为 Segment(数据段 ),图示为TCP段
  • 传输层的数据(TCP段)传给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包); 图示为IP数据包
  • 网络层数据报(IP数据包)被传递到数据链路层,
  • 数据链路层数据称为Frame(数据帧),图示为以太网帧。
  • 最后,帧被转换为比特,通过网络介质传输。这种协议栈逐层向下传递数据,并添加报头和报尾的过程称为封装。

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。

以太网数据帧

我们再来看下以太网数据帧的格式

  • 目的物理地址(DMAC):是目的MAC地址。长度为6个字节

  • 源物理地址(SMAC):是源MAC地址。长度为6个字节

  • 类型( Ethernet II): 用于标识以太网首部后面所跟数据包的类型。

  • 数据部分(Payload):数据也叫有效载荷,这是网络层传递给数据链路层的帧,其长度为 46-1500 Bytes。

  • 数据校验字段(CRC),用于存储 CRC(循环冗余校验)结果的帧的帧尾。

以太网帧的长度在64-1518字节之间。

最小数据帧:6(目的MAC) + 6(源MAC) +2(类型)+ 46(数据帧) + 4 (CRC) = 64 字节

最大数据帧:6(目的MAC) + 6(源MAC) +2(类型)+ 1500(数据帧) + 4 (CRC) = 1518 字节

UDP传输

UDP是面向数据报的传输层协议,即进程的每个输出操作刚好产生一个UDP数据报,并组装成一份待发送的IP数据报。

UDP数据报封装成IP数据报的格式如图所示:

UDP首部

UDP首部格式如图所示:

  • 端口号表示发送进程和接收进程。(IP数据报根据协议字段值区分是UDP或TCP)
  • UDP长度字段是UDP首部和UDP数据的字节长度。最小值为8,即可以发送一份数据长度为0字节的UDP数据报
  • UDP校验和覆盖UDP首部和UDP数据。(IP数据报中校验和是首部校验和,不涉及数据)UDP的校验和是可选的,而TCP的校验和是必须的。

MTU

其次我们要了解什么是MTU,Maximum Transmission Unit(MTU):最大传输单元。

MTU的含义: MAC帧内的数据(Payload)字段的最大长度。就是单次传输中能够传输的最大数据长度

对于以太网来说。其单次传输数据帧最大长度为1500字节

问题解决:

在应用程序中我们用到的数据Data的长度最大是多少,直接取决于底层的限制。

根据上面的知识,我们可以分析一下:

  1. 在链路层,由以太网的物理特性决定了数据帧的长度为64 (46+18) ~ 1518 (1500+18),其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500(不包括帧头和帧尾),即MTU(Maximum Transmission Unit)为1500;
  2. 在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480;
  3. 在传输层,对于UDP包的首部要占用8字节,所以这的MTU为1480-8=1472;

所以,在应用层,数据Data最大长度为1472。当我们的UDP包中的数据多于MTU(1472)时,发送方的IP层需要分片fragmentation进行传输,而在接收方IP层则需要进行数据报重组,由于UDP是不可靠的传输协议,如果分片丢失导致重组失败,将导致UDP数据包被丢弃。

IP分片带来的问题

IP分片其实在网络中是一种比较糟糕的情况,带来了几个问题

  • 传输效率降低:分片会降低传输效率,接收方IP层则需要进行数据报的重组

  • 丢包:由于UDP的特性,当某一片数据传送中丢失时,那其余接收到的数据就没任何意义了,组不成一个完整的数据包,将导致丢弃整个UDP数据报

IP分片--为什么单次最大传输1472个字节相关推荐

  1. 学习笔记之IP分片抓包实验

    学习笔记之IP分片抓包实验 摘要 分片实验 identification字段 附:`MTU`和`MSS` 1,MTU(Maximum Transmission Unit,MTU),最大传输单元 2,M ...

  2. 【网络协议】TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)

    我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组. 我们先来看两个与TCP报文段分 ...

  3. 有没有好奇过路由器宽带拨号的mtu值为什么是1492呢?了解MTU与IP分片

    作者:一天,公众号:网络之路博客(ID:NetworkBlog).让你的网络之路不在孤单,一起学习,一起成长. MTU与IP分片(可选内容了解) 这里来讲一个比较有趣的内容,相信大家都有设置过家用路由 ...

  4. 二三层报头及IP分片详解

    一.报文数据格式 二.二层数据格式 二层以太帧格式 DMAC(6字节) SMAC(6字节) type(2字节) DATA(46-1500字节) CRC(4字节) 字段 长度 含义 DMAC 6字节 目 ...

  5. 详解IP分片与TCP分段的区别

    首先注意:一般听到的TCP分片应该称为TCP分段.IP分片与TCP分片是两个不同概念,别把IP分片与TCP分片别弄混淆了, 接下来直接划重点,两者主要区别: 1.IP分片产生的原因是网络层的MTU:T ...

  6. IP分片、TCP分段

    服务器开发系列 文章目录 服务器开发系列 一.计算机网络传输基础知识 二.IP分片.TCP分段 1.MTU 定义 2. MSS 简述 3. udp 或 tcp 包的最佳大小 4. 如何测出当前网络最佳 ...

  7. IP协议详解(ip头部,ip分片,ip路由选择)

    IP协议是TCP/IP协议族中至关重要的协议,同时也是socker网络编程的基础之一.其中最重要的部分为 (1)ip头部信息:ip头部信息出现在每个ip报文数据报中,用于指定ip通信的远端ip地址,目 ...

  8. TCP/IP 协议难点之一—— IP分片

    1 IP协议简单介绍 就个人而言,网络中,抛开网络安全加密这些,就只单单讨论协议本身,比较难的有三个地方: IP分片与重组 TCP滑动窗口与TCP状态的改变 TCP定时器 其实协议本身根据<TC ...

  9. wireshark捕获IP分片数据包实践

    一 简介 如果一个数据包超过1500个字节,就需要将该包进行分片发送.通常情况下,是不会出现这种情况的. 下面通过使用ICMP包,来产生IP分片数据包. 使用ICMP包进行测试时,如果不指定包的大小, ...

最新文章

  1. 连续按back键盘退出自己的应用,杀掉进程
  2. Java方向如何准备BAT技术面试答案
  3. C++里如何使用功能键(F1、F2·····)进行操纵?
  4. SpringBoot配置文件绑定到Java Bean
  5. html中prependid的作用,UIForm与prependId =“false”中断
  6. python中list_python中list方法详解说明
  7. javascript将内嵌式广告隐藏
  8. html怎么移动到vue,vue自定义指令之拖动页面的元素
  9. Varnish的vcl子程序
  10. MS SQL入门基础:数据库 统计函数
  11. 《游戏设计师修炼之道:数据驱动的游戏设计》一1.4 来自政府和产业的挑战...
  12. Atitit.软件命名空间  包的命名统计 及命名表(2000个名称) 方案java package
  13. 新西兰八大名校--新西兰公立大学
  14. 百胜图Barsetto智能胶囊咖啡机测评 始于颜值忠于便捷
  15. 音视频系列:Webrtc音视频通话
  16. iframe框架下的子父级页面监控页面关闭事件
  17. 参与评选开源软件名单
  18. 【笔记整理】图解设计模式 | 第16章 Mediator模式(只有一个仲裁者)
  19. 【数据清洗】数据清洗流程及经验
  20. Ubuntu下编译VeraCrypt

热门文章

  1. Mac 通过homebrew安装Java8
  2. WPF 自定义控件TabControl
  3. h5聊天页面 jquery_HTML5仿微信聊天界面、微信朋友圈实例代码
  4. python做图片美化软件_Python大数据分析2:图形样式的美化
  5. 外观设计专利侵权认定
  6. php的构造函数和析构函数
  7. mysql模糊查询提速_【MySQL】Mysql模糊查询like提速优化
  8. 牛牛的mex(思维-前后缀最小值)
  9. 时尚人生网,精品游戏站,觉得有你没见过的
  10. 冒着挂科的风险也要给你们看的 Spring Cloud 入门总结