欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!
文章目录
- 前言
- 1 主机发送 IP 数据报
- 2 直接交付与间接交付
- 3 路由器转发 IP 数据报
- 4 习题分析
前言
在计算机网络中,数据传输的核心工作之一是通过 IP 协议将数据从源主机传递到目的主机。这一过程涉及到多个网络层的工作,特别是 IP 数据报的发送与转发。本章将详细介绍 IP 数据报的发送过程、判断目的主机是否在同一网络、以及数据报在路由器中的转发过程。
1 主机发送 IP 数据报
①应用层请求数据传输
数据传输的起点是应用层的请求。例如,一个 Web 浏览器想要通过 HTTP 协议请求一个网页数据,它会通过套接字接口调用传输层协议(如 TCP 或 UDP)进行数据传输。
②传输层封装数据
传输层协议(如 TCP 或 UDP)会接收到来自应用层的数据,封装成一个段(segment)。这个段会被加上必要的传输控制信息,如源端口、目标端口、序列号等。
③网络层(IP 层)封装数据
在网络层(即 IP 层),传输层的数据被封装成 IP 数据报。IP 数据报包含了以下信息:
- 源 IP 地址:发送方的 IP 地址。
- 目的 IP 地址:接收方的 IP 地址。
- 协议类型:指示数据报上层使用的协议(如 TCP 或 UDP)。
- 生存时间 (TTL):表示数据报能在网络中存活的最大跳数,防止数据包在网络中无休止地循环。
- 头部校验和:用于检查数据报头部是否发生损坏。
数据报在 IP 层封装完毕后,会交给链路层进一步处理。
2 直接交付与间接交付
主机要决定是否可以直接将数据报发送给目的主机,还是通过默认网关(通常是路由器)进行间接交付。
-
直接交付:如果目的主机在同一网络内,主机可以直接通过链路层(如以太网)发送数据帧到目的主机,数据包在到达目的主机时由目的主机的网络接口进行处理。
-
间接交付(通过路由器转发):如果目的主机不在同一网络,数据报需要通过默认网关(路由器)进行转发。此时,主机将数据报发送给默认网关,路由器根据目标 IP 地址继续转发数据报。
判断是否在同一网络的过程如下:
-
获取目标 IP 地址和子网掩码
主机通过自己的 IP 地址和子网掩码来判断目的主机是否在同一网络中。子网掩码定义了 IP 地址中的网络部分和主机部分。 -
计算网络地址
使用目标 IP 地址和本地子网掩码进行位与(AND)操作,计算出目标地址所在的网络地址。 -
比较网络地址
如果目标 IP 地址所在的网络地址与本地主机计算出来的网络地址相同,说明目的主机与本地主机在同一个网络内,数据报可以直接发送给目标主机。否则,数据报需要经过路由器转发。公式:
本地网络地址 = 本地 IP 地址 & 子网掩码 目标网络地址 = 目标 IP 地址 & 子网掩码 如果本地网络地址 == 目标网络地址,则目的主机与本地主机在同一网络;反之,不在同一网络。
3 路由器转发 IP 数据报
当数据报到达路由器时,路由器的工作是根据目标 IP 地址在其路由表中查找最合适的路由,然后将数据报转发到下一个跳。路由器的转发过程如下:
①接收数据报
路由器从链路层接收到数据帧后,会从中提取出 IP 数据报。此时,路由器会检查数据报的首部信息,以便进行后续处理。
②校验数据报头部
路由器会检查数据报头部的校验和(Checksum)。如果校验和不正确,表示数据报在传输过程中可能发生了损坏。此时,路由器会丢弃数据报,并通过 ICMP 协议向源主机发送 “目的不可达” 或 “数据报损坏” 的错误报告。
③查找路由表
如果数据报头部没有错误,路由器会查找其路由表,以确定如何将数据报转发到下一个路由器或目的主机。路由表中包含了不同目标 IP 地址的路由信息,每一条路由条目包括:
- 目标网络地址
- 子网掩码
- 下一跳地址(即下一跳路由器的 IP 地址)
路由器会根据数据报的目标 IP 地址在路由表中进行匹配。
④路由匹配与转发
- 匹配成功:如果路由表中找到了与目标 IP 地址匹配的条目,路由器将数据报转发给路由表中指定的下一跳路由器或者直接连接的网络。
- 匹配失败:如果路由表中没有找到匹配条目,说明该目标 IP 地址无法到达,路由器会丢弃数据报,并向源主机发送 ICMP “目标不可达”消息。
⑤更新 TTL(生存时间)
路由器会将数据报中的 TTL 值减 1。TTL 值用于避免数据包在网络中永久循环,如果 TTL 值减为 0,路由器会丢弃数据报,并向源主机发送 ICMP “超时”消息。
⑥转发数据报
在经过 TTL 更新后,路由器将数据报封装进新的数据链路层帧,并通过网络接口将数据帧发送到下一跳设备。如果目标是本地网络,路由器会直接交给目的主机进行处理。
4 习题分析