打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
几种网络报文格式
物理层传输的以太网报文大概长这样

以太网报文的头部长度为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层会自动分片


 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ARP,IP,ICMP,TCP,UDP报文头部结构
嵌入式TCP/IP协议 - TCP/IP协议简介
协议头结构详解(TCP、IP、ICMP、UDP、ARP)
71张图详解IP 地址、IP 路由、分片和重组、三层转发、ARP、ICMP
传输层------IP报文结构
Linux原始套接字实现分析
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服