码迷,mamicode.com
首页 > 其他好文 > 详细

三次握手建立连接

时间:2014-06-08 03:14:37      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:c   style   blog   a   http   ext   

建立连接的过程如下:
  1. 客户端发送一个SYN段表示发起连接请求,该段中包含一个初始序号ISN。
  2. 服务器也发送一个SYN段并包含它自己的初始序号ISN,同时设置ACK标志表示对上一个客户端的SYN的确认,确认序号为客户端的ISN值加1,该确认序号表示服务器希望下一次收到的起始序号
  3. 客户端再发送一个ACK以确认服务器发来的SYN,确认序号为服务器ISN加1,含义同上。
三次握手完成,连接建立。

下面以HTTP为例。在HTTP发送第一个请求之前,需要建立TCP连接,也就是三次握手,这三个TCP数据包不包含任何有效数据字节。通过Wireshark来分析三次握手的具体流程。这里有一点需要记住:确认信号应当是上一次已成功收到数据字节序号加1。

第一次握手:
bubuko.com,布布扣
这是客户端(我的电脑)发出的TCP头。客户端的端口号是59313,服务器的端口号是80,客户端生成的初始序列号x为0,标志位为SYN表示客户端请求建立连接。

第二次握手:
bubuko.com,布布扣
这是服务器返回的应答TCP头。服务器也生成一个初始序列号y为0,同时将确认序号设为x加1以对客户端的SYN报文段进行确认,标志位为SYN和ACK。

第三次握手:
bubuko.com,布布扣
客户端收到服务器的应答后再次发送一个ACK作为应答。响应序号为y+1以响应服务器的SYN报文段。因为是第二次发送,所以该ACK的序号为1,但由于ACK不消耗序号,在连接建立之后发送第一个数据时,该序号仍然是1.

注意,Wireshark在这里所显示的序号均为相对序号,相对于某个基准值,该基准值的产生随时间变化。基准值加上相对序号才是TCP包真正的序号。

参考:
《TCP/IP详解》 P174-P176.

三次握手建立连接,布布扣,bubuko.com

三次握手建立连接

标签:c   style   blog   a   http   ext   

原文地址:http://blog.csdn.net/nestler/article/details/29187751

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!