TCP/IP系列之三网络层——终于有人把它们中的关系理清楚了

网友投稿 405 2022-10-21


TCP/IP系列之三网络层——终于有人把它们中的关系理清楚了

大家好,我是小杰。

本文并没有涉及IP地址分类和子网掩码内容。

IP协议格式

IP是TCP/IP协议中的核心协议。它包含两大特性:不可靠、无连接。

不可靠指的是它本身不会保证数据一定完整送达,需要依靠上层协议解决。无连接指的是每个IP数据报之间没有关系,相互独立。

至于为什么会这样涉及,我的理解是分层的思想就是为了让每层各司其职,自己负责自己的事情,否则会把某一层弄得很臃肿失去了分层的意义,我们在涉及功能的时候也应该具有这种思想。

需要注意的是,这种传输次序被称为大端存储,又叫网络字节序,因此我们在代码中的数据必须转换成网络字节序。

接下来简述一些各个字段的含义:

4位版本号,用来表示如0100(IPv4),0110(IPv6)4位首部长度:因为一共4位,所以最大表示十进制数是15,但是主要注意的是这里的计算单位是32bit,因此最大表示15 * 32bit(4字节) = 60字节,首部一定是4字节的倍数,不够会进行填充

上面这个就是RFC 791文档中对该TOS服务类型字段的定义,0~2位表示优先权,3位表示时延,4位表示吞吐量,5位表示 可靠性,后两位保留恒为016位总长度表示的是IP包的总长度,以字节为单位。因此IP包最大为65535字节大小。当IP数据包因为过大而被分片时,被分片的IP数据报会拥有相同的值Flag标志位

第一位为保留位第二位,即分段,是否允许分片(不允许则超过数据链路层支持的最大长度则丢弃)第三位,用来表示是不是最后一个分段,当后续还有报文则会先放到缓冲区,等待进行重组

片偏移:当IP大包分成多个时,依据该偏移量进行重组包,以8字节位单位计算偏移量TTL生存时间:设置数据报最多的路由数,即数据报的生存时间由源主机设置,经过一个路由器值就减1,当字段值为0时数据报被丢弃,并发送ICMP报文通知源主机。协议如TCP协议和UDP协议等。首部检验和字段是根据IP首部计算的检验和码,发现错误就会直接丢弃。剩下的就是源和目的地址的IP了

抓包

这个是我从电脑上抓的包,已经把各个字段列出来了,理论与实践结合起来了

IP路由过程

现在来说所一个IP数据包从A发送到B需要哪些过程:

当一个IP数据包被打包好之后,上面会记录有目的地址的IP,于是把它递给数据链路层,由数据链路层封装成帧,开始发送。首先查看目的地址是否处于同一个网络,如果在同一个网络则直接发送,如果不在同一个网络,则传输给主机所在的默认网关(路由器),由默认网关帮忙转发。这个过程会查看主机的路由表进行匹配选择。路由器根据路由器的路由表进行匹配,而且会把数据包TTL减一,找到则从表中相应的端口发出,找不到则丢弃并向源地址发送ICMP包,通告源主机。紧接着再重复步骤2,3 直到找到或丢弃

IP路由表和转发表(MAC表)

MAC地址表是二层设备中存储“MAC地址”和“转发端口”映射关系的表,并不直接存储IP地址。对于三层设备的三层端口来说,通常是基于报文目的IP地址,对照自身的路由表来选择转发路径,只有二层设备基于“MAC地址”进行数据帧的转发。MAC地址是烧录在网卡或者接口上的物理地址,具有二层意义和全球唯一性,一般不能被改变。IP地址是网络中的主机或者三层接口在网络中的逻辑地址,在同一个网络内具有唯一性。

二层以下数据帧的交换一般通过交换机或其他二层设备,需要用到主机间的MAC地址,但是通常主机网卡配置的是IP地址,此时就需要借助“ARP协议”将目标主机的IP地址转换为对应主机的MAC地址才能进行通信,完整过程就是主机依靠IP-MAC的对应关系封装数据帧,二层设备在收到含有目标MAC地址的数据帧后,查看自己的“MAC地址表”,便知道这个MAC地址该从自己的哪个端口发送出去。

综上来说,虽然数据包发送时包含了完整的TCP/IP四层信息,但是IP地址只在网络间寻址才起作用,在同一个网络内,IP地址在发送端被转化为MAC地址进行寻址,而这种转化和交换的对应关系,依赖于ARP协议和MAC地址表。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 程序员掌握 Spring Boot非常有必要
下一篇:天翼云Web应用防火墙(边缘云版)拦截WordPress Elementor漏洞的说明
相关文章

 发表评论

暂时没有评论,来抢沙发吧~