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

01_TCP协议概念

一、TCP概念

TCP(Transmission Control Protocol 传输控制协议)是面向连接的、可靠的、基于字节流的传输层通信协议的传输层协议。

首先来看看OSI的七层模型:

1

在OSI七层模型中,每一层的作用和对应的协议如下

  功能 TCP/IP协议族
应用层 为计算机用户提供服务 HTTP,TFTP,DNS等
表示层 数据处理(编解码、加密解密,压缩解压缩)
会话层 管理应用程序之间的会话
传输层 提供通用的数据传输服务 TCP,UDP
网络层 路由和寻址 IP,ICMP等
数据链路层 传输有地址的帧和错误监测能力 SLIP,PPP等
物理层 以二进制形式在物理媒介上传输数据 ISO2110,IEEE802等

二、TCP报文格式

TCP协议是封装在IP数据包中,TCP报文数据格式如下图:

2

TCP报文是传输层的数据单元,也叫报文段,下面分别对其中的字段进行介绍:

(1)源端口和目的端口:各占2字节

  这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接;有时一个IP地址和一个端口号也称为socket(插口)。

(2)序号(seq):占4字节

 

  序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。例如:个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。

(3)确认序号(ACK):占4字节

  是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号;确认序号应该是上次已成功收到数据字节序号+1。

(4)数据偏移:占4比特

  表示数据开始的地方离TCP段的起始处有多远,实际上就是TCP段首部的长度;由于首部长度不固定,因此数据偏移字段是必要的;数据偏移以32位为长度单位,也就是4个字节,因此TCP首部的最大长度是60个字节,即偏移最大为15个长度单位=1532位=154字节。

(5)保留:占6比特

  为将来定义新的用途保留,现在一般置0。

(6)6个标志位比特

  1. URG:当URG=1时,注解此报文应尽快传送,而不要按本来的列队次序来传送。与“紧急指针”字段共同应用,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号,使接管方可以知道紧急数据共有多长;
  2. ACK:只有当ACK=1时,确认序号字段才有效;
  3. PSH:当PSH=1时,接收方应该尽快将本报文段立即传送给其应用层;
  4. RST:当RST=1时,表示出现连接错误,必须释放连接,然后再重建传输连接。复位比特还用来拒绝一个不法的报文段或拒绝打开一个连接;
  5. SYN:同步序号,用于建立连接过程,当SYN=1,ACK=0时表示请求建立一个连接,携带SYN标志的TCP报文段为同步报文段;
  6. FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。

(7)窗口

  TCP通过滑动窗口的概念来进行流量控制。设想在发送端发送数据的速度很快而接收端接收速度却很慢的情况下,为了保证数据不丢失,显然需要进行流量控制, 协调好通信双方的工作节奏;滑动窗口可以理解成接收端所能提供的缓冲区大小,TCP利用一个滑动的窗口来告诉发送端对它所发送的数据能提供多大的缓冲区;窗口大小为字节数起始于确认序号字段指明的值(这个值是接收端正期望接收的字节);窗口大小是一个16bit字段,因而窗口大小最大为65535字节。

(8)校验和

  检验和覆盖了整个TCP报文段:TCP首部和数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。

(9)紧急指针

  只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。;TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

(10)选项和填充

  最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度;选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。

(11)数据部分

  TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部;如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

http://www.wxhsa.cn/company.asp?id=437

相关文章:

  • 【A】杂题宣讲
  • 登录认证-上篇:基于 Session 的传统身份验证
  • 【A】chipi chipi chapa chapa
  • vLLM框架本地布署Qwen3-32B模型 - yi
  • 项目管理软件中有哪些不同的模块以及如何导出其报告?
  • 第十三届 TCCT 随机系统与控制专题研讨会 暨2025年智能控制与计算科学国际学术会议 (ICICCS 2025)
  • Kubernetes命名空间(Namespace)
  • linux安装python
  • 【IEEE、电力学科品牌会议】第五届智能电力与系统国际学术会议(ICIPS 2025)
  • 软工第一次作业
  • 注释
  • Microsoft 推出 .NET 10 RC 1
  • 2025 第九届控制工程与先进算法国际论坛(IWCEAA 2025)
  • kotlin中的netty
  • 多态
  • 数学分析 I
  • 高等代数 I
  • JAVA反编译神器CFR
  • 记录一下由于VS中qt的插件自动升级引发的编译问题
  • flutter右滑返回直接返回到native问题
  • ck随笔
  • 如何用变量与函数实现随机生成数字交互?附完整教程
  • 离散数学与结构 note
  • Java基础
  • Linux系统简单源码安装NGINX版本1.28.0
  • 终结“网络无助感”:Tenable CEO解析漏洞管理与安全心态
  • 部分算法记录
  • Kubernetes资源管理方式
  • 2025公众号排版工具深度测评报告:10款主流产品功能对比与场景化选择指南
  • 即将举办2025年11月埃及汽配博览会埃及国际汽配展Autotech