计算机网络复习-运输层

前言

传输层是整个网络体系中的关键层次。为运行在不同主机上的进程提供逻辑通信。网络层为不同主机提供逻辑通信。

1、概述

1.1 运输层的通信端点

主机中的进程号

1.2 协议端口号的作用,常见端口号

协议端口号的作用:识别目的主机中需要通信的进程
在这里插入图片描述

2、UDP

UDP是一种轻量级的传输协议,UDP协议仅在IP数据报服务上加了复用和分用以及差错检测。UDP是一种不可靠的传输协议,但因其拥有更高的传输效率,在一些对传输数据不需要非常严谨的条件下,使用UDP较TCP更有优势。
UDP的优点:

  • UDP无需建立连接。因此UDP不会引入建立连接的时延。如果对可靠性要求高,则就需要使用TCP。
  • 无连接状态。TCP需要在端系统中维护连接状态,而UDP不需要,因此能够支持更多的活动客户机。
  • 分组首部开销小。TCP首部20B,UDP首部8B。
  • 应用层能更好的控制要发送的数据和发送时间。UDP没有拥塞控制,因此在网络中的拥塞不会影响主机的发送效率。
  • UDP是面向报文的,适合一次性传输少量数据的网络应用。

3、TCP

TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决可靠、有序、无丢失和不重复问题。
TCP特点:

  • TCP是面向连接的传输协议。
  • 每条TCP的连接只能由两个端点,每条TCP连接只能是点对点的。
  • TCP提供可靠交付服务,保证传送的数据无差错、不丢失、不重复且有序。
  • TCP提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据,因此TCP连接的两端都设有发送缓存和接受缓存,用来临时存放双向的通信的数据。
    发送缓存用来暂时存放:
    ①发送应用程序传送给发送方TCP主备发送的数据,;
    ②TCP已发送单位收到确认的数据。
    接收缓存用来暂时存放:
    ①按序到达但尚未被接收应用程序读取的数据。
    ②不按序到达的数据。
  • TCP时面向字节流的,虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据仅视为一连串的无结构字节流。

套接字概念及形式
在这里插入图片描述

4、可靠传输工作原理

4.1 停止等待协议实现可靠传输

机制:停止等待协议就是每发送一个分组就停止发送,等待对方的确认。在收到对方的确认后再发送下一个分组。
特点:显然这个这个时候信道利用率极低,为了提高信道的利用率的效率,采取像计算机组成原理中讲到的”指令流水线思想“。再计网中流水线的体现就是ARQ协议的滑动窗口。
在这里插入图片描述
在这里插入图片描述

4.2 ARQ协议实现可靠传输与Go-Back-N

机制:发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方不必对收到的每个分组逐个发送确认,而是收到几个分组后,对按序到达的最后一个分组发送确认。

优点:容易实现,信道利用率提高。
缺点:当中间某个分组丢失时,发送发必须从丢失的那个分组开始将后面所有分组重传,也就是Go-back-N机制。以此实现可靠传输。可见,当通信线路不好时,连续ARQ协议会带来负面的影响。

在这里插入图片描述

5、TCP首部

理解TCP首部各字段含义非常重要,后期三次握手四次挥手客户端服务端之间的同步连接信号都是通过TCP首部字段来实现的。
在这里插入图片描述

  • 序号(seq):本报文段所发送的数据的第一个字节的序号
  • 确认号(ack):发送发期望收到的下个报文段的数据的第一个字节序号。
  • 数据偏移:数据起始处距离TCP报文段的起始有多远。
  • URG:URG=1,表明紧急指针字段有效,因尽快传输
  • ACK:确认位,ACK=1时,确认号有效,ACK=0时确认号无效。
  • PSH:推送位,PSH=1时表明将发送缓存中尽快交付应用进程,而不是等到缓存位满了才交付。
  • RST:复位位,当RST=1时,表明TCP连接中出现严重差错,必须释放连接,重新建立运输连接。
  • SYN:同步位,当SYN=1时,表示这是一个请求连接或连接接收报文。
    当SYN=1,ACK=0,这是一个请求连接报文,若对方同意建立连接,则在响应报文中SYN=1,ACK=1,即连接接收。
  • FIN:中止位,用来释放一个连接,FIN=1表明此报文段的发送发的数据已经发送完毕,请求释放传输连接。
  • MSS:TCP报文段中的数据字段的最大长度。在这里插入图片描述

6、可靠传输的实现

6.1 滑动窗口机制的工作原理

我自己的理解是,滑动窗口机制就是,B是接收方,A是发送方,A根据B的拥塞情况设置自己的发送窗口大小。
A:已发送并收到确认,已发送未被收到确认,允许发送但未发送,不允许发送。
B:以发送确认并交付主机,未按顺序到达,语序接收,不允许接收。
在这里插入图片描述

可靠之处在于,发送窗口没发送一个字节都设置一个计时器,也就是超时重传时间,当超过这个时间还没接收到接收端发送的确认,就重传。
若B收到未按顺序的字节先保留在接收缓存中,直到收到前面缺少字节再将给A发送确认。关键在于,超时重传时间的选择,是一个关键,设置小了会导致重传次数增多,导致网络拥塞,设置大量导致网络空闲时间增多,传输效率降低。因此就针对该问题,提出了超时重传时间选择的问题。

6.2 超时重传时间

TCP设置了一种自适应算法来设置最为合理的 R T O RTO RTO(超时重传时间)。 R T O RTO RTO R T T S RTT_S RTTS R T T D RTT_D RTTD两部分构成。

R T T S RTT_S RTTS: 每个报文从发出到收到确认的时间间隔为 R T T RTT RTT(报文的往返时间)。求 R T T RTT RTT的一个加权平均往返时间 R T T S RTT_S RTTS
R T T s = ( 1 − α ) × ( 旧 R T T s ) + α × ( 新 的 R T T 样 本 ) RTT_{s} = (1 - \alpha) \times(旧RTT_s) + \alpha \times(新的RTT样本) RTTs=(1α)×(RTTs)+α×(RTT)
0 ≤ α < 1 , α 一 般 取 0.125 。 0\leq\alpha<1 ,\alpha一般取0.125。 0α<1α0.125

R T T D RTT_D RTTD: R T T D RTT_D RTTD R T T RTT RTT的偏差加权平均值,当第一次测量时, R T T D RTT_D RTTD值取为测量到的 R T T RTT RTT样本值的一半。更新公式如下。

R T T D = ( 1 − β ) × ( 旧 R T T D ) + β × ( R T T S − R T T 样 本 ) RTT_D = (1 - \beta) \times(旧RTT_D) + \beta \times(RTT_S - RTT样本) RTTD=(1β)×(RTTD)+β×(RTTSRTT)

这 里 β 是 小 于 1 的 系 数 , 一 般 取 0.25 这里 \beta是小于1的系数,一般取0.25 β10.25

R T O = R T T s + 4 × R T T D RTO = RTT_s + 4 \times RTT_D RTO=RTTs+4×RTTD

有了超时重传时间的计算公式,发现,当RTT的取值可能是,偏大,或者偏小的(考虑超时重传报文的特点)。如果不解决这个问题,计算出来的RTO仍然是没有用的,最先出现的karn算法,规定“只要出现了报文段重传,就不采取此时的RTT样本”。网络中可能一直发生重传也就是RTO不会得到更新,因此出现了改进的karn算法,
新 R T O = γ × ( 旧 R T O ) 新RTO = \gamma \times (旧RTO) RTO=γ×(RTO)

γ 一 般 取 2 , 当 不 再 发 生 重 传 的 时 候 才 根 据 报 文 段 的 R T T 更 新 R T T S 和 R T O \gamma 一般取 2,当不再发生重传的时候才根据报文段的RTT更新RTT_S和RTO γ2RTTRTTSRTO

以上就是TCP中的可靠传输机制的实现

7、TCP流量控制

一般来说,网络总是希望传输的越快越好,但是发送的过快,可能接收方来不及接收,导致数据丢失,为了解决速度不匹配的问题,出现了流量控制。使用滑动窗口机制来实现流量控制。
在这里插入图片描述

8、TCP 拥塞控制

必出大题!
当出现网络拥塞时的情况为: ∑ 对 资 源 的 需 求 > 可 用 资 源 \sum 对资源的需求 > 可用资源 >。这个时候处理拥塞控制不简单的采取增加网络资源,可能会导致更坏的网络情况。需要分析拥塞发生的原因,采取更为复杂的手段处理网络拥塞。
TCP进行拥塞的算法有四种。慢开始,拥塞避免,快重传,快恢复。

假设:
① 数据是单方向的传送,对方只传送确认报文。
② 接收方总是由足够大的缓存空间,因而发送窗口的大小由网络的用色成都来决定。

8.1 拥塞控制所起的作用

拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

8.2 四大算法

(1) 慢开始和拥塞避免算法

  • 慢开始算法:
    先令拥塞窗口cwnd=1,即一个最大报文段长度MSS。每经过一个轮次(往返时延RTT),就将cwnd加倍,cwnd以指数增长,知道到达sstresh改用拥塞避免算法。
  • 拥塞避免算法:
    cwnd每经过一个RTT就增加一个MSS(加法增大),而不是加倍。需要强调的是,拥塞避免算法是在一定程度上避免网络拥塞,而不是完全避免网络拥塞。

根据cwnd大小执行不同算法如下:
cwnd < sstresh : 慢开始算法
cwnd > sstresh : 拥塞避免算法
cwnd = sstresh : 通常使用拥塞避免算法。

无论使用哪种算法,只要发生网络拥塞,就将sstresh设置为当前cwnd的一半,将cwnd设置为1,执行慢开始算法。

(2)快重传和快恢复
快重传和快回复算法是对慢开始和拥塞避免算法的改进。

  • 快重传
    当发送发连续收到三个(来自接收方)重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待报文段的计时器超时。

  • 快恢复
    当发送端收到三个ACK报文后,ssthresh设置为当前cwnd的一半,cwnd也设置为当前cwnd的一半,然后开始执行拥塞避免算法。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在流量控制中,rwnd大小根据接收方确定。在拥塞控制中,cwnd则是发送发根据网络情况自行调节。

发送方窗口的实际大小由流量控制和拥塞控制共同决定的,发送窗口应该取min{rwnd, cwnd}

9、TCP的运输连接管理

更加详细在这里

9.1 三次握手

服务器创建传输控制模块TCB,进入监听状态。
客户端创建传输控制模块TCB。
①客户端向服务器发送连接请求报文,SYN=1,初始化序号seq=x。进入SYN-SENT状态。
②服务器收到客户端发送的连接请求报文后,回复连接同意报文,SYN=1,seq=y,ack=x+1,ACK=1。进入SYN-RCVD状态。
③客户端收到服务端回复的连接同意报文后,再回复给服务器一个,确认报文,SYN=1,seq=x+1,ack=y+1,ACK=1。进入ESTABLISHED状态。
在这里插入图片描述

9.2 四次挥手

服务器创建传输控制块TCB,时刻准备接收客户进程的请求。
客户端创建传输控制块TCB,然后向服务器发送释放请求报文。
①客户端向服务端发送连接释放请求报文,FIN=1,seq=u。FIN-WAIT-1.
②服务端收到服务端的报文后,如果同意连接,回复ACK=1,seq=v, ack=u+1。进入CLOSE-WAIT状态。客户端收到服务端的同意报文后,进入FIN-WAIT-2状态。
③服务器发送完数据以后,就向客户端发送,FIN=1,seq=w,ack=u+1,进入LAST-ACK状态。
④客户端收到服务端发送的报文后,回复确认ACK=1 ,seq=u+1, ack=w+1,客户端进入TIME-WAIT(时间等待),等待2MSL以后没有收到服务端的报文就将连接释放。
(等待2MSL是,为了收到客户端的最后一个ACK报文,同时为了阻断客户端之前发送但是未传送过来的报文)

在这里插入图片描述

おすすめ

転載: blog.csdn.net/xdg15294969271/article/details/122352993