我开发了一个基于 Beancount 的账本托管服务 HostedBeans,欢迎大家来了解纯文本复式记账并试用我的服务。
查看源代码

TCP/IP 笔记(4.IP路由选择和分段)

IP数据报头中的目标地址决定数据报的去处,它代表目标网络中的特定主机. 如果目标地址在本地网络,直接将数据报送到该主机即可.

如果目标地址指向外部网络,则将数据报发给网关,而决定发给哪个网关的过程,叫路由选择.

IP会为每个数据报选择路由.

路由选择

Internet网关(gateway)通常被称为IP路由器(IP router). 网关根据IP决定数据报传送的路径.

严格来说,网关能在不同的协议之间传输数据,路由器则在不同网络间,使用相同协议传输数据.

在TCP/IP术语中,网络设备分为网关和主机.

网关同时连接到多个网络,并可以在网络之间传输数据,而主机不能. 但如果主机被连接到多个网络,也可以被视为网关.

网关和主机最大的差别在于,主机的数据包必须逐层经过四层协议的处理,而在网关上,数据包只需上达网际层即可,因为IP会为数据包决定路由.

任何网络设备都只能将数据报送到与自己连接在同一物理网络上的其他设备. 若要向其他网络上的设备发送数据报,则必须先将数据报发给连接两个网络的网关,然后由网关转发给目标设备.

对于一个主机而言,它只需知道本地网关可以将数据报送往其他网络,不必也不能控制数据报在经过网关之后的转发路径.

这是因为不同的物理网络之间可能完全不兼容,一个网络中的数据报,必须经过网关的转换才能送达另一网络. 这样,数据报像接力棒一样可以跨越多个不同的物理网络,到达目标.

数据报的分段

因为不同的物理网络本质上的差异,连接不同种类物理网络的网关的IP模块可能会将数据报拆分成较小的片段(fragment). 如果网关两端连接的是相同种类的物理网络,则不必拆分数据报.

每一种物理网络,都有自己的最大传输单元(MTU, Maximum Transmission Unit)限制,也就是说,各种网络所能承载的最大数据报容量并不一致.

当数据报从MTU较大的网络流向MTU较小的网络时,网关就必须将数据报拆分成较小的传输单位. 这个过程叫分段.

分解后的数据报称为片段,其格式与普通数据报一样,报头的编号部分可以用来唯一地区分一个片段,并作为还原数据报的依据.

片段(分段)偏移量代表该片段在原数据报中的位置(顺序).

标记中的是否为最后一个片段(分段), 可使IP判断是否已经收集到了一个数据报的所有片段.

传送数据给传输层

当IP收到一个传送给本机的数据报时,它会去掉报头,将得到的数据交给正确的传输层协议(如TCP或UDP). 至于要交给哪一种传输层协议,则由协议号决定,每一种传输层协议都有自己的协议号,以便IP进行识别.

撰写评论

如希望撰写评论,请发邮件至 jysperm@gmail.com) 并注明文章标题,我会挑选对读者有价值的评论附加到文章末尾。

精子生于 1995 年,英文 ID jysperm.

订阅推送

通过 Telegram Channel 订阅我的博客日志、产品和项目的动态:

王子亭的博客 @ Telegram


通过邮件订阅订阅我的博客日志、产品和项目的动态(历史邮件):

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-ND  授权发布。最后生成于 2023-12-20.