什么是网络协议,在书本上的定义:网络协议是为计算机网络中进行数据交换而建立的规则、标准或者约定的集合。通常习惯是理解为规则,也就是TCP/IP规则。规则是什么?是双方实现交互必须遵守的规范。通俗讲,如果把网络比喻为一个交通网,那么设备与设备之间的链路,就是公路,而公路上的红绿灯、限速这些就是规则;遵守规则才能保证两地地往来。而TCP/IP网络协议,就是ip网络中的重要规则之一。
TCP也就是传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。因为互联网络中的不同部分可能拥有截然不同的拓扑结构、带宽、延迟、数据包大小和其他参数,而TCP协议能够动态地适应互联网络的特性,具备面对各种故障是的健壮性,可以在不可靠的互联网络上提供可靠的端到端字节流。
作为一个传输控制协议,TCP 的工作主要内容也就是建立连接,传输数据以及连接终止三个部分。在这其中TCP的建立连接称为“三次握手”,连接终止成为“四次挥手”。
建立连接
TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。三次握手中,第一次握手确认客户端具有发送的能;第二次握手确认服务端具有发送和接收的能力;第三次握手确认客户端具有接收的能力,在三次握手中确认双方都具有发送的能力和接收的能力。三次握手完成后,TCP客户端和服务器端成功建立连接,就可以开始传输数据了。
三次握手过程:
第一次握手:SYN=1(连接请求报文),seq=a,发送后进入SYN-SENT状态;
第二次握手:SYN=1,ACK=1(同意连接请求报文),seq=b,发送后服务端进入SYN-RCVD状态;
第三次握手:ACK=1(确认请求报文),seq=a+1,发送后客户端进入ESTABLISHED状态,服务端收到后也进入ESTABLISHED状态。
连接终止
建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由于服务端在接收到FIN, 往往不会立即返回FIN, 必须等到服务端所有的报文都发送完毕了,才能发FIN。因此先发一个ACK表示已经收到客户端的FIN,延迟一段时间才发FIN,这就造成了四次挥手。
四次挥手过程:
第一次挥手:若A认为数据发送完成,则它需要向B发送连接释放请求。该请求只有报文头,头中携带的主要参数为:FIN=1,seq=u。此时,A将进入FIN-WAIT-1状态。
第二次挥手:B收到连接释放请求后,会通知相应的应用程序,告诉它A向B这个方向的连接已经释放。此时B进入CLOSE-WAIT状态,并向A发送连接释放的应答,其报文头包含:ACK=1,seq=v,ack=u+1。
A收到该应答,进入FIN-WAIT-2状态,等待B发送连接释放请求。
第三次挥手:当B向A发完所有数据后,向A发送连接释放请求,请求头:FIN=1,ACK=1,seq=w,ack=u+1。B便进入LAST-ACK状态。
第四次挥手:A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态。该状态会持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB。当B收到确认应答后,也便进入CLOSED状态,撤销TCB。
不管是三次握手还是四次挥手,其可靠性,简单而言就是通过多次的确定,来减少错误的发生。很多协议的hello报文也是如此。通过固定某一阶段,去不断确定对端的状态,由此确保网络的稳定和可靠。并且TCP协议作为网络的重要协议,一种重要规则,我们需要好好的去了解其工作原理、作用;这样能够帮助我们更好地在网络公路上的通行,建立良好的网络秩序,从而保证网络的稳定性和持久性。
审核编辑(王妍)