为了准确⽆误地把数据送达⽬标处,
TCP
协议采⽤了三次握⼿策略。

客户端
–
发送带有
SYN
标志的数据包
–
⼀次握⼿
–
服务端
服务端
–
发送带有
SYN/ACK
标志的数据包
–
⼆次握⼿
–
客户端
客户端
–
发送带有带有
ACK
标志的数据包
–
三次握⼿
–
服务端
为什么要三次握⼿
三次握⼿的⽬的是建⽴可靠的通信信道,说到通信,简单来说就是数据的发送与接收,⽽三次握
⼿最主要的⽬的就是双⽅确认⾃⼰与对⽅的发送与接收是正常的。
第⼀次握⼿:
Client
什么都不能确认;
Server
确认了对⽅发送正常,⾃⼰接收正常
第⼆次握⼿:
Client
确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;
Server
确认了:对⽅
发送正常,⾃⼰接收正常
第三次握⼿:
Client
确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;
Server
确认了:⾃⼰
发送、接收正常,对⽅发送、接收正常
所以三次握⼿就能确认双发收发功能都正常,缺⼀不可。
为什么要传回 SYN
接收端传回发送端所发送的
SYN
是为了告诉发送端,我接收到的信息确实就是你所发送的信号
了
SYN
是
TCP/IP
建⽴连接时使⽤的握⼿信号。在客户机和服务器之间建⽴正常的
TCP
⽹络
连接时,客户机⾸先发出⼀个
SYN
消息,服务器使⽤
SYN-ACK
应答表示接收到了这个消
息,最后客户机再以
ACK(Acknowledgement[
汉译:确认字符
,
在数据通信传输中,接收站
发给发送站的⼀种传输控制字符。它表示确认发来的数据已经接受⽆误。
]
)消息响应。这
样在客户机和服务器之间才能建⽴起可靠的
TCP
连接,数据才可以在客户机和服务器之间传
递
传了
SYN,
为啥还要传
ACK
双⽅通信⽆误必须是两者互相发送信息都⽆误。传了
SYN
,证明发送⽅到接收⽅的通道没有问
题,但是接收⽅到发送⽅的通道还需要
ACK
信号来进⾏验证。
四次挥手
断开⼀个
TCP
连接则需要
“
四次挥⼿
”
:
客户端
-
发送⼀个
FIN
,⽤来关闭客户端到服务器的数据传送
服务器
-
收到这个
FIN
,它发回⼀ 个
ACK
,确认序号为收到的序号加
1
。和
SYN
⼀样,⼀个
FIN
将占⽤⼀个序号
服务器
-
关闭与客户端的连接,发送⼀个
FIN
给客户端
客户端
-
发回
ACK
报⽂确认,并将确认序号设置为收到序号加
1
为什么要四次挥⼿
任何⼀⽅都可以在数据传送结束后发出连接释放的通知,待对⽅确认后进⼊半关闭状态。当另⼀
⽅也没有数据再发送的时候,则发出连接释放通知,对⽅确认后就完全关闭了
TCP
连接。
举个例⼦:
A
和
B
打电话,通话即将结束后,
A
说
“
我没啥要说的了
”
,
B
回答
“
我知道了
”
,但是
B
可能还会有要说的话,
A
不能要求
B
跟着⾃⼰的节奏结束通话,于是
B
可能⼜巴拉巴拉说了⼀
通,最后
B
说
“
我说完了
”
,
A
回答
“
知道了
”
,这样通话才算结束。