TCP连接管理

一、建立连接(三次握手的过程)
首先先了解一下为啥要建立连接呢?
1、更好的保证可靠性(TCP协议是有连接、可靠传输、面向字节流的):建立连接的过程其实就是在让通信双方验证各自的发送能力和接受能力是否正常。
2、协商一些重要参数。
咱们以打电话为例先了解一下建立连接的过程。
在这里插入图片描述
此时通信双方就都建立了连接。
TCP真正的建立连接过程。

在这里插入图片描述

1、ACK:应答报文,本质上就是ACK字段为1的报文,此时,报头中的“确认序号”字段才会生效。
SYN:同步报文段,尝试和对方建立连接。JAVA Socket API中,客户端new Socket(ip,port),内核就会发起SYN求情。
2、如果只握手两次,能否完成建立过程?不能
3、如果建立连接是四次握手,能否建立连接?能,但是没有必要。这样也可以验证双方的发送接收能力,但是效率会比较低,传输一个包效率要比两个包高。
4、TCP转换状态:
LISTEN:服务器启动完毕,随时有客户端来建立连接。
SYN-SEND/SYN-RCVD:建立连接的中间过程,如果连接建立顺利的话,就会立即消失。
ESTABLISHED:连接建立完毕,验证了双方发送和接收都是正常的
二、断开连接(四次挥手的过程)
同样以打电话挂断电话为例
在这里插入图片描述
真正的断开连接的过程
在这里插入图片描述
1、中间的两个过程不能合并,因为中间两个过程发生的时机不一样。
2、第一个ACK过程是服务器B发送ACK由内核自动完成的,内核收到FIN之后就会立刻发送ACK。
中间会有应用程序代码需要积压处理。
第二个FIN虽然说客户A发送了FIN,但是B的接收缓冲区中仍然有可能有一些待处理的数据,此时就要等到B把积压的数据处理完成后,调用socket的close方法,才会发送第二个FIN。
3、重要的状态
CLOSE-WAIT:四次挥手挥了一半,当前可能挥了一半就不挥了(接收方没调用close方法,就会导致只挥两次从而没有正确关闭连接)一旦机器中出现大量的CLOSE-WAIT状态,就说明代码有bug。
TIME-WAIT:谁主动断开连接的,谁就进入TIME-WAIT状态,此时该主机已经完成了四次挥手的过程,但是仍然不能立即释放连接,而要以TIME-WAIT状态来保持一段时间之后,再彻底释放连接。
4、三次握手和四次挥手过程,一旦丢包,就会触发超时重传。保持时间会一直持续到对方不再重传,就会释放连接,真正进入CLOSE状态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值