我开发了一个基于 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进行识别.

TCP/IP 笔记(3.IP协议概述)

IP(Internet Protocol, 网际协议)工作在网际层,是TCP/IP协议族中最重要的组成部分,所有TCP/IP的数据包都通过IP来传输.

IP的功能

  • 定义数据报的格式,它是Internet的基本传输单位
  • 定义Internet的寻址方式
  • 在网络访问层和传输层之间传输数据
  • 决定数据报到远程主机的传输路径
  • 对数据报进行分解和重组

IP是一种非连接式协议,这意味着在传输数据前,两个端点之间不必交换控制信息(握手)来建立点对点连接.

对于需要面向连接的应用,须依赖于其他层的协议,如TCP.

IP是不可靠的协议,依赖于其他的协议来提供错误检测(ICMP,Internet Control Message Protocol, 互联网控制消息协议)和纠正(TCP)的能力.

IP数据报

数据报是包含控制信息(如接收者地址)的数据块.

IP会把数据报从一个物理网络转发到另一个物理网络,直到到达最终目标,每一个数据报的转发路径都是独立,与其他数据报没有关系.

下面是IPv4数据报的格式:

1

版本 IP的版本号,这里介绍的是IPv4, 应为4.

IHL Internet Header Lenght, IP报头长度,单位为32bit, 该字段最小值为5, 通过增加该字段长度,可以在图中的报头结构之后,再追加选项(选项部分要补齐到32bit的整数倍).

服务类型 目前被重新规定为DSCP(Differentiated Services Code Point, 差分服务代码点)占6bit和ECN(Explicit Congestion Notification, 显式拥塞通知)占2bit, 两者主要用于区分数据报的优先级、对延迟、吞吐率、可靠度的要求.

数据报全长 单位Byte.

编号 分段的编号,唯一地标识一个数据报的所有分段.

标记 与分段相关的标记,标记是否允许被分段是否为最后一个分段.

分段偏移量 该分段相对于原始数据报的偏移量,单位64bit.

TTL Time To Live, 存活时间,单位秒,但事实上通常每经过一个路由器会被减一.

协议号 指明所承载的数据使用的协议,常见的协议号如下:

校验和 报头校验和,用来核对报头是否被正确地传输,如果校验失败,则这个数据报会被丢弃.

源地址 目标地址 IPv4地址,二进制形式.

在通常的报头之后,还会有选项(由IHL决定)和实际的数据.

TCP/IP 笔记(2.TCP/IP模型)

上一篇提到的TCP/IP模型:

下面是四层模型,和每一层上所传输的数据的术语.

  • 网络访问层 – 帧(frame)
  • 网际层 – 数据报(datagram)
  • 主机对主机传输层 – TCP:段(segment) UDP:包(packet)
  • 应用层 – TCP:流(stream) UDP:消息(message)

网络访问层

与OSI模型的前三层对应,隐藏物理设备的细节,相当于物理设备的驱动.

将IP数据报封装成适合物理设备传输的帧.

将IP地址转换为物理地址(ARP协议,Address Resolution Protocol,地址解析协议), 为传送IP数据报提供基础.

网际层

本层最重要的是IP协议,目前被广泛应用的是IPv4, 还有它的替代品IPv6. 本系列笔记暂时只涉及IPv4.

无论是上层协议(TCP/UDP), 还是下层协议(ARP), 都使用IP来传输数据, TCP/IP模型中所有的数据包必定经过IP.

术语数据包在这里,以及以后,笼统地表示一段自成整体的数据.

主机对主机传输层

简称传输层,本层最重要的是TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议).

  • TCP提供可靠的数据传输服务,而且能侦测、更正端点之间的错误.
  • UDP提供低成本、非连接式的数据传输服务.

应用层

应用层就是应用程序实际交流数据的层次,协议有很多种,取决于具体的应用程序,很多应用程序都会定义属于自己的应用层协议.

常见的开放协议有SMTP, FTP, HTTP, DNS, Telnet等等.

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

订阅推送

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

王子亭的博客 @ Telegram


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

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