c 小说网站开发教程,企业微信app开发,手机网站制作方案,室内设计动态效果图制作参考自简单理解TCP三次握手四次挥手
什么是TCP协议#xff1f;
TCP( Transmission control protocol )即传输控制协议#xff0c;是一种面向连接、可靠的数据传输协议#xff0c;它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。
面向连接
TCP( Transmission control protocol )即传输控制协议是一种面向连接、可靠的数据传输协议它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。
面向连接数据传输之前客户端和服务器端必须建立连接可靠的数据传输是有序的要对数据进行校验
TCP三次握手
为了保证客户端和服务器端的可靠连接TCP建立连接时必须要进行三次会话也叫TCP三次握手进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常。 三次握手 最开始的时候客户端和服务器都是处于CLOSED关闭状态。主动打开连接的为客户端被动打开连接的是服务器。
TCP服务器进程先创建传输控制块TCB时刻准备接受客户进程的连接请求此时服务器就进入了 LISTEN 监听状态
第一次握手 TCP客户进程也是先创建传输控制块TCB然后向服务器发出连接请求报文这时报文首部中的同步位SYN1同时选择一个初始序列号 seqx 此时TCP客户端进程进入了 SYN-SENT 同步已发送状态
第二次握手 TCP服务器收到请求报文后如果同意连接则会向客户端发出确认报文。确认报文中应该 ACK1SYN1确认号是ackx1同时也要为自己初始化一个序列号 seqy此时TCP服务器进程进入了 SYN-RCVD 同步收到状态
第三次握手 TCP客户端收到确认后还要向服务器给出确认。确认报文的ACK1acky1自己的序列号seqx1此时TCP连接建立客户端进入ESTABLISHED已建立连接状态 触发三次握手。
TCP四次挥手
建立TCP连接需要三次握手终止TCP连接需要四次挥手 四次挥手
数据传输完毕后双方都可释放连接。最开始的时候客户端和服务器都是处于ESTABLISHED状态然后客户端主动关闭服务器被动关闭。
第一次挥手 客户端发出连接释放报文并且停止发送数据。释放数据报文首部FIN1其序列号为sequ等于前面已经传送过来的数据的最后一个字节的序号加1此时客户端进入FIN-WAIT-1终止等待1状态
第二次挥手 服务器端接收到连接释放报文后发出确认报文ACK1acku1并且带上自己的序列号seqv此时服务端就进入了CLOSE-WAIT 关闭等待状态
第三次挥手 客户端接收到服务器端的确认请求后客户端就会进入FIN-WAIT-2终止等待2状态等待服务器发送连接释放报文服务器最后的数据发送完毕后就向客户端发送连接释放报文将FIN1其序列号为seqw服务器就进入了LAST-ACK最后确认状态等待客户端的确认。
第四次挥手 客户端收到服务器的连接释放报文后必须发出确认ACK1ackw1而自己的序列号是sequ1此时客户端就进入了TIME-WAIT时间等待状态但此时TCP连接还未终止必须要经过2MSL后最长报文寿命当客户端撤销相应的TCB后客户端才会进入CLOSED关闭状态服务器端接收到确认报文后会立即进入CLOSED关闭状态到这里TCP连接就断开了四次挥手完成
为什么客户端要等待2MSL 主要原因是为了保证客户端发送那个的第一个ACK报文能到到服务器因为这个ACK报文可能丢失并且2MSL是任何报文在网络上存在的最长时间超过这个时间报文将被丢弃这样新的连接中不会出现旧连接的请求报文。