首页 > 代码库 > 三次握手建立连接
三次握手建立连接
建立连接的过程如下:
- 客户端发送一个SYN段表示发起连接请求,该段中包含一个初始序号ISN。
- 服务器也发送一个SYN段并包含它自己的初始序号ISN,同时设置ACK标志表示对上一个客户端的SYN的确认,确认序号为客户端的ISN值加1,该确认序号表示服务器希望下一次收到的起始序号。
- 客户端再发送一个ACK以确认服务器发来的SYN,确认序号为服务器ISN加1,含义同上。
三次握手完成,连接建立。
下面以HTTP为例。在HTTP发送第一个请求之前,需要建立TCP连接,也就是三次握手,这三个TCP数据包不包含任何有效数据字节。通过Wireshark来分析三次握手的具体流程。这里有一点需要记住:确认信号应当是上一次已成功收到数据字节序号加1。
第一次握手:
这是客户端(我的电脑)发出的TCP头。客户端的端口号是59313,服务器的端口号是80,客户端生成的初始序列号x为0,标志位为SYN表示客户端请求建立连接。
第二次握手:
这是服务器返回的应答TCP头。服务器也生成一个初始序列号y为0,同时将确认序号设为x加1以对客户端的SYN报文段进行确认,标志位为SYN和ACK。
第三次握手:
客户端收到服务器的应答后再次发送一个ACK作为应答。响应序号为y+1以响应服务器的SYN报文段。因为是第二次发送,所以该ACK的序号为1,但由于ACK不消耗序号,在连接建立之后发送第一个数据时,该序号仍然是1.
注意,Wireshark在这里所显示的序号均为相对序号,相对于某个基准值,该基准值的产生随时间变化。基准值加上相对序号才是TCP包真正的序号。
参考:
《TCP/IP详解》 P174-P176.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。