概述

  • 依靠传输层,通过“端口”与不同应用进程进行对应的
  • 传输层的主要作用就是为它的上层提供端到端的数据传输服务
  • “端到端”连接是两个终端系统之间的连接
  • 优点
    • 链路建立后源端知道接收设备一定能收到(这就是“可靠性”的体现),而且经过中间交换设备时不需要进行存储转发,无须建立多条传输链路,因此传输延迟小。
  • 缺点
    • 直到目的端收到数据为止,源端的设备一直要参与传输,因为只有在传输完成后,从源端到目的端所建立的虚拟传输连接才能“拆除”
    • 如果接收设备关机或故障,那么端到端传输不可能实现
  • 传输层服务类型
    • 面向连接服务
      • 需要先建立专门的传输连接,而且这条连接是可管理的,在需要或通信结束时进行拆除
      • 可提供拥塞控制和差错控制功能,如TCP提供的传输服务
    • 无连接服务
      • 直接向目的节点发送数据,不管是否有可传输的通道,只提供不可靠(仅做尽力传输)的传输服务,如UDP提供的传输服务。
  • TSAP
    • 传输服务访问点
    • TSAP是上层调用传输层服务,以及传输层为它的上层提供服务的逻辑接口,是传输层地址
    • 将传输地址分成网络ID、主机ID及主机分配的端口三部分
    • 在总共65535个对应传输层协议端口中,前1024个端口被称为常规端口,代表了特定的应用层服务,或者说是应用层进程的端口号,不能分配给其他应用服务使用(其他的端口可以随意使用)
  • TPDU

    • Protocol Data Unit 协议数据单元(传输层中的PDU),传输层的数据单元是“数据段”
    • image.png
    • 数据类型
      • CR,连接请求
      • CC,连接确认
      • DR,断开连接请求
      • DC,断开连接确认
      • DT,数据
      • AK, 数据确认
      • ED, 加速数据
      • ….
    • 只有DT 和 ED 才有TPDU序列号

      传输层服务功能

  • 两个步骤

    • 虚拟传输连接的建立(此处仍仅针对面向连接的传输层协议)
    • 源端用户数据沿着传输连接传送到目的端
  • 寻址方案背景
    • 应用进程(包括客户端和服务器)可以将自己关联到一个TSAP上,以便与远程的TSAP建立连接
    • 只有少数常见的服务(如WWW、FTP、POP、SMTP、DNS、DHCP等)是固定分配了TSAP地址—端口
    • 发送主机的用户进程如何知道接收主机对应用户进程关联的TSAP地址,让每个服务进程都主动、持续地监听一个TSAP地址显然是非常不明智的,也浪费了大量的服务器资源
  • 寻址方案
    • 进程服务器的TSAP地址分配方案
      • 由进程服务器为各应用进程集中建立初始传输连接,然后再转给对应的服务进行正式的传输连接
      • 使用一个特殊的进程服务器(process server)来集中为那些较少使用的服务提供监听代理功能
      • image.png
    • 名称服务器的TSAP地址分配方案
      • 在一些特殊情况下还是有些服务的运行必须独立于进程服务器
      • 为了找到与给定的服务名字相对应的TSAP地址(端口),用户需要与名称服务器建立一个连接,然后用户发送一条消息指定它想要的服务名字,名称服务器则发回相应的TSAP地址
  • 传输连接建立
    • 向服务器端主机B发送一条CR(连接请求)TPDU,请求建立一条传输连接。
    • 向主机A发送一条CC(连接确认)TPDU
    • image.png
  • 重复传输连接的解决方法
    • 如果网络非常拥塞,确认TPDU分组都无法及时回到发送端,造成传输连接发起方会多次重试
    • 但是这些延迟的分组可能在过一段时间后到达了,于是又会请求建立新的连接,这就出现了重复连接的问题。
    • 非重复TSAP
      • 系统为每次连接赋予一个新的TSAP地址,当连接被释放时将此TSAP废弃
      • 不适用于那些知名服务的连接,他们的TSAP固定
    • 过时连接表
      • 为每个连接分配连接标识符,然后在每个新的连接请求到达时,根据标识符核对过时连接表,已过时的序列号,则视为重复连接
      • 需要每个传输实体无限期地维护一张历史记录表,不适应突变情况,如机器重启、系统崩溃等。
    • 分组的TTL机制
      • 先定义和计数每个分组的生存时间TTL,如果因超时未达目的地,则视为陈旧分组,将被抛弃
    • 三次握手机制
      • image.png
      • 第二次发送 CC TPDU时,宣告自己的初始连接序列号
      • 在接收到CC后,发送第一个数据的同时,对CC内部的初始序列号进行确认,连接才能建立
      • 如果出现了重复的CR请求,然后CC应答也会重复,这时候主机发现CC应答已经确认过了,就会拒绝连接
      • 通过三次握手机制可以有效地减少因延迟的重复CR TPDU分组而带来的负面影响,从而提高建立连接的安全性和可靠性
  • 数据传输
    • 连接建立之后,主机A发送普通数据, 普通数据是以DT TPDU进行发送的,序列号假定为 i
    • 主机B发送AK TPDU进行确认,你的TPDU序列号”(YR-TU-NR)字段为 i+1
  • 传输连接释放
    • 传输连接的释放分为“对称释放”和“非对称释放”两种。
      • “对称释放”是在各自独立发出释放连接请求,收到对方的释放确认之后才可释放连接
      • “非对称释放”是在发送释放请求后单方终止连接,但这样做有可能丢失对方发送的数据
  • 流量控制
    • 传输层协议采用的是在本章前面已多次提到的信用量(CDT)分配的窗口机制
    • 数据链路层 是 窗口尺寸固定的滑动窗口机制, 而传输层中的CDT值是随着数据的传输过程而不断变化
    • 在传输层的CR、CC、AK三类TPDU头部中,均有一个CDT字段,发送端则按当前接收缓冲区容量发送适量的TPDU
    • 注意的一个原则是,发送端的主机A收到了来自接收端的主机B的多少个确认TPDU,就可继续发送多个DTP TPDU,发送窗口大小不是固定的。
  • 多路复用
    • 多个传输连接复用同一个网络连接 (向上多路复用)
      • 假设一台机器只有一个网络地址可以使用,那么这台机器上的所有传输连接都必须使用这一个网络地址
    • 一个传输连接在多个网络连接上循环传输 (向下多路复用)
      • 在一个子网中使用了虚电路,并且每条虚电路上有最大的数据传输速率限制,当某个传输连接所需的带宽超过某一条虚电路所能提供的带宽时,就需要将这个传输连接以轮循的方式把数据流分配在不同的网络连接上
  • 崩溃恢复
    • 由于遇到主机或路由器不能正常工作而造成TPDU传输过程中断的现象称为崩溃
      • 如果网络层提供数据报服务,就需要传输实体留有丢失的TPDU的副本
      • 如果网络层提供面向连接的服务,则重建新的虚电路,重发丢失的TPDU
    • 从第N层崩溃中恢复只能由第N+1层来完成,并且只能在第N+1层留有足够状态信息的情况下才能完成。

TCP概述

  • TCP(传输控制协议)
  • 特性
    • 面向连接(可靠传输)
    • 仅支持单播传输(无法多播 和 广播)
    • 提供可靠的交付服务
      • 无差错、不丢失、不重复,且按时序到达
    • 仅一种TPDU格式(数据段头部已包括了各种TPDU所需的特征字)
    • 支持全双工传输
      • TCP连接的两端都设有发送和缓存
    • TCP连接是基于字节流的,而非报文流
    • 每次发送的TCP数据段大小和数据段数都是可变的
      • 而是根据对方给出的窗口大小和当前网络的拥塞程度来决定的
    • 如果应用层传送的报文太长,超出了MSS,则需要对报文进行分段
  • 数据段 格式
    • 每个TCP数据段的大小必须符合IP数据包的65515字节的有效载荷大小限制要求
    • 每个网络都有一个MTU值,因此,每个TCP数据段必须符合MTU的限制要求
    • TCP数据段也分为“数据段头”和“数据”两部分
    • image.png
  • Socket套接字
    • Socket并不能直接等同于TSAP,它们只是类似,实际上Socket只是利用了TSAP地址
    • “套接字”最早使用于UNIX操作系统中,后来被广泛地应用于Windows和Linux系统中,成为了事实上的TCP标准。
    • Socket可以看成是在两个网络应用程序进行通信连接时的一个端点,Socket是完全位于应用层,但它调用了传输层的端口
    • image.png
  • 端口
    • “端口”却是一种抽象的软件结构,是传输层TSAP地址
    • “端口号”的整数描述符,用来标识不同的端口或进程,16位,65535个端口
    • 每种应用层服务或应用进程都具有与传输层唯一连接的端口,并且使用唯一的端口号进行区分
    • 分类
      • 保留端口 0-1023,都已固定地分配给了已知的网络应用协议
      • 动态分配端口,大于1024,它们没有分配给固定的网络应用服务
      • 注册端口
  • TCP状态转移

    • image.png
    • image.png
    • 客户端发送最后的ACK数据段后,状态转变为TIME_WAIT,在等待2MSL后进入到CLOSED状态,最终释放整个TCP传输连接(为了避免ACK报文丢失,服务器重发,如果直接CLOSED状态会导致服务器一直重发,无法正常关闭)

      TCP可靠传输

  • 依靠四种机制

    • 字节编号机制
      • 确保每个字节的数据都可以有序传送和接收
      • 当主机接收到的数据段序号不连续时,不连续部分不会向应用层的应用进程进行提交,而是先缓存在“接收窗口”中
    • 数据段确认机制
      • 可以保证 正确接收数据
    • 超时重传机制
      • 在定时器过期之前该数据段还没有被对方确认的话,则定时器停止,然后重传对应序号的数据段
    • 选择性确认机制
      • 可以重传 仅没有确认的 数据

        TCP流量控制

  • 基于通信双方的数据发送和接收速率匹配方面考虑的,其最终目的就是不要让数据发送得太快,以便接收端能够来得及接收

  • 采用滑动窗口协议来进行的,TCP是以数据段为单位进行传输的
  • image.png

TCP拥塞控制

  • TCP的拥塞控制主要是依靠TCP连接双方商定的协议来减少数据的发送而实现的
  • 控制“网络拥塞”的出现
  • 方案
    • 慢启动
      • 在TCP连接正式传输数据时,每次可发送的数据大小(这就是“拥塞窗口”的含义)是逐渐增大的,也就是先发送一些小字节数的试探性数据,在收到这些数据段的确认后,再慢慢增加发送的数据量,直到达到了某个原先设定的极限值
    • 拥塞避免
      • 将窗口增长增量 从整数倍 改为 线性
    • 快速重传/快速恢复

UDP

  • 不面向连接的传输层—UDP(User Datagram Protocol,用户数据报文协议
  • 特点
    • 无连接性
    • 不可靠性
    • 以报文为边界, TCP以字节流为边界
    • 无流量控制和拥塞控制功能
    • UDP可单播,可多播
  • UDP数据报头部格式
    • image.png