TCP(Transport Control Protocol)是一个传输层协议,提供Host-To-Host数据的可靠传输,支持全双工是一个连接导向的协议。
TCP/IP五层模型
应用层
传输层
网络层
数据链路层
物理层
TCP是在传输层的协议,主要实现主机到主机通信,前提是需要知道主机们的网络地址(IP地址),但是TCP不负责实际地址到地址的传输,因此TCP协议把IP地址给底层的网络层处理。
网络层,提供地址到地址的通信,IP协议就是在这一层工作。互联网层解决地址到地址的通信,但是不负责信号在具体两个设备间传递,因此,网络层会调用下方的链路层,在两个相邻设备间传递信息。当信号在两个设备间传递的时候,物理层封装最底层的物理设备,传输介质,由最下方的物理层提供最底层的传输能力。
会话是应用层的概念,连接是传输层的概念。
TCP是一个双工协议,数据任何时候都可以双向传输。这就意味客户端和服务端可以平等地发送接收信息。
TCP是一个连接向导的协议,设计有建立连接(握手)和断开连接(挥手)的过程。TCP没有设计会话(Session),因为会话是应用层的行为。
TCP协议基本操作如下:
1、一个Host主动向另一个Host发起连接,成为SYN(Synchroniation),请求同步;
2、一个Host主动断开请求,称为FIN(Finsh),请求完成
3、一个Host给另一个Host发送数据,称为PSH(Push),数据推送
以上3种情况,接收方接到数据后,需要给发送方一个响应ACK(Acknowledgement)。如果一个请求没有响应,发送方会重新发送这个请求。
建立连接的过程(三次握手)
因为要保证连接和可靠性约束,TCP协议要保证每一条发出的数据必须给返回,返回的数据叫ACK(也就是响应)
1、客户端发消息给服务端(SYN)
2、服务端准备好进行连接。
3、服务端针对客户端的SYN给一个ACK
如果到这结束了,服务端还没有确定客户端是否准备好,这个时候如果服务端马上会再给客户端发送数据,客户端可能还没准备好接受数据。所以还要增加一个过程。
4、服务端发送一个SYN给客户端
5、客户端准备就绪
6、客户端给服务端发送一个ACK。
步骤1是一次握手
步骤3和步骤4,是同时发生的,合并为一个SYN-ACK响应,作为一条数据传递给客户端,所以属于第二次握手。
步骤6是第三次握手。
TCP协议为什么是3次握手,4次挥手
断开连接的过程(4次挥手)
可以类比建立连接的过程
1、客户端要求断开连接,会发送一个断开的请求,FIN。
2、服务端收到这个请求后,会给客户端回一个ACK,作为FIN的响应。
3、然后这块就是与建立连接的时候有区别了。
断快连接这,服务端不会马上又发一个FIN,给客户端。因为断开连接的处理问题比较多,比如说服务端可能还有发送出去的消息没有得到ACK;也有可能服务端自己有资源需要释放。因此断开连接不能像建立连接那样,将两条信息合并。所以服务端需要等待一段时间,确定可以关闭连接了,再发一条FIN给客户端。
4、客户端收到服务端的FIN后,会给服务端一个响应ACK。
所以这个断开连接过程就是4次挥手。
TCP协议为什么是3次握手,4次挥手
总结,来说为什建立连接的时候是3次握手,断开连接的时候是4次挥手,说白了就是在握手的时候双方没有过多的事情,所以在服务端接收到客户端的请求后,立马又发送了一个建立连接的请求,也就是SYN和ACK合到了一起,发送给的客户端。而断开连接的时候,由于客服务端在给客户端回复确认的ACK后,还需要等待一会,等待客户端的所有响应都收到了。然后再发送一条断开的请求FIN,然后客户端在回信给服务端ACK,这样就出现了四次挥手。