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

大家好,我是小杰。
点赞+关注 是我最大的动力!

老规矩,先上镇宝图——TCP/IP模型

在这里插入图片描述

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

IP协议格式

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

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

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

IP数据报格式

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

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

  1. 4位版本号,用来表示如0100(IPv4),0110(IPv6)

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

    TOS字段格式

  3. 上面这个就是RFC 791文档中对该TOS服务类型字段的定义,0~2位表示优先权,3位表示时延,4位表示吞吐量,5位表示 可靠性,后两位保留恒为0

  4. 16位总长度表示的是IP包的总长度,以字节为单位。因此IP包最大为65535字节大小。

  5. 当IP数据包因为过大而被分片时,被分片的IP数据报会拥有相同的值

  6. Flag标志位

    • 第一位为保留位
    • 第二位,即分段,是否允许分片(不允许则超过数据链路层支持的最大长度则丢弃)
    • 第三位,用来表示是不是最后一个分段,当后续还有报文则会先放到缓冲区,等待进行重组
  7. 片偏移:当IP大包分成多个时,依据该偏移量进行重组包,以8字节位单位计算偏移量

  8. TTL生存时间:设置数据报最多的路由数,即数据报的生存时间由源主机设置,经过一个路由器值就减1,当字段值为0时数据报被丢弃,并发送ICMP报文通知源主机。

  9. 协议如TCP协议和UDP协议等。

  10. 首部检验和字段是根据IP首部计算的检验和码,发现错误就会直接丢弃。

  11. 剩下的就是源和目的地址的IP了

抓包

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

IP实际抓包

IP路由过程

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

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

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

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

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光 不服赶路人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值