计网——TCP连接管理(三次握手、四次握手)

TCP连接管理分为两部分:一是三次握手建立连接;二是四次握手释放连接

1.连接建立(三次握手)

①主机A的TCP向服务器B的TCP发出连接请求报文段,其首部中的同步比特标志位SYN应置为1,同时选择一个初始序号seq=x;

②服务器B的TCP收到连接请求报文后,则发回确认,标志位ACK应置为1,确认号应为ack=x+1.因为连接是双向的,所以服务器B也发出和A的连结请求,在报文段中同时应将SYN置为1,为自己选择一个初始序列seq=y。

③主机A的TCP收到此报文段后,还要向服务器B给出确认,ACK应置为1,其确认号为ack=y+1。

:①SYN:在连接建立是用来同步序号;ACK表明确认号字段有效;FIN用来释放一个连接。

      ②TCP报文段首部的SYN和FIN置位的时候,需要消耗一个序列号(所有才有x+1和y+1),而仅有ACK置位时,不需要消耗序列号。

      ③二次握手会导致死锁。假如使用二次死锁,即A不会再向B发送确认报文,如果第二次握手中B给A的确认报文丢失的话,那么B认为已经连接,会开始给A发送数据报文,A会丢弃B传来的数据报文并继续等待B发送确认报文,而B也会因为发送超时再次重复发送同样的报文,导致死锁。

2.连接释放(四次握手)

①主机A的TCP通知对方要释放从主机A吊服务器B这个方向的连接,将发往主机B的TCP报文段首部终止比特标志位FIN置1,假定此时序号为seq=m。

②服务器B的TCP收到释放连接的通知后,即发出确认,FIN需要消耗一个序号,所以其确认号为ack=m+1。这样从主机A到服务器B的连接就释放了,连接处于半关闭状态。此时如果服务器B还发送数据,主机A仍接收。

③服务器B向主机A的数据发送后,TCP释放服务器B到主机A的连接。服务器B发送出的连接释放报文除必须将终止比特FIN置1,并假定其序号seq=n,因为标志位ACK不需要消耗序号,所以此时的确认号仍然是ack=m+1。

④主机A必须对此发出确认,因为FIN需要消耗一个序号,所以给出确认号为ack=n+1。最终双方连接释放全部完成。

总结:总体来看TCP的连接和释放其实本质相同,都是一个双方都需要发送连接(释放)请求,然后再发回确认的过程。区别在于连接时没有前置条件,所以B给A的确认和请求可以同时发送;而释放时,存在一个前置条件,就是数据发送结束,不能保证B给A发送确认的同时也能够发送申请(即B向A的数据发送已经结束),所以释放过程比连接过程多了一次握手。

猜你喜欢

转载自my.oschina.net/u/3786691/blog/1630683
今日推荐