Tcp宝典大全

TCP头部长度和格式?TCP默认窗口大小?数据太大怎么办?分片后会乱序嘛?出现差错了怎么办?

TCP头部格式

TCP头部的最小长度是20字节,包括以下字段:

  1. 源端口号(Source Port):16位,表示发送端的端口号。
  2. 目标端口号(Destination Port):16位,表示接收端的端口号。
  3. 序列号(Sequence Number):32位,用于字节流的顺序控制。
  4. 确认号(Acknowledgment Number):32位,表示期望接收的下一个字节的序号。
  5. 数据偏移(Data Offset):4位,表示TCP头部的长度,单位是32位字(4字节)。最小值是5,表示头部长度为20字节。
  6. 保留位(Reserved):6位,保留供将来使用,通常设置为0。
  7. 控制位(Flags):6位,包括URG、ACK、PSH、RST、SYN、FIN。
  8. 窗口大小(Window Size):16位,表示接收方的接收窗口大小。
  9. 校验和(Checksum):16位,用于校验头部和数据的完整性。
  10. 紧急指针(Urgent Pointer):16位,仅当URG标志置位时有效,表示紧急数据的偏移量。
  11. 选项(Options):可变长度,用于支持各种TCP选项。

TCP默认窗口大小

TCP默认窗口大小(Window Size)是接收方告诉发送方自己能够接收的最大数据量。默认情况下,TCP窗口大小为65535字节(64KB),但可以通过窗口缩放选项(Window
Scaling Option)扩展到更大的值。

数据太大怎么办?

当发送的数据超过了网络的最大传输单元(MTU,通常为1500字节),TCP会将数据分片(segmentation)成多个较小的段(segment),每个段都包含TCP头部和一部分数据。分片后的数据段通过网络传输,接收方会重新组装这些段。

分片后会乱序吗?

在传输过程中,数据段可能会由于网络拥塞、路由变化等原因而乱序到达接收方。TCP使用序列号(Sequence
Number)来确保数据段按正确的顺序重新组装。接收方根据序列号将数据段按正确的顺序排列,丢失的数据段会通过重传机制重新发送

出现差错了怎么办?

TCP提供了多种机制来处理传输中的差错,包括:

  1. 校验和(Checksum)
    • 每个TCP段都包含一个16位的校验和,用于校验头部和数据的完整性。如果接收方检测到校验和不匹配,会丢弃该段并请求重传。
  2. 确认和重传(Acknowledgment and Retransmission)
    • 接收方会发送确认(ACK)消息给发送方,表示成功接收到的数据。如果发送方在超时时间内没有收到ACK,会重传数据段。
  3. 序列号和确认号(Sequence and Acknowledgment Numbers)
    • TCP使用序列号和确认号来确保数据的有序传输和完整性。接收方根据序列号重新组装数据,并通过确认号通知发送方已接收的数据。
  4. 重传超时(Retransmission Timeout, RTO)
    • TCP根据网络状况动态计算重传超时时间。如果发送方在超时时间内没有收到ACK,会重传数据段。
  5. 快速重传(Fast Retransmit)
    • 如果发送方连续收到三个相同的ACK,表示可能发生了丢包,发送方会立即重传丢失的数据段,而不必等待重传超时。

__END__