IP分片--为什么单次最大传输1472个字节
前言
在使用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的长度最大是多少,直接取决于底层的限制。
根据上面的知识,我们可以分析一下:
- 在链路层,由以太网的物理特性决定了数据帧的长度为64 (46+18) ~ 1518 (1500+18),其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500(不包括帧头和帧尾),即MTU(Maximum Transmission Unit)为1500;
- 在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480;
- 在传输层,对于UDP包的首部要占用8字节,所以这的MTU为1480-8=1472;
所以,在应用层,数据Data最大长度为1472。当我们的UDP包中的数据多于MTU(1472)时,发送方的IP层需要分片fragmentation进行传输,而在接收方IP层则需要进行数据报重组,由于UDP是不可靠的传输协议,如果分片丢失导致重组失败,将导致UDP数据包被丢弃。
IP分片带来的问题
IP分片其实在网络中是一种比较糟糕的情况,带来了几个问题
传输效率降低:分片会降低传输效率,接收方IP层则需要进行数据报的重组
丢包:由于UDP的特性,当某一片数据传送中丢失时,那其余接收到的数据就没任何意义了,组不成一个完整的数据包,将导致丢弃整个UDP数据报
IP分片--为什么单次最大传输1472个字节相关推荐
- 学习笔记之IP分片抓包实验
学习笔记之IP分片抓包实验 摘要 分片实验 identification字段 附:`MTU`和`MSS` 1,MTU(Maximum Transmission Unit,MTU),最大传输单元 2,M ...
- 【网络协议】TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)
我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组. 我们先来看两个与TCP报文段分 ...
- 有没有好奇过路由器宽带拨号的mtu值为什么是1492呢?了解MTU与IP分片
作者:一天,公众号:网络之路博客(ID:NetworkBlog).让你的网络之路不在孤单,一起学习,一起成长. MTU与IP分片(可选内容了解) 这里来讲一个比较有趣的内容,相信大家都有设置过家用路由 ...
- 二三层报头及IP分片详解
一.报文数据格式 二.二层数据格式 二层以太帧格式 DMAC(6字节) SMAC(6字节) type(2字节) DATA(46-1500字节) CRC(4字节) 字段 长度 含义 DMAC 6字节 目 ...
- 详解IP分片与TCP分段的区别
首先注意:一般听到的TCP分片应该称为TCP分段.IP分片与TCP分片是两个不同概念,别把IP分片与TCP分片别弄混淆了, 接下来直接划重点,两者主要区别: 1.IP分片产生的原因是网络层的MTU:T ...
- IP分片、TCP分段
服务器开发系列 文章目录 服务器开发系列 一.计算机网络传输基础知识 二.IP分片.TCP分段 1.MTU 定义 2. MSS 简述 3. udp 或 tcp 包的最佳大小 4. 如何测出当前网络最佳 ...
- IP协议详解(ip头部,ip分片,ip路由选择)
IP协议是TCP/IP协议族中至关重要的协议,同时也是socker网络编程的基础之一.其中最重要的部分为 (1)ip头部信息:ip头部信息出现在每个ip报文数据报中,用于指定ip通信的远端ip地址,目 ...
- TCP/IP 协议难点之一—— IP分片
1 IP协议简单介绍 就个人而言,网络中,抛开网络安全加密这些,就只单单讨论协议本身,比较难的有三个地方: IP分片与重组 TCP滑动窗口与TCP状态的改变 TCP定时器 其实协议本身根据<TC ...
- wireshark捕获IP分片数据包实践
一 简介 如果一个数据包超过1500个字节,就需要将该包进行分片发送.通常情况下,是不会出现这种情况的. 下面通过使用ICMP包,来产生IP分片数据包. 使用ICMP包进行测试时,如果不指定包的大小, ...
最新文章
- 连续按back键盘退出自己的应用,杀掉进程
- Java方向如何准备BAT技术面试答案
- C++里如何使用功能键(F1、F2·····)进行操纵?
- SpringBoot配置文件绑定到Java Bean
- html中prependid的作用,UIForm与prependId =“false”中断
- python中list_python中list方法详解说明
- javascript将内嵌式广告隐藏
- html怎么移动到vue,vue自定义指令之拖动页面的元素
- Varnish的vcl子程序
- MS SQL入门基础:数据库 统计函数
- 《游戏设计师修炼之道:数据驱动的游戏设计》一1.4 来自政府和产业的挑战...
- Atitit.软件命名空间 包的命名统计 及命名表(2000个名称) 方案java package
- 新西兰八大名校--新西兰公立大学
- 百胜图Barsetto智能胶囊咖啡机测评 始于颜值忠于便捷
- 音视频系列:Webrtc音视频通话
- iframe框架下的子父级页面监控页面关闭事件
- 参与评选开源软件名单
- 【笔记整理】图解设计模式 | 第16章 Mediator模式(只有一个仲裁者)
- 【数据清洗】数据清洗流程及经验
- Ubuntu下编译VeraCrypt