基于TCP发送http请求建立连接与断开连接的过程

来源:互联网 发布:英智brecruit知乎 编辑:程序博客网 时间:2024/06/15 17:58

首先说说TCP是什么,HTTP又是什么?

TCP:传输控制协议,面向连接的,可靠地,安全的,基于字节流的传输层协议

HTTP:超文本传输协议,但是这个协议是应用层传输协议,它是建立在TCP之上的协议

建立连接(三次握手):

                       第一次:Client----------SYN------------->Server

                       第二次:Server---------(ACK+SYN)------------------>Client

                       第三次:Client-----------ACK------------------------>Server

断开连接(四次挥手)

                       第一次:Client--------------FIN--------------------->Server 服务器读通道关闭

                       第二次:Server-------------ACK--------------------->Client 客户机写通道关闭

                       第三次:Server-------------FIN---------------------->Client 客户机读通道关闭

                       第四次:Client--------------ACK--------------------->Server服务器写通道关闭

                                                    备注:

                                                         SYN(synchronous建立联机)

                                                         ACK(acknowledgement 确认)

                                                         FIN(finish结束)


为什么需要三次握手呢?

             client发出的第一个连接请求报文段并没有丢失,而是在某个网络某个结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”。主要目的防止server端一直等待,浪费资源。


为什么需要四次挥手才能断开连接

       可能会有疑问,在tcp连接握手时为何ACK是和SYN一起发送,但是在这里ACK却没有和FIN一起发送呢。原因是因为tcp是全双工模式接收到FIN时意味将没有数据再发来,但是还是可以继续发送数据。


1 0
原创粉丝点击