• 计算机网络(第7版)第三章(传输层)知识点整理


    计算机网络

    参考书目:《计算机网络(第7版)》:谢希仁——电子工业出版社 《精通Windows Sockets网络开发--基于Visual C++实现》:孙海民——人民邮电出版社



    一、运输层概述

           运输层为相互通信的应用进程提供了逻辑通信。运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
    在这里插入图片描述

                              运输层协议                      VS                     网络层协议

    在这里插入图片描述

    运输层的主要功能

    1. 为应用进程之间提供端到端的逻辑通信
    2. 流量控制、拥塞控制
    3. 复用和分用

    UDP:逻辑通信信道相当于一条不可靠信道

    • 不提供可靠交付
    • 在传送数据之前不需要先建立连接
    • 在某些情况下 UDP 是种最有效的工作方式

    TCP:逻辑通信信道相当于一条全双工的可靠信道

    • 提供可靠的、面向连接的运输服务
    • 提供面向连接的服务
    • 不可避免地增加了许多的开销

    运输层的端口

    • 端口号 : 用来区别不同的应用进程
      • 在TCP和UDP的首部有两个端口号:源端口和宿端口
    • 端口号只具有本地意义
      • 只标志本计算机应用层中的各进程
      • 允许因特网中不同计算机有相同端口号
    • 端口号由16位二进数构成,范围从0到65, 535
      • 从0~1023的端口号被称为熟知端口号并被限制使用——这些端口号已分配给最常用的网络应用:如HTTP和FTP。
      • HTTP使用了端口80,FTP使用了21和20。
      • 熟知端口号仅用于服务方,客户方应使用≥1024的端口号。

    端口号的类别

    • 熟知端口号
    • 登记端口号
    • 短暂端口号
      在这里插入图片描述

    熟知端口号

    • 熟知端口号的范围从 0到 1023 ,它们是由 IANA 控制的。这些端口号一般固定分配给一些服务
    • 通常分配给最常用的网络应用的服务器进程
      • HTTP使用了端口80,FTP使用了21和20。
      • 网络服务是可以使用其他端口号的。
      • 众所熟知端口号仅用于服务方,客户方应使用≥1024的端口号。
        在这里插入图片描述

    登记端口号

    • 登记端口号范围从1,024到49,151,只能由IANA登记注册,避免重复使用。
    • 这些端口号一般不固定分配给某个服务,许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。

    短暂端口号

    • 短暂端口范围从49,152 到 65,535,这些端口即没有被控制也没有被注册。它们可以被任何进程使用。
    • 它通常用来标志客户进程,当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。

    基于端口的复用和分用功能
    在这里插入图片描述

    二、用户数据报协议UDP

    用户数据报协议UDP

    • “最简约的” Internet 传输协议
    • 无连接:
      • 在UDP收发双方之间无需握手信号
      • 每个UDP数据报的操作都互相独立
    • 经常在流媒体中使用
      • 对传输速率敏感
      • 对传输可靠性不敏感
    • UDP的其他用途
      • DNS
      • SNMP
    • 若需要通过UDP进行可靠传输,需要在应用层增加可靠性措施。

    UDP的主要特点

    • UDP 只在 IP 的数据报服务之上增加了很少一点的功能:端口的功能和差错检测的功能。
    • 无连接的:发送数据之前不需要建立连接。
    • 尽最大努力交付:不保证可靠交付,也不使用拥塞控制。
    • 面向报文—一次交付一个完整报文。
    • 没有拥塞控制:很适合多媒体通信的要求。
    • 支持一对一、一对多、多对一和多对多的交互通信。
    • 首部开销小,只有 8 个字节。

    UDP的面向报文
    在这里插入图片描述

    UDP的首部格式
    在这里插入图片描述
           用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。
           在计算检验和时,临时把“伪首部”和 UDP用户数据报连接在一起。伪首部仅仅是为了计算检验和。

    三、传输控制协议TCP

    传输控制协议TCP

    • 面向连接
      • 每一条 TCP 连接只能有两个端点(endpoint)
      • 每一条 TCP 连接只能是点对点的(一对一)
      • 是一条虚连接而不是一条真正的物理连接
    • 提供可靠交付的服务
    • 提供全双工通信
    • 面向字节流
      • 把应用进程交付的数据看成一连串无结构的字节流
      • TCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节。
      • 可把太长的数据块划分短一些再传送。也可等待积累有足够多的字节后再构成报文段发送出去。

    TCP的面向流概念
    在这里插入图片描述
    在这里插入图片描述

    TCP的连接

    • TCP 把连接作为最基本的抽象。
    • 每一条TCP 连接有两个端点。
    • TCP 连接的端点!=主机!=主机的IP 地址!=不是应用进程!=运输层的协议端口
    • TCP 连接的端点叫做套接字(socket)或插口。

    套接字

      1.套接字 socket = (IP地址: 端口号)
    每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
      2.TCP 连接 ::= {socket1, socket2} = {(IP1: port1), (IP2: port2)} 
    
    • 1
    • 2
    • 3

    1.TCP报文

    TCP报文段的首部格式

    在这里插入图片描述

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

    2.可靠传输

    停止等待协议
    在这里插入图片描述

    • 在发送完一个分组后,必须暂时保留已发送的分组的副本。
    • 分组和确认分组都必须进行编号。
    • 超时计时器的重传时间应当比数据传输的平均往返时间更长一些。

    确认丢失和确认迟到
    在这里插入图片描述

    可靠通信的实现

    • 使用上述的确认和重传机制,可以在不可靠的传输网络上实现可靠的通信。
    • 自动重传请求ARQ。
      • 重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组 。

    信道利用率
    在这里插入图片描述
    停止等待协议的优点是简单,但缺点是信道利用率太低。

    流水线传输

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

    在这里插入图片描述

    连续 ARQ 协议
    在这里插入图片描述

    累积确认

    • 接收方一般采用累积确认的方式
      • 不必对收到的分组逐个发送确认
      • 对按序到达的最后一个分组发送确认

          优点:容易实现,即使确认丢失也不必重传。
          缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。

    回退 N

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

    TCP可靠传输的实现

    • 每一端都设有两个窗口——一个发送窗口和一个接收窗口。
    • 用字节的序号进行控制。 所有的确认都是基于序号而不是基于报文段。
    • 两端的四个窗口经常处于动态变化之中。
    • TCP连接的往返时间 RTT 也不是固定不变的。需要使用特定的算法估算较为合理的重传时间。

    以字节为单位的滑动窗口
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    缓存与窗口的关系
    发送缓存

    发送缓存用来暂时存放:

    • 发送应用程序传送给发送方 TCP 准备发送的数据;
    • TCP 已发送出但尚未收到确认的数据
      在这里插入图片描述

    接收缓存

    接收缓存用来暂时存放:

    • 按序到达的、但尚未被接收应用程序读取的数据;
    • 不按序到达的数据
      在这里插入图片描述

    选择确认SACK

    • 接收方收到了和前面的字节流不连续的两个字节块。
    • 如果这些字节的序号都在接收窗口之内,那么接收方就先收下这些数据,但要把这些信息准确地告诉发送方,使发送方不要再重复发送这些已收到的数据。

    接收到的字节流序号不连续
    在这里插入图片描述

    超时重传时间的选择

    • TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传
    • 由于TCP的下层是一个互联网环境,IP数据报所选择的路由变化很大。因而运输层的往返时间的方差也很大。
      在这里插入图片描述

    3.流量控制

    流量控制

    • 流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
    • 利用滑动窗口机制在 TCP 连接上实现

    例:A 向 B 发送数据
    在这里插入图片描述

    持续计时器

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

    传输效率
           用不同的机制来控制 TCP 报文段的发送时机:

    1. TCP 维持一个变量,它等于最大报文段长度 MSS。只要缓存中存放的数据达到 MSS 字节时,就组装成一个 TCP 报文段发送出去。
    2. 由发送方的应用进程指明要求发送报文段,即 TCP 支持的推送(push)操作。
    3. 发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过 MSS)发送出去。

    4.拥塞控制

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

                         拥塞控制                     VS                     流量控制

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

    拥塞控制所起的作用
    在这里插入图片描述

    拥塞控制方法
    慢开始和拥塞避免

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

    慢开始算法原理

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

    传输轮次

    • 使用慢开始算法后,每经过一个传输轮次,拥塞窗口 cwnd 就加倍。
    • “传输轮次”更加强调:把拥塞窗口 cwnd 所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。

    设置慢开始门限状态变量

    • 避免拥塞窗口cwnd增长过大引起网络拥塞
    • 当 cwnd < ssthresh 时,使用慢开始算法。
    • 当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
    • 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。

    拥塞避免算法原理

    • 让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口 cwnd 按线性规律缓慢增长

    例:当网络出现拥塞时
    1.无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认)
    2.把慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。
    3.把拥塞窗口 cwnd 重新设置为 1
    4.执行慢开始算法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    乘法减小

    • 不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前的拥塞窗口值乘以 0.5。
    • 当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。

    加法增大

    • 执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个往返时间),就把拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。

    快重传和快恢复
    快重传

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

    快恢复

    • 当发送端收到连续三个重复的确认时
      • 执行“乘法减小”算法,把慢开始门限 ssthresh 减半
      • 拥塞窗口 cwnd 设置为慢开始门限 ssthresh 减半后的数值(不设置为 1) ,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

    5.连接管理

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

    客户服务器方式

    • TCP 连接的建立都是采用客户服务器方式。
    • 主动发起连接建立的应用进程叫做客户(client)。
    • 被动等待连接建立的应用进程叫做服务器(server)。

    三次握手 — TCP 的连接建立
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    综合:
    在这里插入图片描述

    TCP 的连接释放
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    TCP连接中A必须经过时间 2MSL 后才真正释放掉

    • 第一,为了保证 A 发送的最后一个 ACK 报文段能够到达 B。
    • 第二,防止 “已失效的连接请求报文段”出现在本连接中。
      • A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

    TCP 的有限状态机

    • TCP 有限状态机的图中每一个方框都是 TCP 可能具有的状态。
    • 每个方框中的大写英文字符串是 TCP 标准所使用的 TCP 连接状态名。状态之间的箭头表示可能发生的状态变迁。
    • 箭头旁边的字,表明引起这种变迁的原因,或表明发生状态变迁后又出现什么动作。
    • 图中有三种不同的箭头。
      • 粗实线箭头表示对客户进程的正常变迁。
      • 粗虚线箭头表示对服务器进程的正常变迁。
      • 另一种细线箭头表示异常变迁。
        在这里插入图片描述
  • 相关阅读:
    找软件,用开源,就上alternativeto.net
    【数据结构】---排序的各种常见算法-入门写法
    JAVA基于web的学校工资管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
    【GEE】6、在 Google 地球引擎中构建各种遥感指数
    c++ 二分查找
    第四周 牛背山云海——拍拍大场景,自拍延时片段
    深入解读 Android Hook 技术-从原理到实践
    [Vue3] pinia状态管理
    【项目搭建】SpringBoot多模块项目搭建
    手把手带你刷好题(牛客刷题④)
  • 原文地址:https://blog.csdn.net/weixin_43312470/article/details/127303047