TCP的三次握手、四次挥手

在传输层的协议中,TCP现对于UDP来说更能保证其数据传输的准确性,其中一个重要的原因就是三次握手和四次挥手机制,接下来我们一起看下这其中的过程。

三次握手

  • 客户端发起第一次握手(syn,seq )
  • 服务器返回第二次握手(ask,syn,seq)
  • 客户端发出确认消息第三次握手(ack,seq)

在这里插入图片描述
其中两侧是linux中服务器和客户端创建流程所调用的API函数,此次暂不展开。
首先如下图所示,是TCP协议头格式:
TCP协议头
在三次握手中,我们主要是用sequence number(序列号)和SYN。
第一次握手:
客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。

在这里插入图片描述
第二次握手:
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。
在这里插入图片描述
第三次握手:
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1
在这里插入图片描述

以上是对于TCP连接时三次握手的介绍,而这三次握手是发生在哪个编程接口中呢?我们先了解下C/S中服务器和客户端的搭建流程。
服务器:
在这里插入图片描述
客户端:
在这里插入图片描述
由以上流程可以分析出:
三次连接是由客户端发起的,第一次握手应发生在connect()中;listen()函数是一个被动监听的,只是让套接字进入监听状态,而真正的接收客户端连接的是accept()函数,因此两次握手发生在accept()函数中,建立连接成功后,accept()函数会返回一个新的套接字用于客户端与服务器之间的通信。

四次挥手

在这里插入图片描述
上图是四次挥手的示意图:

  • 首先在每个进程调用close()接口进行连接断开时,该端会发送一个FIN表示数据发送完毕(主动关闭)。
  • 而收到这个FIN的一端(被动关闭),会回应一个ACK表示收到信息,但不会立即断开连接
  • 在等待一段时间后,被动关闭的一端会调用close()也关闭自己的套接字,同时向主动关闭的一方发送一个FIN
  • 接收到这个FIN的一方(主动关闭),会回应一个ACK,同时等待一段时间后关闭连接

学习笔记持续更新,公众号记录:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ghost_199503

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值