网络层——IP协议的转发流程

IP地址长度为32位,常分成4个8位,IP地址常使用点分十进制来表示(0~255.0~255.0~255.0~255)。例如:114.114.114.114、255.255.255.255

IP数据报

IP数据报由首部和数据两部分组成

版本:指的是IP协议的版本,通信双方的版本必须一致,当前主流版本是4,即IPv4,也有IPv6,占4位。

首部长度:最大数值为15,表示的是IP首部长度,单位是“32位字”(4个字节),也即是IP首部最大长度为60字节,占4位。

总长度:最大数值为65535,表示的是IP数据报总长度(IP首部+IP数据),占16位。

IP数据报最大长度比数据链路层的数据帧最大长度要大,网络层会将IP数据报分片,再交付给数据链路层。

标识:相同标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报,占16位。

标志:中间一位记为DF(Don't Fragment),DF=1不分片,DF=0分片。最低一位记为MF(More Fragment),MF=1后面还有分片数据,MF=0已经是最后分片数据。

片偏移:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,除了最后一个分片,每个分片的长度一定是8字节(64位)的整数倍。

TTL:表明IP数据报文在网络中的寿命,每经过一个设备, TTL减1,当TTL=0时,网络设备必须丢弃该报文,占8位。

协议:表明IP数据所携带的具体数据是什么协议的(如: TCP、 UDP等),占8位。

首部校验和:校验IP首部是否有出错,占16位。

源IP地址:占32位。

目的IP地址:占32位。

IP协议的转发流程

如下图所示,计算机A将数据发送给计算机B要经过多个网络,数据的传输过程是怎样的呢?

计算机A往计算机B发送数据的传输路径有很多种选择。我们暂且随机选一条传输路径,拉直后如下图

数据经过网络1到达路由器,经过网络2到达路由器,经过网络3到达计算机B。这种传输方式称为逐跳(hop-by-hop),抽象地来看,数据在网络中的传输是从一个IP地址跳到另一个IP地址。

计算机、路由器都拥有一个路由表,路由表存储着指向特定网络地址的路径。

假设上图是计算机A的路由表,数据要到达目的地址IP1,下一跳的IP地址是IP4;数据要到达目的地址IP2,下一跳的IP地址是IP5。

仅从网络层分析,A发数据给B过程如下:

1、A发出目的IP为B的IP数据报, 查询自身路由表发现下一跳为E。

2、A将数据报发送给E。

3、E查询路由表发现下一跳为F,将数据报发送给F。

4、F查询路由表发现与目的IP设备B直接连接,将数据报发送给B。

结合网络层与数据链路层分析数据转发过程,如下:

1、A发出目的IP为B的IP数据报, 查询路由表发现下一跳为E;A将IP数据报交给数据链路层,并告知目的MAC地址是E;数据链路层填充源MAC地址A和目的MAC地址E;数据链路层通过物理层将数据发送给E。

2、E的数据链路层接收到数据帧, 把帧数据交给网络层;E查询路由表, 发现下一跳为F;E的网络层再把数据报交给数据链路层,并告知目的MAC地址为F;E的数据链路层封装数据帧并发送。

3、F的数据链路层接收到数据帧, 把帧数据交给网络层;F查询路由表, 发现下一跳为B;F的网络层再把数据报交给数据链路层,并告知目的MAC地址为B;F的数据链路层封装数据帧并发送。

在数据转发的过程中,数据帧每一跳的MAC地址都在变化,而IP数据报每一跳的IP地址始终保持不变。

ARP协议

1、A发出目的IP为B的IP数据报, 查询路由表发现下一跳为E;A将IP数据报交给数据链路层,并告知目的MAC地址是E;数据链路层填充源MAC地址A和目的MAC地址E;数据链路层通过物理层将数据发送给E。

网络层通过路由表知道下一跳的IP地址,但是数据链路层的数据帧要包含下一跳的MAC地址。如何获取下一跳的MAC地址就要用到ARP协议了。

ARP(Address Resolution Protocol)即地址解析协议, 用于实现从IP地址到MAC地址的映射,即询问目标IP对应的MAC地址。

与数据链路层的MAC地址表、网络层的路由表类似,ARP协议也有一张表,名为ARP缓存表,表里面放置了IP和MAC地址的映射信息,通过IP地址就能找到对应的MAC地址了。如下图:

window系统使用 arp -a 命令查看本机的ARP缓存表

假如计算机A的ARP缓存表中没有下一跳IP与MAC地址的映射,A会广播一个请求给所有相连接的设备,请求中包含A的IP、A的MAC地址以及下一跳的IP。相连设备接收到请求后,判断如果IP不是自己,这丢弃报文,如果IP是自己,则返回一个响应包,响应包信息中包含了自己的IP和MAC地址。A就知道了下一跳的MAC地址,并更新ARP缓存表。

ARP协议使用“广播请求,单播回应”的方式,可以减少网络之间的请求,避免网络拥塞。

另一个有意思的问题是“APR协议属于数据链路层协议还是网络层协议?”,这问题的难度堪比另一个世界级难题:世界上最好的编程语言是什么?基于功能来考虑,ARP要获取MAC地址,所以是数据链路层协议。基于分层/包封装来考虑,ARP协议与IP协议一样基于数据链路层的以太网协议实现,以太帧的类型字段使用0800表示上层协议是IP协议,使用0806表示上层协议是ARP协议,ARP协议与IP协议平起平坐,所以是网络层协议。

 

 

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值