赞
踩
主要介绍为什么TCP协议需要三次握手和四次挥手
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议.
TCP连接的建立:三次握手
标志位:
三次握手流程:
TCP 协议规定,SYN 置 1 的报文段不能携带数据,但是要消耗一个序号
3. A 收到此报文后向 B 给出确认,其 ACK = 1 ,确认号 ack = y + 1,seq = x + 1
A 的TCP通知上层应用进程,连接已经建立
4. B 的 TCP 收到主机A的确认后,也通知其上层应用进程:TCP连接已经建立
TCP 为什么需要三次握手?而不是两次?
不是两次的主要原因使为了防止多次连接导致连接混乱。 比如A
主机的网络较差,连续发送了多个连接请求,B收到请求后给予想用,但是B不知道A是否收到了同意连接请求,就只能重复同意,这些过期的请求可能回导致网络的混乱
所以设计成三次握手的情况,客户端在接收到服务端SEQ+1的返回消息之后,就会知道这个连接是历史连接,所以会发送报文给服务端,告诉服务端。
所以三次握手的原因就是避免多次建立重复连接
那可不可以是四次,五次或者更多次?
可以,但是没有必要,三次已经足够适应需求了,多次的握手可能导致了资源的浪费
TCP连接的释放:双向释放(4次挥手)
首先解释为什么需要四次挥手?
TCP是基于全双工通信的,所以双方都可以主动释放连接。
四次挥手的意义就在于,当 A 发送完最后一条数据之后,但可能B还有未发送给A 的数据。
所以A在发送完收据后可以请求释放连接,此时B给与A响应,告诉A我知道你想断开连接,此时A还可以继续接收B发送的信息。
在B处理完工作后,也请求释放连接。A同意后,就断开连接。
这样可以保证数据正常可靠的交互。
四次挥手流程:
FIN : 标志位,请求关闭连接
TCP 的标准规定,FIN报文即使不携带数据信息,也需要消耗一个seq
2. B收到后。发出确认,意思我收到了,ACK = 1,确认号 ack = u+1,而这个报文段自己的序号为seq = v
从A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态。B 若发送数据,A仍需要接收
至此,双方断开连接
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。