CCNA04-OSI的二层报头,三层报头及UDP报头详解


1,Ethernet 2 帧头(私有协议,用得不多)

 以太网帧格式,即在以太网帧头、帧尾中用于实现以太网功能的域。


152921304.jpg

Preamble:导前码,作为提示符,标明这个数据帧是不是合法的,是信令还是数据帧,争议比较大,有人没有把导前码算到数据帧的报头。

Dest add:目的MAC地址

Source add:源MAC地址

Length:长度,这个长度是描述上面的Variable Data(不包括帧头和帧尾),通过Length来确定第三层的数据报有没有超过MTU规定的大小。

FCS:帧校验,数据帧头的部分取出来进行MD5的处理的处的HASH值就是FCS(Frame CheckSUM )

如果帧长小于64字节,则要求“填充”,以使这个帧的长度达到64字节。


2,MAC layer 802.3

154350839.jpg

802.3把Ethernet 2的导前码分成7byte的导前码和1byte的帧起始定界符,帧起始定界符告诉标明下一个字节为目的MAC字段,也可以提示这是个Ethernet 2还是802.3的数据帧。

802.3把Ethernet 2的Length改成了Type,由于交换机收到数据帧的时候,他不知道三层的数据报文的类型,那么Type字段就是告诉交换机三层的数据报文的类型,如果是IPv4的报文,那么Type字段是0x0800,如果是IPv6报文,那么Type字段值是0x86DD。



3,IPv4报头详解

181450364.jpg

抓包工具显示如下

181928658.jpg

Version:标识数据包所归属的IP版本号。这个4bit的字段当被设置为0100时表示IPV4(可以看到我抓包中version:4这个内容),设置为0110时表示IPV6(IPV6将在我以后的文章中讲到)。


HeaderLength:标识IPV4数据包头部长度。这个字段值的会根据后面Options字段变化而变化。IP数据包包头最小长度为20字节(在抓到的数据包中可以看到Headerlength:20bytes这个内容),而最大可以60个字节。但由于IPV4的Options段用得比较少,我们看到的大部分IP数据包都为20字节。


Type of Service(TOS)或DiffServ:服务类型或差分服务。该字段长度为8 bit,可以用来标识特殊数据包的处理方式。出现两个定义的主要原因在于,早期的TOS只使用了前3位来标识优先级,最多表示8个不同的优先级,实施不灵活;于是后来就重新定义为DSCP(DiffServCodePoint,区分服务代码点),利用ToS的前6位来定义服务类别。因此最多可以定义64种不同的服务类别。由于这个字段通常是与QoS技术结合使用,因此我们在抓到的数据包中看到这个字段被全部置0,即未使用。


Total Length:总长度,表示IP数据包的总长度,包括IP包头部分。此字段长度为16bit,因此用十进制表示最大为65535,也就是说IP数据包最大长度为65535字节。并且接收方用这个字段的值减IP头部长度的字段,就可得出数据包的有效载荷(抓包中Total Length :75,再根据前面提到的Header length:20bytes,我们可得出这个IP包的有效载荷为75-20=55bytes) 。


Identifier:标识符,长度为16 bit。一般需与后面的Flag及FragmentOffset字段配合使用,用来将同一个数据包的分片数据包打上同样的标记,以供接收者识别。(抓包中的Identification:0x0f49,表示为数据包打的标记。)


Flags:标记字段,长度为3 bit。第一位未使用(抓包中Reserved bit:notset);第二位为DF位(抓包中Don’t fragment:Notset,表示未设置),当此位被设置(1)时,表示节点不对数据进行分片操作。由此带来的坏处是,当节点遇到超过它自身的MTU(最大传输单元)时,将无法传递数据包;第三位为MF位(抓包中Morefragments:Notset,表示未设置),当此位被置位(1)时,表示后面还有被分片的数据包,直到MF=0才表示为被分片的最后一个数据包。由此可以方便接收者知道何时为分片数据包传输完毕。


Fragment Offset:分段偏移位,字段长度为13bit。指明被分片的数据包相对于数据包起始位置,由此可使接收者正确的重组被分片的数据包 (抓包中此字段被设置为0) 。


Time to Live(TTL):生存时间,字段长度为8位。在数据包被创建时,该字段被设置为某个特定值(抓包中的TTL被设置为128)。每经过一个路由器,该值会被减1,当TTL值被减到0时,该数据包会被丢弃!其中一大好处是当一个IP数据包在形成环路的链路上传输时,它的TTL值会被减为0,由此而避免了数据包在网络中无限期的传输下去。我们常用的Trace命令就是利用了这个字段。


Protocol:协议字段,长度为8位。它指出了上层传输的协议号(抓包中Protocol字段被设置为UDP)。ICMP:1 IGMP:2 PIM:3 TCP:6 UDP:17 EIGRP:88 OSPF:89


Header Checksum:头部校验和,字段长度为16bit。可以对于IP报头纠错,它不包括被封装的数据内容。由于这个字段与上层协议中这个功能有冗余之嫌,故在IPV6中取消了此字段。


Source and Destination Addresses:源、目标地址字段,长度为32bit。标识发送者的源及目标IP地址(抓包中可以看出它们相对应的值:Source:145.254.160.237Destination:145.253.2.203。)


Options:可选项字段,内容如其名,可选且长度可变,但最长为20字节。此字段在实际中用得并不多,也可以看出在我抓取的数据包中并没有包含此字段。


填充padding:在可选字段后面添加0来补足32位,保证报头长度是32位的倍数。


4,IPv6数据报头

183126839.jpg


Version 和ipv4包头中的一样,4个bit区域表示ip的版本。当然,在这里使用二进制0110表示版本6。

Traffic Class是一个8位bit的区域,同ipv4中的tos区域一样。但是在这些年中随着TOS区域的进化,这个区域也可以用来被 Differentiated Class of Service (DiffServ)使用。但是尽管这里这样的标识仍然符合老的Tos的格式,只不过Traffic Class这个名字更符合当前的应用。

Flow Label流量标签是在ipv6中独有的区域。这个20个bit的区域设计的目的在于可以给一些特殊的数据做标记。也就是说尽管数据包并非是从原来的源发到目的,但是仍然包含原有的源和目的的应用。区分数据流有很多好处,可以确保不同类别服务的处理方式得以区分,在数据流经多个路径的负载均衡时,在同一个数据流的数据包将使用经由同一个路径转发,从而避免了数据包可能继续查找路径的现象。典型的flow(更加精确一点的说法是微流)就是在源地址和目的地址上加一个团体的源地址和目的地址。

如果使用定义源和目的端口号,路由器必须识别ip包头还要进一步识别tcp或者udp(或者其他传输层协议)的头,这样就增加了转发进程的复杂性,可能会影响路由器的处理。因为出现扩展包头(下一段介绍),所以在ipv6数据包中查找传输层协议的头就成为一个特殊的问题。支持ipv6的路由器必须从按照数据包格式的顺序从头到位查找,可能会经过很多扩展包头再会找到传输层地址(这样的话影响查找时间)。

如果在数据包发起是适当的加入流量标签,路由器更比查找数据包头更容易辨识数据流。然而,在本书书写时,如何使用流量标签区域的完全详细文档仍在讨论中,所以当前路由器读取数据时忽略这个区域。尽管如此,这种设计仍然确保ipv6在提供类似voip这样的QOS服务功能时要优于ipv4。

负载长度Payload Length 定义了负载的长度,数据包封装的字节数。等同与单元一“TCP/IP 回顾”,在ipv4包头中的头长度,因为这是一个可选和填充字段,所以大小是可变的。但是,查找ipv4中的负载长度字段,这个值必须从总长度中减少。(也就是ipv4中计算的是除去负载长度字段后的大小)。在ipv6头长度中,从另一方面说,这个长度固定为40byte,这个长度足以从负载的开始查找到结尾。

注意ipv4的头长度字段是16bit,但是ipv6的负载长度字段是20bit。这里隐含的意思在于因为ipv6具有一个很长的负载(有1,048,575 字节, 相对与Ipv4是65,535)在这个区域定义,ipv6数据包本身理论上就会携带一个很大的负载。

Next Header下一个包头,定义的是ipv6数据包的包头之后是哪一个头。这个区域非常类似与ipv4包头中的协议字段,实际上使用的目的就是标识在下一头是一个上层协议的头(就是标识上层协议)。同ipv4这个区域类似,这个区域也是8个bit。但是在ipv6中,在紧随在数据包头的不一定是上层协议的头(ipv4里面的数据包头后面跟的就是上层协议的头),有可能是扩展包头(再次出现这个名词,在下一段中描述)。所以下一个头区域的命名具有很大范围的意义。

Hop limit跳数限制,在长度(8bit)和功能上都和ipv4的Time to Live (TTL)生存时间区域类似。定义TTL的起初意图在与路由器转发排队的数据包的时候减少他们的时间(防止数据包长生不老),但是这个功能始终没有实现。取而代之的是路由器将TTL值减一不考虑排队的数据包的长度(在现代网络中,很少见一个任何一个数据包会排队等待大于一秒。)所以,TTL现在经常表示的是数据包从他的路径到达目的网络的最大路由器跳数。如果TTL值减少到0,数据包被丢弃。Hop limit也是同样的定义,但是命名却更加贴近本身的功能。

源和目的地址等同与ipv4的源地址和目的地址区域,但是注意这两个区域都是128bit长,为了符合ipv6的地址长度。

注意ipv6包头中取消了原来ipv4包头中的校验和区域。现在的网络传输介质都增加了传输的可靠性(无线可能是一个特例),并且事实上上层协议常常使用自己的错误检测和修复机制,Ipv6包头中加入校验意义不打,所以就被将它剔除了。



5.UDP报头信息

184127415.jpg


UDP length:包括UDP报头在内的Data总长度





你可能感兴趣的:(交换机,以太网)