HTTP - 1 - TCP连接的三次握手/四次挥手

三次握手

  • 三次握手: Three-way handshake, 建立一个TCP连接时, 需要客户端和服务器总共发出3个包
  • ACK: 表示验证字段
  • SYN: 位数置1, 表示建立TCP连接
  • FIN: 位数置1, 表示断开TCP连接
  • 目的: 确认两端的数据传输通道是否正常.
为什么要进行第三次握手
  • 为了防止服务器端开启一些无用的连接增加服务器开销以及防止已失效的连接请求报文突然又传送到了服务器,因为产生错误.
  • 客户端可能设置了超时时间,时间到了就关闭连接的请求,再重新发出创建连接的请求, 如果没有第三次握手的话. 客户端确认接收完消息.
三次握手图示 - 1

三次握手图示 - 2



四次挥手

  • 四次挥手- Four-Way Wavehand
  • 所谓4次挥手也就是TCP连接的释放, 连接的释放必须是一方主动释放,另外一方被动释放.
四次挥手过程
    1. 首先客户端想要释放连接, 向服务器端发送一段TCP报文 ===> (FIN-WAIT-1阶段, 即半关闭阶段)
    1. 服务器端接收到从客户端发出的TCP报文之后, 确认了客户端想要释放连接, 随后服务器端结束ESTABLISHED阶段 ===> CLOSE-WAIT阶段(半关闭状态)
    1. 服务器端自从发出ACK确认报文之后, 经过CLOSED-WAIT阶段, 做好了释放服务器端到客户端方向上的连接准备, 再次向客户端发出一段TCP报文 (LAST-ACK)
    1. 客户端收到从服务器端发出的TCP报文, 确认了服务器端已做好释放连接的准备, 结束FIN-WAIT-2阶段, 进入TIME-WAIT阶段, 并向服务器端发送一段报文
四次挥手图示 - 1

为什么3次握手4次挥手

  • 建立连接时, 被动方服务器端结束CLOSED阶段进入“握手”阶段并不需要任何准备, 可以直接返回SYN和ACK报文, 开始建立连接。
  • 释放连接时, 被动方服务器, 突然收到主动方客户端释放连接的请求时并不能立即释放连接, 因为还有必要的数据需要处理, 所以服务器先返回ACK确认收到报文, 经过CLOSE-WAIT阶段准备好释放连接之后, 才能返回FIN释放连接报文。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值