三次握手建立连接

建立连接的过程如下:
  1. 客户端发送一个SYN段表示发起连接请求,该段中包含一个初始序号ISN。
  2. 服务器也发送一个SYN段并包含它自己的初始序号ISN,同时设置ACK标志表示对上一个客户端的SYN的确认,确认序号为客户端的ISN值加1,该确认序号表示服务器希望下一次收到的起始序号
  3. 客户端再发送一个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.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值