三次握手,四次挥手 抓包分析

三次握手

打开http://www.youku.com 分析 TCP 数据包

在终端中执行:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=/tmp/chrome --ssl-key-log-file=/tmp/.ssl-key.log

在Wireshark过滤器输入 http

在浏览器输入优酷网址,可以看到Wireshark中http数据包的Info有 youku的字样

image-20220321124359784

右键,Follow -> TCP Stream,追踪TCP数据流

image-20220321124415973

可以得到如下页面:

image-20220321124445015

点击Statistics -> Flow
在这里插入图片描述

可以得到如下页面:

image-20220321124517125

在其中的Flow Type中选择TCP Flows,并选择时间戳和我们要分析的TCP数据流一致的数据,点击Limit to display filiter,可以得到如下窗口:

image-20220321124537941

第一次握手

可以看出我的IP地址为192.168.0.102

优酷的IP地址为59.82.31.118

在客户端和youku.com之间启动 TCP 连接的 TCP SYN 区段的相对 S e q u e n c e n u m b e r Sequence number Sequencenumber 是0,绝对 S e q u e n c e n u m b e r Sequence number Sequencenumber 2758883771 2758883771 2758883771,这是一个随机值

image-20220321124607668

根据三次握手,客户端应该发送 SYN 请求请求建立连接,我找到发送的第一个请求并且发现客户端(我的电脑)将 SYN 标志标 0 用来请求建立连接。这一步也是三次握手的第一步

image-20220321124631311

第二次握手

Youku.com发送给客户的

  • 相对 A c k n o w l e d g e m e n t   n u m b e r Acknowledgement\ number Acknowledgement number 1 1 1
  • 绝对 A c k n o w l e d g e m e n t   n u m b e r Acknowledgement\ number Acknowledgement number 2758883772 2758883772 2758883772
  • 相对 S e q u e n c e   n u m b e r Sequence\ number Sequence number 0 0 0
  • 绝对 S e q u e n c e   n u m b e r Sequence\ number Sequence number 1687385211 1687385211 1687385211,这也是一个随机值

image-20220321124649825

可以发现,服务器端的 A c k n o w l e d g e m e n t   n u m b e r Acknowledgement\ number Acknowledgement number = 客户端的 S e q u e n c e   n u m b e r + 1 Sequence\ number + 1 Sequence number+1
意思是服务器接收到我的连接请求并且发 SYN-ACK 确认,这是三次握手的第二步。

在这里插入图片描述

第三次握手

客户端再次发送TCP报文段给服务器端的

  • 相对 S e q u e n c e   n u m b e r Sequence\ number Sequence number 1 1 1
  • 绝对 S e q u e n c e   n u m b e r Sequence\ number Sequence number 2758883772 2758883772 2758883772
  • 相对 A c k n o w l e d g e m e n t   n u m b e r Acknowledgement\ number Acknowledgement number的值为 1 1 1
  • 绝对 A c k n o w l e d g e m e n t   n u m b e r Acknowledgement\ number Acknowledgement number的值为 1687385212 1687385212 1687385212

image-20220321124755435

image-20220321124830514

TCP服务器进程收到该确认报文段后也进入连接已建立状态

现在,TCP双方都进入了连接已建立状态,它们可以基于已建立好的TCP连接,进行可靠的数据传输

image-20220321124901298

四次挥手

第一次挥手:

三次握手,四次挥手 抓包分析_第1张图片

272号报文的信息:

  • Source IP Address: 192.168.0.112
  • Destination IP Address: 192.168.0.101
  • Source Port: 21
  • Destination Port: 59353
  • Fin: 1
  • Acknowledgment Number: 2006995353 ,164(relative ack number)
  • Sequence Number:1380144531, 454 (relative sequence number)

三次握手,四次挥手 抓包分析_第2张图片

TCP连接释放报文段首部中

  • 终止位FIN和确认为ACK的值都被设置为1,表明这是一个TCP连接释放报文段,同时也对之前收到的报文段进行确认
  • 序号seq字段的值设置为u,它等于TCP客户进程之前已传送过的数据的最后一个字节的序号加1
  • 确认号ack字段的值设置为v,它等于TCP客户进程之前已收到的、数据的最后一个字节的序号加1

第二次挥手:

三次握手,四次挥手 抓包分析_第3张图片

273号报文的信息:

  • Source IP Address: 192.168.0.101
  • Destination IP Address: 192.168.0.112
  • Source Port: 59353
  • Destination Port: 21
  • Acknowledgment Number: 1380144532 ,455(relative ack number)是 272号报文的 Sequence Number + 1
  • Sequence Number:2006995353, 164 (relative sequence number)和 272号报文的Acknowledgment Number一致

三次握手,四次挥手 抓包分析_第4张图片
TCP服务器进程收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段并进入关闭等待状态

普通的TCP确认报文段首部中

  • 确认位ACK的值被设置为1,表明这是一个普通的TCP确认报文段
  • 序号seq字段的值设置为v,它等于TCP服务器进程之前已传送过的数据的最后一个字节的序号加1,这也与之前收到的TCP连接释放报文段中的确认号匹配
  • 确认号ack字段的值设置为u+1,这是对TCP连接释放报文段的确认

三次握手,四次挥手 抓包分析_第5张图片

TCP客户进程收到TCP确认报文段后就进入终止等待2状态,等待TCP服务器进程发出的TCP连接释放报文段

若使用TCP服务器进程的应用进程已经没有数据要发送了,应用进程就通知其TCP服务器进程释放连接

由于TCP连接释放是由TCP客户进程主动发起的,因此TCP服务器进程对TCP连接的释放称为被动关闭连接

第三次挥手:

三次握手,四次挥手 抓包分析_第6张图片

274号报文的信息:

  • Source IP Address: 192.168.0.101
  • Destination IP Address: 192.168.0.112
  • Source Port: 59353
  • Destination Port: 21
  • Fin :1
  • Acknowledgment Number: 1380144532 ,455(relative ack number)和 273 号报文的 Acknowledgment Number 一致
  • Sequence Number:2006995353, 164 (relative sequence number)和 273 号报文的Sequence Number 一致

三次握手,四次挥手 抓包分析_第7张图片

TCP服务器进程发送TCP连接释放报文段并进入最后确认状态

该报文段首部中

  • 终止位FIN和确认位ACK的值都被设置为1,表明这是一个TCP连接释放报文段,同时也对之前收到的报文段进行确认
  • 序号seq字段的值为w,这是因为在半关闭状态下,TCP服务器进程可能又发送
  • 确认号ack字段的值为u+1,这是对之前收到的TCP连接释放报文段的重复确认

第四次挥手:

三次握手,四次挥手 抓包分析_第8张图片

275号报文的信息:

  • Source IP Address: 192.168.0.112
  • Destination IP Address: 192.168.0.101
  • Source Port: 21
  • Destination Port: 59353
  • Acknowledgment Number: 2006995354 ,165(relative ack number)是 274 号报文 的 Sequence Number + 1
  • Sequence Number:1380144532, 455 (relative sequence number)和 274 号报文 的 Acknowledgment Number 一致

三次握手,四次挥手 抓包分析_第9张图片

TCP客户进程收到TCP连接释放报文段后,必须针对该报文段发送普通的TCP确认报文段,之后进入时间等待状态

该报文段首部中

  • 确认为ACK的值被设置为1,表明这是一个普通的TCP确认报文段
  • 序号seq字段的值设置为u+1,这是因为TCP客户进程之前发送的TCP连接释放报文段虽然不携带数据,但要消耗掉一个序号
  • 确认号ack字段的值设置为w+1,这是对所收到的TCP连接释放报文段的确认

TCP服务器进程收到该报文段后就进入关闭状态,而TCP客户进程还要进过2MSL后才能进入关闭状态

你可能感兴趣的:(网络,linux,bash,ubuntu)