当前位置: 首页 > news >正文

计算机网络803-(5)运输层

目录

一.运输层的两个主要协议:TCP 与 UDP

1.TCP/IP 的运输层有两个不同的协议:

2.端口号(protocol port number)

(1)软件端口与硬件端口

(2)TCP 的端口

(3)三类端口

二.用户数据报协议 UDP

1.UDP介绍

2.UDP 的主要特点

3.面向报文的 UDP——一次发送整个报文

4.UDP 的首部格式

计算 UDP 检验和的例子

二.传输控制协议 TCP

1.TCP 最主要的特点

TCP 面向流的图像

2.TCP 传输特点

3.TCP 的连接

套接字 (socket)

4.TCP 报文段的首部格式

三.可靠传输的工作原理

1.停止等待协议

2.确认丢失和确认迟到

3.可靠通信的实现

4.停止等待协议的信道利用率

5.流水线传输

四.传输协议

连续 ARQ 协议

3.累积确认

4.Go-back-N(回退 N)

5.SR(selective Repeat Protocol)

五.TCP的流量控制

1.加权平均往返时间

2.超时重传时间 RTO (RetransmissionTime-Out)

Karn 算法

3.利用滑动窗口实现流量控制

4.持续计时器 (persistence timer)。

5.必须考虑传输效率

六.TCP的拥塞控制

1.拥塞控制的一般原理

2.拥塞控制与流量控制的关系

3.开环控制和闭环控制

4.几种拥塞控制方法

1.慢开始和拥塞避免

(1) 慢开始和拥塞避免

(2)慢开始算法的原理

(3)慢开始和拥塞避免算法的实现举例

2.快重传和快恢复

快重传举例

七.TCP 的运输连接管理

1. 运输连接的三个阶段

2.用三次握手建立 TCP 连接

3.四次挥手——TCP 的连接释放


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

运输层为相互通信的应用进程提供了逻辑通信

应用进程之间的通信

  • 两个主机进行通信实际上就是两个主机中的应用进程互相通信
  • 应用进程之间的通信又称为端到端的通信
  • 运输层的一个很重要的功能就是复用分用。应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。
  • “运输层提供应用进程间的逻辑通信” 。 “逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接

2.两种不同的运输协议
  • 运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
  • 当运输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。即:秘书(网络层)虽然是不可靠的,但是老板(运输层)是可靠的,秘书上交数据时漏了或者错了,老板(运输层)会亲自检查并要求秘书(网络层)重发
  • 当运输层采用无连接的 UDP 协议时,这种逻辑通信信道是一条不可靠信道

一.运输层的两个主要协议:TCP 与 UDP

1.TCP/IP 的运输层有两个不同的协议:

两个对等运输实体在通信时传送的数据单位叫作 运输协议数据单元 TPDU (Transport Protocol
Data Unit)。
(1)        用户数据报协议 UDP (User Datagram Protocol)
UDP 传送的数据单位协议PDU是 UDP 报文用户数据报
UDP 在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。
(2)        传输控制协议 TCP (Transmission Control Protocol)

TCP 传送的数据单位协议PDU是 TCP 报文段 (segment)

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

还要强调两点
  • 运输层的UDP用户数据报与网际层的IP数据报有很大区别。IP数据报要经过互连网中许多路由器的存储转发,但UDP用户数据报是在运输层的端到端抽象的逻辑信道中传送的。
  • TCP 报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了 TCP 连接。

2.端口号(protocol port number)

端口号简称为端口(port)。解决这个问题的方法就是在运输层使用协议端口号(protocol port number),或通常简称为端口(port)。

(1)软件端口与硬件端口

在协议栈层间的抽象的协议端口是软件端口(常用的)。
路由器或交换机上的端口是硬件端口(叫做接口)。
硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。

(2)TCP 的端口

端口用一个 16 位端口号进行标志。
端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。

(3)三类端口

  • (需要背,记住)熟知端口,数值一般为 0~1023。
  • 登记端口号,数值为1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复。
  • 客户端口号短暂端口号,数值为49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。

二.用户数据报协议 UDP

1.UDP介绍

  • IP也是不可靠协议。UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。
  • 虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。例如UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很多的实时应用(如IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延
    IDP正好适合这种要求(实时交互——直播,直播时不用因为掉包而重传,即直播可以卡,不用重新播
  • IP是路由器到路由器,而UDP是实现端到端
  • 差错检测的差异IP数据报校验和是检测IP头部而不检查数据部分,UDP/TCP校验和是检测IP头部和数据部分

2.UDP 的主要特点

  • UDP 是无连接的,即发送数据之前不需要建立连接
  • UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
  • UDP 是面向报文的
  • 复用UDP 没有拥塞控制,很适合多媒体通信的要求。
  • UDP 支持一对一、一对多、多对一和多对多的交互通信
  • UDP 的首部开销小,只有 8 个字节。

3.面向报文的 UDP——一次发送整个报文

  • 发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界
  • 应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文
  • 接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
  • 应用程序必须选择合适大小的报文。

4.UDP 的首部格式

伪首部:传输过程中没有,校验时才有
伪首部作用:伪首部中有源IP地址,目的IP地址等,这样既检查了UDP用户数据报的源端口号和目的端口号以及UDP用户数据报的数据部分,又检查了IP数据报的源IP地址和目的地址。

计算 UDP 检验和的例子

二.传输控制协议 TCP

1.TCP 最主要的特点

  • TCP 是面向连接的运输层协议。
  • 每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。
  • TCP 提供可靠交付的服务。
  • TCP 提供全双工通信。
  • 面向字节流

TCP 面向流的图像

2.TCP 传输特点

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

例如窗口值=4,滑块内14,15,16,17为正在传输的数据,只有当14传到接受缓冲区后,滑块才会后移,这是正在传输的数据为15,16,17,18了

3.TCP 的连接

  • TCP 把连接作为最基本的抽象。
  • 每一条 TCP 连接有两个端点。
  • TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字(socket)或插口。
  • 端口号拼接到(contatenated with) IP 地址即构成了套接字。

套接字 (socket)

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

4.TCP 报文段的首部格式

源端口和目的端口字段 —— 各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
序号字段 —— 4 字节。代表第一个字节的序号。详细解释:TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号
确认号字段 —— 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。例如确认号=20,两层含义:前19个数据收到了期望收到第20个数据
数据偏移(即首部长度) —— 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。 “数据偏移”的单位是 32 位字(以 4 字节为计算单位)。
保留字段 —— 6 位,保留为今后使用,但目前应置为 0

紧急 URG —— URG =1 时,表明紧急指针字段有效,即URG =1 时才去看“紧急指针”这段内容。它告诉系统此报文段中有紧急数据应尽快传送( 相当于高优先级的数据 )
确认 ACK —— 只有当 ACK = 1 时,确认号字段才有效, 即ACK = 1时才去看“确认号针”这段内容。。当 ACK = 0 时,确认号无效。
推送 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的报文段,尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
复位 RST (ReSeT) —— RST = 1 表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接
同步 SYN —— 同步 SYN = 1 表示这是一个连接请求或连接接受报文
终止 FIN (FINis) —— 用来释放一个连接。 FIN = 1表明此报文段的发送端的数据已发送完毕,并要求释放运输连接,即断开连接
窗口字段 —— 2 字节,用来让对方设置发送窗口的依据,单位为字节。即:告诉对方下次滑块窗口设置多大。
检验和 —— 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP报文段的前面加上 12 字节的伪首部。
紧急指针字段 —— 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
选项字段 —— 长度可变。 TCP 最初只规定了一种选项,即 最大报文段长度 MSS MSS 告诉对方 TCP :“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。 ”,例如MSS=100表明数据字段最多装100个字节。
填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。
其他选项
  • 窗口扩大选项 ——3 字节,其中有一个字节表示移位值 S。新的窗口值等于TCP 首部中的窗口位数增大到(16 + S),相当于把窗口值向左移动 S 位后获得实际的窗口大小。
  • 时间戳选项——10 字节,其中最主要的字段时间戳值字段(4 字节)和时间戳回送回答字段(4 字节)。
  • 选择确认选项——在后面的 5.6.3 节介绍。

三.可靠传输的工作原理

1.停止等待协议

超时重传

  • 在发送完一个分组后,必须暂时保留已发送的分组的副本,只有在收到相应的确认后才能清除暂时保留的分组副本。
  • 分组和确认分组都必须进行编号。这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没有收到确认。
  • 超时计时器的重传时间应当比数据在分组传输的平均往返时间(RTT)更长一些

2.确认丢失和确认迟到

a. 收方发送的确认丢失时,发送方等一会儿没收到确认则超时重传。
B所发送的对M;的确认丢失了。A 在设定的超时重传时间内没有收到确认,并无法知道是自己发送的分组出错、丢失,或者是B发送的确认丢失了。因此A在超时计时器到期后就要重传M,。现在应注意B的动作。假定B又收到了重传的分组M。这时应采取两个行动。
第一, 丢弃这个重复的分组M,,不向上层重复交付
第二, 向 A 发送确认。不能认为已经发送过确认就不再发送,因为A之所以重传 M就表示 A 没有收到对 M 的确认。
b. 确认半天才到,没到的时间内就已经超时重传了,等他到了也没啥用了。
传输过程中没有出现差错,但B对分组M的确认迟到了。A 会收到重复的确认。对重复的确认的处理很简单:收下后就丢弃,但什么也不做。B仍然会收到重复的M,并且同样要丢弃重复的M,并重传确认分组。

3.可靠通信的实现

  • 使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。
  • 这种可靠传输协议常称为自动重传请求ARQ (Automatic Repeat reQuest)。
  • ARQ 表明重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组 。

4.停止等待协议的信道利用率

停止等待协议的优点是简单,但缺点是信道利用率太低,发送方只有TD这个发送时间在运行,等待确认的时间什么也不干。 (TD:发送数据时间,RTT:等待确认的往返总时间。TA:接收的时间)
信道的利用率 U:

5.流水线传输

  • 发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。
  • 由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率。

四.传输协议

连续 ARQ 协议

3.累积确认

  • 下图上发下收,上面滑块窗口为4格表示要发送的数据,下面滑块窗口为1格表示要接受的数据上面发一个,下面对应收一个但不回复确认,滑块后移一个,收一个后移一个,积累满4个统一回复确认。
  • 接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了
  • 累积确认有的优点是:容易实现,即使确认丢失也不必重传。缺点是:不能向发送方反映出接收方已经正确收到的所有分组的信息。
  • 累计到第3个确认:前三个都收到了并且没有丢包,下一个给我发送数据包4。假设数据包1丢包——第二个图
假设数据包1丢包,则后续发送方还在发,发完一个滑块后,由于收方滑块还在1处等待收1,接收方接收完后续的数据到3不给予回复,则会超时重传,重新发送

4.Go-back-N(回退 N

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

解释:GBN是传一个收一个,滑块后移并发送一个确认,例如发送方发“0数据包”,接收方收到,滑块移到“1”,并发送0确认;发送方继续发“1数据包”,接收方收到1,滑块移到“2”,并发送1确认;以此类推。

假设4丢包了,后续发送数据包5,然后收方回复之前最后一个收到的数据包确认,即确认3,告诉发送方:包含3之前的数据包全收到了,下一个我要的是4。收方丢掉后续的这些数据,而发送方进行超时重传,重新传4以及后续的数据即4—7数据。

5.SR(selective Repeat Protocol)

逐个确认,重传就重传丢包的那一个(13课-39:00)

五.TCP的流量控制

1.加权平均往返时间

TCP 保留了 RTT 的一个 加权平均往返时间 RTT S (这又称为 平滑的往返时间 )。
第一次测量到 RTT 样本时, RTT S 值就取为所测量到的 RTT 样本值。以后每测量到一个新的 RTT 样本,就按下式重新计算一次 RTT S

2.超时重传时间 RTO (RetransmissionTime-Out)

5-33

Karn 算法

在计算平均往返时间 RTT 时,只要报文段重传了,就不采用其往返时间样本。
这样得出的加权平均平均往返时间 RTT S和超时重传时间 RTO 就较准确。

3.利用滑动窗口实现流量控制

  • 一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。
  • 流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
  • 利用滑动窗口机制可以很方便地在 TCP连接上实现流量控制。
流量控制举例
A B 发送数据。在连接建立时,
B 告诉 A : “我的接收窗口 rwnd = 400 (字节)” 。
ack=201:前201字节完成传输,下一次希望收到201字节
rwnd窗口值改为300(因为接收方B的缓冲区比较满了)
201-300丢失了,后面先301-400,401-500,最后超时重传201-300,则ack马上=501了,窗口值设为100,

4.持续计时器 (persistence timer)。

TCP 为每一个连接设有一个 持续计时器
只要 TCP 连接的一方收到对方的 零窗口 通知,就启动持续计时器。
若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。
若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器。
若窗口不是零,则死锁的僵局就可以打破了。

5.必须考虑传输效率

  • 可以用不同的机制来控制 TCP 报文段的发送时机:
  • 满了发货:第一种机制是 TCP 维持一个变量,它等于最大报文段长度 MSS。只要缓存中存放的数据达到 MSS 字节时,就组装成一个 TCP 报文段发送出去。
  • 紧急发货:第二种机制是由发送方的应用进程指明要求发送报文段,即 TCP 支持的推送(push)操作。
  • 到时间发货:第三种机制是发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过 MSS)发送出去。

六.TCP的拥塞控制

1.拥塞控制的一般原理

在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion)
出现资源拥塞的条件:对资源需求的总和 > 可用资源 (5-7)
若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。

2.拥塞控制与流量控制的关系

  • 拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。
  • 拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
  • 流量控制往往指在给定的发送端和接收端之间的点对点通信量的控制。
  • 流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

3.开环控制和闭环控制

(1)开环控制方法就是在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。
(2)闭环控制是基于反馈环路的概念(动态的)。属于闭环控制的有以下几种措施:
  • 监测网络系统以便检测到拥塞在何时、何处发生。
  • 将拥塞发生的信息传送到可采取行动的地方。
  • 调整网络系统的运行以解决出现的问题。

4.几种拥塞控制方法

1.慢开始和拥塞避免

(1) 慢开始和拥塞避免

  • 发送方维持一个叫做拥塞窗口 cwnd (congestionwindow)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。如再考虑到接收方的接收能力,则发送窗口还可能小于拥塞窗口。
  • 发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
  • 流量窗口rwnd和收发方拥塞窗口cwnd三个哪个小选哪个。

(2)慢开始算法的原理

  • 在主机刚刚开始发送报文段时可先设置拥塞窗口 cwnd = 1,即设置为一个最大报文段 MSS的数值。
  • 在每收到一个对新的报文段的确认后,将拥塞窗口加 1,即增加一个 MSS 的数值。
  • 用这样的方法逐步增大发送端的拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。
发送方每收到一个对新报文段的确认(重传的不算在内)就使 cwnd 加 1
cwnd=1:允许发送1个MSS的报文,即一个报文段。

(3)慢开始和拥塞避免算法的实现举例

设置慢开始门限状态变量 (门限值)ssthresh
  • TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段
  • 慢开始门限的初始值设置为 16 个报文段,即 ssthresh = 16
  • 发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。
  • 在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1发送第一个报文段 M0。
  • 发送端每收到一个确认 ,就把 cwnd 1。于是发送端可以接着发送 M1 M2 两个报文段。
  • 接收端共发回两个确认。发送端每收到一个对新报文段的确认,就把发送端的 cwnd 1。现在 cwnd 2增大到 4,并可接着发送后面的 4 个报文段。
  • 发送端每收到一个对新报文段的确认,就把发送端的拥塞窗口加 1 ,因此拥塞窗口 cwnd 随着传输轮次按指数规律增长。
  • 当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。
  • 假定拥塞窗口的数值增长到 24 时,网络出现超时,表明网络拥塞了。
  • 更新后的 ssthresh 值变为 12 (即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1 ,并执行慢开始算法。
  • cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。

2.快重传和快恢复

n
快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送 方及早知道有报文段没有到达接收方。
n
发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。
n
不难看出,快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。

快重传举例

快恢复算法
(1) 当发送端收到连续三个重复的确认时,就执
行“乘法减小”算法,把慢开始门限 ssthresh
减半。但接下去不执行慢开始算法。
(2) 由于发送方现在认为网络很可能没有发生拥塞,
因此现在不执行慢开始算法,即拥塞窗口
cwnd 现在不设置为 1 ,而是设置为慢开始门
ssthresh 减半后的数值,然后开始执行拥塞
避免算法(“加法增大”),使拥塞窗口缓慢
地线性增大。
从连续收到三个重复的确认
转入拥塞避免

七.TCP 的运输连接管理

1. 运输连接的三个阶段

运输连接就有三个阶段,即: 连接建立 数据传送 连接释放 。运输连接的管理就是使运输连接的建立和释放都能正常地进行。
连接建立过程中要解决以下三个问题:
  • 要使每一方能够确知对方的存在。
  • 要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。
  • 能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。

2.用三次握手建立 TCP 连接

①A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。
②B 的 TCP 收到连接请求报文段后,如同意,则发回确认。
• B 在确认报文段中应使同步位SYN = 1,使 ACK = 1,其确认号ack = x + 1(前x个数据已收到,期望下一次收到x+1开始的数据),自己选择的序号 seq = y。x和y没关系,是各自数据的序号。
③•A 收到此报文段后向 B 给出确认,其 ACK = 1,确认号 ack = y +1,seq = x + 1表示这次给的是序号为x+1的数据
• A 的 TCP 通知上层应用进程,连接已经建立B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP 连接已经建立。
这个图背!!!!!两边字母也背背吧
为什么要有第三次握手:第二次B发送确认后就默认已经建立连接了,但如果这个报文丢失,A发现没有建立连接,而B显示已经建立连接。所以A要再第三次确认,确认第二次是收到了。
三次握手后A开始传输数据,所以一般把第三次握手和数据传输合起来。

3.四次挥手——TCP 的连接释放

(1)数据传输结束后,通信的双方都可释放连接。现在 A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP连接。
• A 把连接释放报文段首部的“终止” FIN = 1,其序号seq = u(假设数据传输完后序号用到了u),等待 B 的确认。
(2)B 发出确认,确认号 ack = u + 1(期待收到u+1),而这个报文段自己的序号 seq = v(B给A发的数据序号用到了v)。
• TCP 服务器进程通知高层应用进程。
• 从 A 到 B 这个方向的连接就释放了,但是B没发送“终止” FIN = 1,所以TCP 连接处于半关闭状态。B 若发送数据,A 仍要接收。
(3)若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接,“终止”FIN = 1, ACK = 1, ack= u + 1(这俩不变,因为A中间没发过数据,还是停留在第一次挥手),seq = w(数据传输用了一些序号,序号用到了w)。
(4)A 收到连接释放报文段后,必须发出确认,ACK = 1, 自己的序号 seq = u + 1, 确认号ack = w + 1。
客户A的TCP 连接必须经过2MSL时间后才真正释放掉。(而客户B在收到第四次挥手时立马释放解释:若客户A不等2MSL而直接释放了,那么当最后一次挥手报文丢失时,客户B挥一直处于未释放连接状态;若客户A等2MSL,那么当最后一次挥手报文丢失时,客户B还会超时重传第三次挥手给A,A就再次回复第四次挥手给B。
注意:若中间无数据发送,则二三次挥手可以合并。
A 必须等待 2MSL 的时间(课件字随便看看)
第一,为了保证 A 发送的最后一个 ACK 报文段能够到达 B
第二,防止 “已失效的连接请求报文段”出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过 时间 2MSL 就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

http://www.mrgr.cn/news/60621.html

相关文章:

  • mysqld.log文件过大,清理后不改变所属用户
  • Ubuntu忘记密码
  • Vue学习笔记(六)
  • 京东商品详情API详解:全面掌握返回值字段
  • java中使用redis的方法
  • 32位的ARMlinux的4字节变量原子访问问题
  • 常见大气校正模型及6S模型安装部署【20241028】
  • 仓颉编程语言一
  • 011:软件卸载工具TotalUninstall安装教程
  • 重写(外壳不变)
  • CSS3新增长度单位
  • Python自动化测试中的Mock与单元测试实战
  • 基于vue、VantUI、django的程序设计
  • 【HeadFirst 设计模式】设计模式总结与C++案例
  • 外包干了30天,技术明显退步
  • 内网穿透之网络层ICMP隧道
  • 基于SSM的宠物猫狗商业系统设计与实现
  • Chrome异步编程
  • 关于群辉920+更新升级系统后SSD固态存储不受当前DSM版本支持的解决方法
  • python实战(四)——RAG预热实践
  • ssm智慧社区电子商务系统+vue
  • Radar Fields: Frequency-Space Neural Scene Representations for FMCW Radar 笔记
  • 容器化实践:优化DevOps环境下的容器交付流程
  • 【CSS/SCSS】@supports的介绍与用法
  • 【深度学习|地学应用】人工智能技术的发展历程与现状:探讨深度学习在遥感地学中的应用前景
  • arduino uno R3更换328pb-au芯片,烧录bootloader