TCP: 传输控制协议 --- 面向连接的可靠传输协议
面向连接 --- 在第一次传输数据前,通过三次握手建立段到端虚链路
1. 三次握手
面向连接时的三次握手其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。
第一次握手:客户端给服务端发送一个报文服务端收到了;
第二次握手:服务端发包客户端收到了;
第三次握手:客户端发包服务端收到了
2. 四次断开
终止一个连接要经过四次挥手,这由TCP的半关闭造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。
为什么需要四次断开?
因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。这其中的ACK报文是用来应答的,而SYN报文是用来同步的。但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”。只有等到我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。说的通俗一点,举个例子: 两个人打电话阿珍和阿强打电话聊天,通话差不多要结束时,阿强说,“我没啥要说的了”。阿珍回答,“我知道了”。但是阿珍可能还有要说的话,阿强不能要求阿珍跟着她自己的节奏结束通话,于是阿珍可能又叽叽歪歪说了一通,最后阿珍说,“我说完了”,阿强回答,“我知道了”,这样通话才算结束。故需要四次断开