网络编程-报文格式


  • 以太网报文
  • ARP报文
  • IP报文
  • UDP报文
  • TCP报文
  • ICMP报文

以太网报文

upload successful

  • DMAC,6字节,目的MAC地址,IPV4为6字节,该字段确定帧的接收者。可以是一个单播MAC地址,或组播MAC地址或者广播MAC地址。
  • SMAC,6字节,源MAC地址,IPV4为6字节,该字段标识发送帧的工作站。只能是一个单播MAC地址。
  • Type,2字节,用来表示荷载数据的类型。例如:该字段值如果是0x0800,则表示荷载数据是一个IPv4 Packet ,0x86dd是IPv6 Packet,0x0806是ARP Packet,0x8848是MPLS报文等。
  • Data,变长,数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段。如果填入该字段的信息少于46字节,该字段的其余部分也必须进行填充。数据字段的最大长度为1500字节。
  • CRC,4字节,用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)

    注意:CRC在wireshark中无显示,若CRC错误,可能在网卡层或传入内核时被丢弃


ARP报文

  • 目的MAC地址,请求报文为ff-ff-ff-ff-ff-ff,应答报文为请求端的MAC地址。
  • 源MAC地址,请求报文为请求端的MAC地址,应答报文为被请求的MAC地址。
  • 类型,长度为2个字节,取值为0x0806。
  • 硬件类型,长度为2个字节。表示网络类型;以太网取值为1。
  • 协议类型,长度为2个字节。表示协议地址类型;取值为0x0800即表示根据IP地址来进行映射。
  • hln,硬件地址长度,长度为1个字节。表示硬件地址的长度;以太网中取值为6,表示MAC地址长度为6个字节。
  • pln,协议地址长度,长度为1个字节。表示协议地址长度;取值为4表示IP地址长度为4个字节。
  • op,请求报文的长度为2个字节,表示ARP报文的种类;取值为1表示是ARP请求报文。应答报文的长度也为2个字节,+ 表示ARP报文种类;取值为2表示是ARP应答报文。
  • 发送端的MAC地址,请求报文为请求端的MAC地址;应答报文为被请求端的MAC地址。
  • 发送端的IP地址,请求报文为请求端的IP地址;应答报文为被请求端的IP地址。
  • 目的端MAC地址,请求端发出该请求时,还不知道该MAC地址。接收方忽略该字段。应答报文为请求端的MAC地址。
  • 目的端IP地址,请求端希望映射的IP地址,也就是被请求端的IP地址。应答报文为请求端的IP地址。

IP报文

  • 版本,长度为4bit,表示IP报文版本信息。该字段值为0x4,表示是IPv4报文,该字段值为0x6,表示是IPv6报文。

  • 包头部长度,长度为4bit,用来表示IP包的头部长度。如果不带Option字段,则为20,最长为60,“包头部长度”字段的值×4=包头部的字节数。

  • DS域, 长度为8bit,只有在有QoS差分服务要求时这个字段才起作用,用来区分报文的转发优先级。

  • 总长度,长度为16bit,整个IP数据报的长度,包括首部和数据之和,单位为字节,最长65535,总长度必须不超过最大传输单元MTU。

  • 标识,长度为3bit,用于IP报文的分片和重组。主机每发一个报文,加1,分片重组时会用到该字段。
    标志,长度为3bit,用于IP报文的分片和重组
    upload successful

    Bit 0: 保留位,必须为0 
    Bit 1: DF(Don’t Fragment),能否分片位,0表示可以分片,1表示不能分片
    Bit 2: MF(More Fragment),表示是否该报文为最后一片,0表示最后一片,1代表后面还有
  • 分段位移,长度为13bit,用于IP报文的分片和重组。分片重组时会用到该字段。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位。

  • 存活时间,TTL,长度为8bit,可经过的最多路由数,即数据包在网络中可通过的路由器数的最大值,每过一个路由器TTL值减1,用它的值结合ping命令可以判断对方主机操作系统。

  • 协议,长度8bit,。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。

    0x01: ICMP, Internet Control Message
    0x02: IGMP, Internet Group Management
    0x06: TCP Transmission Control Protocol
    0x11: UDP User Datagram Protocol
  • 头部校验和,长度为16bit,用来对IP报文的头部进行差错校验。只检验数据包的首部,不检验数据部分。这里不采用CRC检验码,而采用简单的计算方法。

  • 源IP地址,长度为32bit,表示产生并发送该IP报文的设备接口的IP地址。

  • 目的IP地址,长度为32bit,表示该IP报文的目的接口的IP地址。

  • 选项/长度填充,选项字段长度可变,从1字节到40字节不等,取决于所选项的功能。填充字段全为0。


UDP报文


TCP


ICMP


你好骚