目的:

  1. TCP 与 UDP 协议的基本概念
  2. TCP 的三次握手、TCP 的断开以及 TCP 重置的知识
  3. 学会利用 Wireshark 捕获含有 TCP 协议的数据包

简介

TCP(Transmission Control Protocol) 是面向连接的,可靠的,基于 IP 的传输层协议,提供可靠的端到端的传输。

所有 TCP 通讯都会使用源端口和目的端口,这些信息可以在 每个 TCP 数据报的头部找到。而为了将数据传输到远程服务器或设备的特定应用程序上,TCP 数据包必须知道远程服务所监听的端口,如果想要尝试连接一个不同于设置的端口,那么连接就会失败。一般来说,TCP 传输过程中的源端口可以随意选择。一台计算机有 65535 个端口,其中 1-1024 属于标准的端口组,往往是特定服务使用的,1024-65525 属于临时端口,需要使用的时候,操作系统会随机或采用特定的策略来分配端口。

UDP (User Datagram Protocol) 是面向连接的,提供面向事务的简单的,不可靠的服务

原理

首先选择一个随机的源端口,与已知的目的端口进行通信,在发出数据包后,远程设备与原设备使用建立起的端口进行通讯,所有基于 TCP 的通信都通过三次握手开始。

三次握手

四次断开

可以开启名称解析(开启会消耗资源,而且有些时候开启这些解析可能会对我们的分析造成干扰) 编辑 -> 首选项 -> 解析传输名称(解析 TCP / UDP 端口为服务名,比如:80 -> http)

Wireshark 为了让我们分析方便,引入了一个特性,自动将 TCP 的序列号替换为相对值(也就是将 TCP 握手的 seq 值以 0 作为起始值),而我在这里我们更希望看到原始值,可以去 :菜单栏->编辑-> 首选项->协议->TCP -> 取消勾选 Analyze TCP sequence numbers

TCP 重置 RST

正常情况下,TCP 连接都是以四次握手断开连接的,但是在现实中,网络连接有时会出现断掉的情况,可能是遭受到网络攻击或配置错误情况,比如:服务端未开启客户端要连接的 80 端口时,客户端会发送 RST 终止连接。

抓包

  1. 打开 Wireshark,在捕获过滤器输入:tcp,从而只抓 TCP 的包,选对抓取接口,开始抓取,然后打开浏览器,访问一个网址,加载完后,关闭该网址,稍等几秒,停止抓取,抓包完毕。

  2. 过滤出建立连接以及断开连接的数据包。

    在列表中的 info 栏找到 含有 syn 或 fin 的一个或几个记录(找不到,在显示过滤器上输入 tcp.flags.syn == 1 或者 输入 tcp.flags.fin == 1 ),然后选择一个,右键 -> 对话过滤器 -> 选择 TCP,结束。

  3. 此时,如果你想把过滤出的这对会话单独保存,选择 文件-> 导出特定分组 -> 左下角选择 All Packet,右边选择 Displayed(意思是你当前过滤显示的分组),再输入文件名,选择位置即可。

    导出界面上的 range 格式

    1. 4-9 从第四个到第 9 个数据包
    2. 4.9.15 第 4 号,9 号,15 号数据包。

(注:如果你访问的网站太多,想找访问某个网站,可以用之前博文 “从数据包看 TLS1.2” 抓包那里教的方法)

感觉没啥讲的呢...,自己看吧,挺简单的。