TCP连接建立过程

TCP连接建立过程

浏览器访问网站,通过域名解析找到ip地址后会与服务器端建立连接。其中TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,它的特点是数据在传输前要建立连接,传输完毕后还要断开连接,且每次客户端与服务器端的通信都都需要进行应答。

在这里插入图片描述
我们先来看一下TCP数据报的结构
在这里插入图片描述
其中,阴影部分的字段要重点理解:

  • 序号:Seq(sequence number)序号占32位,用来标记客户端和服务器端之间发送的不同数据包,如客户端发送数据时利用seq对发送的数据包进行标记。
  • 确认号:Ack(acknowledge number)确认号占32位,客户端和服务器端都可以发生,且Ack=Seq+1
  • 标志位:共有六个标志位,分别为每个标志位占1Bit
    • URG:紧急指针(urgent pointer)有效。
    • Ack:确认号(32位的acknowledge number)是否有效。
    • PSH:是否应将该数据包尽快将给应用层。
    • RST:重置连接。
    • SYN:建立一个新连接。
    • FIN:断开一个连接。

对英文字母缩写的总结:Seq 是 Sequence 的缩写,表示序列;Ack(ACK) 是 Acknowledge 的缩写,表示确认;SYN是 Synchronous 的缩写,愿意是“同步的”,这里表示建立同步连接;FIN 是 Finish 的缩写,表示完成。

TCP连接的建立(三次握手)

建立TCP连接客户端和服务器端需要相互发送三个数据包,这三个数据包分别表示三次握手的过程。如下图所示。
在这里插入图片描述

1.首先由客户端发起连接请求,组件一个TCP数据包。该数据设置SYN标志位表示该数据包用来建立TCP连接。同时随机生成一个Seq序列号1000,填充到TCP数据包中的Seq字段,前文中提到Seq字段用来表示当前数据包,表示该数据包的序列号。

完成这一步后,客户端进入SYN-SEND状态。

2.服务器端接收到数据包后,检查SYN标志位,判断该数据包为客户端请求用来建立TCP连接的数据包,设置SYN和ACK标志位,SYN表示该数据包用来建立TCP连接,ACK表示确认收到了客户端发送来的数据包。

为了标识该数据包,服务器端同样随机生成一个序列号2000填充到Seq字段,该序号是服务器为了标识当前建立的数据包,与客户端发送的数据包中的Seq无关。

服务器将客户端数据包序号(1000)加1,得到1001,并用这个数字填充“确认号(Ack)”字段。因为当前建立的数据包是为了回应客户端发送的数据包。

服务器端发出该数据包后进入SYN-RECV状态。

3.客户端收到数据包后,检测到SYN和ACK标志位被设置,知道这是服务器端发送的“确认包”表示服务器端接收到了客户端发送的数据包,于是客户端再新建一个数据包用2000+1=2001填充数据包的ACK字段发送给服务器端.

发送完毕后客户端进入ESTABLISHED状态

服务器端收到后判断ACK字段是否为2001,如果是的话服务器端也进入ESTABLISHED状态

至此,客户端和服务器端都进入了连接状态,完成了TCP协议中的三次握手,建立了TCP连接。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值