使用tcpdump抓包工具来捕捉三次握手和四次挥手

目录

  • 实验目的
  • 理论知识了解
  • 实验工具
    • tcpdump抓包工具
    • nc
  • 实验步骤
  • 小结

实验目的

在低年级的时候,老师讲计算机网络的时候,对于三次握手和四次挥手过程一知半解,到了现在自己更愿意去钻研这些原理性的东西。你是否曾怀疑过,到底TCP连接是不是如下图所示这样,在实际应用中,这又发挥着什么样的作用?
使用tcpdump抓包工具来捕捉三次握手和四次挥手_第1张图片

理论知识了解

我们首先要知道什么是三次握手,什么是四次挥手。这其实是工作在运输层的TCP协议完成的事情,在TCP发送数据之前,它要使用三次握手来确保这个连接是可靠地,在数据传输完成之后,又需要我们去关闭这个连接,因为这个连接是及其的消耗资源的。对于三次握手和四次挥手不太了解的同学,可以参考我的博客:
计算机之间是如何进行通信的?;详解三次握手和四次挥手

实验工具

在进行实验之前,简单介绍下,我做实验使用的两条命令。

tcpdump抓包工具

大家可以参看我这篇博客: LINUX抓包工具tcpdump详解

nc

一个强大的建立连接和传输数据的工具。具体请参见博文
Linux nc 命令详解

实验步骤

1、打开你的虚拟机,开两台,并且这两台都是用的桥接网络,两台虚拟机的桥接网络地址是不一样的。如下图,我一台开了centos6,一台开了centos7.

  • centos6中的ip地址为172.18.250.149
  • centos7中的ip地址为172.18.254.95
    使用tcpdump抓包工具来捕捉三次握手和四次挥手_第2张图片
    2、使用远程连接工具secrucrt或者使用Xshell工具连接。然后开三个对话,两个centos6的终端,一个用来与centos6通信,一个用来抓包,一个centos7的终端
    • 在抓包窗口下键入以下命令。(此后这个窗口无需做任何操作)
      [root@centos ~]# tcpdump -S host 172.18.254.95 and 172.18.250.149
      显示这两个主机之间的通信包,and表取二者交集。
      -S 是显示ack的绝对值,之前在测试的时候发现,不加-S,三次握手的最后一次显示的ack值是1
    • 在第一个centos6的通信终端上敲击命令
      [root@centos ~]# nc -l 1234
      命令的大概意思是监听1234端口
    • 在centos7上的通信终端上敲击
      nc 172.18.250.149 1234
      命令大意,与centos6中的1234端口建立tcp连接

注意 ,命令执行的顺序不能变,变了的话就容易会出错
3、分析数据包

  • 三次握手数据包
    使用tcpdump抓包工具来捕捉三次握手和四次挥手_第3张图片
    第一个箭头指向FLAG[S]意思是包中的标志是SYN,这是一个请求包。FLAG[.]一般是指明这是一个单一的ack确认包,当没有其他标志的时候FLAG[]中的内容就是.画图来描述上面的数据内容如下所示。
    使用tcpdump抓包工具来捕捉三次握手和四次挥手_第4张图片
    下一个包的ack刚好比上一个包的seq多1
  • 传递真正的数据包。
    我在其中一个会话窗口中,输入12345,然后我们可以查看监控窗口的数据如下
    使用tcpdump抓包工具来捕捉三次握手和四次挥手_第5张图片
    这几个包就是数据包。
  • 四次挥手。
    如果你想中断这次tcp连接,请分别在对话两端ctrl+d。对话两边都会推出窗口,监控窗口里会显示正确的退出序列,也就是四次挥手,如下。
    使用tcpdump抓包工具来捕捉三次握手和四次挥手_第6张图片
    FLAG[F]表示包的类别是FIN,表示关闭连接
    图示如下,具体数据不再抄,请看数据图。
    使用tcpdump抓包工具来捕捉三次握手和四次挥手_第7张图片
    图中的x+2=2923379948,y+1=1396863312.以此类推,与上面的数据图一一对应。

注意,在我们准备退出这个tcp连接的时候,我们不能使用ctrl+c退出,不然会出现只能退出一半这种尴尬的情景。

小结

理论是为了更好的指导我们的实践,同时利用实践来检验我们的理论。单纯地理论和单纯地实践都是没有意义的,结合在一起大家才会有进步,学习才会有现实意义。

你可能感兴趣的:(使用tcpdump抓包工具来捕捉三次握手和四次挥手)