TCP(一) 简介

TCP是一种面向连接、可靠的、基于字节流的传输层通信协议,确保数据的无损、有序和按序交付。连接建立需经过三次握手,通过SYN和ACK标志。连接释放则通过四次挥手,包括FIN和ACK标志。TCP连接的状态机包括多个阶段,如LISTEN、SYN_SENT、ESTABLISHED、FIN_WAIT_1等。在socket编程中,TCP连接的建立和终止涉及connect和close函数。

tcp简介

什么是 TCP ?

TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。

面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;

可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;

字节流:消息是「没有边界」的,所以无论我们消息有多大都可以进行传输。并且消息是有序的,当前一个消息没有收到的时候,即使它先收到了后面的字节,那么也不能扔给应用层去处理,同时对重复的报文会自动丢弃。

为什么需要 TCP 协议?

IP层是不可靠的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。

如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的 TCP 协议来负责。

因为 TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。

TCP报文段的首部格式

TCP报文段分为首部和数据部分。首部的前20个字节是固定的,后面根据需要可增加字节的选项。

TCP报文段的首部格式

TCP报文段的首部格式

字段意义如下:

  • 源端口目的端口:各占2个字节,分别写入源端口号和目的端口号。

  • 序号:占4字节,指明本报文段所发送的数据的第一个字节的序号。TCP连接中传送的字节流中的每一个字节都按顺序编号。

  • 确认号:占4字节,指明期望收到对方下一个报文段第一个数据字节的序号。若确认号,则表明:到序号为止的所有数据都已正确收到。

  • 数据偏移:占4位,指明数据起始处距离报文段起始处有多远。实际上是指出TCP报文段的首部长度

  • 保留:保留为今后使用,但目前应置为0。

  • 控制位:置1有效,置0无效)

  • 紧急URG(URGent):告诉系统此报文段有紧急数据,应尽快传送(相当于高优先级的数据)。与紧急指针字段匹配使用。

  • 确认ACK(ACKnowledgment):TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。

  • 推送PSH(PuSH):指明本报文段希望尽快交付。用于交互式通信时,可直接创建报文并发送,不用等待缓存填满。

  • 复位RST(ReSeT):表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后重新建立运输连接。

  • 同步SYN(YNchronization)emsp;:在连接建立时用来同步序号。对放若同意建立连接,则在报文段中使SYN=1和ACK=1。

  • 终止FIN(FINis):用来释放连接。

  • 窗口:占2字节。窗口指的是发送本报文段一方的接收窗口。之所有有这个限制

<think>嗯,用户这次想了解TCP协议的基本概念和工作原理,正好我之前在回答Socket与HTTP交互时引用了三篇TCP相关的资料。用户特意提到这些引用,说明ta希望我基于这些资料展开讲解,而不是泛泛而谈。从用户两次提问的关联性看,ta可能正在系统学习网络协议——先问应用层交互(Socket/HTTP),再深入传输层(TCP)。这种学习路径很合理,因为TCP是HTTP协议的底层支撑。用户应该需要既理解宏观交互又掌握微观机制。三篇引用文献其实覆盖了TCP的核心内容:[^1]强调连接管理和可靠传输机制,这正是TCP区别于UDP的关键;[^2]详细描述了报文结构和控制算法;[^3]则用清单形式罗列了八大机制。我需要把这些内容整合成连贯的体系。用户提问虽然简短,但"工作原理及基本概念"其实包含三个层次:1.基础特性(面向连接/可靠传输等)2.核心机制(三次握手、滑动窗口等)3.控制算法(流量控制、拥塞控制)回答必须层层递进,尤其要讲清楚这些机制如何协同实现可靠性——比如超时重传解决丢包,确认应答保证顺序,滑动窗口提升效率。注意到用户上次对技术细节接受良好(比如WebSocket升级的代码示例),这次可以适当深入。比如用$$包裹的公式展示超时重传时间计算:$$RTO=SRTT+max(G,K\timesRTTVAR)$$但需控制数学比例,重点还是解释机制原理。最后生成的问题要延续用户的学习路径,比如TCP与上层协议的关系、抓包分析工具等实践性内容。避免重复基础概念,侧重应用场景分析。</think>TCP(传输控制协议)是互联网协议套件的核心协议之,通过以下核心机制实现可靠数据传输: ### TCP 核心特性 1. **面向连接** 通信前需建立双向连接(三次握手),结束后断开连接(四次挥手)[^1] 2. **可靠传输** 通过序列号、确认应答、重传机制确保数据完整有序到达[^2] 3. **流式传输** 数据被视作无结构的字节流,支持大数据分片传输 4. **全双工通信** 双方可同时发送和接收数据 ### 二、核心工作原理 #### 1. 连接管理机制 - **三次握手建立连接**: ```mermaid sequenceDiagram 客户端->>服务端:SYN=1, seq=x 服务端->>客户端:SYN=1, ACK=1, seq=y, ack=x+1 客户端->>服务端:ACK=1, seq=x+1, ack=y+1 ``` 确保双方收发能力正常[^3] - **四次挥手断开连接**: ```mermaid sequenceDiagram 客户端->>服务端:FIN=1, seq=u 服务端->>客户端:ACK=1, ack=u+1 服务端->>客户端:FIN=1, seq=v 客户端->>服务端:ACK=1, ack=v+1 ``` #### 2. 可靠传输机制 | 机制 | 原理 | 数学表示 | |-----------------|----------------------------------------------------------------------|------------------------------| | **确认应答** | 接收方返回ACK确认收到数据 | $ACK_n$ 确认$seq_{n}$ | | **超时重传** | 未收到ACK时重发数据,动态计算超时时间(RTO) | $$ RTO = SRTT + max(G, 4 \times RTTVAR) $$ | | **序列号** | 每个字节分配唯编号,解决乱序问题 | $seq_{new} = seq_{prev} + len(data)$ | #### 3. 流量控制 - **滑动窗口协议**: - 接收方通过`rwnd`(接收窗口)字段通告剩余缓冲区大小 - 发送方根据`rwnd`动态调整发送窗口大小 ```plaintext 发送窗口结构: [已确认 | 已发送未确认 | 可发送 | 不可发送] ˄ 滑动窗口边界 ``` #### 4. 拥塞控制 分阶段调整发送速率: 1. **慢启动**:窗口从1 MSS开始,每RTT翻倍 $$ cwnd = cwnd \times 2^{RTT} $$ 2. **拥塞避免**:达到阈值后每RTT增加1 MSS $$ cwnd = cwnd + 1 $$ 3. **快速重传**:收到3个重复ACK立即重传 4. **快速恢复**:阈值降为原值半,直接进入拥塞避免 ### 三、效率优化机制 | 机制 | 作用 | |---------------|----------------------------------------------------------------------| | **延迟应答** | 接收方延迟发送ACK,增加窗口通告机会 | | **捎带应答** | 将ACK搭载在数据包中发送,减少单独ACK包 | | **Nagle算法** | 合并小数据包发送,减少网络拥塞(默认启用) | ### 四、TCP报文结构 ``` 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 源端口号 | 目的端口号 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 序列号(Sequence Number) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 确认号(Acknowledgment Number) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 数据偏移 | 保留 | 控制标志 | 窗口大小(Window) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 校验和 | 紧急指针(Urgent Pointer) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 选项(Options) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ``` > 控制标志包含:URG/ACK/PSH/RST/SYN/FIN[^2] ### 五、应用场景 - **要求可靠传输**:网页访问(HTTP)、文件传输(FTP)、邮件(SMTP/POP3) - **需连接管理**:数据库连接、远程登录(SSH) - **流式数据传输**:视频流、大文件下载 > TCP通过上述机制在不可靠的IP层之上构建了可靠传输通道,其拥塞控制算法(如CUBIC、BBR)仍在持续演进以适应现代网络环境[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值