概念

  • 运输层为相互通信的应用进程提供逻辑通信
  • 端口和套接字的意义
  • 无连接的UDP的特点
  • 面向连接的TCP的特点
  • 在不可靠的网络上实现可靠网络的传输原理,停止等待协议和ARQ协议
  • TCP的滑动窗口、流量控制、拥塞控制和连接管理

运输层协议概述


进程之间的通信


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

网络层是为主机之间提供逻辑通信;运输层为应用进程之间提供端到端的逻辑通信。

真正进行通信的实体是主机中的进程,两天机器进程在做数据交换,两台主机进行通信就是两天主机中的应用进程互相通信

复用和分用

  • 复用:在发送方不同的应用进程都可以使用同一个运输层协议传输数据
  • 分用:接收方的运输层再剥去报文的首尾部之后把这些数据交付给目的应用进程
  • UDP:无连接
  • TCP:面向连接
    • 运输层主要的两个协议
      • 用户数据报协议UDP
      • 在传输数据之前不需要先建立连接,接收方收到UDP报文后不需要给出任何确认
      • 传输控制协议TCP
      • 提供面向连接服务
        RUNOOB 图标
  • 服务器端使用的端口号
    • 熟知端口号或系统端口号(0~1023)
      RUNOOB 图标
  • 客户端使用的端口号或短暂端口号(49152~65535)
    • 客户端收到确认之后端口自动释放

用户数据报协议 UDP

概念:

  • 无连接,发送不需要建立,结束不需要释放
  • UDP使用尽最大女里交付:不保证可靠交付, 因此主机不需要维持复杂的连接状态
  • UDP是面向报文的:发送方的UDP对应用程序叫下来的报文,添加首部后乡下交付IP层,UDP对应用层交下来的报文既不合并也不拆分,只是保留这些报文的边界
  • 无拥塞控制:可以丢数据,但不会慢
  • 支持一对一、一对多、多对一、多对多
  • 首部开销小,只有8个自己(TCP20个字节)

UDP首部格式

  • 用户数据包UDP有两个字段:
    • 数据字段
    • 首部字段
      • 只有8个字节
  • 源端口:源端口。在需要对方回信时使用,不需要全为0
  • 目的端口:必须
  • 长度:UDP用户数据报长度,最小值8(仅有首部)
  • 检验和:检测UDP用户数据包在传输中是否有错,有错就丢弃
     
    RUNOOB 图标

传输控制协议 TCP 概述

  • 端口号拼接到IP地址构成套接字或插口
    • 套接字socket=(IP地址:端口号)
  • 每一条TCP连接唯一的被通信两个端点(即两个套接字)所确定
    • TCP连接:=(socket1,socket2) = (IP1:port1),(IP2:poer2)

可靠传输的工作原理

TCP 报文段的首部格式

TCP面向字节流,但传输的数据单元式报文段。报文段分为首部和数据两部分,而TCP的全部功能都体现在他首部中各个字段的作用
TCP报文首部的前20个字节是固定的,后面有4n个字节是根据需要而增加的选项(n是整数)。因此TCP首部的最小长度时20字节
RUNOOB 图标

  • 源端口和目的端口
    • 各占2个字节
    • 分别写入源端口号和目的端口号
  • 序号(报文段序号)
    • 占4个字节
    • 范围[0,2的32次方 - 1],共2的32次方个序列号(4 294 967 296)。
    • 增加到2的32次方-1后,下一个序号就又回到0
    • 序号使用的是mod 2的32次方运算
    • TCP是面向字节流的。在一个TCP连接中传送的字节流的每一个字节都按序号排序
    • 整个要传送的字节流的起始序号必须在连接建立时设置。
    • 首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号
  • 确认号
    • 占四个字节
    • 期望收到对方下一个报文段的第一个数据字节的序号
    • 若确认号 = N, 则表明:到序列号N-1位置的所有数据都已经确认收到
    • 由于序号字段有32位长,可对4GB的数据进行编号。在一般情况下可保证当序号重复使用时,旧序号的数据早已通过网络早已通过网络到达终点
  • 数据偏移
    • 占4位
    • 指出TCP报文段的数据起始处距离TCP报文段的起始处有多远
    • 指出TCP报文段长度(实际意思)
    • 由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的
  • 保留
    • 占6位
    • 保留为后使用,但目前应置为0
  • 紧急URG
    • 当URG=1时,表明紧急指针字段有效,他告诉系统此报文段中有紧急数据,应该尽快处理(优先级高的数据),而不是按原来的排队顺序来传输
  • 确认ACK
    • 仅当ACK=1时确认好字段才有效
    • 当ACK=0时确认好无效
    • TCP规定在连接建立后所有传送的报文段都必须把ACK设置为1
  • 推送PSH(PuSH)
    • 当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。
    • PSH = 1
    • 几首方收到PSH的报文段,就立即交付给应用进程而不等到整个缓存都填满了之后再交付
    • 很少使用
  • 复位RST
    • RST = 1 而 ACK = 0时,表明是一个连接请求报文段。
    • 若对方同意,则响应报文段中使用SYN=1 和 ACk = 1
  • 终止(FIN)
    • 释放一个连接
    • FIN = 1时,表明此报文段发送方的数据已发送完毕,并要求释放运输连接
  • 窗口
    • 占2个字节
    • 值[0, 2的16次方 - 1]之间的整数。
    • 窗口指的是发送报文段的一方接收窗口
    • 窗口值:从本报文段首部中的确认好算起,接收方目前允许对方发送的数据量(字节)
    • 窗口值作为接收方让发送方设置其发送窗口的依据
    • 窗口字段明确指出了现在允许对方返送的数据量。窗口值经常在动态变化
  • 检验和
    • 占2字节
    • 检验和检验的范围包括首部和数据两部分
    • 和UDP用户数据报一样,在计算检验和时,要在TCP报文钱加上12字节的伪首部。
  • 紧急指针
    • 占2字节
    • 紧急指针仅在URG = 1 时才有意义
    • 指出本报文段中的紧急数据的字节数
    • 紧急指针指出了紧急数据的末尾数据的字节数
    • 当窗口为零时也可以发送紧急指针
  • 选项
    • 长度可变
    • 最长可达40字节
    • 当没有使用“选项”时,TCP的首部长度时20个字节

TCP 可靠传输的实现

TCP 的流量控制

TCP的流量控制

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

概念:发送方发送速率不要太快,让接收方来的及接收利用滑动窗口机制可以很方便的在TCP连接上实现对流量的控制

RUNOOB 图标

发送方的发送窗口数值不能大于接收方接收窗口给出的数值
窗口单位是字节,而不是报文段
死锁:A在等待B,B在等待A

解决方案:

TCP为每个连接设有一个持续计时器,只要TCP连接的一方收到对方的窗口通知,就启动持续计时器。若持续计时器时间到期,就发送一个零窗口探测报文段(包含一个字节),而对方再确认这个探测报文段时,给出了现在的窗口值。如果任然是0,那么收到这个报文段的一方就重新设置持续计时器,如果不是零,那么死锁就可以打破

TCP的传输效率

应用进程把数据传输到发送方缓存后剩下的就是TCP来处理了可以用不同处理机制TCP报文段的发送时机

  • TCP维持一个变量,等于最大报文段长度MSS,只有缓存中的数据达到MSS字节时就组成一个TCP报文段发送出去
  • 发送发进程来指明要求发送报文段,即TCP支持的推送操作(push)
  • 发送方的一个计时器过期了,这时就把已有缓存数据装入报文段(不能超过最大报文段MSS)发送出去
Nagle算法:

发送方把缓存中第一个字节先发出去,其余的缓存起来,当接收到对方第一个字符确认后将缓存中的所有数据组装成一个报文段发送过去,同时随后到达的数据进行缓存,只有得到前一个报文段确认后才会继续发送下一个报文段

规定:当到达的数据已达到发送窗口大小的一半或已达到报文段最大长度时,立即发送下一报文段。这样做就可以提高网络吞吐量

糊涂窗口综合征
接收方缓存数据空间较小

让接受方等一段时间,当达到接收方已有充足空间、缓存有一半的空闲空间接收方发出确认报文,并向发送方通知当前窗口大小,发送方也不要发送较小的报文段,把数据积累成足够大的报文段或达到接收方缓存空间一半大小

综上所述:发送方不要发送较小报文段接收方缓存有一小点空间之后就急忙把窗口大小信息通知给发送发


TCP 的拥塞控制

TCP 的运输连接管理


Copyright © Ywnline 版权所有 冀ICP备20005992号-1