当前位置: 首页 > news >正文

TCP(Transmission Control Protocol,传输控制协议)整理

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的传输协议,它是OSI(Open System Interconnection,开放式系统互联)模型中的第四层协议,通常使用于网络中的应用层和传输层之间。TCP协议通信过程中所涉及到的细节可以从以下几个方面进行详细介绍:

一、TCP协议的特点

  1. 面向连接:通信前需要先建立连接,传输完成后再释放连接。传输数据时有三次握手和四次挥手过程。
  2. 可靠传输:采用确认应答机制和重传控制,确保数据传输的可靠性和完整性。
  3. 流量控制:通过滑动窗口技术,控制发送方发送数据的速度,避免接收方处理不过来而出现数据丢失的情况。
  4. 拥塞控制:根据网络拥塞情况调整发送数据的速度。当网络拥塞时,TCP协议会通过减小发送窗口或延迟发送数据的方式来降低网络拥塞程度。
  5. 面向字节流:TCP协议是以字节流的形式传输数据,而不是以数据包为单位传输。因此,应用层需要自己处理数据包的边界。

二、TCP协议通信过程

TCP协议通信过程包括建立连接、数据传输和断开连接三个阶段。

  1. 建立连接:通过三次握手建立连接。

    • 第一次握手:客户端向服务端发送SYN(同步)包,其中SYN=1,seq=x,表示客户端希望与服务端建立连接,同时指定自己的初始序号为x。此时客户端处于SYN_SENT状态。
    • 第二次握手:服务端接收到SYN包后,向客户端发送SYN-ACK(同步-确认)包,其中SYN=1,ACK=1,ack=x+1,seq=y,表示服务端已经收到客户端的请求,同意建立连接,同时指定自己的初始序号为y,确认号为x+1。此时服务端处于SYN_RCVD状态。
    • 第三次握手:客户端收到SYN-ACK包后,向服务端发送ACK(确认)包,其中SYN=0,ACK=1,ack=y+1,seq=x+1,表示客户端已经收到服务端的确认,连接建立成功。此时客户端处于ESTABLISHED状态,服务端也处于ESTABLISHED状态。这样就完成了三次握手建立连接的过程。
  2. 数据传输:连接建立成功后,开始传输数据。

    • 数据在应用层被拆分成数据段,在传输层被拆分成数据包(也称为报文段),每个数据包包含源端口号、目标端口号、序列号、确认号、标志位等信息。
    • 发送方发送数据包后,等待接收方回复确认信息,如果未收到确认信息,则进行重传,直到接收方成功接收数据包。
    • 接收方收到数据包后,会对数据包进行确认,向发送方发送确认响应。如果接收方没有收到正确的数据包,它会要求发送方重发数据。
    • TCP数据分段传输可以提高网络的可靠性和稳定性,避免了数据包的丢失和重传,但是也会造成额外的网络开销。
  3. 断开连接:通过四次挥手关闭连接。

    • 第一次挥手:客户端向服务端发送FIN(终止)报文,表示客户端不再发送数据。
    • 第二次挥手:服务端收到FIN报文后,向客户端发送ACK报文,表示收到了客户端的FIN报文。
    • 第三次挥手:服务端向客户端发送FIN报文,表示服务端不再发送数据。
    • 第四次挥手:客户端收到FIN报文后,向服务端发送ACK报文,表示收到了服务端的FIN报文。至此,连接关闭成功。

在四次挥手的过程中,最后一个ACK报文可能会丢失,因此需要等待一段时间后才能确认连接已经关闭。这个等待时间称为TIME_WAIT状态,一般为2MSL(Maximum Segment Lifetime,最长报文寿命)时间,即一个报文在网络中最长的生命周期。

三、TCP协议中的关键机制

  1. 序列号与确认应答:TCP协议通过给每个数据包添加序列号和确认号,确保数据按正确顺序传递,并且没有丢失或损坏。接收方在成功接收到数据后,会向发送方发送确认消息,告知发送方数据已经到达。如果发送方未收到确认,则会进行重发。
  2. 超时重传:如果发送方在规定时间内未收到确认应答,则会将该数据包视为丢失,并重新发送。这一机制保证了数据的可靠传输。
  3. 滑动窗口:TCP协议通过滑动窗口技术来实现流量控制。发送方会根据接收方返回的窗口大小信息,调整自己的发送速度,以避免接收方处理不过来而导致数据丢失。
  4. 拥塞控制:TCP协议还具备拥塞控制功能。当网络出现拥塞时,TCP会通过降低发送方的数据传输速率和进行重传等措施来保证数据的可靠传输。拥塞控制策略包括慢启动、拥塞避免、拥塞发生和快速恢复等。

四、TCP协议的应用场景

TCP协议常用于HTTP、FTP、Telnet等传输层协议中,因为这些协议需要传输大量的数据并要求传输的数据准确无误。TCP协议的可靠传输和面向连接的特性使得它成为这些应用的首选传输协议。

http://www.lryc.cn/news/460430.html

相关文章:

  • R语言绘制线性回归图
  • C++进阶:map和set的使用
  • 深入理解C++ STL中的 vector
  • MySQL 安装与配置详细教程
  • 理解智能合约:区块链在Web3中的运作机制
  • QT工程概述
  • redis安装 | 远程连接
  • 性价比高的宠物空气净化器应该怎么挑?有哪几款推荐?
  • Golang | Leetcode Golang题解之第466题统计重复个数
  • 设计模式 - 行为模式
  • InstructGPT的四阶段:预训练、有监督微调、奖励建模、强化学习涉及到的公式解读
  • 没有HTTPS 证书时,像这样实现多路复用
  • 2.1.ReactOS系统NtReadFile函数的实现。
  • 2020-11-06《04丨人工智能时代,新的职业机会在哪里?》
  • TensorRT-LLM七日谈 Day5
  • 使用Java Socket实现简单版本的Rpc服务
  • P2P 网络 简单研究 1
  • RAG(检索增强生成)面经(1)
  • 卫爱守护|守护青春,送出温暖
  • ubuntu-24.04.1 系统安装
  • 华为OD机试真题---生成哈夫曼树
  • 小红书新ID保持项目StoryMaker,面部特征、服装、发型和身体特征都能保持一致!(已开源)
  • Docker 环境下 GPU 监控实战:使用 Prometheus 实现 DCGM Exporter 部署与 GPU 性能监控
  • 联想小新打印机M7328w如何解决卡纸,卡了一个小角在里面,然后再次打印的时候,直接卡住,不能动了。灯显示红色。
  • 软件可靠性之MTTR、MTBF、MTTF、MTTD区别
  • Qt-QDockWidget浮动窗口相关操作(49)
  • 图形用户界面-GUI的基本概念和组件之一
  • 【MATLAB代码】基于RSSI原理的蓝牙定位程序(N个锚点、三维空间),源代码可直接复制
  • Pyenv 介绍和安装指南 - Ubuntu 24
  • zookeeper实现RMI服务,高可用,HA