三种交换方式
-
电路交换
-
分组交换
- 发送方: 构造分组,发送分组
- 路由器:缓存分组,转发分组
- 接受方:接受分组,还原报文
-
报文交换
各种交换方式的优缺点
计算机网络的定义
-
按照交换技术分类
-
按照使用者分类
- 公用网
- 专用网
-
按照传输介质分类
- 有线网络
- 无线网络
-
按照覆盖范围分类
- 广域网 WAN
- 城域网 MAN
- 局域网 LAN
- 个域网 PAN
-
按照拓扑结构分类
- 总线
- 星型
- 环形
- 网状
计算机网络的性能指标
- 速率
- 带宽:用来表示网络的通信线路所能传送数据的能力,因此网络带宽表示在单位时间内从网络中的某一点到另一点所能通过的“最高数据率”。理论最高值。
- 吞吐量:吞吐量表示在单位时间内通过某个网络(或信道、接口)的数据量。实时数据的单位。
- 时延
- 发送
- 网络
- 传播
- 处理
- 时延带宽积:
- 往返时间(RTT)
- 利用率
- 信道利用率
- 网络利用率
如果令 表示网络空闲时的时延, 表示网络当前的时延,那么在适当的假定条件下,可以用下面的简单公式来表示 、 和利用率 之间的关系:
- 丢包率:丢包率即分组丢失率,是指在一定的时间范围内,传输过程中丢失的分组数量与总分组数量的比率
计算机网络体系结构
-
OSI - 7 层协议
- 应用层
- 表示层
- 会话层
- 运输层
- 网络层
- 数据链路层
- 物理层
-
TCP/IP 体系结构
- 应用层(HTTP/SMTP/DNS/RTP/…)
- 运输层(TCP/UDP)
- 网际层(IP)
- 网络接口层(没有具体的规定,因此可以兼容各种接口)
-
原理体系结构 - 5 层结构(用于教学)
- 应用层
- 运输层
- 网络层
- 数据链路层
- 物理层
-
TCP/IP 协议簇
一些术语
- 实体
- 协议
- 服务
- 服务访问点
- 服务原语
- 协议数据单元 PDU(对等层次之间传输的数据包)
- 比特流
- 帧
- ip 数据报或分组
- tcp 报文/udp 用户数据报
- 报文
- 服务数据单元 SDU
物理层的基本概念
物理层下面的传输媒体
- 导引型传输媒体
- 同轴电缆
- 双绞线
- 光纤
- 多模光纤(只适合近距离传播)
- 单模光纤(适合长距离传输,并且衰减小)
- 电力线
- 非导引型传输媒体
- 无线电波
- 微波
- 红外线
- 可见光
传输方式
- 串行传输(在计算机网络中,使用串行传输)
- 并行传输
- 同步传输
- 外同步:在收发双方之间添加一条单独的时钟信号线
- 内同步:发送端将时钟同步信号编码到发送数据中一起传输(例如曼彻斯特编码)
- 异步传输:字节之间异步(字节之间的时间间隔不固定)
- 单项通信(单工)
- 双向交替通信(半双工)不能同时进行、只需要一条信道
- 双向同时通信(全双工)可以同时进行、需要两条以上的信道
编码与调制
- 常用编码
- 不归零编码(存在同步问题)
- 归零编码(自同步,编码效率低)
- 曼彻斯特编码(传统以太网)
- 差分曼彻斯特编码
- 调制方法
- 调幅
- 调频
- 调相
- 混合调制
- 正交振幅调制 QAM
信道极限容量
- 失真的影响因素
- 码元传输速率
- 信号传输距离
- 噪声干扰
- 传输媒体质量
- 奈氏准则:在假定的理想条件下,为了避免码间串扰,码元传输速率是有上限的
- 理想低通信道的最高码元传输速率 = 2 W Baud = 2 W 码元/秒
- 理想带通信道的最高码元传输速率 = W Baud = W 码元/秒
- W:信道带宽(单位为 Hz)Baud:波特,即码元/秒
- 码元传输速率又称为波特率、调制速率、波形速率或符号速率。它与比特率有一定关系:
- 当 1 个码元只携带 1 比特的信息量时,则波特率(码元/秒)与比特率(比特/秒)在数值上是相等的;
- 当 1 个码元携带 n 比特的信息量时,则波特率转换成比特率时,数值要乘以 n。
- 要提高信息传输速率(比特率),就必须设法使每一个码元能携带更多个比特的信息量。这需要采用多元制。
- 实际的信道所能传输的最高码元速率,要明显低于奈氏准则给出的这个上限数值。
- 香农公式:带宽受限且有高斯白噪声干扰的信道的极限信息传输速率。
- C:信道容量
- W:带宽
- S/N:信噪比
- 信道带宽或信道中信噪比越大,信息的极限传输速率越高。
- 在实际信道上能够达到的信息传输速率要比该公式的极限传输速率低不少。这是因为在实际信道中,信号还要受到其他一些损伤,如各种脉冲干扰、信号在传输中的衰减和失真等,这些因素在香农公式中并未考虑。
在信道带宽一定的情况下,根据奈氏准则和香农公式,要想提高信息的传输速率就必须采用多元制(更好的调制方法)和努力提高信道中的信噪比
数据链路层概述
- 链路(Link)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
- 数据链路(DataLink)是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
- 数据链路层以帧为单位传输和处理数据。
- 数据链路层的三个重要问题
- 封装成帧
- 差错检测
- 可靠传输
封装成帧
- 封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
- 帧头和帧尾中包含有重要的控制信息。
- 帧头和帧尾的作用之一就是帧定界。但是并不是所有的帧格式都有定界标志。
差错检测
- 差错检测
- 奇偶校验码
- CRC 冗余循环校验码(用于检错,但是无法检错) 重点注意掌握,包括计算和检查方式
在计算机网络中,通常采用我们后续课程中将要讨论的检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。
可靠传输的基本概念
使用差错检测技术(例如循环冗余校验 CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特错误)
-
不可靠传输服务:丢弃存在无码的帧
-
可靠传输服务:想办法实现发送端发送什么,接收端就收到什么
-
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理
-
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
-
比特差错只是传输差错中的一种。
-
从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复
-
可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输
可靠传输的实现机制
停止-等待协议 SW(Stop-and-Wait)

确认与否认
分组重复
- 为避免分组重复这种传输错误,必须给每个分组带上序号。
- 对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了。
超时重传
- 接收方收不到数据分组,就不会发送 ACK 或 NAK。
- 如果不采取其他措施,发送方就会一直处于等待接收方 ACK 或 NAK 的状态。
- 为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何 ACK 或 NAK,则重传原来的数据分组,这就叫做超时重传。
- 一般可将重传时间选为略大于“从发送方到接收方的平均往返时间“
确认迟到
接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送 NAK 分组。
为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的停等特性,只需 1 个比特编号就够了,即编号 0 和 1。
为了让发送方能够判断所收到的 ACK 分组是否是重复的,需要给 ACK 分组编号,所用比特数量与数据分组编号所用比特数量一样。数据链路层一般不会出现 ACK 分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给 ACK 分组编号
超时计时器设置的重传时间应仔细选择。一般可将重传时间选为略大于“从发送方到接收方的平均往返时间“
在数据链路层点对点的往返时间比较确定,重传时间比较好设定。
然而在运输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易。
信道利用率

- 当往返时延 RTT 远大于数据帧发送时延 TD 时(例如使用卫星链路),信道利用率非常低
- 若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低
- 为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,即后退 N 帧协议 GBN 和选择重传协议 SR。
回退 N 帧协议 GBN(Go-Back-N)
流水线传输的典型

发送方
- 发送窗口尺寸 Wτ的取值范围是 1 < ≤ − 1 其中,n 是构成分组序号的比特数量。
- 停止-等待协议
- 接收方无法分辨新、旧数据分组
- 发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去;
- 发送方只有收到对已发送数据分组的确认时,发送窗口才能向前相应滑动
- 发送方收到多个重复确认时,可在重传计时器超时前尽早开始重传,由具体实现决定。
- 发送方发送窗口内某个已发送的数据分组产生超时重发时,其后续在发送窗口内且已发送的数据分组也必须全部重传,这就是回退 N 帧协议名称的由来
接收方
- 接收方的接收窗口尺寸 的取值范围是 因此接收方只能按序接收数据分组
- 接收方只接收序号落在接收窗口内且无误码的数据分组,并且将接收窗口向前滑动一个位置,与此同时给发送方发回相应的确认分组。为了减少开销,接收方不一定每收到一个按序到达且无误码的数据分组就给发送方发回一个确认分组,
- 而是可以在连续收到好几个按序到达且无误码的数据分组后(由具体实现决定),才针对最后一个数据分组发送确认分组,这称为累积确认;
- 或者可以在自己有数据分组要发送时才对之前按序接收且无误码的数据分组进行捎带确认;
- 接收方收到未按序到达的数据分组,除丢弃外,还要对最近按序接收的数据分组进行确认:
回退 N 帧协议的接收窗口尺寸 WR 只能等于 1,因此接收方只能按序接收正确到达的数据分组
一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费。
选择重传协议 SR(Selective Request)
发送方
- 发送窗口尺寸 的取值范围是 1 < ≤ − 1 其中,n 是构成分组序号的比特数量。
- = 1 与停止-等待协议相同
- > 接收方无法分辨新、旧数据分组
- 发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去:
- 发送方只有按序收到对已发送数据分组的确认时,发送窗口才能向前相应滑动;若收到未按序到达的确认分组时,对其进行记录,以防止其相应数据分组的超时重发,但发送窗口不能向前滑动。
接受方
- 接收窗口尺寸 WR 的取值范围是 1 < ≤
- = 1 与停止-等待协议相同
- > 无意义
- 接收方可接收未按序到达但没有误码并且序号落在接收窗口内的数据分组;
- 为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认!
- 接收方只有在按序接收数据分组后,接收窗口才能向前相应滑动。
点对点协议 PPP
点对点协议 PPP(Point-to-PointProtocol) 是目前使用最广泛的点对点数据链路层协议。

- PPP 协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议 LCP 用于建立、配置以及测试数据链路的连接
- 一套网络控制协议 NCPs 其中的每一个协议支持不同的网络层协议
媒体接入控制(MAC)
共享信道要看重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制 MAC(MediumAccessControl)。

静态划分信道
- 复用(Multiplexing)是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号。
- 当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽。
注意理解这里的各种复用的概念:
- 频分复用 FDM
- 时分复用 TDM
- 波分复用 WDM
- 码分复用 CDM
- 码分复用 CDM 是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址 CDMA(Code Division Multiple Access)。
- 同理,频分复用 FDM 和时分复用 TDM 同样可用于多证接入,相应的名词是频分多址 FDMA(Frequency Division Multiple Access)和时分多址 TDMA(Time Division Multiple Access)。
- 与 FDM 和 TDM 不同,CDM 的每一个用户可以在同样的时间使用同样的频带进行通信。
- 由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰
随机接入
CSMA/CD 协议
使用于广播信道的有线局域网
注意理解这里的各种概念意思:
- 多址接入 MA
- 载波监听 CS
- 碰撞检测 CD
- 争用期(争用期)
- 主机最多经过 2τ 的时长就可检测到本次发送是否遭受了碰撞
- 因此,以太网的端到端往返传播时延 2τ 称为争用期或碰撞窗口。
- 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
- 每一个主机在自己发送帧之后的一小段时间内,存在看遭遇碰撞的可能性。这一小段时间是不确定的。它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间。
- 显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长
- 最小帧长
- 最大帧长
- 阶段二进制指数退避算法
- 信道利用率
- 帧发送流程

- 帧就收流程

CSMA/CA 协议
适用于广播信道的无线局域网
MAC 地址/IP 地址/ARP 协议
MAC 地址(数据链路层)
- MAC 地址是以太网的 MAC 子层所使用的地址:
- IP 地址是 TCP/IP 体系结构网际层所使用的地址:
- ARP 协议属于 TCP/IP 体系结构的网际层,其作用是已知设备所分配到的 IP 地址,使用 ARP 协议可以通过该 IP 地址获取到设备的 MAC 地址:
- 尽管 IP 地址和 ARP 协议属于 TCP/IP 体系结构的网际层(而不属于数据链路层),但是它们与 MAC 地址存在一定的关系,并且我们日常的网络应用都离不开 MAC 地址、IP 地址以及 ARP 协议。因此,我们将这三者放在一起讨论。
MAC 地址也被称为硬件地址/物理地址
综上所述,严格来说,MAC 地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
IP 地址(网络层)
IP 地址是因特网(Internet)上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百方计的网络
- 主机编号:标识同一网络上不同主机(或路由器各接口)
ARP 地址解析协议
通过 IP 地址找到 MAC 地址
- 存在一个 ARP 高速缓存表
- 如果缓存表中没有 IP 对应的 MAC 地址的时候,会发送 ARP 请求报文
ARP 协议的使用是逐段链路使用的
集线器与交换机的区别
集线器
使用双绞线和集线器 HUB 的星型拓扑网络
- 使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是 CSMA/CD 协议;
- 集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站的网卡检测);
- 集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。
以太网交换机
- 以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式。以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用 CSMA/CD 协议)。
- 以太网交换机一般都具有多种速率的接口,例如:10 Mb/s、100 Mb/s、1 Gb/s、10 Gb/s 接口的多种组合。
- 以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的 MAC 地址所对应的接口号,然后通过该接口转发帧。
- 以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的。
帧的两种转发方式:
- 存储转发
- 直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查帧是否石差错
使用交换机可以只扩大广播域,不会扩大碰撞域
交换机自学习和转发帧的流程
以太网交换机生成树协议 STP
用于提高以太网的可靠性。
以太网交换机工作在数据链路层(也包括物理层)
使用一个或多个以太网交换机互连起来的交换式以
太网,其所有站点都属于同一个广播域。
随着交换式以太网规模的扩大,广播域相应扩大。
巨大的广播域会带来很多弊端:
- 广播风暴
- 难以管理和维护
- 潜在的安全问题
虚拟局域网 VLAN
VLAN 介绍
TCP/IP 协议栈中的很多协议都会使用广播:
- 地址解析协议 ARP(已知 IP 地址,找出其相应的 MAC 地址)
- 路由信息协议 RIP(一种小型的内部路由协议)
- 动态主机配置协议 DHCP(用于自动配置 IP 地址)
NetBEUI:Widnows 下使用的广播型协议
IPX/SPX:Novell 网络的协议栈
Apple Talk: Apple 公司的网络协议栈
分割广播域的方法:
- 使用路由器,成本较高
- 虚拟局域网技术,VLAN
VLAN 的实现
协议支持:需要支持 IEEE 802.1Q 帧
交换机端口类型:
- Access:连接用户
- Trunk:交换机与交换机或交换机与路由器之间的连接
- Hybrid:交换机之间,交换机与路由器,交换机与用户计算机
缺省 VLAN ID
网络层概述
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输
要实现网络层任务,需要解决以下主要问题:
- 网络层向运输层提供怎样的服务(“可靠传输“还是“不可靠传输“)
- 网络层寻址问题
- IP 地址
- …
- 路由选择问题
- 路由表
- …
Internet 使用 TCP/IP 协议栈

网络层提供的两种服务
- 面向连接的虚电路服务

- 无连接的数据报服务


IPV4 地址概述

- 分类编址的 IPV4 地址

- 划分子网的 IPV4 地址
- 子网掩码:32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号
- 无分类编制的 IPV4 地址
- CIDR 计法
IPV4 地址的应用规则
- 定长的子网掩码 FLSM
- 变长的子网掩码 VLSM
IP 数据报的发送和转发过程
IP 数据报发送和转发过程包含一下两部分
-
主机发送 IP 数据报
-
路由器转发 IP 数据报
-
默认网关:用户指定转本网络的默认路由器

- 路由器不会转发广播,以免造成广播风暴
静态路由配置

-
默认路由:0.0.0.0/0 不清楚的 IP 地址都走这个路线
-
特定主机路由:为特定的主机配置路由表
-
最长前缀匹配
静态路由配置错误可能会引起路由环路问题,为了防止 IP 数据报在路由环路中永久兜圈,在 IP 数据报首部设有生存时间 TTL 字段。
- IP 数据报进入路由器后,TTL 字段的值减 1。若 TTL 的值不等于 O,则被路由器转发,否则被丢弃。
聚合网络,聚合路由
- 为了防止聚合网络路由引起的路由环路问题,可以在路由表中配置黑洞路由,下一跳为黑洞接口 null 0
网络故障也可能会导致路由环路问题
路由选择协议
- 静态路由选择
- 动态路由选择
因特网路由选择协议特点:
- 自适应
- 分布式
- 分层次

- 常见的路由选择协议

路由信息协议 RIP
开放最短路径优先 OSPF
边界网关协议 BGP
IPV 4 数据包的首部格式
- 结构示意图

网际控制报文协议 ICMP
- 为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP(Internet Control Message Protocol).
- 主机或路由器使用 ICMP 来发送差错报告报文和询问报文
- ICMP 报文被封装在 IP 数据报中发送。
ICMP 差错报告报文共有五种
- 终点不可达
- 源点抑制
- 时间超过
- 参数问题
- 改变路由





常用的 ICMP 询问报文有以下两种:
-
回送请求和回答
- ICMP 回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送 ICMP 回回答报文。这种询问报文用来测试自的站是否可达及了解其有关状态。
-
时间戳请求和回答
- ICMP 时间戳请求报文是请某个主机或路由器回答当前的日期和时间。在 ICMP 时间戳回答报文中有一个 32 位的字段,其中写入的整数代表从 1900 年 1 月 1 日起到当前时刻一共有多少秒。
ICMP 应用:
-
PING
- 用来测试主机或路由器间的连通性
- 应用层直接使用网际层的 ICMP(没有通过运输层的 TCP 或 UDP)
- 使用 ICMP 回送请求和回答报文
-
traceroute
- 用来测试 IP 数据报从源主机到达目的主机要经过哪些路由器
虚拟专用网 VPN 与网络地址转换 NAT
- 虚拟专用网(Virtual Private Network)

- NAT (Network Address Translation)
- 虽然因特网采用了无分类编址方式来减缓 IPv 4 地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv 4 地址空间即将面临耗尽的危险仍然没有被解除。
- 1994 年提出了一种网络地址转换 NAT 的方法再次缓解了 IPv 4 地址空间即将耗尽的问题
- NAT 能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和源。
可以参考我的计算机网络实验:计算机网络实验报告
其中有关于 NAT 与 VPN 的组网实验
运输层概述
之前课程所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信。
- 但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程
- 如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。


根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输协议,即面向连接的 TCP 和无连接的 UDP,这两种协议就是本章要讨论的主要内容。
运输层端口号、复用与分用的概念
-
运行在计算机上的进程使用进程标识符 PID 来标志。因特网上的计算机并不是使用统一的操作系统,不同的操作系统(windows,LinuX,MacOS)又使用不同格式的进程标识符。
-
为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用统一的方法对 TCP/IP 体系的应用进程进行标识。
-
TCP/IP 体系的运输层使用端口号来区分应用层的不同应用进程。端口号使用 16 比特表示,取值范围 0~65535
- 熟知端口号:0~1023,IANA 把这些端口号指派给了 TCP/IP 体系中最重要的一些应用协议,例如:FTP 使用 21/20,HTTP 使用 80,DNS 使用 53。
- 登记端口号:1024~49151,为没有熟知端口号的应用程序使用。使用这类端口号必须在 IANA 按照规定的手续登记,以防止重复。例如:MicrosoftRDP 微软远程桌面使用的端口是 3389。
- 短暂端口号:49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
复用与分用的概念:

TCP/IP 体系的应用层常用协议对应的运输层端口号:
-
UDP 协议字段:17
- RIP 520
- DNS 53
- TFTP 69
- SNMP 161
- DHCP 67/68
-
TCP 协议字段:6
- SMTP 25
- FTP 21/20
- BGP 179
- HTTP 80
- HTTPS 443
UDP 与 TCP 的区别
-
UDP 通信双方可以随时收发数据
- 无连接
- 持一对一,一对多,多对一和多对多交互通信。
- 对应用层交付的报文直接打包尽最大努力交付,也就是不可靠;
- 不使用流量控制和拥塞控制。
- 首部开销小,仅 8 字节
-
TCP 通信双方需要通过三次握手建立通信,需要通过四次挥手结束链接。
- 面向连接
- 每一条 TCP 连接只能有两个端点 EP,只能是一对一通信。
- 面向字节流
- 可靠传输,使用流量控制和拥塞控制。
- 首部最小 20 字节,最大 60 字节
TCP 的流量控制
-
一般来说,我们总是希望数据传输得更快一些。
-
但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。
-
所谓 流量控制(flow control) 就是让发送方的发送速率不要太快,要让接收方来得及接收。
- 利用滑动窗口机制可以很方便地在 TCP 连接上实现对发送方的流量控制。
流量控制示意图:
- ACK 用来表示三次握手的标志
- ack 用来表示接收端累计收到的数据
- rwnd 用来表示发送端的接收窗口的大小,对主机 A 进行流量控制

关于最后的零窗口可能会造成的死锁局面:

解决方案:创建一个持续计时器,发送零窗口探测报文。

TCP 的拥塞控制
-
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞(congestion)
- 在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。
-
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降
吞吐量与输入负载示意图:

TCP 的四种拥塞控制算法:
- 慢开始
- 拥塞避免
- 快重传
- 快恢复

慢开始算法和拥塞避免算法的配合流程示意:

快重传算法:
-
有时,个别报文段会在网络中丢失但实际上网络并未发生拥塞。
- 这将导致发送方超时重传,并误认为网络发生了拥塞
-
采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失
- 所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认;
- 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
- 发送方一旦收到 3 个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传。

快恢复算法:
- 发送方一旦收到 3 个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法;
- 发送方将慢开始门限 ssthresh 值和拥塞窗口 cwnd 值调整为当前窗口的一半开始执行拥塞避免算法。
- 也有的快恢复实现是把快恢复开始时的拥塞窗口 cwnd 值再增大一些,即等于新的 ssthresh +3。
- 既然发送方收到 3 个重复的确认,就表明有 3 个数据报文段已经离开了网络;
- 这 3 个报文段不再消耗网络资源而是停留在接收方的接收缓存中;
- 可见现在网络中不是堆积了报文段而是减少了 3 个报文段。因此可以适当把拥塞窗口扩大些。
对所有算法的总结示意图:

TCP 超时重传时间的选择(重要)
超时重传时间的选择是 TCP 最复杂的问题之一

RFC 6298 建议使用下式计算超时重传时间 RTO:

可能会出现的一些问题,导致无法正确计算 RTT 值

-
针对出现超时重传时无法测准往返时间 RTT 的问题,Karn 提出了一个算法:在计算加权平均往返时间 RTTs 时,只要报文段重传了,就不采用其往返时间 RTT 样本。也就是出现重传时,不重新计算 RTTs,进而超时重传时间 RTO 也不会重新计算。
- 这又引起了新的问题。设想出现这样的情况:报文段的时延突然增大了很多,并且之后很长一段时间都会保持这种时延。因此在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。但根据 Karn 算法,不考虑重传的报文段的往返时间样本。这样,超时重传时间就无法更新。这会导致报文段反复被重传。
-
因此,要对 Karn 算法进行修正。方法是:报文段每重传一次,就把超时重传时间 RTO 增大一些。典型的做法是将新 RTO 的值取为旧 RTO 值的 2 倍。
TCP 可靠传输的实现(重要)
TCP 基于以字节为单位的滑动窗口来实现可靠传输
-
虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大。
- 网络传送窗口值需要经历一定的时间滞后,并且这个时间还是不确定的。
- 发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸。
-
对于不按序到达的数据应如何处理,TCP 并无明确规定。
- 如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理将会比较简单,但这样做对网络资源的利用不利因为发送方会重复传送较多的数据。
- TCP 通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
-
TCP 要求接收方必须有累积确认和捎带确认机制,这样可以减小传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。
- 接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络的资源。TCP 标准规定,确认推迟的时间不应超过 0.5 秒。若收到一连串具有最大长度的报文段,则必须每隔一个报文段就发送一个确认[RFC 1122]。
- 捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据。
TCP 的运输连接管理 TCP 连接的建立(三次握手)

- TCP 的连接建立要解决以下三个问题:
- 使 TCP 双方能够确知对方的存在;
- 使 TCP 双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);
- 使 TCP 双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
TCP 的运输连接管理 TCP 连接的释放(四次挥手)
TCP 报文段的首部格式
