HTTP学习之——TCP ‘三次握手,四次挥手’

TCP是什么?

  • 就是一种面向连接的协议
  • 可以看成字节流
  • TCP提供了一种可靠,面向连接,字节流,传输层的服务,采用三次握手建立一个连接,采用四次挥手关闭一个连接。

在这里插入图片描述

三次握手的过程

(1)第一次握手

客户端发送 SYN 包 (seq = x) 到服务器,并进入 SYN_SEND状态

(2)第二次握手

服务器收到 SYN 包,必须确认客户的SYN (ack = x+1),同时自己也发送一个 SYN 包(syn = y),即 SYN+ACK包,此时服务器进入SYN_RECV 状态

(3)第三次握手

客户端收到服务器的SYN+ACK包,向服务器发送确认包 ACK(ack = y+1),此包发送完毕,客户端和服务器进入 ESTABLISHED(已确立的)状态。至此完成。

注意:
以上动作发送的包中没有任何数据,等三次握手完成后客户端与服务器才正式开始传送数据。
并且理想状态下,TCP连接一旦建立,在通信双方的任何一方主动关闭连接之前,TCP连接将一直保持。

四次挥手

(1)第一次挥手

客户端主动关闭方发送一个FIN,用来关闭客户端到服务器端的数据传送,也就是客户端告诉服务器端:我已经不会再给你发数据了(在fin包发送出去之前的数据,如果没有收到对应的 ack 确认报文,客户端依然会重发这些数据)。但是,此时客户端还可以接受数据

(2)第二次挥手

服务端收到 FIN包后,发送一个ACK给客户端,确认序号为收到序号 +1(与SYN相同,一个FIN占用一个序号)

(3)第三次挥手

服务端发送一个FIN,用来关闭服务器端到客户端的数据传送,也就是告诉客户端,我的数据也发送完了,不会再给你发数据了。

(4)第四次挥手

客户端收到FIN后,发送一个ACK给服务端,确认序号为收到序号 +1。至此完成。

为什么要三次握手?

至少三次握手,才能得出:自己,对方的接收,发送能力都正常。
自己得知道自己的功能正常。

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

这是因为服务端在LISTEN(监听)状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方ACK和FIN一般都会分开发送。

(原作者:xjlgxlgx 链接:https://juejin.cn/post/6844903950181744653)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值