在OSI7层模型中,IP地址在网络层被封装成为包packet,比起下层帧frame,它多的就是在报头处的IP地址。下面我们看一下数据包的构成。
从最顶层的应用程序一步一步往下走,在报头添加端口号,session等,在网络层添加的就是这个IP报文。从左上角开始version表示版本号,在2018年流行的版本有两种,IPV4和IPV6,你们用的网都是IPV4。headerLength见名知意就是报头长度,范围从20~60个字节。dsField全名Differentiated Services Field,它被用于QOS全名quality of Service网络服务质量,他能够解决网络中的卡顿问题。dsfield占一个字节,高6位分为dscp用于指明转发优先级,这里也是决定了数据走的是机房里的什么性能的交换机,就是公交车一样,遇到红绿灯在下一次开车时就得快开,不然就会晚点。后两位则表示ecn全名explicit congestion notification表示阻塞信息,它记录着对传输速率的评级,是否处于网络阻塞中。
totalLength就不说了,我相信大家一定懂得。identification标识,flags标致,fragment offset,碎片偏移。如果有编程基础的朋友,id,flag都不用说,fragment offset用于当我们传输速率受限时,如何保证将一个完整的文件发送过去,同时要保证数据完整性。有时候有人可能网上下载一个zip文件,然后解压的时候发现解压不了,数据丢失了。
同时数据链路层有这么一个特性叫做mtu,它规定了最大传输单元,就是它限制以太网数据帧frame的长度为1500,如果该数据帧携带的data长度超过了1500-报文头长度,那么就需要分片传输。这里的1500是一个阙值,不能太高,也不能太低。mtu长度越大,传输速率越快。id,flag,fragment offset这三个参数都是在这里用到的。
然后time to live,ttl表示最大生存时间,可以理解成为计数器。默认最大值为225,它被设计用于防止回环路由,什么是回环路由呢?比如我要是北京XX地进行通信,先要走我们这里的电信数据中心,然后通过路由器转发的到山东省电信,然后天津市电信,然后到达北京电信。那么这中间是经过很多个路由器的,上面是顺利的情况下是按照这个路线走,那么如果从山东省电信出去的线路没有转发到天津而是又发回给我本地了怎么办?这种情况下就是发送失败了,然后本地也傻了又发给山东电信,就这样一直在这里形成一个死循环,这就是回环路由。
为了解决这一情况呢,使用ttl做一个计数器。我们管每一个路由器叫做每一跳,就是转发出去一次,记作ttl-1,如果出现死循环ttl一直-1,当ttl=0时,连接超时 数据发送失败。那么大家可以看一下我发送给不同大型网站服务器的ttl经过了多少跳。
离我最近的百度服务器经过了200多跳。
可以看到baidu和qq的机房位置应该是离着挺近的,相差了一跳。大家也可以试试,随便ping一个网站,ttl越接近255,那么访问速度就越快,不对啊我刚才测试了一下,有的人的系统ttl是默认值255,有的是128,我这台是默认64的。那么怎么看ttl默认值呢,直接ping本地127.0.0.1即可。
因为ping127.0.0.1不需要经过任何跳转,所以在没有经过路由的情况下它的最大值为64。ttl也可以在注册表里面更改的,更改时最大长度不可以超过255也就是一个字节。
protocol是协议的意思,它标示着该数据包被传输层的tccp协议中使用还是udp协议中使用。下面是headerChecksum,看名字应该是用于校验的,这里不是md5校验码那种校验,而是对ip报头的每16位,每2个字节进行求和校验。怎么求呢,与16位二进制数据的反码进行求和,得0则校验正确,否则这个包是损坏的,会被废弃。本文中指出的数据包被废弃就是你们常说的丢包。
下面是source ip address,源IP 与 destination ip addres,目的IP。内容较多,为了读者阅读体验这两个参数会出现在下一篇文章中。看最后IP options,这是ip报头的拓展参数。不知各位是否还记得,上面已经出现过一个headerLength了,为什么又出来一个totalLength呢?header是原有报头长度20个字节,拓展参数+header=totalLength。是这么来的,不过这个ip options是只有特殊的应用场景才有的参数,比方说军工级别的通信。
举报/反馈

很神很奇很神奇

7161获赞 1万粉丝
好听的音乐,好看的视频,请关注我
关注
0
0
收藏
分享