F_G

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

TCP协议连接过程

TCP协议连接过程

连接过程

step 1、客户端向服务器端发送连接请求,Syn位=1,并且发送了一个随机生成的序列号i

step 2、服务器端向客户端发送确认同时也是连接请求Syn=1,序列号为随机生成本报文段序号j,ack为i+1,

step 3、客户端收到step2中服务器发来的确认,并且通知上层应用程序连接建立。客户端收到服务器端的确认之后,如果正确可以传输数据。并且给server回复,ack=j+1,序号为i+1

 

断开连接

断开的过程是一个双工的过程,类似客户端和服务器端之间有两个管道,要分别断开。

step 1、客户端提出要断开连接,表示他没有数据要发送了,因此client->server的管道关闭,但是他仍然可以收服务器发来的数据,Fin=1,序号为i

step 2、服务器端收到断开连接请求之后,会向客户端发送确认,表示它已经收悉。但是他可能还有数据要发送,所以真正的断开要在下次,Ack=1,序号为j,ack=i+1

step 3、现在服务器数据发送完了,它于是断开了server->client的连接,同时完全断开连接,Fin=1,Ack=1,序号为x,ack=i+1

step 4、客户端收到服务器端的断开连接之后,知道服务器要断开了。然后他在等2MSL时间,如果仍然没有收到回复,说明server确实断开了(如果数据在中途发生了丢失,链路层协议可以检测到,从而重发;如果server没有关闭,则会发确认。这些都会在2MSL时间内完成),最后一次握手是一次加强的测试。Ack=1,序号为u+1,ack=x+1

 

有几个问题,需要考虑一下

1、为什么断开时,第四次握手之后还要等待2MSL时间?

 

第一,为了保证 A 发送的最后一个 ACK 报文段能够到达 B。

 

第二,防止 “已失效的连接请求报文段”出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

 

2、为什么连接是3次握手但是断开时4次握手呢?

3、连接为什么不能使两次握手?(可能有死锁)

参考

[1] http://blog.csdn.net/lostyears/article/details/7104349

posted on 2015-06-20 10:59  F_G  阅读(524)  评论(0编辑  收藏  举报