握手,即TCP协议建立连接的过程。
握手需要在客户及和服务器之间交换三个TCP报文段。
(TCP协议包括建立连接,传送协议,释放连接。注!这里连接指逻辑连接。)
1.第一次握手
客户端向服务端发送 SYN(Synchronize) 标记设为 1 的TCP包。
Seq(Sequence Number)为由操作系统生成的随机数。然后,客户端进入 SYN_SEND 状态,等待服务器的确认。
2.第二次握手
服务器收到客户端的 SYN 包,会发一个对 SYN 包的确认包(SYN/ACK)回去。
ACK(Acknowledgment Number) 为 x+1(Sequence Number+1),服务器端把 SYN+ACK 报文段发送给客户端,此时服务器进入 SYN_RECV 状态。
3.第三次握手
客户端收到 SYN/ACK 包后,发一个确认包(ACK),通知服务器端连接已建立。
注!
《计算机网络(第7版)》P238提到,最新译名为“三次报文握手”。因为在RFC973(TCP标准文档)中使用的名称是“three way hanyshake”。其中“handshake”使用的是单数而不是复数,表明只是一次握手。实际上“三次握手”是在一次握手中交换了三次报文(这有点像两个人见面进行第一次握手,上下晃了三次,并非进行了三次握手)。