三次握手
- A发送请求报文,SYN置为1,seq = x
- B发送确认报文,SYN、ACK都置为1,ack = x + 1,seq = y
- A发送确认报文,SYN置为0,ACK置为1,seq = x + 1,ack = y + 1。这是一个普通报文段,可携带数据。若不携带数据,则不消耗序号。
SYN=1的报文段不能携带数据,但要消耗一个序号。
为什么需要第三次“握手”
防止第一个连接请求报文段在某些网络节点滞留时间太长,以致这次的连接释放后才传送到B,B以为A又发起了一次连接请求。采用三次握手,B收不到确认,就不建立连接。
四次挥手
- A发出释放连接请求,FIN置为1,seq = u,u 等于A前面已传送过的数据的最后一个字节的序号加1。
- B收到释放连接请求后即发出确认,ACK置为1,确认号是 ack = u + 1,seq = v。此时B还可以向A发送数据,但A不再向B发数据。
- B发出连接释放报文,FIN置为1,seq = v,ack = u + 1(因为2的确认报文不消耗序号)
- A发出确认报文,ACK = 1,seq = u + 1,ack = v + 1,B收到后,B到A方向的连接被释放,A等待一个超时时间,才能将整个连接释放。在这段超时时间内,A又收到B重传的FIN报文,A需要再次进行确认。收到A的最后确认,B才能最终将整个连接释放。
网友评论