分享

几种网络报文格式

 立志德美 2022-03-05
物理层传输的以太网报文大概长这样

图片

以太网报文的头部长度为6+6+2=14字节,数据部分长度为46-1500字节,不足46的,自动补零
几个常见的类型
  • 0x0800 ETH_P_IP

  • 0x0806 ETH_P_ARP

  • 0x8035 ETH_P_RARP

  • 0x86DD ETH_P_IPV6


ARP报文长这样

图片

ARP报文长度固定为28字节(后面补18个零,凑齐46),再加上以太网的头部,因此完整ARP报文长度是14+28=42
ARP的操作类型大概有这几个
  • 1 ARPOP_REQUEST

  • 2 ARPOP_REPLY

  • 3 ARPOP_REVREQUEST

  • 4 ARPOP_REVREPLY

  • 8 ARPOP_INVREQUEST

  • 9 ARPOP_INVREPLY


IP报文的头部长这样

图片

IP报文头部的长度是5*4=20个字节,再后面就是上层协议的数据了
常见的上层协议有这几个
  •   1 IPPROTO_ICMP

  •   2 IPPROTO_IGMP

  •   6 IPPROTO_TCP

  •  17 IPPROTO_UDP

  • 255 IPPROTO_RAW

而IP报文的总长度,包含头部和其它可能的分片,占16bit,因此最多为2^16-1=65535字节。不过,单包超过1500-20=1480字节时,就自动分片了

UDP报文的头部比较简单,长这样

图片

这个UDP长度表示整个UDP报文的长度,包含头部和其它可能的分片。因此,最小值是头部的这8个字节;最大值是2^16-1=65535。那么,问题来了:使用recvfrom()接收的UDP报文,最多可以包含多少字节的数据?

TCP报文的头部一般长这样

图片

TCP的头部长度占4个bit,因此最大值为15,表示TCP头部最长为60字节。一般情况下,值为5,表示5个字,即5*4=20字节,此时尾部没有选项和填充位。类似的问题:TCP报文,每帧最多包含多少字节的数据?

最后一个,ICMP。ICMP报文比较复杂,常用的是ping命令里使用的两个类型
  • 8 ICMP_ECHO

  • 0 ICMP_ECHOREPLY

图片
ICMP的头部长度为8字节,数据位没有限制,最小为0,长度超过1500-20-8=1472时,IP层会自动分片

图片


图片 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多