精华内容
下载资源
问答
  • 以太网数据包长度限制

    千次阅读 2020-06-21 19:13:10
    我们使用以太网进行数据传输(UDP、TCP...由于链路层的数据帧最大为1500,所以该层的最大数据包长度为1500-20(IP包首部)=1480字节。 传输层: 如果禁止IP层进行数据分包传输: 对于TCP数据包最大长度1480-20(TCP

    我们使用以太网进行数据传输(UDP、TCP),数据包的大小是有限制的,并不是多长都可以。

    TCP/IP协议从下到上包含:链路层、IP层、传输层、应用层。

    链路层:

    链路层的数据交互是基于数据帧, 一帧数据包的最大长度1518(以太网帧最大长度)-18(以太网帧头帧尾) = 1500字节。

    IP层:

    由于链路层的数据帧最大为1500,所以该层的最大数据包长度为1500-20(IP包首部)=1480字节。

    传输层:

    如果禁止IP层进行数据分包传输:

    对于TCP数据包最大长度1480-20(TCP包首部)=1460字节,大于该长度数据在经过IP层时就会进行分包。

    对于UDP数据包最大长度1480-8(UDP包首部)=1472字节,大于该长度数据在经过IP层时就会进行分包,某一些路由器设置允许通过的最小以太网数据帧为576字节,如果考虑到这一限制,那么允许发送的最大UDP数据包长度为 576 -  20(IP包首部) - 18(UDP包首部) = 548字节。 

    如果允许IP层进行数据分包传输:

    TCP 协议:基于流进行数据传输,数据包的长度不受限制。

    UDP协议:UDP协议要求一帧数据包最大不能超过64K。

    总结:一般来说,TCP协议是可靠的数据传输,自身会进行数据丢包重传,保证数据完整可靠的到达目的主机,但UDP协议是不可靠的数据传输方式,无法保证数据一定可以到达目的主机。所以一般在使用时需要自己添加应答重传机制,但是对于网络通讯质量很差的场合,如果发送的UDP数据包长度很大,那么在经过IP层时就会进行分包发送,在传输过程中任何一个子数据包的丢失,都会导致整个数据包在IP层被丢弃,从而导致传输失败,因此在这种情况下,最好的办法就是限制传输层发送的数据包大小,保证数据包在经过IP层时不会进行分包发送,然后我们自己在传输层上添加应答重传机制,并自己进行分包发送、组包接收。

     

     

    展开全文
  • IP数据包长度

    千次阅读 2020-04-05 12:09:20
    其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}} ------------------------------------------...

    首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。   

    其中以太网(Ethernet)的数据帧在链路层   
    IP包在网络层   
    TCP或UDP包在传输层   
    TCP或UDP中的数据(Data)在应用层   
    它们的关系是 数据帧{IP包{TCP或UDP包{Data}}}   
    ---------------------------------------------------------------------------------
    在应用程序中我们用到的Data的长度最大是多少,直接取决于底层的限制。   
    我们从下到上分析一下:   
    1.在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(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数据包被丢弃)。   
    从上面的分析来看,在普通的局域网环境下,UDP的数据最大为1472字节最好(避免分片重组)。   
    但在网络编程中,Internet中的路由器可能有设置成不同的值(小于默认值),Internet上的标准MTU值为576,所以Internet的UDP编程时数据长度最好在576-20-8=548字节以内。


    MTU对我们的UDP编程很重要,那如何查看路由的MTU值呢?   
    对于windows OS: ping -f -l   如:ping -f -l 1472 192.168.0.1   
    如果提示:Packets needs to be fragmented but DF set.   则表明MTU小于1500,不断改小data_length值,可以最终测算出gateway的MTU值;   
    对于linux OS: ping -c -M do -s   如: ping -c 1 -M do -s 1472 192.168.0.1   
    如果提示 Frag needed and DF set……   则表明MTU小于1500,可以再测以推算gateway的MTU。


    IP数据包的最大长度是64K字节(65535),因为在IP包头中用2个字节描述报文长度,2个字节所能表达的最大数字就是65535。  
       
    由于IP协议提供为上层协议分割和重组报文的功能,因此传输层协议的数据包长度原则上来说没有限制。实际上限制还是有的,因为IP包的标识字段终究不可能无限长,按照IPv4,好像上限应该是4G(64K*64K)。依靠这种机制,TCP包头中就没有“包长度”字段,而完全依靠IP层去处理分帧。这就是为什么TCP常常被称作一种“流协议”的原因,开发者在使用TCP服务的时候,不必去关心数据包的大小,只需讲SOCKET看作一条数据流的入口,往里面放数据就是了,TCP协议本身会进行拥塞/流量控制。  
       
    UDP则与TCP不同,UDP包头内有总长度字段,同样为两个字节,因此UDP数据包的总长度被限制为65535,这样恰好可以放进一个IP包内,使得UDP/IP协议栈的实现非常简单和高效。65535再减去UDP头本身所占据的8个字节,UDP服务中的最大有效载荷长度仅为65527。这个值也就是你在调用getsockopt()时指定SO_MAX_MSG_SIZE所得到返回值,任何使用SOCK_DGRAM属性的socket,一次send的数据都不能超过这个值,否则必然得到一个错误。  
       
    那么,IP包提交给下层协议时将会得到怎样的处理呢?这就取决于数据链路层协议了,一般的数据链路层协议都会负责将IP包分割成更小的帧,然后在目的端重组它。在EtherNet上,数据链路帧的大小如以上几位大侠所言。而如果是IP   over   ATM,则IP包将被切分成一个一个的ATM   Cell,大小为53字节。

    展开全文
  • 以太网数据包、ip数据包、udp数据包 【以太网数据包】 即“帧”,每一帧分成两个部分:标头(Head)和数据(Data)。“标头”包含数据包的一些说明项,比如发送者、接受者、数据类型等等; "数据"则是数据包的具体...

    以太网数据包、ip数据包、udp数据包

    【以太网数据包】

    即“帧”,每一帧分成两个部分:标头(Head)和数据(Data)。“标头”包含数据包的一些说明项,比如发送者、接受者、数据类型等等;
    "数据"则是数据包的具体内容。“标头”的长度,固定为 18 字节。"数据"的长度,最短为 46 字节,最长为 1500 字节。因此,整个"帧"最短为 64 字节,最长为 1518 字节。
    如果数据很长,就必须分割成多个帧进行发送。

    ####【IP数据包】
    根据 IP 协议发送的数据,就叫做 IP 数据包。不难想象,其中必定包括 IP 地址信息。以太网数据包只包含 MAC 地址,并没有 IP 地址的栏位。
    把 IP 数据包直接放进以太网数据包的“数据”部分,因此完全不用修改以太网的规格。

    IP 数据包 也分为“标头”和“数据”两个部分。“标头”部分主要包括版本、长度、IP 地址等信息,“数据”部分则是 IP 数据包的具体内容。
    IP数据包的 “标头” 部分的长度为 20 到 60 字节,整个数据包的总长度最大为 65,535字节。因此,理论上,一个 IP 数据包的“数据”部分,最长为 65,515字节。
    前面说过,【以太网数据包】的“数据”部分,最长只有 1500 字节。因此,如果 IP 数据包超过了 1500 字节,它就需要分割成几个以太网数据包,分开发送了。

    ####【UDP数据包】
    UDP数据包,也是由“标头”和“数据”两部分组成。“标头”部分主要定义了发出端口和接收端口,“数据”部分就是具体的内容。
    然后,把整个 UDP 数据包放入 IP 数据包的“数据”部分,而前面说过,IP 数据包又是放在以太网数据包之中的.

    【以太网数据包】 中存放 【IP数据包】;
    【IP数据包】 中存放 【UDP数据包】。

    展开全文
  • IP数据包长度问题总结   首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据...
    展开全文
  • IP数据包长度问题

    千次阅读 2013-02-01 00:43:17
      首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输...其中以太网(Ethernet)的数据帧在链路层 IP包在网络层  TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层  它们的关系是 数据帧{IP包{TCP
  • http://blog.csdn.net/naturebe/article/details/6712153 这篇文章总结的不错,转自:http://hi.baidu.com/to_wait/blog/item/3e855931a5a51717eac4af22.html首先要看TCP/IP协议,... 其中以太网(Ethernet)的数...
  • IP数据包长度问题总结 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。  其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的...
  • 对于以太网环境下UDP传输中的数据包长度问题首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。其中以太网(Ethernet)的数据帧在链路层IP包在网络层TCP或UDP包在传输层TCP或UDP中的数据(Data)在应用...
  • 报文分段、IP数据包、帧的长度约束

    千次阅读 2013-04-19 16:02:04
     2、对于IP数据包来讲,也有一个长度,在IP包头中,以16位来描述IP包的长度,也就是说,一个IP包,最长可能是65535字节(多数网络设备将其限制在576字节以内)。  3、结合以上两个概念,第一个重要的结
  • TCP/IP各层的数据包长度

    千次阅读 2014-04-14 14:20:41
    这篇文章总结的不错,转自:... 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应
  •  其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}} 在应用程序中我们用到的Data的长度最大是...
  • 前言: 讲述以太网传输中各个层的结构 内容 一、数据传输封装过程: ...(3)以太网帧中的数据长度规定最小46 字节,最大1500 字节,ARP 和RARP 数据包长度不够46 字节,要在后面补填充位...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 290
精华内容 116
关键字:

以太网ip数据包长度