TCP连接的三次握手和四次挥手详解

1:TCP连接建立的三次握手

  • 注:TCP协议是传输控制协议,位于传输层,和UDP协议的区别详见:点击查看
通过三次握手使客户端和和服务器之间建立连接,可以进行数据传输。

过程:

  • 注:
    1:SYN:同步序列编号,在黑客攻击中,SYN攻击是很常见的一种DDoS攻击,详见:点击查看
    2:ack:ack序号为确认序号,只有ACK 标志位 为1时,确认序号字段才有效,ack=Seq+1。(注意区分ACK和ack)
第一次握手:
  • 先由客户端发送请求:客户端发送连接请求的报文段,首部中的同步位SYN=1,同时选择一个初始序号seq=x。客户端进入SYN_SENT状态(同步已发送),表示请求连接,等待服务器确认。
第二次握手:
  • 服务器收到由客户端发送来的请求报文段,进行确认客户的SYN值,由SYN=1知道服务端请求建立连接,如同意连接发送确认报文段,在确认报文段中应把SYN和ACK位都置为1,确认号为ack=x+1,并随机产生一个自己的初始序号seq=y。服务器进入SYN-RCVD(同步收到)状态。
第三次握手:
  • 客户端收到服务器的确认报文段后,进行确认其ACK位值是否为1和确认号ack是否为x+1,如果正确则连接建立成功同时向服务器发送确认确认报文段,确认号为ack=y+1并将ACK位置1,而自己的序号为seq=x+1。此时TCP连接已经建立,服务器进入ESTABLISHED(已连接建立)状态。当客户端收到服务器的确认后也进入ESTABLISHED(已连接建立)状态。
  • 注:在TCP连接建立的过程中,前两次握手中发送的请求报文段和确认报文段均不能携带数据,但都要消耗一个序号,在第三次握手中ACK报文段可以携带数据,不携带数据不消耗序号,因此在连接建立后下一个数据报文段的序号仍是seq=x+1。
图解:

这里写图片描述

2:TCP连接释放的四次挥手

过程:

第一次挥手:
  • 这里先由客户端的应用进程先向其TCP发出释放连接报文段,并停止发送数据。 在释放连接报文段的首部中FIN(终止控制位)置1.其序号为seq=u,u等于前面已经传送过的数据的最后一个字节的序号加1。 此时客户端进入FIN_WAIT_1(终止等待1)状态等待服务器确认。
  • 注:数据传输结束后,通信双方都可释放连接。
第二次挥手:
  • 服务器收到连接释放报文段发出确认报文段,其确认号为ack=u+1,序号为seq=v(v等于本次确认报文段传送数据的最后一个字节加1),然后服务器进入CLOSE-WAIT(关闭等待)状态。
  • 注:
    1:此时TCP连接处于半关闭状态,服务器到客户端的连接并未关闭,服务器仍可以向客户端发送数据。
    2:是否关闭连接取决于哪方的FIN是否置为1,FIN为1时表示不能发送数据但还能接受数据。
第三次挥手:
  • 客户端收到服务器的确认报文段后,进入FIN-WAIT-2(终止等待2)状态,若服务器没有了向客户端发送的数据,则应用进程通知TCP释放连接并发送连接释放报文段,其首部中FIN位置1,确认号为ack=u+1,该报文段自己的序号为seq=w(w类比u),服务器进入LAST-ACK(最后确认)状态。
第四次挥手:
  • 客户端收到服务器的连接释放报文段后发出确认报文段,ACK置1,确认号为ack=w+1,其自己的序号为seq=u+1(前面客户端发送FIN报文段seq=u消耗一个序号),经过2MSL(最长报文段寿命)时间后,结束此次TCP连接。
  • 注:经过2MSL才结束连接的原因是:
    1:为了保证客户端发送的最后一个ACK报文段能够到达服务器
    2:经过2MSL时间就可以使本链接持续时间内所产生的所有报文段在网络中消失,防止已失效的链接请求报文段出现在本连接中或者下一次连接中。
图解:

这里写图片描述

3:为什么连接建立是三次握手而连接释放是四次呢?

  • 连接建立的过程中SYN和ACK放在一个报文段中发送,而在连接释放的过程中服务器先发送确认报文段(ACK报文段),再发送FIN报文段。因为FIN位的特殊性,当FIN=1时表示不能发送还能接收,当客户端发送连接释放报文段(FIN=1)后,服务器可以选择立即关闭连接(使FIN=1)也可以先发送确认报文段(ACK=1)再发送一些数据后,最后发送FIN报文段结束数据传输。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值