此文的内容包括:
·HTTP是什么
·三次握手协议·四次挥手协议
HTTP是超文本传输协议(HyperText Transfer Protocol),是一种面向事物的应用层协议,它定义了浏览器怎么向服务器请求资源,以及服务器怎么把资源传输给浏览器。HTTP协议是无连接的,通信的双方在交换HTTP报文时不需要先建立HTTP连接;HTTP协议是无状态的,同一个客户第二次访问同一服务器上的页面时,服务器的响应与第一次相同。
2.三次握手协议
在发送数据的准备阶段,客户端和服务器端需要进行三次交互来建立TCP连接,成功后客户端和服务器之间才开始进行数据传输。
·其中每一次交互可以形象地比喻成一次握手:
第一次握手:客户端发送SYN包(syn=j)给服务器,之后进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到客户端的SYN包,确认客户的SYN包(ack=j+1),自己也发送一个SYN包(syn=k),即SYN+ACK包给客户端,之后服务器进入SYN_RECV状态,等待客户端确认;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK包(ack=k+1),此包发送成功后,客户端和服务器都进入ESTABLISHED状态,完成三次握手,TCP连接建立成功。
·一些重要的概念:
未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于SYN_RECV状态,当服务器收到客户端的确认包时,删除该条目,服务器进入ESTABLISHED状态。
SYN-ACK重传次数:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户端确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除(每次重传等待的时间不一定相同)。
半连接存活时间:是指半连接队列的条目存活的最长时间,即服务器从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和,也称半连接存活时间为TIMEOUT时间、SYN_RECV存活时间。
3.四次挥手协议
也叫连接终止协议,终止一个TCP连接要经过四次挥手,这是因为TCP连接是全双工模式,所以要终止连接时,每个方向都必须单独进行关闭。
·TCP连接的终止:
第一次挥手:当某一端数据发送完毕时,这端首先调用CLOSE,发送一个FIN分节来终止这个方向的连接,执行“主动关闭”;
第二次挥手:接收到这个FIN的对端,发回一个ACK包(确认序号为收到的序号加1),来终止这个方向的连接,执行“被动关闭”;
第三次挥手:一段时间后接收到这个文件结束符的端在自己的数据传送完毕后,将调用CLOSE关闭它的套接字,向请求终止连接的那一端也发送一个FIN;
第四次挥手:接收这个最终FIN的原发送端(即执行主动关闭的那一端)发回ACK包(确认序号为收到的序号加1)确认,表示已经收到这个FIN,连接终止。
·注意:收到一个FIN只意味着这一方向上没有数据流动,一个服务器在收到一个FIN后仍能向客户端发送数据;和SYN一样,一个FIN将占用一个序号,既然每个方向都需要一个FIN或一个ACK,因此通常需要4个分节;FIN的接收也作为一个文件结束符传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。