TCP/IP三次握手建立连接和四次挥手终止连接

(一)三次握手建立连接

(1)首先服务器端进行初始化,由最初的closed状态顺序调用socket、bind、listen后进入listen状态;

(2)客户端进行初始化,由最初的closed状态顺序调用socket、connect主动连接服务器套接字进入SYN_SENT状态(向服务器发送将SYN置为1的同步数据段);

(3)服务器接收到SYN后向客户端发送将SYN置为1的同步数据段和ACK置为1的确认数据段,此时服务器进入SYN_RECV状态;

(4)客户端收到服务器的SYN同步数据段和ACK确认数据段之后进入ESTABILSHED

三次握手图例如下:

注意点:

(1)在客户端第一次向服务器发送ACK时,序号为i,在服务器回复客户端时确认号为i+1,表示服务器向客户端说明下一次想收到的下一次数据段序号为i+1;

(2)同理,在客户端接收到服务器消息后向服务器返回时,确认号为j+1,表示客户端告诉服务器下一次想收到的数据段的序号为j+1;

(二)三次握手中两端同时发起连接的情况

正常情况下,都是由一方主动发起连接,但是我们也不能避免在某一时刻双方同时发起连接,此时就会发生连接碰撞,最终只有一个建立起连接。原因是所有连接都是由其端点标识的,如果第一个连接请求建立起一个由套接字(x,y)标识的连接,而第二个连接也建立起了这样一个连接,在TCP实体内部只有一个套接字表项,这种情况如下图图例:

上图解析如下:

(1)当出现同时发送连接请求时,则两端几乎在同时发送SYN字段置为1的数据段,并都进入SYN_SENT状态;

(2)当每一端收到SYN数据段时,状态都变为SYN_RECV状态,同时他们都分别发送SYN置为1的数据段和ACK置为1的确认数据段,对收到的SYN数据段进行确认;

(3)当两端都收到SYN+ACK的数据段后都进入了ESTABLISHED状态,但是最终建立的是一个TCP连接。

(4)一个双方同时打开的传输连接需要交换4数据段,比正常的传输连接建立所进行的三次握手多交换一个数据段

(三)四次挥手分析

四次挥手如图所示:

 

四次挥手解析如下:

(1)数据传输结束后,客户端的应用进程先向其TCP发出释放连接请求,不在发送数据。TCP通知对方要释放从客户端到服务器的连接,将发往主机服务器的TCP报文段首部的终止比特FIN置为1,序号u等于已传送数据的最后一个字节的序号加1

(2)服务器的TCP收到释放连接通知后发出确认,其序号为u+1,同时通知应用进程,这样客户端到服务器的连接就释放了,连接处于半关闭状态。服务器不在接受客户端发来的数据;但服务器还向客户端发送数据,客户端若正确接收数据仍需要发送确认;

(3)在服务器向客户端的数据发送结束后,其应用进程就通知TCP释放连接。服务器发出的连接释放报文段必须将终止比特置为1,并使其序号w等于前面已经传送过的数据的最后一个字节的序号加 1,还必须重复上次已发送过的ACK=u+1;

(4)客户端对服务器的连接释放报文段发出确认,将ACK置为1,ACK=w+1, seq=u+1。这样才把从服务器到客户端的反方向连接释放掉,客户端的TCP再向其应用进程报告,整个连接已经全部释放。

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值