各层常见协议首部格式解析

大概一篇能讲完吧…

以太网帧

运行在以太网上的常见帧格式分为两种,分别是Ethenet_II帧格式、IEEE802.3帧格式(SNAP)

1569306865147

  • ethenet II的type字段指定了上层的协议
  • IEEE802.3相同位置是长度,同时对数据进行更加细粒度的控制

ETHENET_II

字段说明

  1. DMAC是目的MAC地址。DMAC字段长度为6
    个字节,标识帧的接收者。
  2. SMAC是源MAC地址。SMAC字段长度为6个字节
    ,标识帧的发送者。
  3. 类型字段用于标识数据字段中包含的高层协议,该字段长
    度为2个字节。类型字段取值为0x0800的帧代表IP协议帧;类型字
    段取值为0x0806的帧代表ARP协议帧。
  4. 数据字段是网络层数据,最小长度必须为46字节以保证帧长
    至少为64字节,数据字段的最大长度为1500字节。
  5. 循环冗余校验字段(``FCS`)提供了一种错误检测机制。该字段长度
    4个字节。

IEEE802.3

1569308653767

字段说明

  • Length 代替ETHENET_II字段的Type字段,记录帧的字长
  • LLC占用Data的3个字节
    • D.SAP 目的访问服务点
    • S.SAP 源服务访问点
    • Control 控制字段
  • SNAP 占用Data的5个字节
    • Org Code机构代码,一般为0
    • Type字段和Ethenet相同

DSAP和SSAP作用解释

  • 当DSAP和SSAP都取特定值``0xff时,802.3帧就变成了Netware ETHERNET`帧,用来承载NetWare类型的数据。
  • 当DSAP和SSAP都取特定值``0xaa时,802.3帧就变成了ETHERNET_SNAP帧。ETHERNET_SNAP`帧可以用于传输多
    种协议
  • DSAP和SSAP其他的取值均为纯``IEEE802.3`帧。

MAC地址(6字节48bit)

  • 前24bit是OUI 供应商代码,后24bit是序列号
  • 单播第1字节的第8bit为0;组播第1字节的第8bit为1;广播为全1

IPv4报文结构

1569310494365

字段解释

  • Version 4字节,版本号
  • Header Lenngth 4字节,显示首部长度,一般首部长度为20字节
  • DS Field 8字节,区分服务,也叫TOS
  • Total Length 16字节,报文总长度,理论上可到达65535字节
  • identification 16字节,标识,和分片有关
  • Flags 3字节 标志,和分片有关
  • Fragment Offset 13字节,片偏移,和分片有关
  • Time To Live 8字节 TTL
  • Protocol 8字节 协议,指定传输层协议
  • Header Checksum 16字节,首部校验和,只对首部进行差错检测
  • Source IP Address 32字节,源IP地址
  • Destination IP Address 32字节 目的IP地址
  • IP OPtion 可选项
  • data有效载荷

关于区分服务

IPv4的DS Field字段提供Qos。

原先定义为TOS(RFC791),TOS中的IP Precedence字段只能将报文分成8类,在实际生活中完全不够用,如下

1569321637888

字段说明

  • IP Precedence

    代表了报文的优先级

  • D/T/R

    D bit代表延迟(Delay),T bit代表吞吐量(Throughput),R bit代表可靠性
    (Reliability)。

后来,在RFC2474中对IPv4报文头的ToS字段进行了重新定义,称为DS(Differentiated Services)字段。

1569322039284

字段说明

  • DSCP

    DSCP有两种表达方式,一种是数值,范围是0~63(6个字节);一种是关键字,分为CS、EF、AF、BE

1569322479753

其中xy表示不同类别,数字越小丢包概率越小

  • CS6和CS7默认用于协议报文,而且是大多数厂商设备的硬件队列里最高优先
    级的报文,因为如果这些报文无法接收的话会引起协议中断。
  • EF常用于承载语音的流量,因为语音要求低延迟,低抖动,低丢包率,是仅
    次于协议报文的最重要的报文。
  • AF4用来承载语音的信令流量,指电话的控制信令。
  • AF3可以用来承载IPTV的直播流量,直播的实时性很强,需要连续性和大吞吐
    量的保证。
  • AF2可以用来承载VOD(Video on Demand:视频点播)的流量,相对于直播
    流量来说,VOD对实时性要求没那么强烈,允许有时延或者缓冲。
  • AF1可以用来承载普通上网业务
  • BE 是指传统IP的分组投递服务,只关注可达性,对其他方面不做要求,所有路由器必须支持BE

关于分片

IP数据报分片主要考虑以下原因:

  • 数据链路层有不同的承载协议,不同协议承载的最大数据长度各不相同

使用IP分片将数据分片传输,从而使数据不会超过MTU,对此,IPv4提供了三个字段:标识、标志、片偏移

Identification:标识号,归属于同一个标识号的数据包分片具有相同的==标识号==、==源IP地址==、==目的地址== ,同时,发送主机通常为他发送的每一个数据报的标识号加1。

flag:用于判断后面是否还有片,flag分为Reserve,DFMF三部分。Reserve是保留位;DF表示是否分片(DF=1表示不分片);MF表示是否还有后续分片。可以看出,三位同时最多只能由一个值为1

Fragment Offset:片偏移,用来分片重组时进行定位,偏移以8字节为单位

分片的缺点

  1. 分片本身的划分和重组会带来资源消耗,尤其是接收方,在接受分片时要为每个分片提供内存空间,分片过多会导致资源消耗严重

  2. 由于IP层没有重传的策略,所以当数据波中的任意分片丢失时,整个数据报都需要依赖传输层进行重传,又因为IP层的分片相对于传输层是透明的,所以往往传输层会重传整个数据包,这样会浪费资源,影响网络中的传输质量。

  3. 同时,分片的存在会对网络安全造成隐患。利用最后一个分片没有被接受,所有分片就不会重组并释放内存空间的特点,故意不向接收方发送最后一个分片,如果这样的攻击迅速,大量,就会导致接收方的内存空间占满,无法处理正常业务,达到DOS效果。同时也可以使分片的偏移量出现差错,导致接收方无法正常重组数据报

  4. 值得注意的时IP分组只有第一个分片带有四层信息,因此其余分片有可能因此逃过防火墙等的检测,从而给黑客可乘之机

在实际应用中,应尽量避免使用IP分片。事实上,IPv6协议中已经取消分片的策略。

由于TCP协议中存在MSS,限制了最大数据发送量,从而可以确保IP数据报大小不会超过数据链路层的MTU,因此,在TCP协议中不存在IP分片;但是在UDP协议下,不存在这样的保障机制,因此最好要在应用层就限定每个包的大小

关于校验

IP层只对报文头部进行校验检错,不对数据进行差错检测,网络层实质上还是属于“尽最大努力交付”

为什么链路层、IP层和传输层都需要校验?

答:链路层的差错检验是为了保证数据在链路传输的完整性,

IP层只对头部进行校验,一来是因为链路层的校验已经尽可能地降低了差错率,二来是因为IP层范围庞杂,如果每经过一个路由器都对数据进行校验,会对性能产生影响,可以但没必须。同时校验头部是为了保障IP协议自身的正确性,同时也存在对二层的不信任,以及四层协议有校验也有无校验,做一个最低限度的保障。甚至还有说法是历史遗留问题。总之算是一个complicated issue了🤣

传输层协议例如TCP协议对整个报文段进行校验,也是出于对下层的不信任的原因。(大概吧)

关于选项

选项允许IP首部被扩展,选项字段用来支持排错、测量以及安全等措施,一般较少使用

IPv6报文结构

传输层报文结构

UDP

TCP

分享到: