第五章 - 运输层

来源Bilibili湖科大教书匠计算机网络教程:计算机网络微课堂(有字幕无背景音乐版)

运输层概述

  • 物理层数据链路层网络层 共同解决了将主机通过异构网络互联起来所面临的问题 , 实现了主机之间的通信。
  • 但实际上,在计算机中进行通信的真正实体是位于 通信两端主机中的进程
  • 运输层的任务:为运行在不同主机上的应用进程提供直接的通信服务。运输层协议又称为 端到端协议

1653719976210

  • 运输层向高层用户 屏蔽了下面网络核心的细节(如网络拓扑、所采用了路由选择协议等),它使应用进程之间好像有一条端到端的逻辑通信信道。
  • 根据需求不同,运输层为应用层提供了两种不同的运输协议,即 面向连接的TCP无连接的UDP

运输层端口号、复用与分用的概念

端口号:

1653720300415

发送方的复用和接收方得到分用:

1653720337545

TCP/IP 体系的应用层常用的运输层熟知端口号:

1653720378910

UDP和TCP的对比

1653720445095

1653720508950

1653720525009

1653720550696

1653720561231

1653720569952

TCP的流量控制

1653720620068

1653720634616

接收方可以对发送方进行流控

1653720674424

TCP的拥塞控制

  • 对网络中某一资源的需求超过了该资源的所能提供的可用部分,网络性能就要破坏,这种情况在网络中就叫做拥塞。
  • 若出现拥塞而不加以控制,整个网络的吞吐量将会随负荷增大而下降

1653878935903

  • 发送方维护一个叫做 拥塞窗口 cwnd 的 状态变量,其值取决于网络的拥塞程度,并且动态变化
    • 维护 拥塞窗口的原则:网络越宽松,窗口越大。网络越拥塞,窗口越小
    • 判断 拥塞的依据:没有按时收到应当到达达确认报文
  • 发送方将拥塞窗口作为 发送窗口swnd ,即swnd = cwnd
  • 维护一个慢开始门限 ssthresh 状态变量:
    • 当 cwnd < ssthresh 时 :使用慢开始算法
    • 当 cwnd > ssthresh 时 :使用拥塞避免算法
    • 当 cwnd = ssthresh 时 :两者都行

1653900732036

cwnd 起始值为1 ,ssthresh 起始值为16,传输轮次 就是 一个数据交换一个来回

当 cwnd < ssthresh 时 拥塞窗口 呈 指数增长,1 2 4 8 16

1653900875761

当 cwnd > ssthresh 时 使用 拥塞避免算法 拥塞窗口 呈线性增长,假设 由于 窗口过大导致 部分报文段丢失

1653901006922

报文段丢失,发送方判断网络出现了拥塞,更新了 ssthresh 的 值为 当前 cwnd 的一半,将 cwnd 的值减少为1,并重新开始执行慢开始 算法

1653901162188

快重传

1653901290887

快恢复

1653901344289

和原来不同的 是 ,当发送方发现丢失了 个别报文段时, 发送方不再将 cwnd 置为1 而是 将 ssthresh 的值 和 cwnd 的值 调整为当前的一半,然后执行拥塞避免。

1653902318354

TCP超时重传时间的选择

TCP可靠传输的实现

1653902668013

TCP的运输连接管理

TCP的连接建立

  • TCP 是面向连接的协议,它基于运输连接来传送TCP报文段
  • TCP 运输连接的建立和释放是每一次面向连接的通信中不可缺少的过程
  • TCP 运输连接有以下三个阶段
    • 建立TCP连接
    • 数据传输
    • 释放TCP连接
  • TCP 运输连接管理 就是控制 运输连接的正确建立和释放都能正常的进行

1653995536570

  • TCP 三报文握手 建立连接

    1653995965554

    在本例中,A 主动打开连接,而 B 被动打开连接。

    1. 一开始,B 的 TCP 服务器进程 先创建 传输控制快 TCB ,准备接受客户进程的连接请求。然后服务器进程就处于 LISTEN 状态,等待客户请求。
    2. A 的 TCP 客户进程 也是首先创建 传输控制模块 TCB 。打算 建立 TCP连接时,向 B 发送 连接请求报文段,这是 首部中的同步位 SYN = 1,同时选择一个初识序号 seq = x 。 TCP 规定 SYN =1 的数据报 不能携带数据 ,但要消耗掉一个序号。此时 TCP 客户进程进入 SYN-SENT (同步已发送)状态
    3. B 收到连接 请求报文段后,如同意连接,则向 A 发送确认。 再确认报文段中 将 SYN 和 ACK 都置为 1 ,确认号是 = x +1 ,序号 seq = y。
    4. TCP 客户进程收到 确认数据报后,还要向 B 发送确认,ACK = 1 ,seq = x+1,ack = y+1,这是 TCP 连接已建立,A 进入 ESTABLISHED 状态 ,当 B 接收到后,也转换成 ESTABLISHED 状态
  • TCP 为何不能 两报文建立连接

    1653996815186

    一旦出现 TCP 连接请求晚到的情况 ,会浪费服务器资源

TCP的连接释放

  • TCP 通过 四报文挥手 来释放连接

1653996985659

  • 保活计时器。每收到一次 客户端发来的数据,保活计时器就更新,与 session 的机制类似。

TCP报文段的首部格式

1653997143932

1653997157410

1653997171950

1653997181532

1653997202155

1653997224284

1653997248100

1653997256398

1653997265468

1653997272508

1653997285037

1653997299132

1653997320013

1653997330029