美文网首页linux 网络编程
TCP 协议的三次握手

TCP 协议的三次握手

作者: 码农UP2U | 来源:发表于2019-12-27 10:14 被阅读0次

TCP 三次握手是一个很经典的问题,这里简单的整理一下 TCP 可以成功完成三次握手的流程。

Socket API 的流程

在进行 Socket 编程的时候,服务器端通常使用 socket、bind、listen 这三个 API 函数创建一个被动套接字,然后通过 accept 函数等待客户端的连接,调用 accept 函数后,程序会进行阻塞等待。

客户端通过 socket、connect 两个 API 函数来创建套接字,并针对服务器端发起连接。

在连接服务器端时,整个工作是网络协议进行完成的,并不是由 accept 和 connect 函数真正去完成的,它们只是网络编程的接口,真正做这些事情的是 网络协议,包括同来发送和接收数据的通信,真正完成工作的也是 网络协议 而并不是 send 和 recv 等相关的 API 函数。

三次握手的过程

上面提到,服务端已经处于 accept 函数的阻塞状态等待客户端的连接,而客户端调用了 connect 函数要连接服务器端了,此时双方开始进行三次握手,整个握手过程对于程序员来说是透明的。也就是说,程序员只需要去调用相关的 API 函数,而不用去关心具体建立连接的细节。

整个建立握手的过程是由客户端发起的,因为服务器是被动等待的状态,不会主动发起和客户端的连接。
1、客户端的协议栈向服务器端发送了 SYN 包,并告诉服务器端当前发送序列号 x,客户端进入 SYNC_SENT 状态;
2、服务器端的协议栈收到 SYN 包之后,向客户端进行 ACK 应答,应答的值为 x + 1,表示对 SYN 包 x 的确认,同时服务器也发送一个 SYN 包,告诉客户端当前我的发送序列号为 y,服务器端进入 SYNC_RCVD 状态;
3、客户端协议栈收到服务器端发来的 ACK 包之后,使得应用程序从 connect 调用返回,表示客户端到服务器端的单向连接建立成功,客户端的状态为 ESTABLISHED,同时客户端协议栈也会对服务器端发送 ACK 包进行应答,应答数据为 y + 1;
4、客户端发送的 ACK 包到达服务器端后,服务器端协议栈使得 accept 阻塞调用返回,这个时候服务器端到客户端的单向连接也建立成功,服务器端也进入 ESTABLISHED 状态。

在第 2 步中,其实完成了两个动作,第 1 个动作是,服务端要向客户端发送一个 ACK 包用以进行确认,第 2 个动作是,服务器端要向客户端发送一个 SYN 包用来和客户端完成同步请求。这两个步骤分别使用了 TCP 协议的 SYN 标志和 ACK 标志,如果发送两个包去完成就会显得多余,因此两个动作实际是在一个包内就完成了。



我的微信公众号:“码农UP2U”
我的公众号

相关文章

  • 网络学习三

    关于TCP握手和挥手告别 tcp协议格式 三次握手 在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用...

  • TCP/IP协议

    TCP/IP协议三次握手与四次握手流程解析 HTTP协议—— 简单认识TCP/IP协议 TCP/IP协议入门(一)...

  • 链家 PHP 面试

    TCP三次握手在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时...

  • 头条-阿里面试题

    TCP三次握手在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时...

  • TCP的可靠性

    TCP数据报首部格式 建立连接——三次握手 TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个...

  • TCP握手协议

    TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连...

  • TCP协议三次握手与四次挥手通俗解析

    TCP/IP协议三次握手与四次握手流程解析 一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详...

  • 网络知识基础——TCP/IP部分(上)

    1、三次握手? TCP协议为了准确无误地将数据送达目标处,TCP协议采用了三次握手策略。即用TCP协议将数据包送出...

  • HTTP协议相关知识

    TCP协议的三次握手和四次握手 TCP协议的三次握手其实就是解决连接的可靠性。 解释一下相关符号: TCP标志位(...

  • day30TCP协议详解\上网基本流程

    TCP协议详解 可靠协议TCP协议 三次握手建立双向链接 三次握手的时候并未传送真正的数据,只是在为了后续发送数据...

网友评论

    本文标题:TCP 协议的三次握手

    本文链接:https://www.haomeiwen.com/subject/gpbroctx.html