计算机网络

Posted on By Guanzhou Song

1 概述

互联网组成

从互联网的工作方式上看,可以划分为两大块:

  1. 边缘部分: 由所有连接在互联网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。
  2. 核心部分:由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换)。

边缘

处在互联网边缘的部分就是连接在互联网上的所有的主机。这些主机又称为端系统 (end system)。

端系统在功能上可能有很大的差别 小的端系统可以是一台普通个人电脑,具有上网功能的智能手机,甚至是一个很小的网络摄像头。

大的端系统则可以是一台非常昂贵的大型计算机。

端系统的拥有者可以是个人,也可以是单位(如学校、企业、政府机关等),当然也可以是某个 ISP。

通信方式

端系统之间的通信方式通常可划分为两大类:

  1. 客户-服务器方式(C/S 方式) 即 Client/Server 方式,简称为 C/S 方式。
  2. 对等方式(P2P 方式) 即 PeertoPeer 方式 ,简称为 P2P 方式。

客户-服务器工作方式

客户软件:被用户调用后运行,在打算通信时主动向远地服务器发起通信(请求服务)。因此,客户程序必须知道服务器程序的地址。 不需要特殊的硬件和很复杂的操作系统。

服务器软件:一种专门用来提供某种服务的程序,可同时处理多个远地或本地客户的请求。 系统启动后即自动调用并一直不断地运行着,被动地等待并接受来自各地的客户的通信请求。因此,服务器程序不需要知道客户程序的地址。 一般需要强大的硬件和高级的操作系统支持。

客户与服务器的通信关系建立后,通信可以是双向的,客户和服务器都可发送和接收数据。

对等连接

对等连接 (peer-to-peer,简写为 P2P) 是指两个主机在通信时并不区分哪一个是服务请求方还是服务提供方。 只要两个主机都运行了对等连接软件 (P2P 软件) ,它们就可以进行平等的、对等连接通信。 双方都可以下载对方已经存储在硬盘中的共享文档。 对等连接方式从本质上看仍然是使用客户服务器方式,只是对等连接中的每一个主机既是客户又是服务器。 例如主机 C 请求 D 的服务时,C 是客户,D 是服务器。但如果 C 又同时向 F提供服务,那么 C 又同时起着服务器的作用。

对等连接工作方式可支持大量对等用户(如上百万个)同时工作。

核心

网络核心部分是互联网中最复杂的部分。 网络中的核心部分要向网络边缘中的大量主机提供连通性,使边缘部分中的任何一个主机都能够向其他主机通信(即传送或接收各种形式的数据)。 在网络核心部分起特殊作用的是路由器 (router)。

路由器是实现分组交换 (packet switching) 的关键构件,其任务是转发收到的分组,这是网络核心部分最重要的功能。 为了理解分组交换,首先了解电路交换的基本概念。

互联网的核心部分是由许多网络和把它们互连起来的路由器组成,而主机处在互联网的边缘部分。 互联网核心部分中的路由器之间一般都用高速链路相连接,而在网络边缘的主机接入到核心部分则通常以相对较低速率的链路相连接。 主机的用途是为用户进行信息处理的,并且可以和其他主机通过网络交换信息。路由器的用途则是用来转发分组的,即进行分组交换的。

路由器

在路由器中的输入和输出端口之间没有直接连线。

路由器处理分组的过程是:

  • 把收到的分组先放入缓存(暂时存储);
  • 查找转发表,找出到某个目的地址应从哪个端口转发;
  • 把分组送到适当的端口转发出去。

三种交换对比:

  • 若要连续传送大量的数据,且其传送时间远大于连接建立时间,则电路交换的传输速率较快。
  • 报文交换和分组交换不需要预先分配传输带宽,在传送突发数据时可提高整个网络的信道利用率。
  • 由于一个分组的长度往往远小于整个报文的长度,因此分组交换比报文交换的时延小,同时也具有更好的灵活性。

网络种类

  • 广域网 WAN (Wide Area Network):作用范围通常为几十到几千公里。
  • 城域网 MAN (Metropolitan Area Network):作用距离约为 5 ~ 50 公里。
  • 局域网 LAN (Local Area Network) :局限在较小的范围(如 1 公里左右)。
  • 个人区域网 PAN (Personal Area Network) :范围很小,大约在 10 米左右。

  • 公用网 (public network) 按规定交纳费用的人都可以使用的网络。因此也可称为公众网。
  • 专用网 (private network) 为特殊业务工作的需要而建造的网络。

性能指标

  • 速率
  • 带宽
  • 吞吐率
  • 时延
  • 时延带宽积
  • 往返时间 RTT
  • 利用率

速率

比特(bit)是计算机中数据量的单位,也是信息论中使用的信息量的单位。 比特(bit)来源于 binary digit,意思是一个“二进制数字”,因此一个比特就是二进制数字中的一个 1 或 0。 速率是计算机网络中最重要的一个性能指标,指的是数据的传送速率,它也称为数据率 (data rate)或比特率 (bit rate)。 速率的单位是 bit/s,或 kbit/s、Mbit/s、 Gbit/s 等。例如 4  1010 bit/s 的数据率就记为 40 Gbit/s。 速率往往是指额定速率或标称速率,非实际运行速率。

带宽

两种不同意义: “带宽”(bandwidth) 本来是指信号具有的频带宽度,其单位是赫(或千赫、兆赫、吉赫等)。 在计算机网络中,带宽用来表示网络中某通道传送数据的能力。表示在单位时间内网络中的某信道所能通过的“最高数据率”。单位是 bit/s ,即 “比特每秒”。

吞吐量

吞吐量 (throughput) 表示在单位时间内通过某个网络(或信道、接口)的数据量。 吞吐量更经常地用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。 吞吐量受网络的带宽或网络的额定速率的限制。

时延

时延 (delay 或 latency) 是指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。 有时也称为延迟或迟延。 网络中的时延由以下几个不同的部分组成: (1) 发送时延 (2) 传播时延 (3) 处理时延 (4) 排队时延

2 物理层

物理层的基本概念

  • 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。
  • 物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。
  • 用于物理层的协议也常称为物理层规程 (procedure)。

主要任务

  • 确定与传输媒体的接口的一些特性。
  • 机械特性 :指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。
  • 电气特性:指明在接口电缆的各条线上出现的电压的范围。
  • 功能特性:指明某条线上出现的某一电平的电压表示何种意义。
  • 过程特性 :指明对于不同功能的各种可能事件的出现顺序。

3 数据链路层

使用点对点信道的数据链路层

数据链路 (data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。 一般的适配器都包括了数据链路层和物理层这两层的功能。

三个基本问题

  1. 封装成帧
  2. 透明传输
  3. 差错控制

封装成帧

封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。 首部和尾部的一个重要作用就是进行帧定界。

当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符。 控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT (End Of Transmission) 表示帧的结束。

透明传输

如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,数据链路层就会错误地“找到帧的边界”。

解决方法:字节填充 (byte stuffing) 或字符填充 (character stuffing)。

发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC” (其十六进制编码是 1B)。 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。

差错检测

在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。 误码率与信噪比有很大的关系。 为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。

点对点协议 PPP

点对点协议 PPP (Point-to-Point Protocol):用户使用拨号电话线接入互联网时, 用户计算机和 ISP 进行通信时所使用的数据链路层协议就是 PPP 协议。

PPP协议满足的要求

  • 简单 —— 这是首要的要求。
  • 封装成帧 —— 必须规定特殊的字符作为帧定界符。
  • 透明性 —— 必须保证数据传输的透明性。
  • 多种网络层协议 —— 能够在同一条物理链路上同时支持多种网络层协议。
  • 多种类型链路 —— 能够在多种类型的链路上运行。
  • 差错检测 —— 能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。
  • 检测连接状态 —— 能够及时自动检测出链路是否处于正常工作状态。
  • 最大传送单元 —— 必须对每一种类型的点对点链路设置最大传送单元 MTU 的标准默认值,促进各种实现之间的互操作性。
  • 网络层地址协商 —— 必须提供一种机制使通信的两个网络层实体能够通过协商知道或能够配置彼此的网络层地址。
  • 数据压缩协商 —— 必须提供一种方法来协商使用数据压缩算法。

工作状态

  • 当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。
  • PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。
  • 这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。
  • 通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。
  • 可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。

使用广播信道的数据链路层

局域网

局域网最主要的特点是:

  • 网络为一个单位所拥有;
  • 地理范围和站点数目均有限。

局域网具有如下主要优点:

  • 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
  • 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变。
  • 提高了系统的可靠性、可用性和残存性。

为了使数据链路层能更好地适应多种局域网标准,将局域网的数据链路层拆成两个子层: 逻辑链路控制 LLC (Logical Link Control)子层; 媒体接入控制 MAC (Medium Access Control)子层。 与接入到传输媒体有关的内容都放在 MAC子层,而 LLC 子层则与传输媒体无关。 不管采用何种协议的局域网,对 LLC 子层来说都是透明的。

适配器

网络接口板又称为通信适配器 (adapter) 或网络接口卡 NIC (Network Interface Card),或“网卡”。

适配器的重要功能:

  • 进行串行/并行转换。
  • 对数据进行缓存。
  • 在计算机的操作系统安装设备驱动程序。
  • 实现以太网协议。

MAC帧

无效的MAC帧

  • 数据字段的长度与长度字段的值不一致;
  • 帧的长度不是整数个字节;
  • 用收到的帧检验序列 FCS 查出有差错;
  • 数据字段的长度不在 46 ~ 1500 字节之间。
  • 有效的 MAC 帧长度为 64 ~ 1518 字节之间。

以太网不负责重新传输,只是简单的丢弃

使用以太网进行宽带接入

IEEE 在 2001 年初成立了 802.3 EFM 工作组,专门研究高速以太网的宽带接入技术问题。 以太网宽带接入具有以下特点: 可以提供双向的宽带通信。 可以根据用户对带宽的需求灵活地进行带宽升级。 可以实现端到端的以太网传输,中间不需要再进行帧格式的转换。这就提高了数据的传输效率且降低了传输的成本。 但是不支持用户身份鉴别。

PPPoE

PPPoE (PPP over Ethernet) 的意思是“在以太网上运行 PPP”,它把 PPP 协议与以太网协议结合起来 —— 将 PPP 帧再封装到以太网中来传输。 现在的光纤宽带接入 FTTx 都要使用 PPPoE 的方式进行接入。在 PPPoE 弹出的窗口中键入在网络运营商购买的用户名和密码,就可以进行宽带上网了。 利用 ADSL 进行宽带上网时,从用户个人电脑到家中的 ADSL 调制解调器之间,也是使用 RJ-45 和 5 类线(即以太网使用的网线)进行连接的,并且也是使用 PPPoE 弹出的窗口进行拨号连接的。

网络层

网际协议 IP

网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。 与 IP 协议配套使用的还有三个协议:

  • 地址解析协议 ARP (Address Resolution Protocol)
  • 网际控制报文协议 ICMP (Internet Control Message Protocol)
  • 网际组管理协议 IGMP (Internet Group Management Protocol)

虚拟互联网络

互联网使用的中间设备:

  • 物理层使用转发器(Repeater)
  • 数据链路层使用网桥或者桥接器(Bridge)
  • 网络层使用路由器(Router)
  • 网络层以上需要使用网关(Gateway),用网关连接两个不兼容的系统需要在高层进行协议转换

所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。 使用 IP 协议的虚拟互连网络可简称为 IP 网。 使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节。 如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网 (Internet)。

分类 IP 地址

ARP在下方,因为IP经常使用该协议,ICMP与IGMP在上部,因为它们需要使用IP协议。

每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。

一个 IP 地址在整个互联网范围内是唯一的。

IP 地址的一些重要特点

  • IP 地址是一种分等级的地址结构。分两个等级的好处是: 第一,IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理 第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。

  • 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口。 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机 (multihomed host)。 由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址。
  • 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。
  • 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。

IP 地址与硬件地址

ARP地址解析协议

ARP 作用: 从网络层使用的 IP 地址,解析出在数据链路层使用的硬件地址。

每一个主机都设有一个 ARP 高速缓存 (ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。

当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。

  • 如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。
  • 如没有, ARP 进程在本局域网上广播发送一个 ARP 请求分组。收到 ARP 响应分组后,将得到的 IP 地址到硬件地址的映射写入 ARP 高速缓存。

  • ARP请求分组:包含发送方硬件地址 / 发送方 IP 地址 / 目标方硬件地址(未知时填 0) / 目标方 IP 地址。 本地广播 ARP 请求(路由器不转发ARP请求)。 ARP 响应分组:包含发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址。 ARP 分组封装在物理网络的帧中传输。

ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。 如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。

从 IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。 只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址。

使用ARP的始终情况

  • 发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
  • 送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
  • 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
  • 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。

路由器分组转发:

  1. 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
  2. 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行 (3)。
  3. 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行 (4)。
  4. 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行 (5)。
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行 (6)。
  6. 报告转发分组出错。
  • 路由表没有给分组指明到某个网络的完整路径。
  • 路由表指出,到某个网络应当先到某个路由器(即下一跳路由器)。
  • 在到达下一跳路由器后,再继续查找其路由表,知道再下一步应当到哪一个路由器。
  • 这样一步一步地查找下去,直到最后到达目的网络。

划分子网和构造超网

基本思路

  • 划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
  • 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。
  • 凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。 然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。 最后就将 IP 数据报直接交付目的主机。

当没有划分子网时,IP 地址是两级结构。 划分子网后 IP 地址就变成了三级结构。 划分子网只是把 IP 地址的主机号 host-id 这部分进行再划分,而不改变 IP 地址原来的网络号 net-id。

子网掩码

在划分子网情况下路由器转发分组的算法

  1. 从收到的分组的首部提取目的 IP 地址 D。
  2. 先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网 络地址匹配。若匹配,则将分组直接交付。否则就是间接交付, 执行 (3)。
  3. 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给 指明的下一跳路由器;否则,执行 (4)。
  4. 对路由表中的每一行,将子网掩码和 D 逐位相“与”。若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 (5)。
  5. 若路由表中有一个默认路由,则将分组传送给路由表中所指明 的默认路由器;否则,执行 (6)。
  6. 报告转发分组出错。

无分类编址 CIDR

无分类域间路由选择 CIDR (Classless Inter-Domain Routing)

CIDR 使用“斜线记法”(slash notation),它又称为 CIDR 记法,即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。例如: 220.78.168.0/24

128.14.32.0/20 表示的地址块共有 212 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。

  • 这个地址块的起始地址是 128.14.32.0。
  • 在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20 地址块”。
  • 128.14.32.0/20 地址块的最小地址:128.14.32.0
  • 128.14.32.0/20 地址块的最大地址:128.14.47.255
  • 全 0 和全 1 的主机号地址一般不使用。

网际控制报文协议 ICMP

  • 为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。
  • ICMP 是互联网的标准协议。
  • ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
  • 但 ICMP 不是高层协议(看起来好像是高层协议,因为 ICMP 报文是装在 IP 数据报中,作为其中的数据部分),而是 IP 层的协议。

ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。

差错报告报文

ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。

  • 终点不可达
  • 时间超过
  • 参数问题
  • 改变路由(重定向)(Redirect)

询问报文

  • 回送请求和回答报文
  • 时间戳请求和回答报文

ICMP应用

PING (Packet InterNet Groper)

  • PING 用来测试两个主机之间的连通性。
  • PING 使用了 ICMP 回送请求与回送回答报文。
  • PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP。

Traceroute

  • 在 Windows 操作系统中这个命令是 tracert。
  • 用来跟踪一个分组从源点到终点的路径。
  • 它利用 IP 数据报中的 TTL 字段和 ICMP 时间超过差错报告报文实现对从源点到终点的路径的跟踪。

路由器的组成

路由器的作用:

  1. 连通不同的网络。
  2. 选择信息传送的线路。选择通畅快捷的近路,能大大提高通信速度,减轻网络系统通信负荷,节约网络系统资源,提高网络系统畅通率,从而让网络系统发挥出更大的效益来。

路由器结构

路由选择部分 分组转发部分

路由选择部分

  1. 也叫做控制部分,其核心构件是路由选择处理机。
  2. 路由选择处理机的任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。

分组转发部分

交换结构 (switching fabric):又称为交换组织,其作用是根据转发表 (forwarding table) 对分组进行处理。

  • 一组输入端口
  • 一组输出端口

交换结构

VPN

VPN (Virtual Private Network)

  • “专用网”是因为这种网络是为本机构的主机用于机构内部的通信,而不是用于和网络外非本机构的主机通信。
  • “虚拟”表示“好像是”,但实际上并不是,因为现在并没有真正使用通信专线,而VPN只是在效果上和真正的专用网一样。

运输层

运输层协议

  • 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
  • 当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。

  • “逻辑通信”的意思是“好像是这样通信,但事实上并非真的这样通信”。
  • 从IP层来说,通信的两端是两台主机。但“两台主机之间的通信”这种说法还不够清楚。
  • 严格地讲,两台主机进行通信就是两台主机中的应用进程互相通信。
  • 从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。也就是说,端到端的通信是应用进程之间的通信。

根据应用程序的不同需求,运输层需要有两种不同的运输协议,即

  • 面向连接的 TCP
  • 无连接的 UDP

  • 当运输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。
  • 当运输层采用无连接的 UDP 协议时,这种逻辑通信信道是一条不可靠信道。

TCP/IP 的运输层有两个主要协议:

  1. 用户数据报协议 UDP (User Datagram Protocol)
  2. 传输控制协议 TCP (Transmission Control Protocol)

UDP

UDP:一种无连接协议

  • 提供无连接服务。
  • 在传送数据之前不需要先建立连接。
  • 传送的数据单位协议是 UDP 报文或用户数据报。
  • 对方的运输层在收到 UDP 报文后,不需要给出任何确认。
  • 虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。

TCP

TCP:一种面向连接的协议

  • 提供面向连接的服务。
  • 传送的数据单位协议是 TCP 报文段 (segment)。
  • TCP 不提供广播或多播服务。
  • 由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。

注意点

运输层的 UDP 用户数据报与网际层的IP数据报有很大区别。

IP 数据报要经过互连网中许多路由器的存储转发。 UDP 用户数据报是在运输层的端到端抽象的逻辑信道中传送的。

TCP 报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了 TCP 连接。

TCP/IP 运输层端口

  • 端口用一个 16 位端口号进行标志。
  • 端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。
  • 在互联网中,不同计算机的相同端口号是没有联系的。
  1. 服务器端使用的端口号 熟知端口,数值一般为 0~1023。 登记端口号,数值为 1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复。
  2. 客户端使用的端口号 又称为短暂端口号,数值为 49152~65535,留给客户进程选择暂时使用。 当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。

UDP

UDP 只在 IP 的数据报服务之上增加了很少一点的功能:

  • 复用和分用的功能
  • 差错检测的功能

主要特点

  1. UDP 是无连接的,发送数据之前不需要建立连接,,因此减少了开销和发送数据之前的时延。
  2. UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
  3. UDP 是面向报文的。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。UDP 一次交付一个完整的报文。
  4. UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很适合多媒体通信的要求。
  5. UDP 支持一对一、一对多、多对一和多对多的交互通信。
  6. UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。

TCP

主要特点

  • TCP 是面向连接的运输层协议。
  • 每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)。
  • TCP 提供可靠交付的服务。
  • TCP 提供全双工通信。
  • 面向字节流
  • TCP 中的“流”(stream)指的是流入或流出进程的字节序列。
  • “面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。
  • TCP 不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。
  • 但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。

  • TCP 连接是一条虚连接而不是一条真正的物理连接。
  • TCP 对应用进程一次把多长的报文发送到TCP 的缓存中是不关心的。
  • TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
  • TCP 可把太长的数据块划分短一些再传送。
  • TCP 也可等待积累有足够多的字节后再构成报文段发送出去。

套接字

套接字 socket = (IP地址 : 端口号)

每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:

TCP 连接 ::= {socket1, socket2} = {(IP1: port1),(IP2: port2)}

可靠传输

流水线传输:

  • 为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输。
  • 流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一直有数据不间断地传送。
  • 由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率。

连续 ARQ 协议(滑动窗口)

  • 滑动窗口协议比较复杂,是 TCP 协议的精髓所在。
  • 发送方维持的发送窗口,它的意义是:位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。这样,信道利用率就提高了。
  • 连续 ARQ 协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
  • 接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。
  • 优点:容易实现,即使确认丢失也不必重传。
  • 缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。

  • Go-Back-N
  • 如果发送方发送了前 5 个分组,而中间的第 3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。
  • Go-back-N(回退 N),表示需要再退回来重传已发送过的 N 个分组。
  • 可见当通信线路质量不好时,连续 ARQ 协议会带来负面的影响。

缓存

  • 发送缓存用来暂时存放: 发送应用程序传送给发送方 TCP 准备发送的数据; TCP 已发送出但尚未收到确认的数据。
  • 接收缓存用来暂时存放: 按序到达的、但尚未被接收应用程序读取的数据; 不按序到达的数据。

拥塞控制

  • 在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种现象称为拥塞 (congestion)。
  • 若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。
  • 拥塞经常趋于恶化:如果一个路由器没有足够的缓存空间,它就会丢弃一些新到的分组。 但当分组被丢弃时,发送这一分组的源点就会重传这一分组,甚至可能还要重传多次。这样会引起更多的分组流入网络和被网络中的路由器丢弃。 可见拥塞引起的重传并不会缓解网络的拥塞,反而会加剧网络的拥塞。

TCP 的拥塞控制方法:拥塞窗口 CWND (Congestion Window)

  • 拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。
  • 发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量。
  • 所以,发送窗口大小不仅取决于接收方公告的接收窗口,还取决于网络的拥塞状况
  • 只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多的分组发送出去,这样就可以提高网络的利用率。
  • 但只要网络出现拥塞或有可能出现拥塞,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,以便缓解网络出现的拥塞。

    拥塞判断:

  • 重传定时器超时: 现在通信线路的传输质量一般都很好,因传输出差错而丢弃分组的概率是很小的(远小于 1 %)。只要出现了超时,就可以猜想网络可能出现了拥塞。
  • 收到三个相同(重复)的 ACK: 个别报文段会在网络中丢失,预示可能会出现拥塞(实际未发生拥塞),因此可以尽快采取控制措施,避免拥塞。

拥塞控制算法

  • 慢开始 (slow-start)
  • 拥塞避免 (congestion avoidance)
  • 快重传 (fast retransmit)
  • 快恢复 (fast recovery)
慢开始 (Slow start)
  • 用来确定网络的负载能力。
  • 算法的思路:由小到大逐渐增大拥塞窗口数值。
  • 旧的规定:在刚刚开始发送报文段时,先把初始拥塞窗口cwnd 设置为 1 至 2 个发送方的最大报文段 SMSS (Sender Maximum Segment Size) 的数值。
  • 新的 RFC 5681 把初始拥塞窗口 cwnd 设置为不超过2至4个SMSS 的数值。
  • 慢开始门限 ssthresh(状态变量):防止拥塞窗口cwnd 增长过大引起网络拥塞。
  • 使用慢开始算法后,每经过一个传输轮次 (transmission round),拥塞窗口 cwnd 就加倍。
拥塞避免 (congestion avoidance)
  • 思路:让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口 cwnd 按线性规律缓慢增长。
  • 因此在拥塞避免阶段就有“加法增大” (Additive Increase) 的特点。这表明在拥塞避免阶段,拥塞窗口 cwnd 按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。

  • 无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(重传定时器超时): ssthresh = max(cwnd/2,2) cwnd = 1 执行慢开始算法
  • 这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。
举例

快重传FR (Fast Retransmission) 算法
  • 快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
  • 发送方只要一连收到三个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传(即“快重传”),这样就不会出现超时,发送方也不就会误认为出现了网络拥塞。
  • 使用快重传可以使整个网络的吞吐量提高约20%。
AIMD

可以看出,在拥塞避免阶段,拥塞窗口是按照线性规律增大的。这常称为“加法增大” AI (Additive Increase)。 当出现超时或3个重复的确认时,就要把门限值设置为当前拥塞窗口值的一半,并大大减小拥塞窗口的数值。这常称为“乘法减小”MD (Multiplicative Decrease)。 二者合在一起就是所谓的 AIMD 算法。

连接管理

运输连接有三个阶段:

  • 连接建立
  • 数据传送
  • 连接释放

TCP 的连接建立

  • TCP 建立连接的过程叫做握手。
  • 握手需要在客户和服务器之间交换三个 TCP 报文段。称之为三报文握手。
  • 采用三报文握手主要是为了防止已失效的连接请求报文段突然又传送到了,因而产生错误。
  1. A 的 TCP 向 B 发出连接请求报文段,其首部中的 同步位 SYN = 1,并选择序号 seq = x,表明传送 数据时的第一个数据字节的序号是 x。

  2. B 的 TCP 收到连接请求报文段后,如同意,则 发回确认。B 在确认报文段中应使 SYN = 1,使 ACK = 1, 其确认号ack = x  1,自己选择的序号 seq = y。
  3. A 收到此报文段后向 B 给出确认,其 ACK = 1, 确认号 ack = y  1。 A 的 TCP 通知上层应用进程,连接已经建立。
  4. B 的 TCP 收到主机 A 的确认后,也通知其上层 应用进程:TCP 连接已经建立。

TCP连接释放

  1. 数据传输结束后,通信的双方都可释放连接。 现在 A 的应用进程先向其 TCP 发出连接释放 报文段,并停止再发送数据,主动关闭 TCP 连接。 A 把连接释放报文段首部的 FIN = 1,其序号 seq = u,等待 B 的确认。
  2. B 发出确认,确认号 ack = u  1, 而这个报文段自己的序号 seq = v。 TCP 服务器进程通知高层应用进程。 从 A 到 B 这个方向的连接就释放了,TCP 连接 处于半关闭状态。B 若发送数据,A 仍要接收。
  3. 若 B 已经没有要向 A 发送的数据, 其应用进程就通知 TCP 释放连接。
  4. A 收到连接释放报文段后,必须发出确认。
  5. 在确认报文段中 ACK = 1,确认号 ack  w  1, 自己的序号 seq = u + 1。
  6. TCP 连接必须经过时间 2MSL 后才真正释放掉。

TCP有限状态机