第1章 计算机网络
1.1 计算机网络基础认知
1.1.1 计算机网络的主要功能
(1)软硬件资源共享
硬件共享如多台电脑共用一台打印机,软件共享如在线办公软件腾讯文档。
(2)用户间信息交换
计算机网络最基础、最核心的功能,实现不同设备、不同用户之间的数据传输与沟通。
(3)分布式处理
将一个大型、复杂的计算任务,分配给网络中多台计算机协同并行处理,最后汇总结果。
1.1.2 主机(端系统)的通信方式有哪几种
(1)客户服务器(client-server):请求服务方是客户方,服务提供方是服务器。
(2)对等连接(peer-to-peer / p2p):不区分客户服务器,每台主机既可做客户方也可做服务器方。
1.2 OSI七层模型
应用层:为应用程序提供网络服务(HTTP、FTP、DNS、SMTP)→ 报文
表示层:数据格式转换、加密、压缩 → 报文
会话层:建立、管理、终止会话 → 报文
传输层:端到端可靠传输,分段与复用(TCP、UDP)→ 数据段,端口号
网络层:路由选择、分组转发(IP)→ 数据包 / 分组,IP 地址
数据链路层:成帧、差错检测、MAC 寻址(以太网、交换机)→ 帧,MAC 地址
物理层:电气 / 机械规范,传输比特流(电压、接口、速率)→ 比特
第2章 物理层
2.1 电路交换,报文交换,分组交换的区别
- 电路交换:比特流从源点直达终点,分为建立连接,通信,释放连接三个阶段,适合传送大量数据,但传输效率低,无法进行差错控制,灵活性差。
- 报文交换:基于存储转发原理,将整个报文从在当前节点存储下来,查找转发表再转发到下一个节点。
- 分组交换:报文交换的改进,将整段报文拆分成等长的分组,给每个分组加一些存储控制信息的首部,每个分组单独走,最后拼接成报文。
2.2 计算机网络的性能指标
2.2.1 带宽
单位时间内网络中某信道能通过的最高数据速率,单位是bit/s,表示网络中某通道传送数据的能力。
2.2.2 时延及分类
发送(传输)时延:只发生在机器内部的发生器中,发送时延=数据帧长度/发送速率。
传播时延:与数据本身大小无关,发生在传输信道上,传播时延=信道长度/电磁波在信道上的传输速率。
处理时延:主机或路由器收到分组时进行处理所需要的时间。
排队时延:分组在路由器的输入队列和输出队列排队等待的时间。
2.2.3时延带宽积
时延带宽积 = 传播时延 × 带宽 ,表示该通道内能容纳的比特数量。
2.3 计算机网络提供的三种服务类型
- 面向连接和无连接服务:面向连接服务中,通信双方必须先建立连接,分为建立连接,通信,释放连接三个阶段,如TCP就是一种面向连接的服务协议。无连接服务的通信双方不用事先建立连接,需要发送数据时直接发送,是一种不可靠的服务,"尽最大努力交付",如IP、UDP就是无连接的服务协议。
- 可靠服务和不可靠服务:可靠服务是网络具有检错,纠错,应答机制,能保证数据正确地到达目的地。而不可靠服务尽量传输,不保证正确性,可靠性要由用户或者应用保障。
- 有应答服务和无应答服务:有应答服务是接收方收到数据后向发送方发出相应的应答,比如文件传输服务,而无应答服务接收方不应答,若需要应答,则由高层实现,比如www服务。
2.4 香农公式和奈氏准则区别及对数据通信的意义
2.4.1 奈氏准则
奈氏准则:限定无噪声信道的最高码元传输速率,取决于带宽与码元进制,用于避免码间串扰。最高码元传输速率为带宽的两倍。C=2W(Baud), W 为带宽。
2.4.2 香农公式
香农公式 :限定有噪声信道的极限信息速率,取决于带宽与信噪比,是实际通信的理论上限。C=Wlog2(1+N/S )(bps) N/S 为信噪比。
意义:二者共同指明了提高数据传输速率的方向,为信道设计、调制技术、编码方案提供理论依据。
2.5 基带通信、频带通信、宽带通信三者区别
• 基带:不调制,直接传数字信号,独占信道,短距离。
• 频带:调制到高频,适合远距离,单路传输。
• 宽带:频分多路,多信号同时传,高速大容量。
2.6 传输介质是否属于物理层及二者区别
传输介质不属于物理层,它是物理层下面的物理实体,物理层是协议、规范、电气特性;传输介质是实际的传输线路。
2.7 端到端通信和点到点通信所属层次及区别
物理层,数据链路层,网络层所构成的通信子网为网络中的主机提供点到点的服务,而传输层为主机提供端到端的服务。直接相连的节点之间的通信是点到点的通信,只是两台机器的通信,不涉及进程的概念,而端到端通信之间的通信建立在点到点之间的通信之上,是比点到点通信更高级一点的通信,这里的端是指用户程序的端口。
2.8 频分复用,时分复用,波分复用以及码分复用简介
频分复用是不同信号占用不同的带宽资源,时分复用允许一个信号在短时间内占用信道,再给下一个信号使用,波分复用即光的频分复用,在一根光纤上不同波长的光同时传多路信号。码分复用是所有信号同一时间、同一频率传输,靠不同编码区分彼此。
第3章 数据链路层
3.1 流量控制
3.1.1 流量控制的目的
发送方发送数据和接收方接收数据的速率不同,如果发送方发的太快,接收方来不及接收,会导致帧丢失的问题,所以必须限制发送方发送数据的速率,则需要是一些规则规定发送方什么时候可以接着发送下一帧,什么时候必须暂停发送。
3.1.2 流量控制的常见方式
- 停止等待方式:发送窗口和接收窗口都为1,发送方每发送一帧的数据,都等待接收到接收方的确认收到应答信号才发下一帧,每次只发送一帧,这样的方式传输效率较低。
- 计数器控制方式:用计数器限制连续发送帧数,达到上限必须等待确认。
- 滑动窗口方式(重点):发送窗口和接收窗口大于1,发送方可以连续发送多帧而不必每帧都等待确认,接收方通过窗口大小告知发送方自己的接收能力,动态调整发送速率,传输效率更高,是 TCP 等协议中常用的流量控制方式。
第4章 网络层
4.1 IP层分组转发
4.1.1 IP层分组转发的过程
- 首先判断是否在同一网络
把目的IP地址和本网络的子网掩码做相与运算,得到网络前缀。如果结果和本网络的网络前缀一致,说明目的主机在同一个网络,直接交付。如果不一致,就需要通过路由器转发。 - 路由器转发过程
分组进入路由器后,会逐行查找路由表,用目的IP地址和路由表中的子网掩码做相与运算,直到找到匹配的条目。匹配成功后,调用ARP协议解析出下一跳的MAC地址,将分组封装成帧,再交付给下一跳。 - 最长前缀匹配原则
如果一个分组在路由表中匹配到多个前缀,就选择前缀最长的那个(这也是路由表需要按前缀长度排序的原因)。IP分组转发的核心是子网掩码相与运算+最长前缀匹配,目的是让分组能准确找到从源主机到目的主机的路径。
简化流程:
从 IP 数据报取出目的 IP 地址,将目的 IP 地址与本接口的子网掩码按位相与,若 N 与路由器直连,直接交付目的主机;否则间接交付,查路由表:有特定主机路由就按该路由转发,无主机路由但有到达网络 N 的路由,按该路由转发,以上都无,有默认路由就走默认路由,都没有,报告转发出错。
4.1.2 路由器的主要功能
路由器主要完成两个功能:一是路由选择(确定哪一条路径),二是分组转发(当一个分组到达时所采取的动作)。前者是根据特定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。后者处理通过路由器的数据流,关键操作是转发表查询、转发及相关的队列管理和任务调度等。
- 路由选择。指按照复杂的分布式算法,根据从各相邻路由器所得到的关于整个网络拓扑的变化情况,动态地改变所选择的路由。
- 分组转发。指路由器根据转发表将用户的IP 数据报从合适的端口转发出去。往往不去区分转发表和路由表,而是笼统地使用路由表一词。
4.2 动态路由算法
4.2.1 距离-向量路由算法(例如RIP算法)
在距离-向量路由算法中,所有结点都定期地将它们的整个路由选择表传送给所有与之直接相邻的结点。这种路由选择表包含:1.每条路径的目的地(另一结点)。2.路径的代价(也称距离)。
在这种算法中,所有结点都必须参与距离向量交换,以保证路由的有效性和一致性,也就是说,所有的结点都监听从其他结点传来的路由选择更新信息,并在下列情况下更新它们的路由选择表:
- 被通告一条新的路由,该路由在本结点的路由表中不存在,此时本地系统加入这条新的路由。
- 发来的路由信息中到达某个目的地的路由与当前使用的路由相比,有更短的距离,就用经过发送路由信息的结点的新路由替换路由表中到达那个目的地的现有路由。(比如原本路由6到达网络1需经过路由3,跳数为5,现在路由7给路由6发送自己的路由信息,告诉路由6,经过我到达网络1只需跳数3,则路由6更新到达网络1的本条路由信息。)
4.2.2 链路状态路由算法(例如OSPF算法)
链路状态路由算法要求每个参与该算法的结点都具有完全的网络拓扑信息,它们执行下述两项任务。第一,主动测试所有邻接结点的状态。两个共享一条链接的结点是相邻结点,它们连接到同一条链路,或者连接到同一广播型物理网络。第二,定期地将链路状态传播给所有其他结点(或称路由结点)。
4.2.3 距离-向量与链路状态路由算法比较
在距离-向量路由算法中,每个结点仅与它的直接邻居交谈,它为它的邻居提供从自已到网络中所有其他结点的最低费用估计。在链路状态路由算法中,每个结点通过广播的方式与所有其他结点交谈,但它仅告诉它们与它直接相连的链路的费用。相较之下,距离-向量路由算法有可能遇到路由环路等问题。
4.2.4 内部网关协议RIP和OSPF的区别
RIP (路由信息协议)是一种分布式的基于距离(跳数)向量的路由选择协议,其最大优点就是简单。
RIP 规定:
- RIP 认为好的路由就是它通过的路由器的数目少,即优先选择跳数少的路径。
- RIP 允许一条路径最多只能包含15 个路由器(即最多允许15 跳)。因此距离等于16 时,它表示网络不可达。可见RIP 只适用于小型互联网。距离向量路由可能会出现环路的情况,规定路径上的最高跳数的目的是为了防止数据报不断循环在环路上,减少网络拥塞的可能性。
- RIP 默认在任意两个使用RIP 的路由器之间每30 秒广播一次RIP 路由更新信息,以便自动建立并维护路由表(动态维护)。
开放最短路径优先(OSPF) 协议是使用分布式链路状态路由算法的典型代表,也是内部网关协议(IGP) 的一种。OSPF 与RIP 相比有以下4 点主要区别:
- OSPF 向本自治系统中的所有路由器发送信息,这里使用的方法是洪泛法。而RIP 仅向自已相邻的几个路由器发送信息。
- 发送的信息是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
- 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息,并且更新过程收敛得快,不会出现RIP" 坏消息传得慢"的问题。而在RIP 中,不管网络拓扑是否发生变化,路由器之间都会定期交换路由表的信息。
除以上区别外, OSPF 还有以下特点:
- OSPF 对不同的链路可根据IP 分组的不同服务类型(TOS) 而设置成不同的代价。因此,OSPF 对于不同类型的业务可计算出不同的路由,十分灵活。
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这称为多路径间的负载平衡。
- 所有在OSPF 路由器之间交换的分组都具有鉴别功能,因而保证了仅在可信赖的路由器之间交换链路状态信息。
4.2.5 边界网关协议BGP
边界网关协议(Border Gateway Protocol, BGP)是不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议。边界网关协议常用于互联网的网关之间。路由表包含已知路由器的列表、路由器能够达到的地址及到达每个路由器的路径的跳数。内部网关协议主要设法使数据报在一个AS 中尽可能有效地从源站传送到目的站。在一个AS内部不需要考虑其他方面的策略。然而BGP 使用的环境却不同,主要原因如下:
- 因特网的规模太大,使得自治系统之间路由选择非常困难。
- 对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。
- 自治系统之间的路由选择必须考虑有关策略。
边界网关协议(BGP) 只能力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非寻找一条最佳路由。BGP 采用的是路径向量路由选择协议,它与距离向量协议和链路状态协议有很大的区别。BGP 是应用层协议,它是基于TCP 的。
BGP 的工作原理如下:每个自治系统至少选一个路由器作为 BGP 发言人,BGP 发言人之间先建立 TCP 连接,再通过 BGP 会话交换路由信息,最终据此算出到达各自治系统的较佳路由。

RIP协议算法示例:

4.2.6 自治系统之间使用BGP而不使用RIP/OSPF的原因
(1)互联网规模太大,自治系统之间的路由选择太复杂,若采用统一路由算法,开销大、收敛慢,因此必须分层次实现域间路由。
(2)自治系统之间的路由选择必须考虑有关策略,不同自治系统分属不同管理机构,需考虑安全、成本、优先级等策略,不能只按最短路径选择路由。
4.2.7 RIP、OSPF、BGP使用底层协议原因
RIP 使用 UDP,OSPF 使用 IP,而 BGP 使用 TCP 的原因:
RIP 只和相邻路由器交换信息,使用不保证可靠交付的 UDP,开销小,但必须每隔 30 秒就与邻居交换信息才能使路由表信息得到及时更新。
OSPF 使用可靠的洪泛法,并直接使用 IP,灵活性好且开销小。
BGP 需要交换整个路由表和更新信息,使用 TCP 提供的可靠递交服务可减少带宽消耗。
4.3 IP地址和MAC地址
4.3.1 IP地址和MAC地址区别
IP 地址是网络层使用的地址,是逻辑地址。MAC地址是数据链路层使用的地址,是物理地址。在网络层及网络层之上使用IP 地址,在数据链路层及以下使用MAC地址,IP 地址放在IP 数据报的首部,而MAC 地址放在MAC帧的首部。通过数据封装,把IP 数据报分组封装为MAC 帧后,数据链路层看不见数据报分组中的IP地址。
4.3.2 使用IP地址的原因
因为 MAC 地址只能在同一局域网内广播寻址,无法跨网络,而 IP 地址作为逻辑地址可实现跨网络的高效路由寻址,最终在目标局域网再转为 MAC 地址交付。注意:路由器由于互联多个网络,因此它不仅有多个IP 地址,也有多个硬件地址。
4.3.3 ARP地址解析协议
无论网络层使用什么协议,在实际网络的链路上传送数据帧时,最终必须使用硬件地址。所以需要一种方法来完成IP 地址到MAC 地址的映射,这就是地址解析协议(Address ResolutionProtocol)。每台主机都设有一个ARP 高速缓存,用来存放本局域网上各主机和路由器的IP地址到MAC 地址的映射表,称ARP 表。
主机 / 路由器会维护 ARP 缓存表,发送数据前先查表:查到则直接用对应 MAC 地址封装帧;查不到就广播 ARP 请求,目标主机单播回复,主机将映射存入缓存后再发送。ARP 只用于同一局域网内寻址,跨网络则先 ARP 获取本网关路由器 MAC,再由路由器转发。
4.4 ICMP网际控制报文协议
为了提高IP 数据报交付成功的机会,在网络层使用了网际控制报文协议(Internet Control Message Protocol, ICMP) 来让主机或路由器报告差错和异常情况。ICMP 报文作为IP 层数据报的数据,加上数据报的首部,组成IP 数据报发送出去。ICMP 是IP 层协议。ICMP 报文的种类有两种,即ICMP 差错报告报文和ICMP 询问报文。ICMP 差错报告报文用于目标主机或到目标主机路径上的路由器向源主机报告差错和异常情况。共有以下5种类型:
- 终点不可达。当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。
- 源点抑制。当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
- 时间超过。当路由器收到生存时间(TTL) 为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
- 参数问题。当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
- 改变路由(重定向)。路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
第5章 传输层
5.1 传输层的功能
- 传输层提供应用进程之间的逻辑通信(即端到端的通信)。与网络层的区别是,网络层提供的是主机之间的逻辑通信。从网络层来说,通信的双方是两台主机, IP 数据报的首部给出了这两台 主机的IP 地址。但"两台主机之间的通信"实际上是两台主机中的应用进程之间的通信,应用进程之间的通信又称端到端的逻辑通信。
- 复用和分用。复用是指发送方不同的应用进程都可使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。
- 传输层还要对收到的报文进行差错检测(首部和数据部分)。而网络层只检查IP 数据报的首 部,不检验数据部分是否出错。
- 提供两种不同的传输协议,即面向连接的TCP 和无连接的UDP 。而网络层无法同时实现两种协议(即在网络层要么只提供面向连接的服务,如虚电路;要么只提供无连接服务,如数据报,而 不可能在网络层同时存在这两种方式)。
5.2 UDP协议及其特点和应用
UDP仅在IP 的数据报服务之上增加了两个最基本的服务:复用和分用以及差错检测。提供尽最大努力的交付,即不保证可靠交付,所有维护传输可靠性的工作需要用户在应用层来完成。虽然UDP不像TCP 提供可靠的服务,然而很多应用更适合用UDP,主要是因为UDP具有如下优点:
- UDP 无须建立连接。因此UDP 不会引入建立连接的时延。试想如果DNS 运行在TCP 而非UDP 上,那么DNS 的速度会慢很多。HTTP 使用TCP 而非UDP, 是因为对于基于文本数据的Web网页来说, 可靠性是至关重要的。
- 分组首部开销小。TCP 有20B 的首部开销,而UDP 仅有8B 的开销。
- 应用层能更好地控制要发送的数据和发送时间。UDP 没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率。某些实时应用要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,而UDP 正好满足这些应用的需求。如IP 电话、实时视频会议、流媒体等。
5.3 TCP协议
5.3.1 TCP协议简介
TCP 提供可靠服务,它主要解决传输的可靠、有序、无丢失 和不重复问题。TCP 是TCP/IP 体系中非常复杂的一个协议,主要特点如下:
- TCP 是面向连接的传输层协议。
- 每条TCP 连接只能有两个端点,每条TCP 连接只能是点对点的(一对一)。
- TCP 提供可靠的交付服务,保证传送的数据无差错、不丢失、不重复且有序。
- TCP 提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据,为此TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。发送缓存用来暂时存放以下数据:
(1)发送应用程序传送给发送方TCP 准备发送的数据;(2)TCP 已发送但尚未收到确认的数据。
接收缓存用来暂时存放以下数据:(1)按序到达但尚未被接收应用程序收取的数据;(2)不按序到达的数据。TCP连接的建立在TCP连接建立的过程中,要解决以下三个问题: 1) 要使每一方都能够确知对方的存在。 2) 要允许双方协商一些参数,如最大窗口值。

5.3.2 TCP三次握手建立连接的过程
第一步:客户机的TCP 首先向服务器的TCP 发送一个连接请求报文段。该报文段其首部中的SYN标志位(同步位)被置为1,此时ACK位为0。(只有第一次ACK为0)另外,客户机会随机选择一个起始序号seq = x(连接请求报文不携带数据,但要消耗一个序号)。
第二步:服务器的TCP 收到连接请求报文段后,向客户机发回确认,并为该 TCP 连接分配TCP 缓存和变量。在确认报文段中,SYN和ACK位都被置为1, 确认号字段的值为 x+1(客服端发来的序号值+1,希望下一次收到的起始序号),并且服务器随机产生起始序号seq= y( 确认报文不携带数据,但也要消耗一个序号)。
第三步:当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。这个报文段的ACK 标志位被置1, 序号字段为x+1, 确认号字段ack=y+1(服务器端发来的序号值+1)。该报文段可以携带数据,若不携带数据则不消耗序号。
成功进行以上三步后,就建立了TCP 连接。TCP 提供的是全双工通信,因此通信双方的应用进程在任何时候都能发送数据。另外,服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的,这就使得服务器易于受到SYN 洪泛攻击。

不采用两次握手建立连接的原因
这主要是为了防止两次握手情况下已失效的连接请求报文段突然又传送到服务器而产生错误。考虑下面这种情况。客户A向服务器B 发出TCP 连接请求,第一个连接请求报文在网络的某个结点长时间滞留,超时后A认为报文丢失,于是再重传一次连接请求,B 收到后建立连接。数据传输完毕后双方断开连接。而此时,前一个滞留在网络中的连接请求到达服务器B, 而B认为A又发来连接请求,此时若使用"三次握手",则B 向A 返回确认报文段,由于是一个失效的请求,因此A不予理睬,建立连接失败。若采用的是"两次握手",则这种情况下B 认为传输连接已经建立,并一直等待A传输数据,而A此时并无连接请求,因此不予理睬,这样就造成了B的资源白白浪费。
TCP连接不使用固定初始序号的原因
假设主机A与B频繁建立连接、传输数据后释放,若每次A都使用相同的初始序号(如1),具体场景:A发送的某TCP报文段在网络中滞留很久,超时后重传并完成后续通信,但这些旧报文段在连接早已释放后才到达B,而此时A与B已建立一条新的TCP连接。由于新连接仍使用相同的初始序号,旧报文段的序号可能落在新连接的有效窗口内,导致B误将其当作当前连接的报文段,造成数据混乱或协议错误。为防止此类问题,新连接的初始序号必须与之前连接用过的序号不同,确保迟到的旧报文段序号不会被新连接接受。因此,TCP不能使用固定初始序号,而应采用随时间递增的随机化初始序号。
5.3.3 TCP四次挥手释放连接的过程
第一步:客户机打算关闭连接时(也可由服务器端发起),向其TCP发送一个连接释放报文段,并停止发送数据,主动关闭TCP 连接,该报文段的FIN 标志位被置1, seq= u, 它等于前面已传送过的数据的最后一个字节的 序号加1 (FIN 报文段即使不携带数据,也要消耗一个序号)。TCP 是全双工的,即可以想象为一条TCP 连接上有两条数据通路。发送FIN 报文时,发送FIN 的一端不能再发送数据,即关闭了其中 一条数据通路,但对方还可以发送数据。
第二步:服务器收到连接释放报文段后即发出确认,确认号是ack = u + 1, 而这个报文段自己的序 号是V, 等于它前面已传送过的数据的最后一个字节的序号加1 。此时,从客户机到服务器这个方 向的连接就释放了, TCP 连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服 务器到客户机这个方向的连接并未关闭。
第三步:若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时其发出FIN=1 的连接释放报文段。
第四步:客户机收到连接释放报文段后,必须发出确认。在确认报文段中, ACK 字段被置为1, 确 认号ack= w + 1, 序号seq= u + 1 。此时TCP 连接还未释放,必须经过时间等待计时器设置的时间 2MSL 后,A才进入连接关闭状态。

释放连接不采用三次握手及等待2MSL的原因
- 保证A 发送的最后一个确认报文段能够到达B 。如果A 不等待2MSL,若A 返回的最后确认报文段丢失,则B 不能进入正常关闭状态,而A 此时已经关闭,也不可能再重传。
- 防止出现"已失效的连接请求报文段"。A 在发送最后一个确认报文段后,再经过2MSL可保证本次连接持续的时间内所产生的所有报文段从网络中消失。 服务器结束TCP 连接的时间要比客户机早一些,因为客户机最后要等待2MSL 后才可进入CLOSED 状态。
5.4 拥塞控制
5.4.1 拥塞控制与流量控制的区别
拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、所有的路由器。相反,流量控制是指点对点的通信量的控制,抑制发送端发送数据的速率,以便使接收端来得及接收,是一个局部性的过程。
5.4.2 拥塞控制的四种算法
-
慢开始算法(接收窗口rwnd,拥塞窗口cwnd)
在TCP 刚刚连接好并开始发送TCP 报文段时,先令拥塞窗口cwnd = 1, 即一个最大报文段长度MSS。每收到一个对新报文段的确认后,将cwnd 加1, 即增大一个MSS 。用这样的方法逐步增大发送方的拥塞窗口cwnd, 可使分组注入网络的速率更加合理。使用慢开始算法后,每经过一个传输轮次(即往返时延RTT), 拥塞窗口cwnd 就会加倍,即cwnd 的大小指数式增长。这样,慢开始一直把拥塞窗口cwnd 增大到一个规定的慢开始门限ssthresh(阔值),然后改用拥塞避免算法。
-
拥塞避免算法
发送端的拥塞窗口cwnd 每经过一个往返时延RTT 就增加一个MSS的大小,而不是加倍,使cwnd 按线性规律缓慢增长,而当出现一次超时重传(网络拥塞)时,令慢开始门限ssthresh 等于当前cwnd 的一半。
-
快重传
快重传技术使用了冗余ACK 来检测丢包的发生。快重传并非取消重传计时器,而是更早地重传丢失的报文段。当发送方连续收到三个重复的ACK 报文时,直接重传对方尚未收到的报文段,不必等待那个报文段设置的重传计时器超时。
-
快恢复
快恢复算法的原理如下:发送端收到连续三个冗余ACK (即重复确认)时,把慢开始门限ssthresh 设置为出现拥塞时发送方cwnd 的一半。与慢开始(慢开始算法将拥塞窗口cwnd 设置为1) 的不同之处是,它把cwnd 的值设置为慢开始门限ssthresh 改变后的数值,然后开始执行拥塞避免算法("加法增大")'使拥塞窗口缓慢地线性增大。由于跳过了cwnd 从1 起始的慢开始过程,所以被称为快恢复。
实现高效点重传,SACK则进一步增强了选择性确认能力。

超时事件与收到3个冗余ACK窗口处理不同的原因
两种事件反映的网络拥塞严重程度不同。收到3个冗余ACK,表明后续部分报文段已成功到达接收方(否则无法触发重复确认),说明网络仍具备一定传输能力,拥塞相对较轻,此时TCP采用快速重传机制,将cwnd减半(乘法减小),适度降低发送速率。超时事件发生时,意味着连重传的ACK都未能及时返回,很可能网络已严重拥塞甚至局部瘫痪,为最大程度缓解拥塞,TCP将cwnd重置为1MSS,进入慢启动阶段,极其谨慎地重新探测网络容量。因此,超时代表更严重的拥塞,故采取更强的抑制措施;而冗余ACK表明网络尚可通信,只需适度退让。
底层无差错无故障时TCP可靠交付是否多余
不是多余的。即使底层无差错、无故障,IP层本身是无连接且不可靠的,仍可能导致数据丢失、失序、重复或失序,因此TCP的可靠交付必不可少。典型情况包括:
- IP数据报独立传输,可能因路由选择不同导致失序;
- 路由异常可能导致数据报在网中循环,TTL减至0后被丢弃;
- 路由器突发拥塞时,来不及处理的数据报会被丢弃。
以上问题均发生在网络层,与链路差错或节点故障无关。只有依靠TCP的可靠交付机制,才能确保目的进程收到完整、有序且无重复的数据。
MSS设置过大过小的影响
MSS过小会降低传输效率,过大则易导致IP分片、增加重传开销。
- 设置过小:
每个TCP报文段都要加上20B的TCP首部和20B的IP首部(共40B),如果MSS太小,有效数据占比会很低,传输效率大幅下降。 - 设置过大:
在IP层传输时,报文段可能超过链路的MTU(最大传输单元)而被分片,增加传输开销和重组复杂度。一旦某个分片丢失,整个报文段都需要重传,反而会降低传输可靠性和效率。TCP的规定:标准规定MSS为536B,这意味着互联网主机应能接收长度为536B(数据)+20B(TCP首部)=556B的TCP报文段,以此在传输效率和分片风险之间取得平衡。
5.4.3 TCP使用GBN与选择重传机制说明
TCP的重传机制结合了GBN和SR的特点:
当接收方收到失序报文段时,会缓存并发送重复ACK(期望收到的下一个报文段的序号)。发送方收到3个重复ACK时,会触发快速重传,仅重传丢失的那个报文段(类似SR),而不是重传所有已发送但未确认的报文段(GBN)。若发生超时,则会重传所有已发送但未确认的报文段(类似GBN)。
SACK的作用:
启用SACK(选择性确认)选项后,接收方可明确告知发送方哪些连续的报文段已成功接收,使重传更接近SR协议。
第6章 应用层
6.1 FTP文件传输协议
文件传输协议(file Transfer Protocol, FTP) 是因特网上使用得最广泛的文件传输协议。FTP 提供以下功能:
- 提供不同种类主机系统之间的文件传输能力。
- 以用户权限管理的方式提供用户对远程FTP 服务器上的文件管理能力。
- 以匿名FTP 的方式提供公用文件共享的能力。 FTP 采用客户/服务器的工作方式,它使用TCP 可靠的传输服务。一个FTP 服务器进程可同时为 多个客户进程提供服务。
FTP 的服务器进程由两大部分组成:一个主进程,负责接收新的请求;另外有若干从属进程,负责处理单个请求。
FTP基于客户服务器模型,服务器端有一个主进程和多个从属进程。其工作流程为:服务器端主进程打开熟知端口号21,等待客户端发来请求;客户端控制进程向服务器发起TCP请求,服务器端控制进程与其建立TCP控制连接;随后服务器端数据传送进程和客户端的数据传送进程,通过20端口号建立TCP数据连接并开始传输数据。
6.2 访问网站全过程
浏览器访问URL:http://www.baidu.com/index.html 的步骤:
浏览器分析链接指向页面的URL:http://www.baidu.com/index.html(访问百度网站的默认首页),解析出协议(HTTP)、域名(www.baidu.com)和资源路径(/index.html)。浏览器向DNS服务器请求解析www.baidu.com 的IP地址,得到IP地址后,浏览器与该百度服务器建立TCP连接,HTTP协议默认使用端口号80。浏览器向服务器发出HTTP请求,请求方式为GET,请求资源为 /index.html。服务器接收请求后,通过HTTP响应将目标文件 index.html 发送给浏览器。文件传输完成后,浏览器与服务器释放TCP连接(四次挥手)。浏览器对接收的 index.html 文件进行解析(解析HTML、CSS等),并将对应的百度Web页面显示给用户。