TCP协议

一、什么是TCP协议

TCP(Transmission Control Protocol,传输控制协议)是TCP/IP 协议栈中传输层的核心协议,主要作用是在不可靠的网络环境中,为应用层提供可靠、有序、面向连接的数据传输服务。无论是浏览网页(HTTP/HTTPS)、发送邮件(SMTP)还是传输文件(FTP),背后都依赖 TCP 保障数据的稳定交付

二、特性

TCP 的可靠性并非天然存在,而是通过以下 5 个关键机制实现的,这也是它与传输层另一协议(UDP,无连接、不可靠)的核心区别:

2.1. 面向连接(Connection-Oriented)

TCP 通信前必须先建立 “虚拟连接”,通信结束后需释放连接,类似 “打电话”(先拨号接通,再说话,最后挂电话)。

建立连接的过程:三次握手(Three-Way Handshake)
目的是确认 “双方的发送和接收能力都正常”,避免无效数据传输:

  1. 客户端(如浏览器)发送 SYN(同步) 报文,请求建立连接(“喂,你能听到吗?”);
  2. 服务器收到后,回复 SYN+ACK(同步 + 确认) 报文(“我能听到,你能听到我吗?”);
  3. 客户端收到后,再发送 ACK(确认) 报文(“我也能听到,开始传数据吧!”);

至此,连接建立完成,双方可开始传输数据。

释放连接的过程:四次挥手(Four-Way Wavehand)
目的是确保 “双方都已完成数据传输,无残留数据”,避免资源浪费:

  1. 客户端发送 FIN(结束) 报文,告知服务器 “我数据传完了,准备断开”;
  2. 服务器收到后,先回复 ACK 报文(“我知道了,你等我把剩下的数据传完”);
  3. 服务器传完剩余数据后,发送 FIN+ACK 报文(“我也传完了,断开吧”);
  4. 客户端收到后,回复 ACK 报文(“好的,断开”),并等待一段时间(确保服务器收到 ACK)后关闭连接。

2.2. 可靠传输(Reliable Delivery)

通过 “确认机制” 和 “重传机制” 确保数据不丢失:

  • 确认机制(ACK):接收方收到数据后,必须向发送方回复 “ACK 报文”,告知 “某段数据已收到”;
  • 重传机制:发送方发送数据后,会启动一个 “超时计时器”,如果在计时器到期前没收到 ACK,就认为数据丢失,自动重新发送该数据。

2.3. 有序传输(In-Order Delivery)

TCP 会给每个 “数据段(Segment)” 分配一个唯一的 “序列号(Sequence Number)”,接收方会根据序列号将数据按原顺序重组 —— 即使数据在网络中因路由不同导致到达顺序混乱,接收方也能通过序列号恢复正确顺序,避免应用层收到错乱的数据。

2.4. 流量控制(Flow Control)

防止 “发送方传得太快,接收方来不及处理” 导致数据溢出(类似 “说话太快,对方记不住”)。

  • 原理:接收方通过 TCP 报文头部的 “窗口大小(Window Size)” 字段,告知发送方 “我当前最多还能接收多少字节的数据”;
  • 发送方会严格按照接收方的 “窗口大小” 调整发送速率,确保接收方有足够的缓冲区处理数据。

2.5. 拥塞控制(Congestion Control)

防止 “发送方传得太快,导致网络拥堵”(类似 “多辆车同时涌入窄路,导致全部堵车”)。
TCP 通过以下算法动态调整发送速率,避免网络过载:

  • 慢启动(Slow Start):连接刚建立时,发送速率从低开始(如先传 1 个数据段),每收到一次 ACK 就翻倍,快速试探网络承载能力;
  • 拥塞避免(Congestion Avoidance):当发送速率达到阈值后,改为 “每次 ACK 只增加 1 个数据段”,缓慢提升速率;
  • 超时重传 / 快速重传:若检测到数据丢失(如超时或收到重复 ACK),立即降低发送速率,避免加剧拥堵。

三、TCP 的工作层级与数据封装

TCP 位于TCP/IP 协议栈的传输层,上接应用层(如 HTTP、FTP),下接网络层(IP 协议),核心作用是 “封装应用层数据” 并 “通过 IP 协议传输”:

  1. 应用层将数据(如网页内容)交给 TCP;
  2. TCP 将数据分割成 “数据段(Segment)”,并添加 TCP 头部(包含序列号、ACK 号、窗口大小等控制信息);
  3. TCP 将 “数据段” 交给网络层的 IP 协议,IP 协议添加 IP 头部(包含源 IP、目标 IP),封装成 “IP 数据包”;
  4. IP 数据包再通过数据链路层(如以太网)和物理层传输到目标设备,目标设备的 TCP 层再根据头部信息重组数据,最终交给应用层。

四、TCP报文格式

五、TCP攻击

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐子元竟然被占了!!

谢谢同志

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值