【计网】(五)网络层首部

hello。 今天来看看新的一章节:网络层。本章节的主要任务就是认识下面这张图(IP数据包)的首部字段。当然网络层在面试中还可能会被问到 IP分片ping的工作原理,当然在投递开发岗,基本上都是问应用层和传输层的知识,问到网络层的概率相对低一点。

【计网】(五)网络层首部_第1张图片

网络层

网络层的数据包(IP数据包,Packet)是由首部+数据两个部分组成。而这个数据部分,一般情况下都是由传输层传递下来的数据段,但也不排除一些特殊情况,比如有些协议就是从网络层往下传输的,并不会传递到传输层和应用层。

【计网】(五)网络层首部_第2张图片

【计网】(五)网络层首部_第3张图片

  • 版本(version)

    占4位,只有两个值。一个是 0b0100 即IPv4,另一个是 0b0110 即IPv6

  • 首部字段(Header Length)

    占4位,这个数值×4 = 首部字段长度,因为首部字段的最小长度是固定的20字节,最大长度是60字节。所以这个可变部分的最大值就是40个字节。但是一般情况首部字段就是20字节。

  • 区分服务(differentiated Service Field)

    占8位。这个是用于提高网络的服务质量(QoS,Quality of Service)。这里包括3位的优先级字段、1位的保留字段和4位的TOS字段。4位TOS分别表示:最小时延、最大吞吐量、最高可靠性和最小费用。其中最多有一个能置为1。
    比如客户端发送数据给服务端,数据在经过路由器的时候,路由器识别区分服务(例如,区分服务的优先级值为3)的优先级后可以让这部分数据优先通过。

  • 总长度(Total Length)

    占16位。指的是整个IP数据包的长度,是以字节为单位的。即首部+数据部分的总长度不超过 65535字节。

    【计网】(五)网络层首部_第4张图片

    在上一篇文章,也简单提及过分片的原因,就是IP数据包的长度最大是65535字节,而一个数据帧的数据部分一般情况是1500字节。所以在网络层往数据链路层传递数据时,需要进行“切分数据”,也就是常说的IP分片

    接下里介绍的标识、标识、片偏移就是在描述如何分片

  • 标识(Identification)

    占16位。其范围在0-65535之间。初始值是系统随机生成的,每发送一个数据包,其值就会+1。当达到65565后,再次+1就会回归到0。这个数值在分片时,会被复制到每个分片中,因此同一数据包的标志值都是一样的,就能表明这些分片来自同一个数据包。

  • 标志(Flags)

    ​ 占3位。

    ​ 第1位(Reserved Bit) 保留不用。

    ​ 第2位是 Don’t Fragment 即是否不能分片,值=1时,表示这个IP数据包不能分片,值=0时,表示这个IP数据包可以分片。

    ​ 第3位是 More Fragment 即 后面是否还有分片。简单点说就是用来标志当前分片是不是最后一片了。值=1,表示后面还有其他分片,值=0,表示后面没有其他分片了。

    【计网】(五)网络层首部_第5张图片

  • 片偏移(Fragment Offset)

​ 占13位。是分片相对于原始IP数据报开始处的偏移量。(指的是数据部分)

​ 而实际的字节偏移量是 片偏移 * 8。所以除了最后一个分片以外,其他分片的数据部分的长度必须是8的倍数。

​ 举个例子,假设当前分片不是最后一片,且片偏移=100,则表示这个分片是从原始IP数据报的数据部分的 100 * 8 = 800字节处开始的。

【计网】(五)网络层首部_第6张图片

  • 生存时间(Time To Live, TTL)

    占8位。用于限制IP数据报所经过的路由器数。不同的操作系统,TTL值也是不同的。每个路由器在转发数据之前,会先将TTL值-1,如果TTL值=0后,还没有到达目标主机,则路由器将不会进行转发,会直接返回ICMP差错报文(目标不可达)。

    这个TTL存在的意义在于 防止路由器进行死循环转发数据,即A、B两路由器一直互相传递,占用带宽。

    【计网】(五)网络层首部_第7张图片

  • 协议(Protocol)

    占8位。用于区分上层协议,表明所封装的数据使用了什么协议。常见的如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QWsp3idZ-1659878675545)(image/image-20220807210901781.png)]

  • 首部校验和(Header Checksum)

    占16位。是由发送端进行填充,用于检查首部是否有错误。接收端用CRC算法检验IP数据报首部在传输过程中是否出现了差错,且这个只会检查首部,不会管数据部分的。

  • 源IP地址、目标IP地址

    这个大家应该都比较熟悉,一个IP地址占32位。用来指定发送端和接收端的IP。

当然,感兴趣的同学还可以了解ping命令,以及ping命令的工作原理,这里就简单说一下ping如何使用。

ping -h,可查看ping的使用方法。

ping 127.0.0.1,ping的是环回地址,用于检查本机的网卡是否可用。

ping ip地址 -l 数据包大小,指定数据包的长度。

还可以用一下命令得到传输数据途径的路由器IP地址:

我们会在linux主机系统下,直接执行命令行: traceroute hostname

而在Windows系统下是执行tracert的命令: tracert hostname

好啦,本期更新就到此结束啦!!!

你可能感兴趣的:(网络,网络,tcp/ip,运维)