计算机网络 三次握手
Peng's Blog 只记录和技术相关的东西

计算机网络 三次握手


TCP的传输连接管理 — TCP连接的建立

TCP传输连接有三个阶段:连接建立、数据传送、连接释放。

在TCP连接建立过程中要解决三个问题:

1.要使每一方能够确知对方的存在。 2.要允许双方协商一些参数(比如最大窗口值、是否使用时间戳选项等) 3.能够运输实体资源(比如缓存大小,连接表中的项目等)进行分配

使用三次握手的原因

首先我们需要知道为什么要有三次握手: 主要是为了防止已经失效的连接请求报文段突然又传送到了服务器B,从而发生错误。

三次握手

客户端A,服务器端B

AB都要先创建传输控制模块TCB。

第一次握手:

客户端向服务器端发起请求,同步位SYN=1,序列号seq = x。(SYN=1的报文段不能携带数据)
这时,客户端进入到 SYN-SENT状态,即同步已发送。

第二次握手

服务器B收到请求的报文段后,如同意建立连接,那么就向A发送确认。 同步位SYN=1,ACK=1,确认号ack=x+1,同时自己也选择一个初始的序列号 seq = y
这时,服务器端进入SYN-RCVD状态,即同步收到。

第三次握手

客户端收到服务器端的确认之后还要给服务器发送确认。确认报文段 ACK = 1,确认号ack = y+1,自己的序列号seq = x+1。 此时连接建立,A进入ESTABLISHED状态,即连接已经建立。
当B收到A发来的确认报文时,也进入ESTABLISHED状态。

三次握手的过程图解

enter description here

关于三次握手的一些面试题:

tcp三次握手创建连接,双方交互的报文中SYN和ACK的序列是什么样的()
SYN,SYN+ACK,ACK

tcp三次握手的过程,accept发生在三次握手哪个阶段?
发生在三次握手之后
三次握手完成后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接。


Comments

评论功能暂停使用,如需跟作者讨论请联系底部的GitHub