简单说说TCP(1) --- 建立连接三次握手


三次握手流程

先来一张TCP建立连接流程图:(图片来自于网络)
这里写图片描述

上图中的部分符号解释:
SYN:TCP首部中6个标志bit中的1个,表示同步包
ACK:TCP首部中6个标志bit中的1个,表示确认包
seq:同步序号
ack:确认序号


  • 第一次握手:客户发送SYN包到服务器,这个包中包括了:

    • 目的端口号;
    • seq = client ISN(客户初始序号,即上图中的x);
    • 客户的窗口大小;
    • 可接收的最大报文段长度(MSS);

    发送后,客户进入SYN_SENT状态,等待服务器确认。


  • 第二次握手:服务器回复SYN-ACK包,这个包中包括了:

    • seq = server ISN(服务器初始序号,即上图中的y),“你的请求我已接受,我这方的数据流序号从y开始”;
    • ack = client ISN + 1(即x+1);
    • 服务器的窗口大小;
    • 可接收的最大报文段长度(MSS);

    发送后,服务器进入SYN_RECV状态。


  • 第三次握手:客户发送ACK包到服务器,这个包包括了:

    • seq = client ISN + 1(即x+1),“我这方的数据流序号从x+1开始,我们可以互相传输数据了”;
    • ack = server ISN + 1(即y+1);

    发送后,客户和服务器均进入ESTABLISHED。


一些重要概念

半连接队列

在三次握手协议中,服务器维护一个半连接队列,该队列为每个客户的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN 包,并向客户回复了确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于SYN_RECV状态,当服务器收到客户的确认包时,该条目所标识的连接进入ESTABLISHED状态,同时从半连接队列删除该条目。

SYN-ACK重传次数

服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。(注意,每次重传等待的时间不一定相同。)

半连接存活时间

半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值