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


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

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

    网络层

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

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

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

    • 版本(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字节。

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

      在上一篇文章,也简单提及过分片的原因,就是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,表示后面没有其他分片了。

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

    • 片偏移(Fragment Offset)

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

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

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

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

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

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

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

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

    • 协议(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

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

  • 相关阅读:
    pyTorch——基础学习笔记
    栈的实现.
    Git 分支操作&存储原理浅谈
    Java函数式编程(2):流式计算
    【浅学Java】JVM面试必备
    亿赛通电子文档安全管理系统 Update.jsp SQL注入
    css 占位隐藏
    NC26257 小雨坐地铁 分层图+虚拟源点
    华为OD机试 - 机器人搬砖(Java & JS & Python & C)
    第01篇:系统化学习, 搞定Spring容器管理
  • 原文地址:https://blog.csdn.net/x0919/article/details/126217378