计算机网络复习总结5

计算机网络复习总结,仅供笔者复习使用,参考教材:

  • 《计算机网络》第7版 - 谢希仁编著. 电子工业出版社
  • 《计算机网络考研复习指导》2024年 - 王道论坛组编. 电子工业出版社

本文主要内容为:运输层;

计算机网络概述 部分见 计算机网络复习总结1
物理层 部分见 计算机网络复习总结2
数据链路层 部分见 计算机网络复习总结3
网络层 部分见 计算机网络复习总结4
运输层 部分见 计算机网络复习总结5
应用层 部分见 计算机网络复习总结6
计算机网络各层设备 部分见 计算机网络复习总结7

1. 运输层概述

网络层默认通信的两端是两台主机,其实准确来说,应该是两台主机中的应用进程。IP 协议虽然把分组送到目的主机,但这个分组还停留在主机的网络层,并没有交付给主机中的应用进程。从运输层的角度来讲,通信的真正端点应该是主机中的进程,端到端的通信应该是应用进程之间的通信。

在这里插入图片描述

运输层不仅为应用进程提供端到端的逻辑通信,还会对收到的报文进行差错检测。不同于网络层只检验首部是否出现差错,运输层会检测完整的报文的准确性。运输层采用的协议还会决定这条逻辑通信信道对上层的表现:当运输层采用面向连接的 TCP 时,这是一条全双工的可靠信道;当运输层采用无连接的 UDP 时,这是一条不可靠信道。

  • 数据单元:运输协议数据单元 TPDU,在 TCP 中叫 TCP 报文段,UDP 中叫 UDP 用户数据报;
  • 传输控制协议 TCP:传送数据前必须先建立连接,结束后释放连接,不提供广播服务。TCP 提供可靠的、面向连接的运输服务,需要增加确认机制、流量控制、计时器、连接管理等功能;
  • 用户数据报协议 UDP:传送数据前不需要建立连接,接收方接受数据也不必给出确认;
  • 端口:通信时只需要将报文交付给合适的目的端口,剩下的工作由 TCP 和 UDP 来完成。这里的端口是协议栈的抽象的协议端口,是应用层各种协议进程与运输层交互的地址。端口号只具有本地意义,用于标志一台计算机应用层中的各进程;
  • 端口号分类:服务器端使用的端口号、客户端使用的端口号。其中服务器端使用的端口号又分为熟知端口和登记端口,客户端使用的端口号又称为短暂端口号。运输层实现复用和分用的也是端口;
    在这里插入图片描述

2. 用户数据报协议 UDP

UDP 协议只在 IP 数据报服务之上增加了复用、分用功能以及差错检测,主要特点是:无连接尽最大努力交付面向报文

  • UDP 特点:
    (1)无连接:UDP 在传送数据前不需要建立连接;
    (2)尽最大努力交付:UDP 不保证可靠交付;
    (3)面向报文:发送时对于应用层交付下来的报文,只需要添加首部就可以向下交付给网络层;接收时对于网络层交付上来的报文,只需要去除首部就可以向上交付给应用层;
    (4)没有拥塞控制:源主机以恒定速率发送数据,不会因为网络拥堵而降低速率。因此也允许在网络拥塞时丢失一些数据;
    (5)支持一对一、一对多、多对一、多对多的交互通信;
  • UDP 数据报:由首部和数据组成,首部由源端口、目的端口、长度、检验和组成;

  源端口:需要对方回信时使用,否则置0;
  目的端口:交付报文时必须使用;
  长度:UDP 用户数据报长度,包含首部和数据;
  检验和:在 UDP 用户数据报前插入伪首部,然后对整个 UDP 用户数据报(包括伪首部、首部、数据)进行检验,计算完检验和后再将伪首部去除,然后交付给下层。检验方法和网络层的首部检验和相同,采用反码求和。这样既可以检查 UDP 的端口号,又可以检查 IP 地址和数据;

在这里插入图片描述

3. 传输控制协议 TCP

TCP 协议比较复杂,主要涉及可靠传输流量控制拥塞控制等问题。

  • TCP 特点:
    (1)面向连接:TCP 在传送数据前需要建立 TCP 连接,结束后需要释放连接;
    (2)只支持一对一;
    (3)提供可靠交付:TCP 传送的数据无差错、不丢失、不重复、按序到达;
    (4)全双工通信:两端设有发送缓存和接收缓存,用来存放双向通信的数据。因为是全双工通信,因此双方既是发送方又是接收方
    (5)面向字节流:TCP 将流入流出进程的数据看作字节流,发送缓存在处理字节流时会打包成数据块,接收缓存接收后可以按字节还原成与发送方应用程序发出的字节流一样的字节序列。为了可靠传输,TCP 还会给分组编号
    在这里插入图片描述
  • TCP 连接:通信两端的两个端点之间的虚拟连接。TCP 连接的端点不是应用进程或协议端口,而是套接字 Socket,也叫插口;

套接字 Socket = ( IP 地址:端口号 )
TCP 连接 ::= { Socket1,Socket2 }

  • TCP 报文:由首部和数据组成,首部由源端口、目的端口、序号、确认号、数据偏移、保留、紧急 URG、确认 ACK、推送 PSH、复位 RST、同步 SYN、终止 FIN、窗口、检验和、紧急指针、选项、填充组成;

  序号:TCP 中每一个字节都会按顺序编号,序号一般取本报文段数据的第一个字节的编号;
  确认号:接收方期望收到发送方下一个报文段的序号;
  数据偏移:TCP 报文段首部的长度,单位是 4 字节;
  紧急 URG:置 1 时表示有紧急数据,应当尽快传送;
  确认 ACK:置 1 时表示确认号字段有效;
  推送 PSH:应用程序希望立刻得到对方相应,此时 TCP 立即发送报文段,不再登缓存慢了再交付;
  复位 RST:置 1 时表示出现严重差错,需要释放连接后重新建立连接;
  同步 SYN:建立连接时使用,置 1 时表示连接请求或连接接收报文;
  终止 FIN:释放连接时使用,置 1 时表示要求释放连接;
  窗口:当前允许对方发送的数据量;
  检验和:在 TCP 报文前插入伪首部,然后对整个 TCP 报文(包括伪首部、首部、数据)进行检验,计算完检验和后再将伪首部去除,然后交付给下层。检验方法和网络层的首部检验和相同,采用反码求和;
  紧急指针:仅在 URG 为 1 时有意义,表示本报文段中的紧急数据的字节数;
  选项:TCP 中最初只规定了一种选项,即最大报文段长度 MSS,表示 TCP 报文中数据部分的最大长度。后来又加入了窗口扩大、时间戳等选项;

在这里插入图片描述

3.1 可靠传输

TCP 发送的报文段要交给网络层传送,但网络层只提供尽最大努力服务,因此想要实现可靠传输需要 TCP 采取措施使得运输层之间通信可靠。理想传输条件希望传输信道不产生差错,并且不管发送方发送速度多快接收方总是来得及处理。但现实情况显然达不到理想条件,因此需要使用相关协议处理差错,平衡发送速度。早期使用停止等待协议,但其效率低下,一次只能发送一个分组;为了采用流水线传输,出现了连续 ARQ 协议。

3.1.1 停止等待协议

  • 停止等待协议:也叫自动重传请求 ARQ,发送方每发送完一个分组就停止发送,等待对方确认,直到收到确认后再发送下一个分组。否则一直等待,直到计时器超时,发送方则会重传分组。当接收方检测出分组差错或者分组在传输中丢失时,接收方不会做任何回应;
    在这里插入图片描述
  • 确认丢失:接收方向发送方发送的确认分组在半路丢失,此时接收方先不做任何处理。发送方超时后会自动重传,接收方接收到重传的分组发现重复,直接丢弃,但需要发送确认;
  • 确认迟到:接收方向发送方发送的确认分组在半路遇到阻塞,到达发送方时已经超过计时器的等待时间。发送方仍旧采取超时重传,在收到重复的确认后直接丢弃即可,接收方同样采取丢弃重复分组然后发送确认;
  • 信道利用率:
    在这里插入图片描述

3.1.2 连续 ARQ 协议

  • 连续 ARQ 协议:发送方维持一个发送窗口,发送窗口内的分组可以连续发出,不必等待确认;在收到确认前窗口不能移动,暂存分组供超时重传使用。接收方采取累积确认,收到几个分组后,对最后一个分组进行确认;但如果序列中间某个分组丢失,那么接收端只能对丢失分组前的分组进行确认,称为 Go-back-N。发送方每收到一个确认,滑动窗口就向后滑动到相应分组;
    在这里插入图片描述
  • 滑动窗口:原本是一种基于双指针的思想,连续 ARQ 协议借助滑动窗口技术实现流水线传输。TCP 的滑动窗口以字节为单位,发送窗口不能超过接收窗口;
  • 超时重传时间的选择:记录报文段每次的往返时间 RTT,维护加权平均往返时间 RTTS,超时计时器设置的超时重传时间为 RTO;

RTTS = (1 - α ) × RTTS + α × RTT
RTTD = (1 - β ) × RTTD + β × | RTTS - RTT |
RTO = RTTS + 4 × RTTD
α 一般取 1/8,β 一般取 1/4;

  根据 Karn 算法,如果报文段重传,则不计入 RTT 样本。但这样会导致新问题:如果信道质量突然下降,时延增加,每次传输时延都大于 RTO,那么一直重传,RTO 也无法更新。因此对 Karn 算法加以修正,报文段每重传一次,就将 RTO 增大一些,这样有较好的效果。

  • 选择确认 SACK:收到报文段无差错,但未按序号,中间缺少了部分数据,可以使用选择确认只重传缺少的数据而不重传已经正确到达的数据。具体的做法是建立连接时就在 TCP 首部选项中添加“允许SACK”选项,传送分组时在选项中报告收到的不连续的字节块的边界(最多只能容纳 4 段,即 8 个边界信息)。但 SACK 并不常见;
    在这里插入图片描述

3.2 流量控制

  • 流量控制:让发送方的发送速率不要太快,让接收方来得及接收。TCP 的流量控制也是依靠滑动窗口技术实现,在接收方的确认报文中会给出接收窗口 rwnd 的大小,即允许发送方发送的字节量。当发送方需要降低发送速度时,将确认报文中的 rwnd 减小即可;
    在这里插入图片描述
  • 持续计数器:当接收方缓存满了时,可以将窗口 rwnd 置 0,暂时不接受分组。等到可以继续接受时再向发送方发送确认,告知当前窗口大小,但如果该报文丢失,就会出现思索的局面。为了解决这个问题,TCP 为每一个连接设有一个持续计数器,当收到零窗口通知时就启动该计数器,时钟到期则发送一个零窗口探测报文段,接收方确认该探测报文时给出当前窗口。
  • TCP 报文段的发送时机:该问题较为复杂,一般有以下三种机制:
    (1)缓存中存放数据达到最大报文段长度 MSS 时就组装成 TCP 报文段发送;
    (2)发送方应用进程 push;
    (3)发送方计时器期限到了,将缓存组装成 TCP 报文段发送;

3.3 拥塞控制

  • 拥塞:若某段时间对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络性能会下降,严重的还会导致系统崩溃。导致拥塞的原因有很多,如节点缓存容量过小、链路容量不足、处理机处理速率太慢、拥塞本身加重等。但仅仅增加资源并不一定能缓解拥塞,甚至可能适得其反,因为问题的本质是资源不匹配;
    在这里插入图片描述
  • 拥塞控制:防止过多的数据注入网络,使网络中的路由器或链路不致过载。这是一个动态问题,很难设计,设计不当可能会造成资源不匹配,严重还会出现死锁。TCP 进行拥塞控制的算法主要有慢开始、拥塞避免、快重传、快恢复四种,也是基于滑动窗口的。发送方维持一个随网络拥塞程度动态变化的拥塞窗口 cwnd,判断网络拥塞的依据是超时情况;
  • 最大报文段 SMSS:发送方最大报文段长度;
  • 传输轮次:从拥塞窗口本轮发送报文到收到最后一个字节的确认所经历的时间;
    在这里插入图片描述

3.3.1 慢开始

  • 慢开始:主机刚开始发送数据时,由小到大逐渐增大拥塞窗口 cwnd。cwnd 初值一般设置为 1,每收到一个对新的报文段的确认后,就将 cwnd 增多一个 SMSS 的数值(增加数值显然也不能超过当前收到确认报文确认的字节数,因此在开始时 cwnd 都是成倍扩大),直到达到慢开始门限;
  • 慢开始门限 ssthresh:为了防止拥塞窗口增长过大引起网络拥塞设置的状态值,当 cwnd < ssthresh 时,采用慢开始算法;当 cwnd > ssthresh 时,采用拥塞避免算法;

3.3.2 拥塞避免

  • 拥塞避免:当 cwnd 达到 ssthresh 时,需要采用拥塞避免算法。每经过一个 RTT 就将 cwnd 加 1,这比慢开始的成倍增长缓慢许多。直到出现超时,ssthresh 赋值为 cwnd/2 ,cwnd 赋为1,然后再次回到慢开始阶段;

3.3.3 快重传

  • 快重传:如果发送方一连收到 3 个重复确认(即连续 4 个对同一报文的确认),就启用快重传算法。快重传算法要求接收方立即发送确认,哪怕只是报文段失序也只发送失序前的确认报文。采用快重传算法可以让发送方尽早知道个别报文段的丢失,然后执行快恢复算法;

3.3.4 快恢复

  • 快恢复:快重传只是丢失了部分报文,没必要启动慢开始,而是执行快恢复算法。ssthresh 赋值为 cwnd/2 ,cwnd 和 ssthresh 取值相同,随后执行拥塞避免算法;

在这里插入图片描述

上述 4 种方法结合使用,实现了 TCP 的拥塞控制,也称为 AIMD 算法(加法增大 AI,乘法减小 MD)。需要注意的是,发送窗口的大小不仅由网络的拥塞程度决定,还由接收方缓存空间决定,因此有:

发送方窗口的上限值 = Min [ rwnd,cwnd ]

3.3.5 主动队列管理 AQM

TCP 拥塞管理和网络层联系密切,影响最大的就是路由器的尾部丢弃策略。

  • 尾部丢弃策略:当路由器队列满时,之后到达的分组都将被丢弃,发送方因此需要超时重传。丢弃路由器的尾部分组会导致许多 TCP 连接在同一时间突然进入慢开始状态,称为全局同步;
  • 主动队列管理 AQM:为了避免网络中的全局同步现象,提出了主动队列管理,即在队列长度达到一定长度时,主动丢弃到达的分组,这样可以提醒发送方放慢发送速率,减轻网络拥塞。AQM 有许多实现方式,早期曾使用随机早期检测,但由于效果不佳,已不再推荐使用,新的实现方式仍在实验阶段;
  • 随机早期检测 RED:路由器维持两个参数,队列长度最小门限 THmin、队列长度最大门限 THmax

  若平均队列长度小于最小门限 THmin,则将新到达的分组放入队列进行排队;
  若平均队列长度超过最大门限 THmax ,则将新到达的分组丢弃;
  若平均队列长度介于在最小门限 THmin 和最大门限 THmax 之间,则按照某一概率 p 将新到达的分组丢弃。

3.4 TCP 的运输连接管理

TCP 是面向连接的协议,连接有三个阶段:连接建立、数据传送、连接释放。建立连接时 SYN 置 1,发送方和接收方自行选定各自的初始 seq 值;释放连接时 FIN 置 1。建立或释放连接时 seq 值每次只加 1,数据传送时 seq 值每次加字节数。

  • 连接建立:采用客户-服务器方式,建立连接需要交换三个 TCP 报文段,即“三报文握手”。建立连接时发送方的请求报文需要消耗序列号,但后两次握手的确认报文不消耗序列号,且第三次握手可以携带数据;
    在这里插入图片描述
  • 连接释放:释放连接需要交换四个 TCP 报文段,即“四报文握手”。并且发送方发送完最后的确认报文后,还需经过时间等待计时器设置的 2MSL 时间后才会释放连接,防止接收方没有收到发送方发送的确认报文进行超时重传;
    在这里插入图片描述
  • 连接传送:发送端每次发送数据都会消耗序列号,但接收端接收数据后返回确认报文不需要消耗序列号;
    在这里插入图片描述

TCP 的有限状态机如下:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值