三次握手四次挥手

目录

1.TCP报文

2.三次握手

2.1 三次握手的目的

2.2 三次握手的流程

3.四次挥手

3.1 四次挥手的流程

3.1.1 问:为什么需要等待2MSL?

3.1.2  为什么是三次握手四次挥手?


1.TCP报文

 标志位含义:

  • URG:紧急标志,该位为"1"时有效。
  • ACK:确认标志,表示确认编号栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
  • PSH:推标志。
  • RST:复位标志,用于复位相应的TCP连接。
  • SYN:同步标志,表明同步序列编号栏有效,仅在三次握手建立TCP连接时有效。(建立一个新的连接)
  • FIN:结束标志。(断开一个连接)

2.三次握手

2.1 三次握手的目的

  为了防止已失效的连接请求报文字段突然又传送到服务端,因为产生错误。

2.2 三次握手的流程

 第一次:

        客户端向服务端发送一个请求,需要建立连接,此时SYN=1,产生seq为随机值t,客户端进入SYN_SENT状态,等待服务器确认。

第二次:

        服务端接收到请求,可以建立连接,此时向客户端返回SYN=1,ACK=1,产生seq为随机值k,ack=t+1,服务端进入SYN_RCVD状态,等待客户端确定。

第三次:

        客户端收到服务端返回的响应,检查ACK=1,及ack=t+1,检查无误,向服务端发送ACK=1,ack=k+1。发送成功,客户端和服务端进入ESTABLISHED状态,完成三次握手,成功建立连接。

3.四次挥手

3.1 四次挥手的流程

 注释:等待时间(2MSL)--2倍的报文最大生存时间

        MSL(Maximum Segment Lifetime),即“报文最大生存时间”,任何报文在网络中存在的最长时间,超过该时间,报文将会被丢弃。

3.1.1 问:为什么需要等待2MSL?

        当主动发起关闭方发送完最后一个ACK包后无法确认对方是否有收到这个ACK包,所以2MSL的时间能保证如果对方没收到会重发第三次挥手的FIN包,且这个包有足够的时候发送回来。

        如果在这个时间内还没收到重发的FIN包,便可以证明对方已收到该ACK包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。

        在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。

3.1.2  为什么是三次握手四次挥手?

        服务端收到客户端的SYN连接请求报文后,可直接发送SYN+ACK报文。其中ACK代表应答, SYN代表同步的。

        而关闭连接时,当服务端收到FIN报文后,极可能不会立即关闭SOCKET,因此只能先回复ACK报文,通知客户端我已收到请求,等到所有的报文发送结束,服务端会发送FIN报文。因而,不能同时发送,需要四步挥手。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值