《计算机网络》读书笔记整理(5)-- 运输层


概述

运输层向上面的应用层提供服务,是面向通信部分的最高层,也是用户功能中的最低层。运输层为应用进程之间提供端到端的逻辑通信。

运输层主要有两种协议,即面向连接的传输控制协议TCP(Transmission Control Protocol)和无连接的用户数据报协议UDP(User Datagram Protocol)。他们的协议数据单元分别称为TCP报文段和UDP用户数据报

UDP和TCP特点对比:

  • UDP的主要特点:

    • 无连接
    • 尽最大努力交付
    • 是面向报文的
    • 没有拥塞控制
    • 支持一对一、一对多、多对一和多对多的交互通信
    • 首部开销比较小
  • TCP的主要特点:

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

运输层使用一个16位的端口号来标志一个端口。TCP连接的端点叫做套接字(socket),端口号拼接到IP地址即构成了套接字。表示方法是在点分十进制的IP后写上端口号,用冒号隔开。每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。

传输控制协议TCP

TCP报文段首部里的一些字段说明:

  • 序号,32位,TCP中传输的每一个字节都按顺序编号,此字段表示当前报文段所发送数据的第一个字节的序号
  • 确认号,32位,指期望收到对方下一个报文段的第一个数据字节的序号。若确认号等于N,表明N-1为止的所有数据都已收到。
  • 窗口,16位,表示发送当前报文段的一方的接收窗口。即告诉对方,从确认号算起,接收方允许对方发送的数据量。

TCP滑动窗口

TCP的滑动窗口以字节为单位。滑动窗口分发送窗口和接收窗口。

发送方的应用程序把字节流写入TCP的发送缓存,发送窗口通常只是发送缓存的一部分。发送窗口表示在没有收到对方确认的情况下,当前可以把发送窗口内的数据都发送出去。

发送缓存数据由4个部分组成:

  • 已发送并收到确认的,此时这部分数据可删除
  • 已发送但未收到确认的
  • 允许发送但尚未发送的,又称为可用窗口,和前一个部分共同组成了发送窗口
  • 发送方应用程序传送给TCP准备发送的数据,但暂时还不允许发送的

接收方的应用进程从TCP的接收缓存中读取字节流,接收窗口通常只是接收缓存的一部分。接收窗口表示允许接收的数据范围,其中包含未按序到达的和尚能接收的数据。

接收缓存数据由3个部分组成:

  • 已发送确认并交付接收方进程,此时这部分数据可删除
  • 已发送确认但接收方进程尚未读取的
  • 未按序到达的数据和允许接收的数据,这就是接收窗口

超时重传时间

一个报文段发出到收到相应的确认间隔时间就是报文段的往返时间RTT。超时重传时间RTO(Retransmission Time-Out)比加权平均往返时间RTT稍大些。每一次发生重传时,重传的时间数据不会计入到RTO的计算中,但会将新的重传时间增大一些。

TCP流量控制和拥塞控制

流量控制

TCP的流量控制指让发送方发送速率不要太快,要让接收方来得及接收,使用滑动窗口来实现。

拥塞控制

TCP的拥塞控制指防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。发送方通过维持一个叫做拥塞窗口的状态变量并结合算法来进行拥塞控制,此值不能大于接收方的接收窗口值。

TCP有4种算法进行拥塞控制:

  • 慢开始(slow-start),刚开始传输的时候,由小到大逐渐增大发送拥塞窗口数值。
  • 拥塞避免(congestion avoidance),拥塞窗口到达慢开始阈值时,开始进行拥塞避免算法,让拥塞窗口缓慢增大。当出现超时的情况时(现在通信线路传输质量都比较好,差错率很低),可判断为网络拥塞,将慢开始阈值设置为拥塞窗口的一半,并重新进入慢开始阶段。
  • 快重传(fast retransmit),当只是个别报文缺失,并非网络拥塞时,要让发送方尽早知道发生了个别报文段的丢失,因此对已收到的报文进行重复确认。发送方收到重复确认后,会对确认序号之后的报文段立即进行重传。这样可以避免出现超时,让发送方误以为发生了网络拥塞而导致重新慢开始。
  • 快恢复(fast recovery),发送方收到重复确认后,知道只是丢失了个别报文段。因此不启动慢开始算法,而是执行快恢复算法。将慢开始阈值设置为拥塞窗口的一半,并设置拥塞窗口等于慢开始阈值,再执行拥塞避免算法。

拥塞避免阶段,拥塞窗口是按照线性规律增大的,称为加法增大(Additive Increase)。而慢开始和快恢复阶段,将慢开始阈值设置为当前拥塞窗口值的一半,并减小拥塞窗口的数值,称为乘法减小(Multiplicative Decrease)。两者合起来称为AIMD算法。

网络层对TCP拥塞控制影响最大的是路由器的分组丢弃策略,当路由器的缓冲队列已满,就会对后到达的队列进行丢弃。此时可能会同时影响多条TCP连接,结果使这些连接在同一时间进入到慢开始状态,称为全局同步(global syncronization)。一般使用主动队列管理AQM(Active Queue Management)在分组排队队列到达一定长度后就开始以概率p进行分组丢弃。

TCP的连接管理

TCP建立连接时需要在客户端和服务器之间交换三个TCP报文段。

客户端的状态变化依次是CLOSED、SYN-SENT、ESTABLISHED;服务器状态变化依次是CLOSED、LISTEN、SYN-RCVD、ESTABLISHED

TCP连接释放时需要在客户端和服务器之间交换四个TCP报文段。

主动释放连接的一方状态变化依次是ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、TIME-WAIT、CLOSED;被动释放的一方状态变化依次是ESTABLISHED、CLOSE-WAIT、LAST-ACK、CLOSED。

在被动释放的一方进入CLOSE-WAIT之后,发送最后一个FIN=1之前,属于半关闭(half-close)状态,还可以进行数据传送。

在主动释放的一方,发送最后一个ACK后,将进入TIME-WAIT状态,此状态一般持续2MSL(最大报文段寿命Maximum Segment Lifetime)。原因是:

  1. 最后一个ACK有可能丢失,如果不等待一段时间,会导致被动释放连接的一方不能正常进入CLOSED状态。
  2. 让当前连接持续时间内产生的所有报文段从网络中消失,从而不会影响下一次新连接。

参考文献:
[1] 谢希仁. 计算机网络(第7版)[M]. 北京:电子工业出版社,2017.

Published

Author

Levin

Category

Network

Tags

network book report
Disqus loading now...