计算机网路协议知识汇总(九)传输层-TCP-建立连接(3次握手)

建立连接

建立连接.png
tcp 是面向连接的,为了实现这个连接双方需要同步一些信息,建立某些数据结构,这些工作在三次握手阶段完成。

缩写词

  • SYN:同步信号
  • ACK:确认信号
  • ack:确认号,请求下一次接收到数据的相对位置
  • seq:序号,发送的数据相对位置

序号、确认号

序号与确认号.png

  • 连续ARQ协议 + 滑动窗口协议(数据传输协议)
  • 关注请求里的相对值

1.png

  • 客户端 -> 服务器。
  • 建立请求的数据部分长度为0,只有tcp首部,SYN=1(请求建立连接,seq=s1,s1为原生客户端序号值),ACK=0
  • seq=0(相对值,因为不需要发送数据,所以发送序号为0),ack=0(对方没有给我发送数据,所以不需要确认)

2.png

  • 服务器 -> 客户端
  • SYN=1(同意建立请求,seq=s2,s2为原生服务端序号值),ACK=1-seq=0(相对值,因为不需要发送数据),ack=1(基于对方方发送来seq=0,len=0的数据,请求对方发送seq+1位置的数据,所以为1)

3.png

  • 客户端 -> 服务器
  • SYN=0,ACK=1
  • seq=1(虽然没有发送数据,但是需要配合上一次请求里ack=1,所以seq为1),ack=1(跟上一次请求相同,收到对方seq=0,len=0的数据,所以请求对方发送seq+1位置的数据)

4.png

  • 客户端 -> 服务器,HTTP请求
  • SYN=0,ACK=1
  • seq=1(对上一次请求的响应,第2步 服务器 -> 客户端,所以seq为1),ack =1(对上一次请求的响应,第2步 服务器 -> 客户端,所以ack为1),len=k(k个字节的数据)

5.png

  • 服务器 -> 客户端,服务器开始给客户端发送数据
  • SYN=0,ACK=1
  • seq=1(根据上一次的客户端请求的 ack=1,所以发送seq =1的数据),ack=k+1(因为上一次发送来的数据长度为 k,且seq=1,所以回复确认号,请求对方发送k+1位置的数据),len=b1

6.png

  • 服务器 -> 客户端,服务器第二次给客户端发送数据
  • SYN=0,ACK=1
  • seq=b1+1(b1是上次发送给客户端的数据包长度,所以发送这一次改发送 b1+1位置的数据),ack=k+1(因为第4步发送来的数据长度为k,seq=1,且中间一直没有收到客户端发来的请求,所以ack还是为k+1),len=b2

7.png

  • 服务器 -> 客户端,服务器第三次给客户端发送数据
  • 序号继续递增,seq=b1+b2+1,确认号跟第六步的情况相同

8.png

  • 服务器 -> 客户端,服务器第四次给客户端发送数据
  • 序号继续递增,seq=b1+b2+b3+1,确认号跟第六步的情况相同

9.png

  • 客户端 -> 服务器,客户端给服务器发送数据(对于之前接收到数据的一次确认)
  • SYN=0,ACK=1
  • seq=k+1(之前收到的来自服务器的包的ack都是k+1,所以回复的seq =k+1),ack=b1+b2+b3+b4+1(之前分别收到四个包,所以ack为4个包的len+1)
    序号与确认号.png

3次握手

3次握手.png

状态分析

  • 客户端CLOSED:处于关闭状态,可以发起建立连接的请求
  • 服务端LISTEN:处于监听状态,等待并接收客户端的建立连接请求
  • 客户端SYN-SENT:已发出连接请求(第1次握手,SYN=1,ACK=0)后的状态,等待服务端的同意建立请求(第2次握手,SYN=1,ACK=1)的确认回复
  • 服务端SYN-RCVD:收到客户端建立连接的请求(第1次握手),并且给予客户端连接请求确认的响应(第2次握手,SYN=1,ACK=1)后的状态,等待客户端的确认(第3次握手)
  • 客户端ESTABLISHED(已确认的):接收到服务端的连接请求确认(第2次握手)后,且发起了确认请求(第3次握手,SYN=0,ACK=1)后的状态,连接建立,可以发送和接收数据了。
  • 服务端ESTABLISHED:接收到客户端发起的确认请求(第3次握手)后的状态,连接建立,可以发送和接收数据了。

前两次握手的特点

  • SYN都为1
  • tcp数据部分len都为0字节
  • tcp首部一般为32字节=20字节固定部分+12字节选项部分
  • 交换确认一些信息,包括但不限于MSS,是否支持SACK,Window scale(窗口缩放系数)等,且这些数据都在tcp首部的选项部分

为什么需要3次握手

  • 个人的简单理解
  1. A->B,B知道能接收到A的数据
  2. B->A,A知道B能接收到它发过去的数据,B不知道A能否收到它发过去的数据
  3. A->B,B也知道A能收到它发的数据。
  • 在知乎上看到一条优秀的回答
    image.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值