网站建设的基本元素,看广告赚佣金平台,大悟网站开发,在一个空间建两个网站TCP的三次握手和四次挥手实质就是TCP通信的连接和断开。
三次握手#xff1a;为了对每次发送的数据量进行跟踪与协商#xff0c;确保数据段的发送和接收同步#xff0c;根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系#xff0c;并建立虚连接。
四次挥手为了对每次发送的数据量进行跟踪与协商确保数据段的发送和接收同步根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系并建立虚连接。
四次挥手即终止TCP连接就是指断开一个TCP连接时需要客户端和服务端总共发送4个包以确认连接的断开。 TCP三次握手、四次挥手时序图 1、三次握手 TCP协议位于传输层作用是提供可靠的字节流服务为了准确无误地将数据送达目的地TCP协议采纳三次握手策略。
三次握手原理
第1次握手客户端发送一个带有SYNsynchronize标志的数据包给服务端
第2次握手服务端接收成功后回传一个带有SYN/ACK标志的数据包传递确认信息表示我收到了
第3次握手客户端再回传一个带有ACK标志的数据包表示我知道了握手结束。
其中SYN标志位数置1表示建立TCP连接ACK标志表示验证字段。
可通过以下趣味图解理解三次握手 三次握手过程详细说明
1、客户端发送建立TCP连接的请求报文其中报文中包含seq序列号是由发送端随机生成的并且将报文中的SYN字段置为1表示需要建立TCP连接。SYN1seqxx为随机生成数值
2、服务端回复客户端发送的TCP连接请求报文其中包含seq序列号是由回复端随机生成的并且将SYN置为1而且会产生ACK字段ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复以便客户端收到信息时知晓自己的TCP建立请求已得到验证。SYN1ACKx1seqyy为随机生成数值这里的ack加1可以理解为是确认和谁建立连接
3、客户端收到服务端发送的TCP建立验证请求后会使自己的序列号加1表示并且再次回复ACK验证请求在服务端发过来的seq上加1进行回复。SYN1ACKy1seqx1。 2、四次挥手 由于TCP连接是全双工的因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭而另一方执行被动关闭。
四次挥手原理
第1次挥手客户端发送一个FIN用来关闭客户端到服务端的数据传送客户端进入FIN_WAIT_1状态
第2次挥手服务端收到FIN后发送一个ACK给客户端确认序号为收到序号1与SYN相同一个FIN占用一个序号服务端进入CLOSE_WAIT状态
第3次挥手服务端发送一个FIN用来关闭服务端到客户端的数据传送服务端进入LAST_ACK状态
第4次挥手客户端收到FIN后客户端t进入TIME_WAIT状态接着发送一个ACK给Server确认序号为收到序号1服务端进入CLOSED状态完成四次挥手。
其中FIN标志位数置1表示断开TCP连接。
可通过以下趣味图解理解四次挥手 四次挥手过程详细说明
1、客户端发送断开TCP连接请求的报文其中报文中包含seq序列号是由发送端随机生成的并且还将报文中的FIN字段置为1表示需要断开TCP连接。FIN1seqxx由客户端随机生成
2、服务端会回复客户端发送的TCP断开请求报文其包含seq序列号是由回复端随机生成的而且会产生ACK字段ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复以便客户端收到信息时知晓自己的TCP断开请求已经得到验证。FIN1ACKx1seqyy由服务端随机生成
3、服务端在回复完客户端的TCP断开请求后不会马上进行TCP连接的断开服务端会先确保断开前所有传输到A的数据是否已经传输完毕一旦确认传输数据完毕就会将回复报文的FIN字段置1并且产生随机seq序列号。FIN1ACKx1seqzz由服务端随机生成
4、客户端收到服务端的TCP断开请求后会回复服务端的断开请求包含随机生成的seq字段和ACK字段ACK字段会在服务端的TCP断开请求的seq基础上加1从而完成服务端请求的验证回复。FIN1ACKz1seqhh为客户端随机生成 至此TCP断开的4次挥手过程完毕。 为什么要三次握手 三次握手的目的是建立可靠的通信信道说到通讯简单来说就是数据的发送与接收而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。 第一次握手Client 什么都不能确认Server 确认了对方发送正常 第二次握手Client 确认了自己发送、接收正常对方发送、接收正常Server 确认了自己接收正常对方发送正常 第三次握手Client 确认了自己发送、接收正常对方发送、接收正常Server 确认了自己发送、接收正常对方发送接收正常 所以三次握手就能确认双发收发功能都正常缺一不可。 为什么连接的时候是三次握手关闭的时候却是四次握手 因为当Server端收到Client端的SYN连接请求报文后可以直接发送SYNACK报文。其中ACK报文是用来应答的SYN报文是用来同步的。但是关闭连接时当Server端收到FIN报文时很可能并不会立即关闭SOCKET所以只能先回复一个ACK报文告诉Client端“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了我才能发送FIN报文因此不能一起发送。故需要四步握手。