网络笔记 P04:传输层

1.概述

传输层的功能:提供进程间的逻辑通信、复用与分用(使用端口地址区分进程)、差错控制。

传输层寻址

传输层使用端口号区分不同的进程,并实现对网络层连接的复用。端口号长度为 16 位,能够表示 65536 个不同的端口号。其中 0~1023 是熟知的端口号,已经指派给了一些常用应用程序;1024~49151 为登记端口,49152~65535 为短临时端口。

比较常用的端口号:

FTP TELENT SMTP DNS TFTP HTTP SNMP
21 23 25 53 69 80 161

进程之间在网络中的通信使用套接字,为(主机 IP 地址,端口号)。

2.UDP 协议

UDP 只提供信道的复用和分用、差错控制。UDP 无需建立连接,尽最大努力交付。

UDP 数据报

UDP 首部包含 2 字节的源端口号、2 字节的目的端口号、2 字节的 UDP 长度、2 字节的 UDP 校验和。

为计算校验和需要将 UDP 首部增加 12 字节的伪首部使其有 16 字节,伪首部包含 4 字节的源 IP 地址、4 字节的目的 IP 地址、1 字节全零、1 字节的 UDP 协议号 17、2 字节的 UDP 长度。

校验和计算整个 UDP 数据报(伪首部、首部、数据),校验时先将校验和字段置零,将数据字段用零填充至偶数字节,按 16 位字的补码求和再求补码,放入校验和。如果不使用校验和,则该字段全零。

3.TCP 协议

TCP 协议是面向连接的协议,提供可靠的交付服务,保证数据无差错、不丢失、不重复、不失序。TCP 是全双工的。

TCP 报文段

  • URG 位:URG=于 1 时,紧急指针字段有效。

  • ACK 位:ACK=1 时,确认号字段有效。

  • PSH 位:TCP 接收到 PSH=1 的报文段,会尽快交付给进程。

  • RST 位:RST=1 时,表明 TCP 连接严重错误,需要释放连接再重新建立。

  • SYN 位:SYN=1 时,为连接请求报文或连接就收报文。

    当 SYN=1、ACK=0 时, 是一个连接请求报文,请求建立 TCP 连接;当 SYN=1、ACK=1 时,是一个连接接收报文。

  • FIN 位:终止位,当释放连接时 FIN=1。

TCP 连接

TCP 连接的建立,称为三次握手。
  • 客户机主动打开端口,发送连接请求报文,SYN=1,ACK =0,seq = x;
  • 服务器收到请求后,如果同意连接,为此连接分配 TCP 缓存和变量,发送连接确认报文,SYN=1,ACK=1,seq = y,ack =x+1;
  • 客户机收到确认报文后,分配 TCP 缓存和变量,想服务器确认,SYN=0,ACK=1,seq=x+1,ack=y+1。
TCP 连接的释放
  • 客户机打算关闭连接,会发送一个连接释放报文,FIN=1,seq=u;服务器收到此报文,同意释放连接,发送确认,ACK=1,ack=u+1。此时只是客户机不再想服务器发送数据,并不影响服务器向客户机发送数据。
  • 同样的,服务器打算关闭连接,也执行同样的步骤。

TCP 可靠传输

  • 报文段的序号保证数据有序。
  • 确认机制保证报文段到达。
  • 重传。当发生确认超时时,会触发重传;当收到 3 个对同一报文段的冗余 ack 时,说明后面的报文段丢失,触发快速重传。

TCP 重传计时器

当发送方发送一个报文段,立即触发计时,若该报文段的确认时间 R 超过重传超时值 RTO,则触发重传。RTO 是一个动态的值,\(\text{RTO} = \text{SRTT} + 4 \times \text{RTTVAR}\),其中 SRTT 为平滑往返时间,RTTVAR 往返时间变化。

当一个报文段的确认时间没有超过 RTO,则需要对 RTO 进行更新:

\[\text{SRTT} = \alpha \text{SRTT} + (1-\alpha) \text{R} \]

\[\text{RTTVAR}=\beta \text{RTTVAR} + (1-\beta) \mid \text{SRTT} - \text{R} \mid \]

\[\text{RTO} = \text{SRTT} + 4 \times \text{RTTVAR} \]

其中,\(\alpha\)通常取 7/8,\(\beta\)通常取 3/4。

Karn 算法建议上述过程不更新重传段的时间,同时每次连续重传的超时间隔值加倍。

TCP 流量控制

基于滑动窗口协议的流量控制机制,发送方根据接收方的接收窗口 rwind 和网络的拥塞窗口 cwind 中最小的,决定发送数据的多少。rwind 由接收方的缓存决定,cwind 由拥塞控制决定。TCP 拥塞控制实际是维护 cwind 的大小。

TCP 拥塞控制

拥塞控制是由发送方自己来实现控制的,自己维护 cwind。而流量控制需要接收方反馈 rwind。

  • 慢启动算法:设置 cwind=1,单位为最大报文长度;每收到一个报文段的确认,将 cwind 加 1,实际表现为每经过 RTT 时间 cwind 翻倍;至达到慢启动阈值,切换至线性增加。
  • 拥塞避免算法:即上述的线性增加,每经过一个 RTT,cwind 加 1。
  • 当网络出现拥塞时,即发生确认超时,将慢启动阈值设置为当前 cwind 的一半,cwind 设置为 1,重新开始慢启动算法和拥塞避免算法。
  • 快重传机制:当发送方连续收到 3 个对同一报文段的冗余 ACK,表明后面的报文段没有接收到,此时发送方不需要等到超时就对之后的报文段重传,称为快重传机制。
  • 快恢复机制:当发送方连续收到 3 个对同一报文段的冗余 ACK,慢启动阈值设定为当前 cwind 的一半,cwind 设定为改变后的阈值,直接执行线性增加。
posted @ 2020-07-30 16:15  ixtwuko  阅读(291)  评论(0编辑  收藏  举报