图解tcp三次握手四次挥手

tcp是面向连接的协议。分三个阶段:建立连接,数据传送,连接释放。Tcp建立连接的过程叫握手,释放连接的过程叫挥手。

1.Tcp三次握手:
    刚开始两端都处于close状态,然后客户端主动打开连接,服务器被动打开连接,因为服务端创建传输控制块tcb,准备接受连接请求,然后服务器就处于listen状态,等待客户的连接请求。

客户端调用connect()函数向服务器发送连接请求,发送请求报文段,首部同步位SYN=1,序号seq=x,SYN报文段不能携带数据但是要消耗一个序号,发送完以后tcp客户进程进入SYN_SENT(同步已发送) 状态。

服务端收到后,如果同意连接,则发送确认报文段,将SYN,ACK,位都置为1,确认号为x+1,并且发送自己的序号y。这时,服务器端进入SYN_RCVD(同步收到)状态。

客户端进程收到服务器发来的确认,还要向服务端给出确认,ACK报文段可以携带数据,但是如果不携带数据就不消耗序号,这时连接建立,客户端进入ESTABLISTED(已建立连接)状态。

服务器收到确认报文段后也进入ESTABLISTED状态 。

2.可以四次握手吗?
   可以,确认报文段可以拆开发送,可以先发一个确认报文段:ack=x+1,ACK=1,再发送一个同步报文段:SYN=1,seq=y。这样就变成了四次握手。

3.可以两次握手吗?

不可以!

   发送最后一次确认是为了防止已经失效的报文段突然又传到服务器,失效报文段是因为网络原因没有正常传过去但是没有丢失的报文段,因为一直没有传过去,客户端会选择超时重传,所以现在会有两个相同的报文段,如果只有两次握手,失效的报文段过去的时候,服务器发送一个确认就认为是建立连接了,但是客户端并不会连接,所以服务器会一直等待数据传输,浪费服务器的资源。

4.Tcp四次挥手:

数据传输结束后,双方都可以释放连接,假设客户端先释放连接,就向服务器发送连接释放报文段,其中FIN位置为1,然后进入FIN_WAIT1(终止等待1)状态。

服务器收到客户端发来的FIN报文之后,发送ACK确认报文,随后服务器进入CLOSE_WAIT(关闭等待)状态 ,此时,服务器进程通知高层应用进程连接要释放,客户端已经没有数据发送,但是服务器要发送数据,客户端依然要接受,现在tcp连接处于半关闭的状态,要持续一段时间。

客户端收到服务器发来的ACK报文,此时客户端进入FIN_WAIT2(终止等待2)状态,此时客户端这边的连接已经关闭,但服务器端的连接还没关闭,也就是服务器还可以继续向客户端发送数据。

服务器主动关闭连接,向客户端发送FIN报文后,随即进入LAST_ACK(最后确认)状态,如果收到了客户端发来的ACK报文之后,就进入CLOSED状态。

客户端收到了服务器发来的FIN报文,然后客户端发送ACK报文,随后进入TIME_WAIT状态,等待2MSL之后进入CLOSED状态。

5.tcp可以三次挥手吗?

 可以

 如果服务器收到FIN的时候,也正要关闭连接,就可以将FIN 和ACK一起发送过去,四次挥手就变成了三次挥手。

6.为什么要有TIME_WAIT状态

 第一,保证客户端发送的最后确认可以到达服务器端,如果在传输过程中丢失,可以重传

 第二,防止已经失效的连接请求报文段出现在本连接中,客户端发送完最后一个确认报文段,经过2MSL的时间,就可以使本连接中所有报文段消失,防止下一个连接中出现旧的连接请求报文段。

7.等待时间为什么要设置成2MSL?

  MSL 是最长报文段寿命,设置这个是为了能够很好的进行超时重传,一般是120s,根据实际情况而定。

tcp的状态转移图

CLOSING:这种状态表示此时双方刚好可能都在关闭连接,即客户端向服务器发送FIN报文,进入FIN_WAIT1状态后,没有收到服务器发来的ACK报文,反而受到服务器发来的FIN报文,说明此时客户端和服务器同时发起关闭连接,随后,客户端进入CLOSING状态。

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值