最后更新:2022-04-04 16:08:09 手机定位技术交流文章
TCP 连接由通信结尾处的一对结论点或插座组成,由一对对(IP 地址、端口号)独有指定。 TCP 连接通常分为三个阶段:启动、数据传输(已建立连接)和退出。
以下是TCP连接设置和终止的实例:

一开始,双方都处于CLOSED首先,服务器积极收听端口并进入LISTEN状态
SYN_SENT状态SYN_RCVD状态ESTABLISHED状态. ACK 将被服务器接收并输入 。ESTABLISHED状态一个连接,又称三节握手,可以通过完成上述文件的三部分进行。
请注意, 序列号必须用在需要对方确认的文本上。 SYN 电文需要对方确认, 所以序列号必须消耗; 发送的 ACK (没有数据) 不需要对方确认, 所以序列号不需要消耗, 因为序列号必须用在需要对方确认的文本上。 SYN 电文需要对方确认, 所以序列号必须用在对方身上; 发送的 ACK (没有数据) 不需要对方确认, 所以序列号不需要消耗。
在一个连接中,在通过网络线路之后,TCP指出,抵达可能出现延误,顺序可能不确定。为了解决这一问题,必须仔细选择第一个序号。从最初的序号开始,序号定期变化。这篇文章是全球之声在线特稿的一部分。因此,尽管接受方的《时报》部分评级存在误解,但无法摆脱困境。您也可以更改序号 。
第一个序列号随着时间而变化。这是第一个序列号 不是序列号本身因此,每个连接都有独特的起始序号。第一个序号可视为32位数的计数器。计算器的价值是每四微秒一分之一。在为相关段落组织序号时,目标是避免重复与其他链接的序号。
除了有必要避免重叠之外,第一个序号是还有安全问题试想一下,如果选择正确的序列号,IP 地址和端口号 。然后,任何人可以伪造TCP入境证。为了扭转这一趋势,第一个序列号很难估计。另一种方法是加密
为了产生第一个序列号,大多数现代系统采用半随机技术。
在Linux操作系统中通过使用基于时钟的方法,每个连接的时钟都有随机变化。随机偏差是使用加密散列函数和连接身份(即象限)计算出来的。散列函数的输入每5分钟更新一次 。也就是说,同一联系的各种情况随后离境的程度各不相同。在序号的前32位前八个数字是一个秘密序列号您的其余部分使用散列函数生成 。
>>>为什么不能是两次?
这样做的主要目的是避免意外地将取消的连接请求重新传送给B。考虑这样一种情况,客户的第一个连接请求信息没有丢失 。然而,一些网络节点持续时间很长。也许由于网络拥挤,这项服务长期无法提供。然后,顾客将重新使用SYN。然后建立起连接。假设第一个连接请求被推迟到客户与服务连接后,第一个连接请求将无法送达服务。这项请求不再有效。不幸的是,在接受服务后,它被误解为客户提出的新的连接请求。因此,客户收到ACK,同意建立联系。并进入ESTABLISHED在等待客户提供数据时对服务端来说,已经建立了一个新的联系。因此,大量资源被浪费在完成这项服务上。服务提供者无法知道请求是否合法。然而,客户可以确定连接的有效性(根据ACK的序列号/时间印章)和连接的有效性。因此,客户必须能够确定ACK是否有效。第三次握手成功进行。通知服务器可建立连接 。
换句话说,如果你握手两次,服务器将在收到SYN后进入。ESTABLISHED不论SYN是否正常运行,其状况将导致在服务端浪费资源,答案是在连接服务端之前组织一个无效的历史连接,这就需要第三次握手。
其次,它保证双方的序列号同步SYN由客户端发送到服务器 。服务供应商对ACK作出反应。它表示序列号已从客户向服务处正确同步;同样,服务供应商在发送ACK时 自己发送SYN然后,客户回应了ACK。只是序列号从服务到客户 都同步到这个方向一共三步,我们确保成功收到双方的序列号。
>>>为什么不是四次?
实际上,从服务到客户有两个阶段:ACK和SYN。这个故事是我们对2011年埃及抗议的特别报导的一部分。此外,请提供您自己的建议。尽管如此,还是可以一步一步地将其整合起来。从理论上讲,这样的三个阶段足以建立可靠的联系。因此,没有必要增加沟通。
第一次握手丢失,这意味着客户的连接已经过期。这将触发一个超时再传输机制。重传SYN报文,如果还没有从ACK收到任何答复,就会一直重传。转播之间的时间差是先前转播时间的两倍。使用指数撤退来解释这一趋势。每一笔退款的价值是前一笔的两倍。
系统配置变量在 Linux 中是一个变量 。net.ipv4.tcp_syn_retries表示试图在主动开放应用程序中再传送 SYN 文本的最大次数; 变量。net.ipv4.tcp_synack_retriesSYN + ACK 最多尝试重新发送的次数,同时对对方主动的开场请求作出答复,默认值为5。
第二次握手中包括第一次握手服务的ACK确认、客户的SYN信息以及服务给客户的SYN信息。
客户 SYN 消息的ACK 丢失导致客户一次又一次重新发送 SYN 信息。 事实上,对于客户来说,第二次握手会启动与第一次握手相同的事件。
SYN 服务器的 SYN 已经丢失, 导致服务器发布 SYN, 而没有得到对方的 ACK, 触发SYN+ACK 信件的超时转播。 SYN+ACK 报告按参数重新传送的最大次数net.ipv4.tcp_synack_retries决定。可以思考一下,如果错过第三次握手会怎么样?在现实中,第三次握手被抢走。对于服务端来说,第二次握手是一样的或是否获得第二次握手,还是第三次丢失,对于服务端来说,他所知道的就是 他没有从他们中任何一人那里 收到ACK因此,SYN+ACK将重新传送。
尽管这是关于重新发送SYN + ACK,但ACK并不重新发送。如果没有收到 ACK, 发送者将重新发送消息 。
双方中的任何一方都可以启动关闭程序。客户通常是启动连接关闭的人。在答复询问后,某些服务器,如网络服务器,开始关闭程序。关闭程序通常是通过申请断开连接(例如,使用系统、呼叫关闭())而启动的。
TCP档案通过传送FIN条目开始关闭程序(即只有在连接双方完成关闭程序后,它才构成完全关闭(见FIN控制地点部分)。
FIN_WAIT_1状态CLOSE_WAIT在这一点上,将提醒较高一级的方案注意,连接的对面方提议通常(TCP允许半关闭,见下文)停止运行,导致申请开始自己的关闭程序。FIN_WAIT_2状态LAST_ACK状态TIME_WAIT状态 。 如果 FIN 丢失, 发件人将重新发送, 直至收到 ACK 回复 。 一旦收到 ACK 回复, 服务器将立即输入 。CLOSED状态, 显示服务器已完成连接终止 。 客户端TIME_WAIT状态结束后自动进入CLOSED根据状况 客户的停业已经结束了简言之,关闭连接需要四条物品,又称四波波,每方需要两段,共四段,以停止与另一方的连接。 在整个分析过程中,可以对两种关闭操作进行对称评估。
另一方在活跃的结案方转交FIN段落后很长时间内没有提供ACK答复,该段也触发了汇款时间超时机制;重复次数最多的原因是:tcp_orphan_retries当重复次数达到某一阈值时,参数将被关闭。tcp_orphan_retries不再有芬兰金融情报处,此后不再有直接接触(在上次重新生效之后的等待期间没有收到ACK)CLOSED
目前的程序有可能被发送 完成他们自己的数据。发送 FIN 终止彼此之间的连接 。然而,它仍然希望从彼此那里获得数据。直到对方派FIN来换句话说,这是与他人断绝联系而不与他人断绝联系的唯一方法。这就是半关闭。程序可以使用关闭 () 取代关闭 () 方法 。就能实现上述操作
FIN_WAIT_2表示,通信端自愿发送一个FIN,并经另一端核实。如地图所示,此端只有在另一方发送FIN和最后收到FIN时才输入。TIME_WAIT其地位表明,这一目的可以维持在这种状态下,而另一目的则可以维持在这种状态下。CLOSE_WAIT状态, 直至另一应用程序决定断开连接 。
为了避免连接处于这种无休止的等待状态,如果主动关闭的应用程序是由完全封闭的操作而不是半封闭的应用程序执行的,则设置计时器,如果定时器在计时器时间快用完时与空间连接,则从计时器中取出主动关闭的终端。FIN_WAIT_2进入到CLOSEDIn Linux, 状态. pass 变量被使用 。net.ipv4.tcp_fin_timeout要更改定时器的秒数, 默认值为 60 。 在这种情况下, 半关闭程序实际上是一个关闭( ) 函数 。net.ipv4.tcp_fin_timeout由于争论无法确定是否要求关闭()方法执行连接的通信端,因此积极关闭的通信端呼叫关闭()功能,并且位于对方收到FIN之前。FIN_WAIT_2状态
这就是你第二波失落时发生的事
发送自己的 FIN 并从对方获得ACK 后, 连接的主动近端将输入 。FIN_WAIT_2状态,我们都在等对方的FIN报告收到对方FIN的报告后对方会收到一个背包然后进入时代之流在这一阶段,有一个定时器设置。设定到2MSL也被称为双重等待TCP必须等待这一时期。才会进入CLOSED状态
MSL,
M
a
x
i
m
u
m
S
e
g
m
e
n
t
L
i
f
e
t
i
m
e
Maximum Segment Lifetime
M
a
x
i
m
u
m
S
e
g
m
e
n
t
L
i
f
e
t
i
m
e
寿命最长的部分界定了报纸任何部分在被遗弃之前在网络上生存的最长时间。 2IMSL由 Linux 宏指定。TCP_TIMEWAIT_LEN将默认值设为 60 。 如果您想要更改此参数, 您必须调整该参数, 并在从客户端收到 FIN 并发送到 ACK 时开始重新配置内核2MSL 的时间, 假设 FIN 从客户端收到并发送到 ACK 。TIME_WAIT在此期间,由于客户的ACK超时,导致服务重新发送FIN,客户再次获得FIN,发送ACK,并重置计时器。
LAST_ACK国家服务提供商不会从客户处收到确认信息,而该信息将随时间再传送给自己的FIN,客户将在2MSL的时间内收到重新发送的FIN,然后再次发送确认信息,并恢复2MSL的期限。TIME_WAIT状态等待一段时间后才能在给予最后的 ACK 后释放连接, 因此不再从服务端发送 FIN, 不再发送 ACK, 也不允许正常访问 。CLOSED状态. 也是由于失去ACK、FIN在服务端重新传送、客户要求等待重新发送的FIN、1 ACK加1 重新发送FIN、2份报告,因此是2MSL。TIME_WAIT的时间net.ipv4.ip_local_port_range如果连接已建立, 您可以更改它 。TIME_WAIT状态过多,端口被占满,无法建立新的连接;对于服务目的,尽管它可能只需要听一个港口的话,然后,不同的客户 进入这个港口 建立各种连接。换句话说,由于大量TCP连接,它不受资源限制。然而,过多的连接可能压倒系统的资源。如文件描述符,内存资源,CPU,线程等等net.ipv4.tcp_tw_reuse参数1 表示您可以重新使用 Time_WAIT 的套接字提供的连接。这只有在您需要打开时间戳选项时才适用。net.ipv4.tcp_max_tw_buckets参数值,该参数值表示系统在TIME_WAIT如果状态连接超过此值, 系统将会落后 。TIME_WAIT连接状态重置
“类别”是每个选项的第一个字节。指明该选项的类型。对于值为0或1的选项,只使用一个字节。视种类而定,每种选择自行决定字节的数量。选项字段的全部长度包括类型和10字节。上图的长度是指选择字段(包括类别)的整个长度。
NOP (
N
o
O
p
e
r
a
t
i
o
n
No Operation
N
o
O
p
e
r
a
t
i
o
n
另一种解决办法是使发件人能够根据需要填田填田,使TCP部长总数增加到32位。
EOL (
E
n
d
O
f
O
p
t
i
o
n
L
i
s
t
End Of Option List
E
n
d
O
f
O
p
t
i
o
n
L
i
s
t
选项选项中表示选择列表的末尾,且该列表无需再处理。
MSS(最大区段大小) M a x i m u m S e g m e n t S i z e Maximum Segment Size M a x i m u m S e g m e n t S i z e )指的是TCP协议允许一方从另一方接收信息的最大数量,即连接双方在传输数据时可以使用的最大数量,而最大规模仅记录TCP数据字节的数量,忽略了额外的重要的TCP和IP头条标题。默认值为536字节。
当获得的数据没有条理时,因此,所收到数据的序号不是连续的。因此,TCP接收器的数据队列是空的。如果你得到序列号1 -3,6-7的数据,还有一个4 -5空的此外,由于TCP提供字节,它保证向应用程序提供的数据的顺序正确。有必要禁止应用程序使用除空数据以外的任何东西。
由于TCP发送者知道接收者目前的状况,当文本丢失或被接收者遗漏时,他可以更好地进行再传送,这是选择确认的功能。
通过接收SYN(或SYN+ACK)提供选择确认的可能性。TCP 通讯员知道他们可以发送 SACK 信息。当收到任意数据时,为了描述这些无序数据的特点,它可以包括一个 SACK 选项。接收器成功接收的数据区块的序列号范围包含在 SACK 选项中。每个区域称为 SACK 区块。代号32比特的序列号代表它因此,n " 萨克 " 区块包含在 " 萨克 " 区块中。8n+2字节是长度。由于保存的种类和长度,需要2字节。序列号范围为空 。
由于该部负责人的制约,在一份文件中交付的SACK区块的最大数量为3个(假设启用了时间戳选项,这是目前实施TCP的典型做法)。
窗口缩放选择(例如,WSCALE或WSOPT)
W
i
n
d
o
w
S
c
a
l
e
O
p
t
i
o
n
Window Scale Option
W
i
n
d
o
w
S
c
a
l
e
O
p
t
i
o
n
该选项的总长度为3字节,其中1字节标明了种类,1字节标明了长度,其余的字节标明了窗口的成比例因子,显示窗口的成比例因子扩大了TCP窗口广告字段的范围,范围从16个到30个。该选项的总长度为3字节,其中1字节标明了种类,1字节标明了长度,其余字节标明了窗口缩放的成比例因子。
鉴于比率系数为S,窗口值将增加到2的初始值。s窗口最初的大小为65535(2)。161) 相称性系数的最大值为14,即窗口的实际最大值为65535 *2。14这一数额接近1GB。 根据RFC 7323,如果通信终端收到大于14的实地价值,他只能使用14。
当比率系数与连接后的方向相关时,通过修改窗口大小字段的值来调整窗口的大小,该数值只能在 SYN 报告中显示。
为了保证窗口调整,这一选择必须列入函件两侧的SYN报告。当然,仍应由通信用户决定是否纳入一揽子计划。如果其中一方不列入这一备选案文,增加这一备选案文是不可行的。因此,任何一方都无法使用这一选择。启动连接的一方主动传送SYN。而被动打开的一方只有在收到的SYN报文中指出了该选项自己才能发送该选项;而如果启动连接的一方主动传送SYN。且包含了该选项,尽管如此,双方都没有发出任何窗口缩放选择。它将接收传输比率系数降低到零。
时间戳替代物(TSOPT或TSopt)描述如下:
采用时间戳办法,发送者必须在报告每一段增加两个四字长的时间戳值。长10比特(加上一个字节)。1个字节长度),在确认阿克报告时,接收者将反映(反映)这些数值。(应当指出,不是每份报告,也不是每份报告,都允许根据收到的每一份 " 反反 " 报告提交。 )因为TCP使用累积确认来估计TCP连接的返回时间。
作为时间戳选择的第一部分,发送者将32比特的价值输入时间戳栏(TSV/TSval);接收方将时间戳数值输入时间戳栏(TSER/TSecr)到第二部分的时间标记栏(TSER/TSecr)。接下来,在第一部分,请提供您的时间标记值。
计算TCP连接的时间大多用于确定再传输的时间,而时间戳选项使我们能够收集更多返回时间的样本,从而增强我们适当估计返回时间的能力。
此外,时间戳办法使收件人能够避免收到过时的通信,并评估其准确性,即避免序列号重新输入。
P
r
o
t
e
c
t
i
o
n
A
g
a
i
n
s
t
W
r
a
p
p
e
d
S
e
q
u
e
n
c
e
n
u
m
b
e
r
s
Protection Against Wrapped Sequence numbers
P
r
o
t
e
c
t
i
o
n
A
g
a
i
n
s
t
W
r
a
p
p
e
d
S
e
q
u
e
n
c
e
n
u
m
b
e
r
s
"PAWS" 考虑一个相当快的连接, 即使与序列号2。"32个,也很快循环完一轮,假设本轮缺少与序列号有关的部分数据,然后重传,然而,直到第二轮序号周期才出现。仅根据序列号,接收者无法确定数据是最近还是更早收到的。而有了时间戳选项。可以确定报告期间的盖章是否小于最近收到的盖章的盖章。事实上,如果我们不尽快回到序列号算法 我们就会扔掉它
反序列号技术不需要发件人和接收人之间任何形式的时钟同步;接收人需要的只是保证时间标记单次递增,每个窗口至少增加一个。
可以看到,时间戳办法也可以处理以前所说的“历史联系报告”,并决定是过去联系还是现在联系。
将参数net.ipv4.tcp_timestamps。将值修改为 1,以允许时间戳选项的功能。默认值为 1。
(% 1) 是用户超时选项的值 。 U S E R _ T I M E O U T USER_TIMEOUT U S E R _ T I M E O U T 指定 TCP 发件人愿意等待数据ACK确认的时间,直到确认对方无法成功接收数据为止。
TCP认证选项 (
T
C
P
A
u
t
h
e
n
t
i
c
a
t
i
o
n
O
p
t
i
o
n
TCP Authentication Option
T
C
P
A
u
t
h
e
n
t
i
c
a
t
i
o
n
O
p
t
i
o
n
,TCP-AO)用于改进连接安全。为认证每个报告期,它采用加密散列法和通过TCP连接共享的秘密价值。当发送数据时,在共享钥匙的基础上,TCP将产生通信钥匙。并使用一种独特的技术计算散列值给接收人同样的钥匙。还可以产生通信钥匙。通信钥匙的收件人可以验证电文是否完好无损地送达,或者电文在传送过程中是否被篡改。因为必须产生和分配共同的钥匙,此选项未常用 。
根据RFC 5925, 任何连接的唯一通信钥匙是连接本身,即为每个连接指定了一个通信钥匙(例如)。
替换段落是一份与 RST 控制位置有关的报告的复制件。 TCP 当输入的条目被判定连接错误时,会发送重置段落 。
以下是引发这篇论文的场景:
SO_LINGER为履行上述函数,值为零,这意味着在终止前没有时间评估数据是否达到另一端,因此跳过四波。TIME_WAIT国家将被跳过并被消灭TIME_WAIT状态的一种手段TIME_WAIT国家通信端一般不需要执行任何行动,只需在2MSL时钟结束前维持现状,如果在此期间从这一关连获得若干部分,或者如果它有一个更特别的替代装置,即所谓的等待时间错误,则将销毁。
T
I
M
E
−
W
A
I
T
A
s
s
a
s
s
i
n
a
t
i
o
n
TIME-WAIT Assassination
T
I
M
E
−
W
A
I
T
A
s
s
a
s
s
i
n
a
t
i
o
n
,TWA)TIME_WAIT客户已经拥有身份,CLOSED状态,目前,客户很可能从这一联系(迟到)获得旧信息。作为回应 他会派ACK来然而,服务供应商收到留言后它没有关于这一联系的资料。因此,它用一个重置段落作出回应。这不是一个服务结束的问题。然而,它会迫使客户过早离开这种情况。TIME_WAIT状态转移到CLOSED状态TIME_WAIT避免上述问题的办法是,在情况发生时未对该款的替换作出反应。SYN洪水袭击是TCP拒绝服务袭击的一种类型。它表示一个或多个恶意客户尝试一系列TCP连接(SYN报告行)。然后上传到服务器上每个连接从服务器接收一系列连接资源 。由于连接尚未完全建立(服务提供商对这些SYN作出反应并发送自己的SYN+ACK条目),因此无法使用SYN+ACK。处于SYN_RCVD但恶意客户不会对ACK的第三次握手 有任何反应
SYN饼干是应付这种情况的工具。其主要思想是,如果一个SYN来了,在这方面保存的大部分信息将编码并储存在SYN + ACK报告字段的序列号字段中。SYN Cookie 的目的地主机不需要为接入连接分配任何储存资源。只有在SYN+ACK得到验证(和初始序号已经返回)之后,才会分发真实的内存。在这种情况下,所有主连接参数再次可用 。连接也可以被配置为ESTABLISHED状态
Linux中,服务器在收到SYN后使用以下程序设定第一个序列号(记录在SYN+ACK报告):前五个是tm32的结果。这是有32位数的柜台每64秒增加一个; 3位元是服务器最大区段大小的编码值; 其余24位元保留了象限散列值( 即链接的身份) 和 t 值,服务器的散列加密算法用来计算值 。
使用此方法, 服务器总是对 SYN + ACK 条目作出答复, 如果使用 ACK t 值计算出与加密散列值相同的结果, 服务器将会重新建立 SYN 的队列 。
TCP概述
本文由 在线网速测试 整理编辑,转载请注明出处。