首页 专栏 > 正文

传输层协议总结

2023-08-29 21:26:17 来源:博客园

笔记有道云链接

传输层就是在信纸的空白上写上新的“收信人”信息。每一所房子【某一个终端】会配备一个管理员(传输层协议)。管理员从邮差手中接过信,会根据“收信人”,将信送给房子中的某个人。使用端口号(port number)来识别收信人(某个进程)。

传输层协议

  • TCP 面向字节流服务
    • 面向连接,可靠,有序的协议
    • 通过滑动窗口、拥塞控制实现可靠和速度
    • 应用层提供的数据是一串无结构的字节流,传输层可以对数据进行分段,数据没有长度限制
  • DUP 面向报文服务
    • 无连接,不可靠,无序的协议
    • 应用层提供的是一系列报文,传输层不对报文进行分割和拼装,报文长度受限制


(资料图片仅供参考)

UDP

面向报文、无连接、差错检验、表示不同应用进程(绕过TCP协议,实现相对简单的快速通信)

协议分析

语法:格式,包括四个控制字段(发送端口、接收端口、长度、检验和)在IP分组的基础上,增加了源和目的端口号、检验和,因此可以解决发送进程和接收进程的标识问题语义:

  • 接收端发现UDP数据错误就丢掉
  • 有相应端口号对应的进程,把数据交给应用进程
  • 没有相应端口号对应的进程,则丢弃数据 没有时序,时序体现报文之间的关联性,而UDP每个报文是独立的

TCP

面向字节流、面向连接、表示不同应用进程、差错控制、拥塞控制

TCP 的连接管理

运输连接有三个阶段:连接建立、数据传输、连接释放

TCP连接:每个连接有四个参数(两个IP 保存在 IP 地址头部,两个端口号 保存在 TCP 头信息,序列号和应答号),内核中的TCP模块生成连接之后,将连接分配给进程使用。

为什么 TCP 是面向连接的

UDP通讯有四个参数:源IP、源端口、目的IP和目的端口。而TCP通讯至少有有六个参数:源IP、源端口、目的IP和目的端口,以及序列号和应答号。

因此对TCP连接的连接概念可以简单理解成为同UDP通讯相比,用序列号和应答号确定了相互之间的连接特征,来保证数据传输的正确性。 参考网站

TCP 有序可靠通信

  • 通过序号保证字节流有序
  • 通过确认应答、记时重发 保证数据发送正确(数据错了、顺序错了、重复接收)
  • 通过滑动窗口(累计确认)保证传输的效率和实现流量控制
  • 保证传递效率 <拥塞控制>

TCP重发:超时重发、快速重发。

在TCP协议中,我们使用连接记录TCP两端的状态,使用编号和分段实现了TCP传输的有序,使用advertised window来实现了发送方和接收方处理能力的匹配,并使用重复发送来实现TCP传输的可靠性。

滑动窗口和累积确认

  • 发送方:发送窗口内的分组都可以连续发送不需要等待对方确认
  • 接收方:不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认

TCP 拥塞控制 保证网络的传输效率和稳定性

拥塞:指分组交换设备中经过某条链路的流量超出链路的传输能力,使得输出队列缓存中等待输出的报文越来越多,以至于发生输出队列溢出报文丢弃的情况

解决拥塞的简单办法:控制发送端流量。

确定发生拥塞:TCP报文过程中发生丢失报文、重传定时器溢出、连续接受多个重复确认应答】->需要调整发送端流量。(参考:计算机网络【七】:可靠传输的实现)

拥塞窗口CWND:

慢启动:从小到大逐渐成倍增大拥塞窗口的值。(发送拥塞会设置一个慢开始门限 ssthresh = cwnd /2)

拥塞避免:让拥塞窗口的值缓慢的增大。

快重传:尽早知道个别数据包的丢失。发生数据的丢失连续收到3个重复的确认,发送丢失数据包。

快恢复设置新的慢开始门限为慢开始的一半,重新拥塞避免。

TCP差错控制与传输网络差错控制之间的关系

  • 链路层担负起检错的重责 CRC循环冗余检验(检测数据报的正确性)
  • TCP差错控制不能取代传输网络差错控制的原因(检测数据的正确性)

三次握手

TCP 三次握手丢了包怎么办

硬不硬你说了算!40 张图详解 3 次握手和 4 次挥手

  • SYN 攻击,服务器保持在 SYN-RECV 状态

两次同部位,两次确认位

我需要链接服务器:同部位 SYN,seq 序号为 x

ok,你可以链接:同部位SYN + 确认位ACK

ok,可以链接真开心:确认位ACK(第三次握手可以携带数据)

SYN 同部位 ACK 确认位

seq 发送了多少的序号

ack 确认了多少序号

  • ACK不携带数据不消耗序号。
  • SYN不能携带数据,要消耗一个序号。

某端 发送了多少序号,需要等到对方返回 ACK 才可以确定。

为什么需要三次握手:

  • 三次握手才可以阻止历史重复连接的初始化(主要原因)(两次握手就建立连接,可能建立的是旧的客户端链接)
  • 三次握手才可以同步双方的初始序列号
  • 三次握手才可以避免服务器端资源浪费

标签: