26.三次握手与四次挥手

目录

1.几个重要的标识符:

2.三次握手

​3.为什么是三次握手,不是两次,四次

4.四次挥手


三次握手是用来建立TCP连接的,四次挥手是用来断开TCP连接的。

1.几个重要的标识符:

SYN:表示建立连接;

FIN:表示断开连接;

ACK:表示响应;

序列号Seq代表当前端成功发送到的位置;

确认号ack代表当前端成功连接收到的位置;

注意:刚开始建立连接时两个是随机的。

规定:计算Seq和ack的时候

SYN标志位和FIN标志位算一个位置。

2.三次握手

第一次握手:首先客户端向服务端发送请求连接报文,报文的SYN位=1,同时选择一个初始序列号Seq=x。SYN报文请求不能写携带数据,但需要消耗一个序列号。此时客户端就进入SYN-SENT(同步已发送)状态

第二次握手:服务端收到请求报文后,如果同意连接,发出确认报文,这个报文中标记ACK=1,SYN=1,他还要有一个确认号ack=x+1,同时还有有一个自己的初始序列号Seq=y 。这个时候这个TCP服务器进程进入SYN-RCVD(同步收到)状态,这个报文也不能携带数据,但是同样要消耗一个序号。

第三次握手:客户端收到确认之后,还要向服务端给确定。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1。这个时候tcp连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据的话则不消耗序号。


3.为什么是三次握手,不是两次,四次

 如果是两次握手的话,第一次握手时A向B发送了一个SYN请求报文,因为网络延迟没有送到B。长时间收不到B的SYN/ACK回应的话,A会重新想B发送SYN请求报文,当B收到后回应后并建立了链接。当数据发送完关闭tcp链接之后,如果此时A第一次发送的SYN请求包到达了B,并且B做出回应后就直接建立了TCP链接,此时就造成了资源的浪费。

 三次握手是在安全可靠的基础上,握手次数最少的方案。两次握手并不能保证可靠性。四次握手又浪费了效率

4.四次挥手

第一次挥手客户端发出连接释放报文FIN ,并且停止发送数据, 其序列号为 seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。TCP规定,FIN报文段即使不携带数据,也要消耗一个序列号。

第二次挥手:服务端收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时服务端就进入了CLOSE-WAIT(关闭等待)状态,TCP服务器通知高层的进程应用,客户端向服务端的方向就释放了,这时候处于半关闭状态,就是客户端不再向服务端发数据了,但是服务员向客户端发数据,客户端仍要接受。这个状态要持续一段时间,也就是整个CLOSE-WITE状态持续的时间.

第三次挥手:服务端最后的数据发送完后,就向客户端发送连接释放报文,FIN=1,ack=u+1,还有他的序号seq=w(半关闭状态也发送的数据报文),此时服务端就进入了LAST-ACK(最后确认)状态,等待客户端的确认

第四次挥手:客户端收到服务端的链接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时客户端就进入TIME-WAIT(时间等待)状态。此时tcp还没有释放,还需要等待2MSL的时间后,客户端撤销相应的TCB后,就结束了这次tcp链接。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值