计算机网络杂记-11

参考资料

  • TCP/IP 协议-05-TCP 如何保证传输的可靠性

  • 计算机网络(三)–TCP如何保证传输可靠性

  • NET 网络专题汇总-06-12-在 TIME_WAIT 状态的 TCP 连接,收到 SYN 后会发生什么?

TCP 可靠传输的实现

TCP 基于以字节为单位的滑动窗口机制实现可靠传输,TCP 的滑动窗口机制是 TCP 实现可靠传输的核心机制。

  • 发送方的发送窗口是根据接收方的接收窗口大小和网络拥塞程度动态调整的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口大小相等的

    • 网络传送窗口值需要经历一定时间滞后,并且这个时间不是固定的,而是动态变化的
    • 发送方还可能根据网络拥塞程度调整发送窗口的大小,发送方的发送窗口大小并不总是和接收方的接收窗口大小相等的
  • 对于不按序到达的数据的处理,并无明确的说明

    • 接收方把不按序到达的数据丢弃,那么发送方会重传这些数据,虽然接受窗口的管理比较简单,但是这种方式会导致网络资源的浪费
    • 通常将不按序到达的数据缓存起来,等待缺失的数据到达后再交付给应用层,这种方式会增加接收方的复杂度,但是可以减少网络资源的浪费
  • TCP 要求接收方必须有累计确认和捎带确认两种确认方式

    • 这样可以减少传输开销,接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息捎带上去
    • 但接收方不应该过分延迟确认,否则会导致发送方重传数据,浪费网络资源
    • 捎带不常用,因为大多数应用程序很少同时在两个方向上传输数据
  • TCP 是全双工通信的,发送方和接收方都有自己的发送窗口和接收窗口

    • 发送方的发送窗口是根据接收方的接收窗口大小和网络拥塞程度动态调整的
    • 接收方的接收窗口是根据发送方的发送窗口大小和接收方的处理能力动态调整的

TCP 运输连接管理

TCP 连接的建立

TCP 连接的建立是三次握手的过程,三次握手的过程是为了确保双方都能够发送和接收数据。

  • 第一次握手:客户端发送一个 SYN 报文段给服务器端,请求建立连接

  • 第二次握手:服务器端接收到客户端发送的 SYN 报文段后,发送一个 SYN 报文段和一个 ACK 报文段给客户端,确认客户端的请求

  • 第三次握手:客户端接收到服务器端发送的 SYN 报文段和 ACK 报文段后,发送一个 ACK 报文段给服务器端,确认服务器端的请求

TCP 连接的释放

TCP 连接的释放是四次挥手的过程,四次挥手的过程是为了确保双方都能够正确关闭连接。

  • 第一次挥手:客户端发送一个 FIN 报文段给服务器端,请求关闭连接

  • 第二次挥手:服务器端接收到客户端发送的 FIN 报文段后,发送一个 ACK 报文段给客户端,确认客户端的请求

  • 第三次挥手:服务器端发送一个 FIN 报文段给客户端,请求关闭连接

  • 第四次挥手:客户端接收到服务器端发送的 FIN 报文段后,发送一个 ACK 报文段给服务器端,确认服务器端的请求

TCP 报文段的首部格式

TCP 报文段的首部格式如下:

  • 源端口号:16 位,标识发送方的端口号

  • 目的端口号:16 位,标识接收方的端口号

  • 序列号:32 位,标识数据的顺序

  • 确认号:32 位,标识数据的确认

  • 首部长度:4 位,标识首部的长度

  • URG:1 位,标识紧急指针是否有效

  • ACK:1 位,标识确认号是否有效

  • PSH:1 位,标识接收方是否应该立即交付数据

  • RST:1 位,标识连接是否重置

  • SYN:1 位,标识连接是否建立

  • FIN:1 位,标识连接是否释放