TCP 传输控制协议(Transmission Control protocol)

news/2024/5/17 20:22:30 标签: 网络, tcp/ip, TCP, 三次握手, 四次挥手

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接(三次握手),传输完毕后还要断开连接(四次挥手)。

三次握手

①首先 Client 端发送连接请求报文SYN信号包,Seq随机数
②Server 段接受连接后回复 ACK 报文(客户端发送的Seq+1)和Seq随机数,并为这次连接分配资源。
③Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源,这样 TCP 连接就建立了。
在这里插入图片描述

四次挥手

① Clien发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
② Server收到FIN后,发送一个ACK给Client,Server进入CLOSE_WAIT状态。
③ Server发送一个FIN,用来yi关闭Server到Client的数据传送,Server进入LAST_ACK状态。
④ Client收到FIN后,Client进入TIME_WAIT状态,发送ACK给Server,Server进入CLOSED状态,完成四次握手。

在这里插入图片描述

TCP__TCP_segment_structure_18">TCP 段结构 (TCP segment structure)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-41l4KLeO-1653367207345)(.\image\TCP_segment_header.png)]

源端口 Source port (16 bits)

发送方端口信息

目标端口 Destination port (16 bits)

接收方端口信息

序列号 Sequence number (32 bits)

具有双重作用:

  • 如果 SYN 标志设置为 (1),则这是初始序列号。实际第一个数据字节的序列号和相应 ACK 中的确认号就是这个序列号加 1。
  • 如果 SYN 标志清零 (0),则这是当前会话的该段的第一个数据字节的累积序列号。

确认号 Acknowledgment number (32 bits)

如果设置了 ACK 标志,则该字段的值是 ACK 的发送者期望的下一个序列号。这确认收到所有先前的字节(如果有的话)。每一端发送的第一个 ACK 确认对方的初始序列号本身,但没有数据。

数据偏移量 Data offset (4 bits)

以 32 位字指定 TCP 标头的大小。标题的最小大小为 5 个字,最大为 15 个字,因此最小大小为 20 个字节,最大为 60 个字节,标题中最多允许 40 个字节的选项。该字段的名称源于它也是从 TCP 段开始到实际数据的偏移量。

保留 Reserved (3 bits)

保留位,以备将来使用,应设置为零。

标志 Flags (9 bits)

TCP Flags

Reserved(3 位):预留位
NS(1 位):ECN-nonce - 隐藏保护
CWR(1 位):发送主机设置拥塞窗口减少(CWR)标志,表明它收到了一个设置了 ECE 标志的 TCP 段,并已在拥塞控制机制中作出响应。
ECE(1 位):ECN-Echo 具有双重作用,具体取决于 SYN 标志的值。它表明:
  如果 SYN 标志设置为 (1),则 TCP 对等体具有ECN能力。
  如果 SYN 标志清零 (0),则在正常传输期间接收到 IP 标头中设置了拥塞经历标志 (ECN=11) 的数据包。[b]这用作对 TCP 发送方的网络     拥塞(或即将发生的拥塞)的指示。
URG(1位):表示紧急指针字段是重要的
ACK(1 位):表示确认字段是重要的。客户端发送的初始 SYN 数据包之后的所有数据包都应设置此标志。
PSH(1 位):推送功能。要求将缓冲的数据推送到接收应用程序。
RST(1位):重置连接
SYN(1 位):同步序列号。只有从每一端发送的第一个数据包应该设置这个标志。其他一些标志和字段基于此标志改变含义,有些仅在设置时有     效,而另一些则在清除时有效。
FIN(1 位):来自发送方的最后一个数据包


                                    
                              +---------+ ---------\      active OPEN  
                              |  CLOSED |            \    -----------  
                              +---------+<---------\   \   create TCB  
                                |     ^              \   \  snd SYN    
                   passive OPEN |     |   CLOSE        \   \           
                   ------------ |     | ----------       \   \         
                    create TCB  |     | delete TCB         \   \       
                                V     |                      \   \     
                              +---------+            CLOSE    |    \   
                              |  LISTEN |          ---------- |     |  
                              +---------+          delete TCB |     |  
                   rcv SYN      |     |     SEND              |     |  
                  -----------   |     |    -------            |     V  
 +---------+      snd SYN,ACK  /       \   snd SYN          +---------+
 |         |<-----------------           ------------------>|         |
 |   SYN   |                    rcv SYN                     |   SYN   |
 |   RCVD  |<-----------------------------------------------|   SENT  |
 |         |                    snd ACK                     |         |
 |         |------------------           -------------------|         |
 +---------+   rcv ACK of SYN  \       /  rcv SYN,ACK       +---------+
   |           --------------   |     |   -----------                  
   |                  x         |     |     snd ACK                    
   |                            V     V                                
   |  CLOSE                   +---------+                              
   | -------                  |  ESTAB  |                              
   | snd FIN                  +---------+                              
   |                   CLOSE    |     |    rcv FIN                     
   V                  -------   |     |    -------                     
 +---------+          snd FIN  /       \   snd ACK          +---------+
 |  FIN    |<-----------------           ------------------>|  CLOSE  |
 | WAIT-1  |------------------                              |   WAIT  |
 +---------+          rcv FIN  \                            +---------+
   | rcv ACK of FIN   -------   |                            CLOSE  |  
   | --------------   snd ACK   |                           ------- |  
   V        x                   V                           snd FIN V  
 +---------+                  +---------+                   +---------+
 |FINWAIT-2|                  | CLOSING |                   | LAST-ACK|
 +---------+                  +---------+                   +---------+
   |                rcv ACK of FIN |                 rcv ACK of FIN |  
   |  rcv FIN       -------------- |    Timeout=2MSL -------------- |  
   |  -------              x       V    ------------        x       V  
    \ snd ACK                 +---------+delete TCB         +---------+
     ------------------------>|TIME WAIT|------------------>| CLOSED  |
                              +---------+                   +---------+

                      TCP Connection State Diagram

窗口大小 Window size (16 bits)

接收窗口的大小,它指定了该段的发送者当前愿意接收的窗口大小单位

校验和 Checksum (16 bits)

16 位校验和字段用于对 TCP 报头、有效负载和 IP 伪报头进行错误检查。伪报头由源 IP 地址、目标 IP 地址、TCP 协议的协议号(6) 以及 TCP 报头和有效负载的长度(以字节为单位)组成。

紧急指针 Urgent pointer (16 bits)

如果设置了 URG 标志,那么这个 16 位字段是与指示最后一个紧急数据字节的序列号的偏移量。

选项 Options (变量 0–320 bits, 以 32 bits为单位)

该字段的长度由数据偏移量决定场地。选项最多有三个字段:Option-Kind(1 字节)、Option-Length(1 字节)、Option-Data(变量)。Option-Kind 字段指示选项的类型,并且是唯一不可选的字段。根据 Option-Kind 值,可以设置接下来的两个字段。Option-Length 表示选项的总长度,Option-Data 包含与选项相关的数据(如果适用)。

填充 Padding

字段指示选项的类型,并且是唯一不可选的字段。根据 Option-Kind 值,可以设置接下来的两个字段。Option-Length 表示选项的总长度,Option-Data 包含与选项相关的数据(如果适用)。

填充 Padding


http://www.niftyadmin.cn/n/757477.html

相关文章

对外承包工程有哪些条件_建筑资质需要年检吗?年检需要满足哪些条件?

作为建筑企业&#xff0c;取得资质后顺利开展工程施工&#xff0c;企业发展逐步走上正轨&#xff0c;是很值得欣慰的事情&#xff0c;但是&#xff0c;很多人还是会有这样的疑问&#xff0c;建筑资质需要每年进行审核吗&#xff1f;具体审核的的程序以及条件有哪些呢&#xff1…

iOS设计模式之懒加载

一.为什么要懒加载&#xff1f;答&#xff1a; iPhone设备内存有限&#xff0c;如果在程序在启动后就一次性加载将来会用到的所有资源&#xff0c;那么久可能会耗尽iOS设备的内存。这些资源例如大量的数据&#xff0c;图片&#xff0c;音频&#xff0c;过多的控件等。二.懒加载…

go string 换行_STRING:蛋白相互作用数据库的使用

蛋白相互作用分析的数据库有很多&#xff0c;至于为什么选择STRING&#xff0c;还是在于其强大的可视化&#xff0c;以及自定义功能。这样我们可以得到数据结果的同时&#xff0c;还可以得到相对好看的图。下面我们就来介绍一下STRING 数据库如何使用吧~基本检索我们在打开数据…

vscode远程调试

vscode 远程调试 1.设置代理地址go env -w GOPROXYhttps://goproxy.cn,direct2.被调试机设置环境变量 sudo vim /etc/profile ##编辑文本首行加入如下&#xff1a; export GOPATH/root/go export PATH${PATH}:${GOPATH}/bin ##wq保存退出 sudo source /etc/profile远程调试机 …

你该知道的古典音乐榜单

你该知道的古典音乐榜单 巴洛克时期 古典主义音乐时期 海顿第四十五交响曲&#xff08;告别&#xff09; 第九十四交响曲&#xff08;惊愕&#xff09; 第一百零一交响曲&#xff08;时钟&#xff09; 第一百零四交响曲&#xff08;伦敦&#xff09; 莫扎特第三十九交响曲 …

go运行时状态信息

go运行时状态信息 内存 runtime.ReadMemStats(&ms) 获取内存分配信息&#xff0c;可以定时收集&#xff0c;发送给时序数据库做监控统计 gc 数据 ReadGCStats 获取最近的GC统计信息&#xff0c;可以定时收集&#xff0c;发送给时序数据库做监控统计 协程数 runtime.N…

easyui数据表格显示复选框_关于数据透视表的介绍和使用

基础认知和操作&#xff1a;一、数据透视表的概念 数据透视表是用来从Excel数据列表、关系数据库文件等数据集的字段中总结信息的分析工具。所谓“透视”&#xff0c;可以理解为对原始数据具有透视功能&#xff0c;也就是可以从数据背后找到联系&#xff0c;从而将看似杂乱的数…

Linux下动态库(so)的搜索路径

程序编译时&#xff0c;通过-Wl, -rpath参数指定的路径&#xff1b;环境变量LD_LIBRARY_PATH指定的路径/etc/ld.so.conf或/etc/ld.so.conf.d/目录下任何一个文件中指定的路径/lib路径/usr/lib路径 加入动态链接库的路径 su - root echo "/usr/local/lib" >>…