当前位置:网站首页>【计网】(五)网络层首部
【计网】(五)网络层首部
2022-08-08 21:35:00 【飞人01_01】
hello。 今天来看看新的一章节:网络层。本章节的主要任务就是认识下面这张图(IP数据包)的首部字段。当然网络层在面试中还可能会被问到 IP分片、ping的工作原理,当然在投递开发岗,基本上都是问应用层和传输层的知识,问到网络层的概率相对低一点。
网络层
网络层的数据包(IP数据包,Packet)是由首部+数据两个部分组成。而这个数据部分,一般情况下都是由传输层传递下来的数据段,但也不排除一些特殊情况,比如有些协议就是从网络层往下传输的,并不会传递到传输层和应用层。
版本(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字节。
在上一篇文章,也简单提及过分片的原因,就是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,表示后面没有其他分片了。片偏移(Fragment Offset)
占13位。是分片相对于原始IP数据报开始处的偏移量。(指的是数据部分)
而实际的字节偏移量是 片偏移 * 8
。所以除了最后一个分片以外,其他分片的数据部分的长度必须是8的倍数。
举个例子,假设当前分片不是最后一片,且片偏移=100,则表示这个分片是从原始IP数据报的数据部分的 100 * 8 = 800字节处开始的。
生存时间(Time To Live, TTL)
占8位。用于限制IP数据报所经过的路由器数。不同的操作系统,TTL值也是不同的。每个路由器在转发数据之前,会先将TTL值-1,如果TTL值=0后,还没有到达目标主机,则路由器将不会进行转发,会直接返回ICMP差错报文(目标不可达)。
这个TTL存在的意义在于 防止路由器进行死循环转发数据,即A、B两路由器一直互相传递,占用带宽。
协议(Protocol)
占8位。用于区分上层协议,表明所封装的数据使用了什么协议。常见的如下:
首部校验和(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
。
好啦,本期更新就到此结束啦!!!
边栏推荐
- matlab入门基础:矩阵操作(二)
- Contextual Transformer Networks for Visual Recognition论文以及代码解析
- Contextual Transformer Networks for Visual Recognition paper and code analysis
- How to judge an IP is a crawler
- Redis之过期策略、内存淘汰机制、LRU
- Conformer papers and code parsing (on)
- 【公开课预告】:AV1编码器的优化及其在流媒体和实时通讯中的应用
- 基于阿里云的基础架构设施保障(一)IAAS云计算
- 金山WPS支持xlookup了?亲自上手实战好不好用。
- Crawler Series: Storing CSV Files
猜你喜欢
随机推荐
Matlab to download
远程调试为何要亲历现场,也许也可以这样解决
17 【2D转换 3D转换 浏览器私有前缀】
Contextual Transformer Networks for Visual Recognition paper and code analysis
Zero Digital Reports Digital Financial Innovation to the Secretary of Hainan Provincial Party Committee
如何判断一个 IP 是爬虫
中国石油大学(北京)-《钻井液工艺原理》第三阶段在线作业
icon样式设置
软件设计原则
Real-time crawler example explanation
21天打卡挑战学习MySQL——《SQL基础入门》第二周 第四篇
爬虫视频教学:网页数据抓取
金山WPS支持xlookup了?亲自上手实战好不好用。
分布式文件存储——分块上传和断点续传
RecycleView点击事件
数据库week01
Crawler Series: Reading Documents
差分约束
峰会•沙龙•招聘 | 记零数科技多线并进的一天
汤加火山爆发引发跨洋海啸?数据可视化告诉你真实威力!