计算机网络——运输层

运输层协议概述

  • 运输层向它上面的应用层提供通信服务,再次强调路由器在转发分组时只使用下三层,网络层提供主机之间的逻辑通信,而运输层提供应用进程之间的逻辑通信。

  • 运输层提供差错检测

  • 用户数据报协议UDP(User Datagram Protocol) 、传输控制协议TCP(Transmission Control Protocol)

  • TCP传输数据单位——TCP报文段、UDP传输数据单位——UDP用户数据报

  • TCP三个重要问题:滑动窗口流量控制拥塞控制

  • 运输层的端口:

    • 端口号(协议端口号)只有本地意义

    • 用一个16位的端口号来标志一个端口,即 0~65535

    • 服务器端使用的端口号:

    1. 熟知端口号(0~1023)

      应用进程FTPTELNETSMTPDNSTFTPHTTPSNMPSNMP(TRAP)HTTPS
      熟知端口号212325536980161162443
    2. 登记端口号(1024~49125)

    • 客户端使用的端口号(短暂端口号)(49125~65535)

用户数据报协议 UDP

  • UDP 是无连接的

  • UDP 使用尽最大努力交付

  • UDP 是面向报文的:对应用层交下来的报文既不合并,也不拆分,只是添加上首部后就向下交给网络层

  • UDP 没有拥塞控制

  • UDP 支持一对一、一对多、多对一和多对多的交互通信

  • UDP 首部小,只有 8 字节,而 TCP 有20字节

    2字节2字节2字节2字节
    源端口目的端口长度检验和

传输控制协议 TCP

  • TCP是面向连接的
  • TCP提供可靠交付,保证无差错、不丢失、不重复并且按序到达
  • TCP提供全双工通信
  • TCP是面向字节流

TCP的连接

  • TCP 连接的端点叫做套接字(socket)

套 接 字 s o c k e t = ( I P 地 址 : 端 口 号 ) T C P 连 接 : : = { ( I P 1 : p o r t 1 ) , ( I P 2 : p o r t 2 ) } 套接字 socket = (IP地址:端口号)\\ TCP连接::=\{(IP_{1}:port_{1}),(IP_{2}:port_{2})\} socket=(IP:)TCP::={(IP1:port1),(IP2:port2)}

TCP报文段的首部格式

在这里插入图片描述

  • 源端口和目的端口:各占两个字节
  • 序号:占4个字节。TCP 是面向字节流的,要对TCP连接中的**每一个字节按顺序编号。**序号字段表示本报文段所发送数据的第一个字节的序号。
  • 确认号:占4个字节。是期望收到对方下一个报文段的第一个数据字节的序号。若确认号是N,则表示到序号 N-1 为止的所有数据都已经正确收到。
  • 数据偏移:占4位。这个字段指出本TCP报文段数据部分相对于报文段起始点的距离。实际上就是本TCP报文段首部的大小
  • 保留:占6位。留待今后用,现在置为0。
  • 紧急URG(URGent):当URG为 1 时,表明紧急指针字段有效。发送方TCP 就会把紧急数据插入到本报文段数据的最前面,要和首部中的紧急指针字段结合使用。
  • 确认ACK(ACKnowledgment):仅当确认号为 1 时,确认号才有效。规定:在建立连接后,所有传输的报文段都必须把ACK置为 1。
  • 推送 PSH(PuSH):当两个进程进行交互通信时,希望收到对方的及时回应,就可以使用推送(push)操作,这时发送方把PSH置为 1,则发送方TCP会立即创建一个报文段并将其发出去,接受方收到PSH为 1 的报文段时,就会将其立即上交给应用进程,而 不必等到TCP缓存满了以后再统一上交。
  • 复位 RST(ReSeT):当 RST 为 1 时,表明TCP 连接出现了严重的问题,需要释放连接,然后重新建立运输连接。
  • 同步 SYN(SYNchronization):**在建立连接时同步序号,**当SYN=1、ACK=0 时,表明这是一个连接请求报文段,对方若同意建立连接,则在响应的报文段中置 SYN=1、ACK=1。
  • 终止 FIN: 用来释放一个连接。当FIN =1 时,表明发送方的数据已经发送完毕,并要求释放运输连接。
  • 窗口:占 2 个字节。作为接收方发送方设置其发送窗口的一个依据。它是动态变化的。
  • 检验和:占 2 个字节。检验首部和数据。
  • 紧急指针:占 2 个字节。它表明了本报文段紧急数据的字节数。只有在 URG=1 时有效。窗口为0 时,也可以发送紧急数据。

可靠传输的工作原理

  • 通过确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信,我们把这种可靠传输协议称为自动重传请求ARQ
  • 使用流水线传输时,就要使用连续ARQ协议滑动窗口协议
  • 连续ARQ协议:发送方维持一个发送窗口,每接受到一个分组的确认就向前移动一个分组的位置。接收方一般都采用累计确认的方式,即对按序到达的最后一个分组进行确认。

TCP可靠传输的实现

参见计算机网络(第7版)谢希仁

流量控制

利用滑动窗口可以很方便的实现TCP连接的流量控制

拥塞控制

  • 流量控制往往是指点对点通信量的控制,是一个端到端的问题;而拥塞控制是一个全局性的问题,网络拥塞往往是因为整个系统的各个部分不匹配导致的。

  • TCP 的拥塞控制方法:

    1. 慢开始
    2. 拥塞避免
    3. 快重传
    4. 快恢复

    拥塞控制算法解释:

    • 超时是判断网络是否出现拥塞的依据。

在这里插入图片描述
*门限值初始值设为16

  • 发送窗口等于拥塞窗口

  • TCP 实际运行中,发送方只要收到一个新报文段的确认,就把拥塞窗口立即加 1 ,并且可以立即发送新的报文段,不需要等到这一轮次的所有报文段都收到确认再发送新的报文段。

  • 在拥塞避免阶段,拥塞窗口是按照线性规律增大的,这称为加法增大AI。而一旦出现超时或者3个重复的确认,就要把门限值(ssthresh)设置为当前拥塞窗口值的一半,并大大减少拥塞窗口的数值,这称为乘法减少MD。两者合一就是所谓的AIMD算法

  • 发送方窗口的上限值:Min [ rwnd,cwnd ] *rwnd是接收方窗口

在这里插入图片描述

TCP 的运输连接管理

TCP 连接建立过程有三个阶段:连接建立数据传送连接释放

TCP连接建立

TCP 建立连接的过程叫握手,需要在客户和服务器之间交换三个 TCP 报文段,因此也叫三报文握手(有的也叫三次握手,其实是在一次握手时交换了三个报文)。建立连接过程如下图。

在这里插入图片描述

注释:

  • 最开始由 B 的TCP服务器进程先创建传输控制模块 TCB,准备接受客户进程的连接请求。A 的TCP 客户进程也是首先创建传输控制模块 TCB

  • TCP 规定SYN 报文段不能携带数据,但是要消耗掉一个序号

  • TCP 规定。ACK报文段可以携带数据,但是如果不携带数据则不消耗序号,下一个报文段序号仍是 seq=x+1

  • 为什么A要发送最后一个确认?

    主要是为了防止已失效的连接请求报文段突然又传回 B。

    已失效的连接请求报文段:

    考虑一种正常情况, A发出连接请求,但因连接请求报文丢失而未收到确认。于是A再重传一次连接请求。 后来收到了确认,建立了连接。数据传输完毕后,就释放了连接。A共发送了两个连接请求报文段,其中第一个丢失,第二个到达了B,没有“已失效的连接请求报文段”。

    现假定出现一种异常情况, 即A发出的第一个连接请求报文段并没有丢失,而是在某些网络结点长时间滞留了,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段。但B收到此失效的连接请求报文段后,就误认为是A又发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用报文握手,那么只要B发出确认,新的连接就建立了。

    由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据,但是 B 以为新的运输连接已经建立了,并一直等待A发来数据。B的许多资源就这样白白浪费了。

TCP连接的释放

数据传输结束后,通信双方都可以释放连接报文段。如下图 。

在这里插入图片描述

注释:

  • FIN 报文段即使不携带数据,也要消耗一个序号。

  • MSL 叫做最长报文寿命

  • 为什么 A 在 TIME-WAIT 状态必须等待 2MSL?

    第一,为了保证入发送的最后一个ACK报文段能够到达B。

    ​ 这个ACK报文段可能丢失,因而使处在LAST-ACK状态的 B 收不到对已发送的 FIN+ACK报文段的确认。B 会超时重传这个FIN+ACK报文段,而A就能在 2MSL时间内收到这个重传的 FIN+ACK 报文段。接着 A 重传一次确认,重新启动2MSL计时器,最后,A和 B 都正常进人到 CLOSED 状态。如果 A 在TIME-WAIT状态不等待,而是在发送完ACK报文段后立即释放连接,那么就无法收到重传的 FIN+ACK 报文段因而也不会再发送一次确认报文段。这样,B就无法按照正常步骤进入CLOSED状态。

    第二,防止上一节提到的已失效的连接请求报文出现在本连接中。

    ​ A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续时间内所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

    ​ B只要收到了A发出的确认,就进入CLOSED状态。同样,B在撤销相应的传输控制块TCB后,就结束了这次的TCP连接。我们注意到,B 结束 TCP连接的时间要比 A 早一些。

    ​ B只要收到了A发出的确认,就进入CLOSED状态。同样,B在撤销相应的传输控制块TCB后,就结束了这次的TCP连接。我们注意到,B 结束 TCP连接的时间要比 A 早一些。

  • 除时间等待计时器外,TCP 还设有一个保活计时器(keplive timer), 设想有这样的情况,客户已主动与服务器建立了TCP连接。但后来客户端的主机突然出故障。显然,服务器以后就不能再收到客户发来的数据。因此,应当有措施使服务器不要再白白等待下去。这就是使用保活计时器。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两个小时。若两小时没有收到客户的数据,服务器就发送一个探测报文段,以后则每隔75秒钟发送一次。若一连发送10个探测报文段后仍无客户的响应,服务器就认为客户端出了故障,接着就关闭这个连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值