Tcp宝典大全
TCP头部长度和格式?TCP默认窗口大小?数据太大怎么办?分片后会乱序嘛?出现差错了怎么办?
TCP头部格式
TCP头部的最小长度是20字节,包括以下字段:
- 源端口号(Source Port):16位,表示发送端的端口号。
- 目标端口号(Destination Port):16位,表示接收端的端口号。
- 序列号(Sequence Number):32位,用于字节流的顺序控制。
- 确认号(Acknowledgment Number):32位,表示期望接收的下一个字节的序号。
- 数据偏移(Data Offset):4位,表示TCP头部的长度,单位是32位字(4字节)。最小值是5,表示头部长度为20字节。
- 保留位(Reserved):6位,保留供将来使用,通常设置为0。
- 控制位(Flags):6位,包括URG、ACK、PSH、RST、SYN、FIN。
- 窗口大小(Window Size):16位,表示接收方的接收窗口大小。
- 校验和(Checksum):16位,用于校验头部和数据的完整性。
- 紧急指针(Urgent Pointer):16位,仅当URG标志置位时有效,表示紧急数据的偏移量。
- 选项(Options):可变长度,用于支持各种TCP选项。
TCP默认窗口大小
TCP默认窗口大小(Window Size)是接收方告诉发送方自己能够接收的最大数据量。默认情况下,TCP窗口大小为65535字节(64KB),但可以通过窗口缩放选项(Window
Scaling Option)扩展到更大的值。
数据太大怎么办?
当发送的数据超过了网络的最大传输单元(MTU,通常为1500字节),TCP会将数据分片(segmentation)成多个较小的段(segment),每个段都包含TCP头部和一部分数据。分片后的数据段通过网络传输,接收方会重新组装这些段。
分片后会乱序吗?
在传输过程中,数据段可能会由于网络拥塞、路由变化等原因而乱序到达接收方。TCP使用序列号(Sequence
Number)来确保数据段按正确的顺序重新组装。接收方根据序列号将数据段按正确的顺序排列,丢失的数据段会通过重传机制重新发送
出现差错了怎么办?
TCP提供了多种机制来处理传输中的差错,包括:
- 校验和(Checksum):
- 每个TCP段都包含一个16位的校验和,用于校验头部和数据的完整性。如果接收方检测到校验和不匹配,会丢弃该段并请求重传。
- 确认和重传(Acknowledgment and Retransmission):
- 接收方会发送确认(ACK)消息给发送方,表示成功接收到的数据。如果发送方在超时时间内没有收到ACK,会重传数据段。
- 序列号和确认号(Sequence and Acknowledgment Numbers):
- TCP使用序列号和确认号来确保数据的有序传输和完整性。接收方根据序列号重新组装数据,并通过确认号通知发送方已接收的数据。
- 重传超时(Retransmission Timeout, RTO):
- TCP根据网络状况动态计算重传超时时间。如果发送方在超时时间内没有收到ACK,会重传数据段。
- 快速重传(Fast Retransmit):
- 如果发送方连续收到三个相同的ACK,表示可能发生了丢包,发送方会立即重传丢失的数据段,而不必等待重传超时。
__END__