TCP三次握手和四次挥手

1、TCP提供了面向连接的可靠的字节流服务,是一种端到端的传输层服务。它主要解决两个应用进程之间传输的可靠、有序、无丢失和不重复问题。

与网络层不同的是,网络层提供主机之间的逻辑通信,而传输层提供的是两台主机之间的应用进程之间的逻辑通信。

2、三次握手建立连接:

1)客户机的TCP 首先向服务器的TCP 发送一个连接请求报文段。这个特殊的报文段中不含 应用层数据,其首部中的SYN标志位被置为1 。另外,客户机会随机选择一个起始序号seq = x(连接请求报文不携带数据,但要消耗一个序号)。

2)服务器的TCP 收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并为该 TCP 连接分配TCP 缓存和变量。在确认报文段中, SYN ACK 位都被置为1, 确认号字段的值为 x+ 1, 并且服务器随机产生起始序号seq= y( 确认报文不携带数据,但也要消耗一个序号)。确认报文段同样不包含应用层数据。

3)当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。这个报文段的ACK 标志位被置1, 序号字段为x+ 1, 确认号字段ack=y+ 1 。该报文段可以携带数据,若不携带数据则不消耗序号。

上述三步完成之后,TCP就成功的建立了连接,之后就可以传输应用层数据。TCP提供的是一种全双工通信,服务器的资源是在第二次握手时分配的,客户端的资源是在第三次握手时分配的。

3、为什么是三次握手而不是两次或四次?

如果A发送的一个连接请求在网络结点的时间滞留,以至于延误到连接释放的某个时间才到达B。B收到这个请求的报文段后,误以为A又发出了一次新的请求连接,于是向A发送确认报文段,同意建立连接。但是由于A并没有发出新的请求连接,所以A不会理睬的确认也不会向B发送数据。但B却认为连接已经建立,一直等待A发来数据。B的资源就浪费了。

4、四次挥手释放连接:

1)客户端打算关闭连接时,向服务器端发送一个连接释放报文段,然后停止发送数据。报文段中FIN=1,代表数据发送完毕,其序列号seq=u,它等于前面已传送数据最后一个字节的seq+1。
2)服务端收到客户端的释放报文段后发出确认,确认号ACK=u+1,服务端自己的确认报文段的序列号为v。至此,客户端到服务器这个方向上的连接就释放了,TCP连接处于半关闭状态。但是服务器仍然可以向客户端发送数据。
3)如果服务器已经没有要发送到客户端的数据,服务器就发送释放报文段FIN=1。
4)客户端在收到服务器的释放报文段后,需要确认。在确认报文段中ACK = v+1。此时,TCP连接还未释放,经过2MSL后连接才关闭。

5、为什么是四次挥手?
因为TCP的通信是全双工通信。释放连接需要两端都关闭连接才算是真正断开连接。

要实现可靠的连接关闭,客户端发送结束报文FIN,收到服务器端的确认后,客户端到服务器的连接关闭,客户端不能再向服务器发送数据。但是服务器还可以向客户端发送数据,客户端还可以接收数据。只有当服务器发送结束报文FIN,收到客户端的确认后,才真正断开连接。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值