TCP通信协议 你了解多少?
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。
好的,我们来详细聊聊TCP(传输控制协议)。它是互联网协议族(TCP/IP)中一个极其核心的协议,位于传输层(OSI模型的第4层),主要为运行在不同主机上的应用程序提供可靠的、面向连接的、基于字节流的端到端通信服务。
以下是TCP的关键特性和工作机制:
-
可靠性
- 核心目标: 确保数据包从发送方完整、无误、按序地送达接收方。这是TCP区别于UDP(用户数据报协议)的关键。
- 实现机制:
- 确认应答: 接收方收到数据后,必须向发送方发送一个ACK (Acknowledgement) 确认包。
- 超时重传: 发送方发出数据包后会启动一个计时器。如果在规定时间内没有收到对应的ACK,它会认为数据包丢失并重新发送该数据包。
- 序列号: 每个发送的字节都被分配一个唯一的序列号。接收方利用序列号检测丢失的数据包(序列号出现缺口)和对数据包进行排序,确保最终交付给应用程序的数据是顺序正确的字节流。
- 校验和: 在每个TCP报文段(Segment)中包含一个校验和字段。接收方会重新计算校验和,如果与收到的值不匹配,说明数据在传输中受损,该报文段会被丢弃,随后触发发送方的超时重传。这确保了数据的完整性。
-
面向连接
- 在正式通信前,通信双方必须建立一条逻辑连接通路。这个过程通过三次握手完成:
- SYN: 客户端发送一个SYN包(设置SYN标志位为1,并包含一个初始序列号
ISN_c)给服务器,请求建立连接。 - SYN-ACK: 服务器收到后,如果同意连接,会回复一个SYN-ACK包(设置SYN和ACK标志位为1,包含服务器自己的初始序列号
ISN_s,并对客户端的ISN_c进行确认ACK = ISN_c + 1)。 - ACK: 客户端收到SYN-ACK后,再向服务器发送一个ACK包(设置ACK标志位为1,确认号
ACK = ISN_s + 1)。 - 完成三次握手后,连接建立成功,双方可以开始传输数据。
- SYN: 客户端发送一个SYN包(设置SYN标志位为1,并包含一个初始序列号
- 通信结束后,需要优雅地断开连接,这个过程通过四次挥手完成:
- FIN: 主动关闭方(假设为客户端)发送一个FIN包(设置FIN标志位为1),表示自己不再发送数据,但还可以接收数据。
- ACK: 被动关闭方(服务器)收到FIN后,发送一个ACK包进行确认。
- FIN: 服务器处理完所有待发送数据后,也会发送一个自己的FIN包给客户端。
- ACK: 客户端收到服务器的FIN包后,发送一个ACK包进行确认。此时连接关闭。
- 在正式通信前,通信双方必须建立一条逻辑连接通路。这个过程通过三次握手完成:
-
基于字节流
- TCP将应用程序下发的数据视为一个连续的、无结构的字节流。TCP自己不维护消息边界。
- 发送方TCP可以将多次写入操作的数据组合成一个大的TCP报文段发送(粘包可能发生的原因之一)。
- 接收方TCP将接收到的数据视为一个字节流存入接收缓冲区,应用程序读取时,可能一次读取到多个发送端写入操作的数据组合,也可能一次只读取到部分数据(需要应用程序自己解析消息边界,例如使用固定长度、分隔符或包含消息长度的协议头来解决粘包和拆包问题)。
-
流量控制
- 目的: 防止发送方发送数据太快导致接收方来不及处理而溢出接收缓冲区。
- 机制:滑动窗口协议
- 接收方在每个ACK包中会通告自己的接收窗口大小(
Window Size)。这个值表示接收方当前还能接收多少数据(接收缓冲区的可用空间)。 - 发送方根据接收方通告的窗口大小动态调整自己可以发送但未被确认的数据总量(即发送窗口大小)。
- 如果接收方通告窗口为0,发送方必须暂停发送(直到接收方发送一个新的ACK通告非零窗口)。
- 接收方在每个ACK包中会通告自己的接收窗口大小(
-
拥塞控制
- 目的: 防止因网络路径上路由器或链路过载而导致整个网络性能急剧下降(即避免拥塞崩溃)。
- 核心思想: TCP发送方通过持续探测网络状况,动态调整自己的发送速率(拥塞窗口大小),以匹配网络的可用带宽。
- 主要算法和状态:
- 慢启动: 连接建立初期或从拥塞中恢复时,拥塞窗口
cwnd从一个很小的值(如1个MSS - 最大报文段长度)开始,每收到一个ACK,cwnd就指数增长(加倍),直到达到一个阈值或发生丢包。 - 拥塞避免: 当
cwnd增长到一个阈值(慢启动阈值ssthresh)后,进入拥塞避免阶段,cwnd开始线性增长(每RTT增加约1个MSS)。 - 快速重传: 当发送方收到3个重复的ACK(表明有中间数据包丢失,但后续包已到达)时,不等超时器到期就立刻重传丢失的数据包。
- 快速恢复: 在触发快速重传后,TCP不将
cwnd降到1重新慢启动(这是超时重发后的策略),而是将cwnd减半并进入拥塞避免阶段(线性增长),以减少网络拥塞程度并快速恢复性能。RFC 5681和后续的RFC有更详细定义。
- 慢启动: 连接建立初期或从拥塞中恢复时,拥塞窗口
总结:
TCP就像一个极其负责、确保安全的邮递系统。它:
- 提前预约: 通过三次握手确保对方在线并准备接收。
- 编号投递: 给每个包裹(数据包)编号,确保按顺序到达。
- 签收回执: 要求收件方签收(ACK),丢件(超时未签收)立即重发。
- 速度协商: 根据收件方处理能力(接收窗口)实时调整发送速度,避免压垮对方(流量控制)。
- 路况探测: 动态感知网络拥堵状况,自动减速避免堵死道路(拥塞控制)。
- 打包组合: 为了效率可能合并小包裹发送(字节流)。
- 礼貌道别: 结束通信时通过四次挥手有序关闭连接。
正是这些复杂而精妙的机制,使得TCP成为互联网上绝大多数需要可靠数据传输应用(如网页浏览/HTTP(S)、文件传输/FTP、电子邮件/SMTP/POP3/IMAP、远程终端/SSH等)的基础支柱。
IP地址、端口号、通信协议的相关知识 TCP和UDP通信协议简述
网络编程有三个要素,分别是IP地址、端口号和通信协议。本文主要讲述的是TCP与UDP这两种通信协议,以及编程的实现。首先,我们需要
2023-07-18 11:20:38
通信协议中的HTTP、TCP、UDP你了解多少(上)
TCP HTTP UDP: 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。
2023-02-13 14:19:52
到底什么是TCP/IP协议栈,看完这篇你就明白!
一谈到TCP/IP协议栈,相信不少小白都处于暴躁的边缘,只懂其一不知其二。没关系,看完这篇你就知道啦!我们先简单
2022-12-09 15:21:16
什么是串口通信?串口通信协议了解
行传输低。2、串口通信协议在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和片上外设;STM32标准库则是在寄存器与用户代码之间的软件层。对于通讯协议,我们也以分层的方式来理解,最基本的是把它
了解一下MODBUS通信协议
目录前言MODBUS协议简介MODBUS通信格式信息帧格式前言近期需要制作一个MODBUS/RTU转MODBUS/TCP 的网关。首先需要
掌握通信协议的研究方法
从根本出发,从简单开始,逐步加码,从而让你彻底掌握通信协议的研究方法。就是串口uart,因为uart只有物理层,尤其是TTL电平的uart,就是个很简单很直观的物理层
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 芯片的工作原理是什么?
- ssd是什么意思
- 什么是蓝牙?它的主要作用是什么?
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- dtmb信号覆盖城市查询
- 怎样挑选路由器?
- 华为芯片为什么受制于美国?
- 元宇宙概念股龙头一览
- type-c四根线接法图解
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- BLDC电机技术分析
- 复位电路的原理及作用
- dsp是什么意思?有什么作用?
- iphone13promax电池容量是多少毫安
- 苹果无线充电器怎么使用?
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 传感器常见类型有哪些?
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机