网络协议-IP

    技术2022-07-10  132

    简介

    数据链路层的主要作用是在互连同一种数据链路的节点之间进程包(帧)传递,一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。

    如何抵达目的地,网路层的路由技术,主要实现路径的选择与优化

    特点

    不可靠:丢了就丢了
    无连接:不维护状态,不保证报文到达顺序

    报文头介绍

    版本(Version)

    长度4bit,IP的所有版本号在下面网址中: https://www.iana.org/assignments/version-numbers/version-numbers.xhtml#version-numbers-1

    首部长度(header length)

    长度4bit,表示IP首部的大小,单位为4字节(32比特)。对于没有可选项的
IP包,该值为5。即当没有可选项时,IP首部的长度为20字节(4×5=20)。

    区分服务(TOS,Type of Service)

    长度8bit,8位中前3bit代表IP优先级,中间4bit分别代码如下含义,4bit中只能设置其中1bit,最后1bit必须置0。 然而几乎所有的网络都无视这些字段(TOS不用,但是IP优先级是用的)。这不仅仅是因为在符合质量要求的情况下按其要求发送本身的功能实现起来十分困难,还因为若不符合质量要求就可能会产生不公平的现象。因此,实现TOS控制变得极其复杂。 不过已有人提出将TOS字段本身再划分为DSCP和ECN两个字段的建议。(IP优先级只提供8种类型,DSCP是它的扩展)

    DSCP(Differential Services Codepoint)

    差分服务代码点,是TOS(Type Of Service)的一部分。现在统称为Diffserv,用来进行质量控制。 位数分配如下所示:DSCP占用6位,ECN占用2位。 详细区分如下图所示: 其中,AF为确保转发,EF为加速转发,BE为尽力服务。AF11一般为FTP,EF一般为语音服务。

    ECN(ExplicitCongestion Notifcation)

    显式拥塞通告,用来报告网络拥堵情况。

    00 不支持Ecx们传输,非ECT10 - 支持ECW的传输,ECT(0)01 - 支持ECT的传输,ECT(1)11发生拥塞,CE。

    当两端支持ECN时,它将数据包标为ECT(0)或ECT(1)。如果分组穿过一个遇到阻
塞并且相应路由器支持ECN的活动队列管理(AQM)队列(例如一个使用随机早期检测, 即RED的队列),可以将代码点更改为CE而非丢包。这种行为就是"标记",其目的是通知接收端即将发生拥塞。在接收端,该拥塞指示由上层协议(传输层协议)处理, 并且需要将信号回传给发送端,以通知其降低传输速率。
 因为CE指示只能由支持它的工层协议有效处理,ECN只能配合上层协议使用。例如TCP协议,它支持阻塞控制并且有方法将CE指示回传给发送端。

    总长度(Total Length)

    16bit,表示 IP首部和数据部分合起来的总字节数,所以IP包的最大长度为65535(2^32)字节。虽然还不存在能够传输最大长度为65535字节的链路,但是IP有分片处理,IP自己都认为可以传入65535。

    标识(Identification)

    16bit,用于分片重组,同一个分片的标识值相同,不同分片的标识不同。另外,如果ID相同,如果目标地址、源IP或者协议不同,也是不同分片。

    标志(Flags)

    3bit,表示分片的含义,具体含义如下表所示:

    片偏移(FO:Fragment Offset)

    13bit,用来标识被分片的每个分段相对于原始数据的位置,第一个分片的值为0。由于只有13位,最多可以表示8192(2^13)个相对位置。单位为8字节,因此最大可以表示原始数据8*8192 = 65535字节的位置。

    生存时间(TTL:Time To Live)

    8bit,原意是以秒为单位记录当前包在网络上应该生存的期限。 但是,实际中指可以中转多少个路由器的意思。没经过一个路由器(代表通过了一个网络),TTL会减1,直到变成0则丢包。

    协议(Protocol)

    8bit,表示IP首部的下一个首部隶属于哪个协议。 各个协议在下面网站获取: https:/lwwwiana.org/assignments/protocol-numbers/protocol-numbers.xhtml

    首部校验和(Header Checksum)

    16bit,也叫IP首部校验和。只校验数据报的首部,不校验数据,用来确保IP数据报不被破坏。 校验过程为: 将16位值为0,然后以16bit为单位划分IP首部,并用1补数计算所有16位字的和,最后将所得到这个和的1补数赋给首部校验和字段。

    源地址(Source Address)

    32bit,表示发送端IP地址

    目的地址(Destination Address)

    32bit,表示接收端IP地址

    可选项(Options)

    长度可变,一般只在进行实验或诊断使用。包含下面信息:

    源路由路径记录时间戳。。。。。

    填充(Padding)

    在有可选项的情况下,首部长度可能不是32bit的整数倍,所以通过填充0,调整为32bit的整数倍(因为首部长度以4字节为单位计算的)。

    数据

    存放上层协议数据,将上层协议的首部也作为数据处理。

    IP选项

    记录路由选项(RR)

    ping命令提供带-R选项。当使用该选项时,会使用IP中的记录路由选项,源端主机生成RR选项(-r 5),中间路由器对RR选项处理,以及把ICMP回显请求中的RR清单复制到ICMP回显应答中。因为IP首部长度字段为4bit,所以整个IP首部最长只能包含15个4字节的字(60个字节),首部固定长度已用去20字节,RR选项再用去3个字节,只剩下37个字节,每个IP地址要用4个字节存储,只能放9个IP地址。

    记录路由选项结构如下: code代表IP选项类型,RR选项为7,len是RR选项总字节长度,最大为39。ptr为指针字段,存放下一个IP地址位置,所以虽然现在用了39,但是ptr的值为40,RFC791里规定该选项记录出接口的IP。当前请求的len和-r 后指定的参数相关,下图是参数为5的情况。

    源站选路选项

    源站选路(source routing)指由发送者指定路由,有以下两种形式:

    严格源站选路:发送端指明IP数据报必须采用的确切路由。如果一个路由器发现源站路由所指定的下一个路由器不再其直接连接的网路上,返回一个“源站路由失败”的ICMP差错报文。宽松源站路由:发送端指明数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其它路由。
    Processed: 0.015, SQL: 9