TCP的三次握手
TCP的三次握手
这是一个TCP SYN数据包,用于建立TCP连接的第一个步骤。以下是各字段的详细说明:
-
[SYN]:表示这是一个SYN(同步)数据包,用于发起TCP连接。
-
Seq=0:连接的初始序列号为0。这是发送方字节流的起始点。
-
Win=64240:发送方的接收窗口大小为64,240字节。这表示发送方在未收到确认之前能够接收的数据量。
-
Len=0:该数据包不包含数据(仅包含头部信息),这是SYN数据包的典型特征。
-
MSS=1460:最大分段大小为1460字节。这是发送方能够在一个TCP分段中接收的最大数据量。
-
WS=256:窗口缩放因子为256。这允许接收窗口大小超过标准的65,535字节限制,通过将窗口值左移此因子来实现。
-
SACK_PERM=1:允许选择性确认(SACK)。这允许接收方确认非连续的数据块,从而在存在数据包丢失的情况下提高性能。
step1:第一次握手 建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认。(其中,SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x)。
step2:第二次握手 服务器收到请求后,必须确认客户的数据包。同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RCVD状态。(其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含服务端的初始序号seq(服务器)=y,以及服务器对客户端初始序号的确认号ack(服务器)=seq(客户端)+1=x+1)。
step3:第三次握手
客户端收到服务器的SYN+ACK包,向服务器发送一个序列号(seq=x+1),确认号为ack(客户端)=y+1,此包发送完毕,客户端和服务器进入**ESTABLISHED **(TCP连接成功)状态,完成三次握手。
Win=64240 的通俗解释
"Win=64240" 表示发送方告诉对方:我的接收缓冲区(内存空间)最多能存64,240字节的数据。这就像一个快递收件箱的容量限制——如果对方一次性寄来太多包裹(数据),而你的收件箱装不下,包裹就会堆积在快递站(网络中间节点),甚至可能丢失。TCP通过这个窗口值来避免这种问题。
为什么需要接收窗口?
TCP协议的核心是可靠传输,但网络环境存在两个关键矛盾:
发送方和接收方速度不匹配
比如服务器(发送方)是高铁(每秒发送100个数据包),但你的手机(接收方)是自行车(每秒只能处理10个)。如果没有窗口限制,服务器会疯狂发送,导致你的手机内存被撑爆。
网络拥堵风险
如果接收方不告诉发送方"我还能存多少数据",发送方可能一直发送,导致数据包在路由器等中间节点排队,严重时引发网络拥堵甚至丢包。
接收窗口如何解决问题?
1. 流量控制(防内存溢出)
类比场景:
你下载一部电影(1GB),手机只有100MB存储空间。如果对方不问就直接发送,你的手机会崩溃。TCP的接收窗口就像你的手机提前告诉对方:"我的剩余空间是100MB,超过这个量先别发!"
实际作用:
接收方通过Win=64240告诉发送方:"我的缓冲区还能存64,240字节,超过这个量请暂停发送,等我用掉一部分后再通知你新的窗口大小。"
2. 避免网络拥塞(防快递站爆仓)
类比场景:
快递站(路由器)每天最多处理1000个包裹。如果发送方疯狂发送10,000个包裹,快递站会瘫痪。TCP的窗口机制让发送方根据接收方的处理能力动态调整速度,避免快递站爆仓。
实际作用:
接收窗口值会随着网络状况动态调整(比如网络拥堵时缩小窗口,空闲时扩大窗口),从而平衡发送速度和网络承载能力。
窗口值64,240字节的实际意义
典型场景:
在高速局域网中,这个值表示接收方有足够的内存(约62.7KB)处理数据,发送方可以连续发送多个数据包而无需等待确认。
对比低速网络:
如果接收方是低性能设备(如旧手机),窗口可能只有1460字节(一个标准TCP段大小),此时发送方必须发一个包、等一次确认,效率极低。
为什么需要动态窗口?
网络是变化的:
你的手机可能在Wi-Fi和4G之间切换,或者同时运行多个应用(如视频、游戏)。TCP通过以下机制动态调整窗口:
接收方:每收到一个数据包,就通过ACK告诉发送方"我的剩余空间增加了"。
发送方:根据ACK中的窗口值,自动调整发送速度(如从每秒100包降到10包)。
延伸思考:如果没有窗口机制会怎样?
最坏情况:
发送方疯狂发送数据,导致:
接收方内存耗尽,程序崩溃。
网络中间节点(如路由器)缓存溢出,数据包被丢弃。
发送方因长时间未收到ACK而超时重传,进一步加剧拥塞。
TCP的优雅性:
通过窗口机制,TCP实现了"按需发送"的智能控制,就像一个有经验的快递员,会根据收件人的处理能力和快递站的负荷,动态调整送货速度。
总结
Win=64240 是TCP协议中流量控制的核心机制,它通过限制发送方的数据量,确保:
接收方不会因内存不足而崩溃。
网络不会因数据过多而拥塞。
发送方和接收方能根据实时状况动态调整传输速度。
这个机制虽然简单(只是一个数字),但却是TCP实现可靠、高效传输的关键基石。