面试题-计网:三次握手四次挥手

167 阅读2分钟

TCP三次握手的过程(含状态转换,报文中的参数)

  • 最开始,服务器端和客户端都会创建传输控制块:TCP连接表、指向发送和接收缓存的指针、只想重传队列的指针、当前的发送和接收序号等。

  • 第一次握手:

    • 客户进程向服务器进程发送TCP连接请求报文段,然后客户端自己进入同步已发送状态(SYN-SENT),报文首部中有个同步位SYN在这里被设置为1(为1表示这是一个TCP连接请求报文段),序号字段seq被设置为x(这个x是一个初始值,是TCP客户进程选择的一个初始序号)。 TCP规定 SYN 为1的报文段不能携带数据,但需要小号一个序号。
    • 服务器端是被动建立连接,此时处于监听状态
  • 第二次握手:

    • 服务器端接收到TCP连接请求报文段后进入同步已接收状态,并向服务器端发送TCP连接请求确认报文段,报文首部同步位SYN设置为1,确认位ACK也设置为1(表示这是一个TCP连接请求确认报文段),序号字段seq被设置了一个初始值y(TCP服务器进程选择的初始序号),确认号ack字段被设置成x+1,来表示收到了之前序号为x的连接请求。
  • 第三次握手:

    • 客户端收到服务器发来的确认报文段后,还要发送一个普通的TCP确认报文段,同时服务器端进入连接已建立状态,该报文段的首部确认位ACK被设置为1,序号字段seq被设置为x+1,确认号ack被设置为y+1

      TCP规定,普通的TCP确认报文段可以携带数据,如果不携带数据,就不消耗序号。

    • 服务器端接收到普通的确认报文段后进入连接状态

image-20210330235638869.png