计算机网络之TCP的三次握手和四次挥手

一.有关TCP协议的几个概念

    1.1TCP协议的基本概念:

    TCP协议是传输层的一个协议,它支持全双工通信,是主机对主机之间数据的可靠传输,是一个连接导向的协议。

   1.2连接:

        连接是通信双方的一个约定,它的目的是让两个在通信的程序之间产生一个默契,保证两个通信的程序都在线,并且尽快地响应对方的请求。连接是记录网络的行为状态,是在传输层的一个概念。

   1.3会话:

        会话是应用的行为,比如说在微信上,你约定和张三聊天,聊了一段时间之后各自先不发送信息了,但是微信聊天窗口没有关闭。所以这个时候,连接关闭了,会话没有关闭。所以会话是在应用层的概念。

   1.4单工通信:

         如果在任何一个时刻,数据只能单向传送,这就是单工,单工通信至少需要一条线路;

   1.5半双工通信:

         如果在某个时刻,数据可以向一个方向进行传输,也可以向另外一个方向进行传输,并且交替进行,就叫作半双工,至少需要一条线路;

   1.6双工通信:

         如果在任意一个时刻,数据都可以双向收发,这就叫做全双工,全双工通信需要大于一条线路。

二.TCP的三次握手

       TCP协议的三次握手发生在建立连接的过程。先用一个大致的流程图表示一下三次握手的大致过程。

在上述表示的过程中,SYN在协议头中表示的是发起一个新连接,ACK是确认序号有效。可以看到,在上述的建立连接的过程中,有三次数据之间的互相传输,所以被称作为三次握手。

我们可以分析一下,在这三次握手的过程中,客户端和服务端分别都做了什么:

第一次握手:客户端给服务端发送一个建立连接的SYN报文,主动打开连接。第一次握手确保客户端发送报文的能力正常。

第二次握手:服务端如果同意连接,先生成一个ACK确认报文,确认从客户端接受到的报文无误,然后发送一个SYN报文给客户端,第二次握手是确保服务端接收和发送能力正常。

第三次握手:客户端接收到服务器端的确认信息后,还要给服务器发送确认报文。此时TCP连接建立,确认客户端接收能力正常。

三:TCP为什么需要三次握手

           如果TCP协议只采用两次握手会出现以下情况,客户端向服务端发送的请求报文由于网络延迟或者其他原因,没有及时成功地发送到服务端,这是,客户端会再次向服务端发生请求报文,在此之后,由于网络通畅了,连接释放,与服务器端建立了连接,第一次客户端发送的报文也会发送到服务端,但是,第一次发送的报文本该失效了,服务端以为客户端又重新发送了一次请求,两次握手建立连接,客户端忽略服务端的确认报文就建立连接,也不会给服务端发送数据,就会造成不必要的网络资源浪费。

           所以,当TCP采用三次握手来建立连接时,就算第一次失效的报文请求发送给服务端,服务端发送确认报文给客户端,但是服务端没有接收到客户端第三次握手的确认报文,就会知道客户端没有建立连接,就会避免两次握手所造成的问题。

四.TCP的四次挥手

     TCP协议的四次挥手发生在断开连接的过程,先用一个大致的流程图来表示一下四次挥手的过程。

     

下面我们分析一下,在这四次挥手中,客户端和服务端分别都做了什么

第一次挥手:客户端给服务端发送一个 FIN数据包,主动断开连接,告诉服务器我要和你断开连接了,不会再给你发送数据了;此时客户端还是可以接受数据的,如果一直没有接受到被动连接方的确认包,则可以重新发送FIN数据包。

第二次挥手:服务端接收到FIN数据包之后,向客户端发送ACK确认包,表示已经收到客户端发送的报文了,这个时候,服务器在向客户端传达一个信息:我知道你要断开连接了,但是我的数据还没有发送完,等我发送完之后就会进行第三次挥手。

第三次挥手:服务端向客户端发送FIN数据包,告诉客户端我的数据发送完了,不会再给你发送数据了。

第四次挥手:客户端收到FIN数据包之后,同样的会发送一个ACK确认报文,到达服务端之后,客户端进入CLOSED状态。

五.TCP为什么需要四次挥手

         当客户端向服务端发送FIN数据包表示断开连接时,这仅仅表示客户端不再发送数据了,但是客户端还是能够接收数据。当服务端接收到客户端的FIN报文时,它首先会回复一个ACK应答报文,然而,服务端可能还有数据需要处理和发送,所以直到服务端不再发送数据的时候,才会发送FIN报文给客户端,表示同意关闭连接。

        从上述描述的过程可以看出,服务端通常会把ACK和FIN报文分开发送,所以才会有四次挥手的过程。

六.总结

        TCP是一个全双工协议,保证双方的传输更加稳定和可靠。为了让双方都保证建立连接的时候,连接的双方都需要向对方发送SYC(同步请求)和ACK(响应)。在建立连接的时候,双方都没有繁琐的工作,所以在被建立连接的一方可以将自己的ACK和SYN作为一条信息回复,因此需要三次握手。在断开连接的时候,因为需要等被断开连接的一方把数据都处理完,所以被断开连接的一方需要分别发送ACK和FIN,因此需要四次挥手。

        

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值