TCP 三次握手建立连接详解

一、三次握手流程

在这里插入图片描述
一开始,客户端和服务端都处于 CLOSED 状态(CLOSED 是一个假想的起始点, 并不是真实状态),先是服务端主动监听某个端口,处于 LISTEN 状态

1、第一次握手

在这里插入图片描述
客户端会随机初始化序号(client_isn),然后将其填入 TCP 首部的「序列号」字段中,接着把 SYN 标志位设成 1,最后发送 SYN 报文给服务端,该报文不包含应用层数据,之后客户端处于 SYN_SENT 状态

2、第二次握手

在这里插入图片描述
服务端收到客户端的 SYN 报文后,也随机初始化自己的序号(server_isn),然后将其填入 TCP 首部的「序列号」字段中,其次将 client_isn + 1 填入 TCP 首部的「确认应答号」字段中,接着把 SYN 和 ACK 标志位都设成 1,最后发送 SYN+ACK 报文给客户端,该报文也不包含应用层数据,之后服务端处于 SYN_RCVD 状态

3、第三次握手

在这里插入图片描述

  • 客户端收到服务端的 SYN+ACK 报文后,将 server_isn + 1 填入 TCP 首部的「确认应答号」字段中,接着把 ACK 标志位设成 1,最后发送该报文给服务端,这次报文可以携带客户端到服务端的数据,之后客户端处于 ESTABLISHED 状态
  • 服务端收到客户端发来的报文后,也进入 ESTABLISHED 状态

注意

第三次握手的时候可以携带数据,第一次和第二次不行

二、引申问题

1、握手报文丢失,会发生什么?

1.1、第一次握手报文丢失

TCP 三次握手,第一次握手报文丢失会发生什么?

1.2、第二次握手报文丢失

TCP 三次握手,第二次握手报文丢失会发生什么?

1.3、第三次握手报文丢失

TCP 三次握手,第三次握手报文丢失会发生什么?

2、为什么 ISN(Initial Sequence Number,初始序列号) 不固定?

为什么建立 TCP 连接时,初始序列号不固定?

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

为什么建立 TCP 连接是三次握手,而不是两次或者四次?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值