本文已参与「新人创作礼」活动,一起开启掘金创作之路。
路由表(IP选路)
IP选路时,根据路由表中的记录,来决定当前数据报是直接交付(目的地址属于当前局域网)还是发往下一跳路由(目的地址在不同的局域网)。
记录的信息:
1、目的主机所在网络(要交付的目标地址)
2、下一跳路由器的地址(要经过的路由器,哪个路由器的哪个接口来接收数据)
查路由表,达到的效果是:
IР数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。
只有到达最后一个路由器时,才试图向目的主机进行直接交付。
路由器、交换机位于哪一层?
- 路由器属于网络层,根据IP地址进行寻址
- 交换机属于数据链路层,根据MAC地址进行寻址
变与不变
网络层实现主机之间的通信,而链路层实现每段具体链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而MAC 地址随着链路的改变而改变。
MAC地址是在同一个广播域有效的,到了另外一个广播域(网段)MAC地址要改变,交换机收到数据帧时对照目标MAC地址和MAC地址表,从对应的接口发出。
IP地址是在整个网络中有效的,在传输过程中源ip和目的ip不会改变的。当路由器收到数据包的时候,检查数据包的目的IP地址,然后查找路由表,选择合适的接口发出。
ARP地址解析协议
主机通信时使用了两个地址:IP地址和MAC地址。
ARP 地址解析协议,实现从网络层使用的 IP 地址中解析出数据链路层使用的 MAC 地址(硬件地址)** 。
每个主机都有一个 ARP 高速缓存,里面有本局域网上各主机和路由器的 IP 地址到 MAC 地址的映射表。
如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址 ,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。
并且为了减少网络通信量,主机A在发送ARP请求分组时,就将自己的IP地址到MAC硬件地址的映射写入ARP请求分组中。当主机B收到A的ARP请求分组时,就将主机A的这一地址映射写入主机B自己的ARP高速缓存中。这对主机B以后向A发送数据报时就更方便了。
ARP高速缓存的作用,存放最近获得的IP地址到MAC地址的映射,以减少ARP广播的数量。
网络层实现主机之间的通信,而链路层实现每段具体链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而MAC 地址随着链路的改变而改变。
网际控制报文协议 ICMP
ICMP 为了更有效地转发 IP 数据报和提高交付成功的机会而使用,封装在 IP 数据报中,但不属于高层协议
ICMP 报文分为差错报告报文(只发送,不回复)和询问报文(有问有答)(区别于类型、代码)。
1. Ping
Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。没有经过传输层,是应用层直接使用了网络层。
Ping 的原理是向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据接收时间和成功响应次数估算出数据包的往返时间以及丢包率。
2. Traceroute
Traceroute 是 ICMP 的另一个应用,是一种计算机网络诊断工具,用来跟踪数据包从源点到终点的路径并测量数据包在网络上的传输延迟。
Traceroute 发送的是无法交付的 UDP 用户数据报,由目的主机要向源主机发送 ICMP 差错报告报文。
大致过程是源主机不断向目的主机发送生存时间 TTL从1递增的IP数据报,数据报每到达一个路由器TTL会减1,当TTL为0时,路由器会丢弃数据报并向源主机发送 ICMP差错报告报文。重复此过程,源主机可得知到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。
- 源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
- 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,目的此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
- 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
- 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。