美文网首页Ajax网络
【http】TCP 的三次握手和四次握手

【http】TCP 的三次握手和四次握手

作者: MC大狗哦 | 来源:发表于2019-01-07 11:15 被阅读287次


    TCP三次握手和四次挥手

    通过上面这张图我们能够知道。

    在Http工作之前,Web浏览器通过网络和Web服务器建立链连接,该连接是通过Tcp来完成的,该协议和Ip共同组成了Internet,即著名的Tcp/Ip协议族,Http是比Tcp更高的应用层协议,一般Tcp接口的端口好是80

    TCP(Transmission Control Protocol)传输控制协议

    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

    位码即tcp标志位,有6种标示:SYN(建立联机)  ACK(确认)  PSH(传送)  FIN(结束)  RST(重置)    URG(紧急)  Sequence number(顺序号码)    Acknowledge number(确认号码).

    二  TCP的三次握手

    第一次握手:客户端发送了一个带有SYN(建立连接)Tcp报文到服务器,这个三次握手中的开始。表示客户端想要和服务端建立连接。

    第二次握手:服务端接收到客户端的请求,返回客户端报文,这个报文带有SYN(建立连接)ACK(确认)标志,询问客户端是否准备好。

    第三次握手:.客户端再次响应服务端一个ACK(确认),表示我已经准备好。

    TCP的四次握手


    第一次挥手:TCP发送一个FIN(结束),用来关闭客户到服务端的连接。

    第二次挥手:服务端收到这个FIN,他发回一个ACK(确认),确认收到序号为收到序号+1,和SYN一样,一个FIN将占用一个序号。

    第三次挥手:服务端发送一个FIN(结束)到客户端,服务端关闭客户端的连接。

    第四次挥手:客户端发送ACK(确认)报文确认,并将确认的序号+1,这样关闭完成。

    为什么会采用三次握手,若采用二次握手可以吗?

    1. 采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。

    2. 考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。

    为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

    原因是因为TCP是全双工模式,因此每个方向都需要一个FIN和ACK,当一端发送了FIN包之后,处于半关闭状态,此时仍然可以接收数据包。在建立连接时,服务器可以把SYN和ACK放在一个包中发送。

    但是在断开连接时,如果一端收到FIN包,但此时仍有数据未发送完,此时就需要先向对端回复FIN包的ACK。等到将剩下的数据都发送完之后,再向对端发送FIN,断开这个方向的连接。

    因此很多时候FIN和ACK需要在两个数据包中发送,因此需要四次握手

    相关文章

      网友评论

        本文标题:【http】TCP 的三次握手和四次握手

        本文链接:https://www.haomeiwen.com/subject/ttoyrqtx.html