传输层协议——TCP、UDP

目录

1、UDP 协议(用户数据报协议)

协议特点

报文首部格式

2、TCP 协议(传输控制协议)

协议特点

报文首部格式

TCP连接建立时的三次握手

TCP拆除连接的四次挥手

TCP的流量控制

TCP的拥塞控制

3、传输层端口号

三类端口号

一些熟知端口号


协议类型 是否面向连接 是否可靠 传输效率 开销 通信方式
UDP 单点/多点 到 单点/多点
TCP 点到点

1、UDP 协议(用户数据报协议)

协议特点

  • 无连接
  • 面向报文
  • 首部开销小(8字节)
  • 尽最大努力交付,不保证可靠,不提供拥塞控制
  • 支持 一 or 多 对 一 or 多 通信

报文首部格式

2、TCP 协议(传输控制协议)

协议特点

  • 面向字节流(将应用层交下来的数据当成字节来处理,并对其进行相应的编号)
  • 面向连接
  • 每一条 TCP 连接只有两个端点(一对一的连接)
  • 保证可靠交付
  • 可以全双工通信

报文首部格式

源端口和目的端口的取值为0~65535;

序号(seq)表示本报文段的数据的第一个字节的序号,取值为 0 ~ 2^{32} - 1;

确认号(ack)表示期望收到对方下一个报文段的第一个数据字节的序号,取值为 0 ~ 2^{32} - 1;

数据偏移 表示TCP首部的长度,可以方便地识别出数据段的起始位置,最小长度为5(0101),单位是字节,则首部的最小长度为20字节;

紧急指针 当 URG 位为 1 时,此字段有效,并会指出需要紧急发送的数据;

填充字段 长度可变,用于确保TCP报文的首部长度为 4 字节的整数倍;

字段 占位 说明
控制字段 URG(1bit) 紧急位;当为1时表示有数据要紧急发送
ACK(1bit) 确认位;这里是大写,与确认号(小写ack)区分开来;当为1时确认字段有效,表示肯定应答
PSH(1bit) 推送位;置为1时,立即发送TCP报文
RST(1bit) 复位位;置为1时表示TCP连接有严重错误,需要重新建立连接;也可以用于拒绝一个连接
SYN(1bit) 同步位;置为1时,表示正在建立一个TCP连接
FIN(1bit) 终止位;置为1时,表示正在释放一个TCP连接
窗口 16 bit 接收空闲窗口值,用于实现TCP流量控制

TCP连接建立时的三次握手

三次握手的作用是为了避免产生错误的连接

        主机 A 向服务器 B 发送 SYN 表示请求建立一个 TCP 连接,即便是没有数据,也要消耗一个 seq。此时直到没有收到目标服务器第一次回应前,主机 A 处于SYN-SENT 状态。

        服务器 B 在没有接收到TCP连接请求前,属于 LISTEN 的监听状态。

        服务器响应给主机 A SYN,表示也向主机 A 请求建立一个连接,ACK=1 表示同意了刚才主机 A 的连接请求,服务器 B 也要消耗一个 seq,seq = y,ack = x + 1,表示确认了刚刚主机发送过来的数据内容,并且提出期望,希望主机 A 下次发送消息给服务器 B 时的 seq 为 x + 1。此时服务器 B 需要等待主机 A 的响应,此时也转变到 SYN-SENT 状态。

        主机 A 接收到服务器B的回应,再回应服务器 B ,ACK=1 表示确认了服务器 B 的TCP建立请求,响应服务B的期望,即便展示还没有数据,也发送一个seq,seq = x + 1,同时 ack = y + 1,也是对刚刚服务器 B 发送过来的内容的一个确认,同时也提出期望,希望服务型下次发送消息时的 seq 为 y + 1。同时将状态设置为 ESTABLISHED,表示已经建立起连接。

        服务器 B ,收到主机 A 的响应,确认无误后也将状态设置为 ESTABLISHED,表示TCP连接成功建立。

        此时主机 A 和服务器 B 已经建立起了一条TCP连接,双方可以正常进行数据传送。

状态 说明
SYN-SENT 发送了SYN请求,请求建立TCP连接的第一步
LISTEN 监听SYN报文的状态
SYN-RCVD 接收到SYN请求报文后的状态
ESTABLISHED TCP连接建立成功的状态

TCP拆除连接的四次挥手

        当主机 A 发送 FIN = 1 (断开连接)标志后,它会进入 FIN-WAIT-1 状态,等待对方确认关闭。当主机收到对方的 ACK = 1(确认)标志后,主机 A 会进入 FIN-WAIT-2 状态。此时,主机 A 已经断开了到对方的连接,但尚未完全断开TCP连接,仍等待对方发送 FIN 标志以确认对方的关闭。

        只有在主机 A 收到对方的 FIN 标志并发送 ACK 标志确认后,才会进入 TIME-WAIT 状态,此时主机才真正关闭了TCP连接。

状态 说明
FIN-WAIT-1 发送了第一个 FIN 请求,等待对方确认
FIN-WAIT-2 等待对方的 FIN 请求
CLOSE-WAIT 等待自己进程发出断开连接的命令
LAST-ACK 等待对方最后一次确认
TIME-WAIT 等待足够的时间,以确保对方接收到了确认
CLOSED 关闭状态

TCP的流量控制

        流量控制是针对两端之间的通信的。考虑的是发送方和接收方之间的数据传输速率之间的差异。

        TCP流量控制是通过可变大小的滑动窗口机制实现的。即 让数据发送端传输的速率不要太快,让数据接收端来得及接收。
    

        数据传输窗口 win 在连接建立时由双方商定。但在通信的过程中,数据接收端可根据自己的资源情况,随时动态地调整对方的传输窗口大小。(上面经过协商后,窗口大小为3)

        接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。

        接收方通常会在接收到数据后立即发送一个 ACK 报文,确认收到数据并通知发送方此时窗口的大小。如果接收方的缓冲区已满,它会将窗口大小设置为0,发送方就会停止发送数据。当接收方处理完数据后,它会将窗口大小设置为一个大于 0 的值,并发送 ACK 报文通知发送方,以便发送方继续发送数据。

TCP的拥塞控制

        拥塞控制是针对整个网络的通信而言的,考虑的是网络中的各个路由器和线路的资源利用情况,以避免因过多的数据流量导致网络拥塞。

        四种常见的拥塞控制方法:

  • 慢开始
  • 拥塞避免
  • 快重传
  • 快恢复

拥塞窗口(cwnd):是发送方维护的一个状态变量,其大小取决于网络的拥塞程度,并且会动态变化;

慢开始门限(ssthresh):为了防止拥塞窗口 cwnd 的增长过大而引起网络拥塞所设置的一个门限值;

cwnd < ssthresh 执行慢开始算法
cwnd = ssthresh 可以使用慢开始算法,也可以使用拥塞避免算法
cwnd > ssthresh 使用拥塞避免算法

慢开始:每经过一个传输轮次,cwnd 的值都会加倍,从小到大增大 cwnd;

拥塞避免:每经过一个传输轮次,cwnd 的值都会加 1,从小到大缓慢增大 cwnd;

快重传:接收方每收到一个失序报文段后就会立即发出重复确认 ACK,若发送方一连收到三个重复确认,就会立即重传对方尚未收到的报文段。因此能尽早重传未被确认的报文,而不是等待超时;

快恢复:当发送方连续收到三个重传确认 ACK 时,就执行乘法减小算法,把门限值减半(当前 cwnd值的一半),同时把 cwnd 值设置为减半后的门限值,并执行拥塞避免算法;

乘法减小:出现超时(可能是拥塞时),则 ssthresh 减半(当前 cwnd 值的一半),同时执行慢开始算法;

加法增大:执行拥塞避免算法,使 cwnd 增大;

        如上图,初始慢开始门限为16,cwnd 从 1 开始,每当发送方接收到一个 ACK 确认报文时,都会使 cwnd 增大(在达到门限值前使用慢开始算法增大)。

        [① ~ ②] 当到达门限值后,改用避免拥塞算法来缓慢增大 cwnd;

        [② ~ ③] cwnd = 24 时发生超时,则门限减半,即 ssthresh = 12,然后下一次接收到 ACK 确认报文时,cwnd 从 1 开始,使用慢开始算法来递增;

        [③ ~ ④] cwnd = 12 时,到达了门限,则改用拥塞避免算法缓慢递增;

        [④ ~ ⑤] 到 ④ 时,cwnd = 16,发送方一连收到三个重复确认,则门限减为当前 cwnd 的一半,即 ssthresh = 8,而 cwnd 变为与门限值一致;

        [⑤ ~] 由于cwnd = ssthresh,开始采用避免拥塞算法来进行增加;

3、传输层端口号

三类端口号

  • 熟知端口 0 ~ 1023
  • 登记端口 1024 ~ 49151
  • 客户端口号 49152 ~ 65535

一些熟知端口号

端口号 服务类型
TCP 20 文件传输协议(数据)
TCP 21 文件传输协议(控制)
TCP 23 Telnet 终端仿真协议
TCP 25 SMTP 简单邮件发送协议
TCP 80 超文本传输协议(HTTP)
TCP 110 POP3 服务器(邮箱接收服务器)
TCP 443 安全超文本传输协议(HTTPS)
端口号 服务类型
UDP 53 域名服务器(DNS)
UDP 67 DHCP(服务端)
UDP 68 DHCP(客户端)
UDP 69 简单超文本传输协议(TFTP)
UDP 161 SNMP(轮询)
UDP 162 SNMP(陷阱)
UDP 520 RIP 路由协议

猜你喜欢

转载自blog.csdn.net/hao_13/article/details/133522962