1、概述
网络开发中,你怎么也不会避开TCP协议,而且面试中这个也是一个基础问题。总的来说 TCP 的建立分为三次握手,而 TCP 的终止则需要四次挥手。
2、TCP的建立(三次握手)
建立一个 TCP 连接时会发生以下情形。
1、服务器端必须准备好接受外来的连接。通常通过调用 socket、bind 和 listen 这3个函数来完成,我们称为被动打开(passive open)。
2、客户端通过调用 connect 发起 主动打开(active open)。这导致客户端 TCP 发送一个 SYN(同步序列编号:Synchronize Sequence Numbers)分节,它告诉服务器客户端将在连接中发送的数据的初始序列号。通常 SYN 分节不携带数据,其所在 IP 数据报只含一个 IP 首部、一个 TCP 首部及可能有的 TCP 选项(后面进行说明)。
3、服务器端接收到客户端的请求后,必须确认客户的 SYN,同时自己也得发送一个 SYN 分节,它含有服务器端将在同一连接中发送的数据的初始序列号。确认的因为单词 Acknowledgement,所以简称 ACK。服务端在给客户端回复时,同时发送自己的 SYN 和 对客户 SYN 的 ACK。
4、客户端接收到服务器端的消息,必须对服务器端的 SYN 进行确认。
这种交换至少需要 3 个分节,因此称为TCP 的三次握手。