为什么要三次握手?
三次握手的目的是发送方与接收方确认自己与对方收发信息正常。
第一次握手:客户端没确认,服务端确认客户端发送消息正常。
第二次握手:客户端确认自己发送接收消息正常,服务端发送接收消息正常。服务端确认客户端发送消息正常,自己接收消息正常
第三次握手:客户端确认自己发送接收消息正常,服务端发送接收消息正常。服务端确认自己发送接收消息正常,客户端发送接收消息正常。
对ACK,SYN,FIN,ack,seq的理解
SYN:SYN=1表示请求连接
FIN:FIN=1表示释放一个连接
seq:标记字节流
ack:确认序号,确认接收到信息,返回seq+1
ACK:状态码,为1时表示确认序号有效
为什么三次握手时发送的数据包是指定的?
三次握手的另外一个目的就是确认双方都支持TCP,告诉对方使用TCP传输
第一次握手:服务端并不知道客户端是要发起TCP请求。
第二次握手:通过ack=j+1,客户端知道了服务端支持TCP并且理解了自己连接TCP的请求
第三次握手:通过ack=k+1,服务端知道了客户端支持TCP并且客户端确实要进行TCP连接
四次挥手的流程
第一次挥手:客户端认为要发送的消息已经发送完了,便向服务端发送FIN=1来终止客户端的连接。
第二次挥手;服务端接收到客户端发送的FIN=1后,返回一个确认信息,ack=m+1。此时TCP处于半关闭状态,客户端收到确认消息后,等待服务端发送连接释放的报文。
第三次挥手:服务端认为自己要发送的消息也已经发送完了,就向客户端发送FIN=1来终止服务端的连接。
第四次挥手:客户端收到服务的的FIN=1后,返回服务端一个确认信息,ack=k+1,至此TCP连接断开