tcp报文头

本文详细介绍了TCP协议的工作原理,包括其提供的可靠服务、如何确保数据传输的正确性、数据的分割与重组、确认机制、错误检测及流量控制等关键特性。

TCP和UDP使用相同的网络层,但是TCP提供的是面向连接的,可靠的字节流服务。

在一个TCP连接中,只有两方进行彼此通信。广播和多播不适用于TCP。

TCP通过以下方式来提供可靠性:

  1. 应用数据被分割成为最适合传输的数据块;
  2. TCP发送一个段后,它启动一个计时器,等待目的端确认收到这个报文段,如果超时没有收到确认,则重新发送;
  3. TCP会保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的变化。如果数据发送变化,会丢弃数据包并不发送确认,等待重传;
  4. TCP会对收到的数据进行重新排序,以正确的顺序发给应用层;
  5. 数据报发生重复时,接收端会丢弃重复的数据;
  6. TCP提供流量控制,防止缓冲区溢出。

TCP:报头

TCP数据在IP数据报中的封装



TCP:报头
TCP包首部

源端口号和目的端口号用于寻找发端和收端应用进程,这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP进程;

序号用来标识从TCP发端向TCP收端发送的数据字节流,它是32位无符号数,序号达到最大值后重新从0开始;

确认号应是上次成功收到的数据字节号加1;

6个标志比特位:

URG:紧急指针有效;

ACK:确认号有效;

PSH:接收方硬尽快将这个报文发给应用层;

RST:重建连接;

SYN:同步序号用来发起一个连接;

FIN:发端完成发送任务。

 

流量控制由声明的窗口大小控制;

检验和覆盖了整个TCP报文段,TCP首部和TCP数据,由发端计算和存储,由收端验证。

 

### TCP 报文头结构与字段详解 TCP(Transmission Control Protocol)是一种面向连接的、可靠的字节流服务传输层协议。其报文头包含了多个字段,用于实现可靠的数据传输以及流量控制等功能。 #### 1. 源端口 (Source Port) 源端口号是一个16位的字段,用来标识发送方的应用程序端口[^1]。通过该字段可以区分同一台主机上的不同应用程序。 #### 2. 目的端口 (Destination Port) 目的端口号也是一个16位的字段,用来指定接收方的应用程序端口[^2]。它帮助操作系统将接收到的数据传递给正确的进程。 #### 3. 序列号 (Sequence Number) 序列号是一个32位的字段,在建立连接后,每一段数据都有一个唯一的序列号[^3]。这使得接收方可按顺序重新组装数据片段并检测丢失或重复的数据包。 #### 4. 确认号 (Acknowledgment Number) 确认号同样是32位长度,当ACK标志位设置为1时有效。此字段指明下一个期望收到的数据段的第一个字节编号,从而向发送方反馈已成功接收的信息范围。 #### 5. 数据偏移/首部长度 (Data Offset or Header Length) 这是一个4位字段,定义了TCP头部的实际大小,单位是以4字节为增量计算得出的结果。由于选项的存在可能导致头部变长,因此需要明确指示具体位置以便正确解析后续内容。 #### 6. 标志位 Flags 共有六个标志位组成的一组控制信号: - **URG**: 表示紧急指针是否生效; - **ACK**: 如果置1,则表明当前消息含有有效的确认应答信息; - **PSH**: 建议立即把缓冲区中的数据推送给上一层应用处理而不等待缓存填; - **RST**: 请求重置连接状态机回到初始态; - **SYN**: 同步序列号码以发起新的握手请求; - **FIN**: 发送者已经完成发送操作准备关闭会话链接。 #### 7. 窗口尺寸 Window Size 窗口尺寸占用16比特空间来告知对方自己还能接受多少额外的数据量而无需进一步确认回应。这是实现滑动窗口机制的关键参数之一,有助于动态调整双方之间的通信速率匹配程度。 #### 8. 校验和 Checksum 作为可靠性措施的一部分,16位校验和由发信侧填充完毕之后传送到另一端设备处再利用循环冗余码(CRC)技术验证整个tcp segment(含header plus payload part altogether)[^2]. 若发现错误则丢弃相应packet 并触发超时重传策略. #### 9. 紧急指针 Urgent Pointer 仅当 URG flag 被激活的情况下有意义, 它指出本报文中紧随其后的若干字节数目属于高优先级资料需尽快交付高层使用者而非遵循常规排队逻辑.[^1] #### 10. 可选字段 Options Field 最后预留了一定数量的空间供特殊用途扩展功能使用比如最大分片限制(Maximum Segment Size), 时间戳(Time Stamp Option)等等; 不过这些都依赖于协商好的规则才会实际出现.[^4] ```python class TCPSegment: def __init__(self, source_port, destination_port, sequence_number, acknowledgment_number, flags, window_size, checksum, urgent_pointer, options=None): self.source_port = source_port self.destination_port = destination_port self.sequence_number = sequence_number self.acknowledgment_number = acknowledgment_number self.flags = flags self.window_size = window_size self.checksum = checksum self.urgent_pointer = urgent_pointer self.options = options if options else [] def calculate_checksum(self): pass def validate_segment(self): pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值