基于 Wireshark 学习 TCP 三次握手

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

同类型的软件有:cain、sniffer

WinPcap是用于网络封包抓取的一套工具,可适用于32位的操作平台上解析网络封包,包含了核心的封包过滤,一个底层动态链接库,和一个高层系统函数库,及可用来直接存取封包的应用程序界面

Winpcap提供了两个不同的库:packet.dll 和wpcap.dll。

packet.dll提供一个底层的API,通过这个API可直接访问网络设备驱动,而独立于Microsoft OS.

wpcap.dll是一个高层的强大捕获程序库,与Unix下的libpcap兼容。它独立于下层的网络硬件和操作系统

 Wireshark 启动界面

wireshark是捕获机器上的某一块网卡的网络包,当你有多块网卡的时候,你需要选择一个网卡。

点击 抓包->网络接口 出现下面对话框,选择正确的网卡。然后点击"开始"按钮, 开始抓包

窗口介绍

WireShark 主要分为这几个界面

1. 显示过滤器,用于过滤

2. 封包列表,显示捕获到的封包, 有源地址和目标地址,端口号。 颜色不同,代表

3. 封包详细信息,显示封包中的字段

4. 16进制数据

5. 地址栏,杂项

显示过滤器

表达式规则

1. 协议过滤

比如TCP,只显示TCP协议。

2. IP 过滤

比如

ip.src==192.168.1.102,源地址为 192.168.1.102

ip.dst==192.168.1.102,目标地址为 192.168.1.102

3. 端口过滤

tcp.port ==80,  端口为80的

tcp.srcport == 80,  只显示TCP协议的源端口为80的

4. Http模式过滤

http.request.method=="GET",   只显示HTTP GET方法的。

5. 逻辑运算符为 AND/ OR


封包列表

面板中显示:编号,时间戳,源地址,目标地址,协议,长度,封包信息

不同的协议用了不同的颜色显示,默认:

绿色是TCP报文,深蓝色是DNS,浅蓝是UDP,黑色标识出有问题的TCP报文:比如乱序报文。


封包详细信息

这个面板是我们最重要的,用来查看协议中的每一个字段。

Frame:   物理层的数据帧概况

Ethernet II: 数据链路层以太网帧头部信息

Internet Protocol: 互联网层IP包头部信息

Transmission Control Protocol:  传输层T的数据段头部信息,此处是TCP

Hypertext Transfer Protocol:  应用层的信息,此处是HTTP协议

wireshark与OSI七层模型

TCP包的具体内容



分析TCP三次握手过程

我们用wireshark实际分析下三次握手的过程。

打开wireshark, 打开浏览器输入 http://www.cnblogs.com/tankxiao

在wireshark中输入"http"过滤, 然后选中GET /tankxiao HTTP/1.1的那条记录,右键然后点击"Follow TCP Stream",

这样做的目的是为了得到与浏览器打开网站相关的数据包,将得到如下图

图中可以看到wireshark截获到了“三次握手”的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。


第一次握手数据包

客户端向服务器发送连接请求包,标志位SYN(同步序号)为1,序号Seq为X=0


第二次握手的数据包

服务器收到客户端发的报文,由SYN=1知道客户端要求建立联机。向客户端发送一个SYN和ACK都为1的TCP报文,设置初始序号seq Y=0,将确认序号(Acknowledgement Number)设置为客户的序号加1,即X+1 = 0+1=1, 如下图


第三次握手的数据包

客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号加1(X[ 0 ]+1=1)。以及标志位ACK是否为1。若正确,服务器再次发送确认包,ACK标志位为1,SYN标志位为0。确认序号(Acknowledgement Number)=Y+1=0+1=1,发送序号为X+1=1。客户端收到后确认序号值与ACK=1则连接建立成功,可以传送数据了。


就这样通过了TCP三次握手,建立了连接。




TCP/IP知识

1. 链路层:

也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。

2. 网络层:

也称作互联网层,处理分组在网络中的活动,例如分组的选路。网络层协议包括IP协议(网际协议)、ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。

3. 运输层主要为两台主机上的应用程序提供端到端的通信:

在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。他所作的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端通信,因此应用层可以忽略所有这些细节。而另一方面,UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必须的可靠性必须由应用层来提供。

4. 应用层负责处理特定的应用程序细节:

包括Telnet(远程登录)、FTP(文件传输协议)、SMTP(简单邮件传送协议)以及SNMP(简单网络管理协议)等。


TCP是一种面向连接的、可靠的 基于字节流的传输层通信协议。TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据。

TCP的特点:

1、TCP是面向连接的运输层协议

2、每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的

3、TCP提供可靠交付的服务

4、TCP提供全双工通信。数据在两个方向上独立的进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。

5、面向字节流。面向字节流的含义:虽然应用程序和TCP交互是一次一个数据块,但TCP应用程序交下来的数据仅仅是一连串的无结构的字节流。

1. 源端口号:数据发起者的端口号,16bit

2. 目的端口号:数据接收者的端口号,16bit

3. 序号:32bit的序列号,由发送方使用

4. 确认序号:32bit的确认号,是接收数据方期望收到发送方的下一个报文段的序号,因此确认序号应当是上次已成功收到数据字节序号加1。

5. 首部长度:首部中32bit字的数目,可表示15*32bit=60字节的首部。一般首部长度为20字节。

6. 保留:6bit, 均为0

7. 紧急URG:当URG=1时,表示报文段中有紧急数据,应尽快传送。

8. 确认比特ACK:ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包。

9. 推送比特PSH:当发送端PSH=1时,接收端尽快的交付给应用进程。

10. 复位比特(RST):当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。

11. 同步比特SYN:在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。

12. 终止比特FIN:FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。

13. 窗口:用来控制对方发送的数据量,通知发放已确定的发送窗口上限。

14. 检验和:该字段检验的范围包括首部和数据这两部分。由发端计算和存储,并由收端进行验证。

15. 紧急指针:紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数。

16. 选项:长度可变,最长可达40字节。

wireshark捕获到的TCP包中的每个字段如下图所示:


时间: 2024-10-18 16:18:20

基于 Wireshark 学习 TCP 三次握手的相关文章

Wireshark 基本介绍和学习 TCP 三次握手

这篇文章介绍另一个好用的抓包工具 Wireshark, 用来获取网络数据封包,包括 HTTP.TCP.UDP 等网络协议包. 记得大学的时候就学习过TCP的三次握手协议,那时候只是知道,虽然在书上看过很多TCP和UDP的资料,但是从来没有真正见过这些数据包, 老是感觉在云上飘一样,学得不踏实.有了wireshark就能截获这些网络数据包,可以清晰的看到数据包中的每一个字段.更能加深我们对网络协议的理解.对我而言, wireshark 是学习网络协议最好的工具. 阅读目录 wireshark介绍

Wireshark基本介绍和学习TCP三次握手

记得大学的时候就学习过TCP的三次握手协议,那时候只是知道,虽然在书上看过很多TCP和UDP的资料,但是从来没有真正见过这些数据包, 老是感觉在云上飘一样,学得不踏实.有了wireshark就能截获这些网络数据包,可以清晰的看到数据包中的每一个字段.更能加深我们对网络协议的理解.对我而言, wireshark 是学习网络协议最好的工具. 阅读目录 wireshark介绍 wireshark不能做的 wireshark VS Fiddler 同类的其他工具 什么人会用到wireshark wire

Wireshark下TCP三次握手四次挥手

一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡.它们一起处理与电缆(或其他任何传输媒介)的物理接口细节. 2. 网络层,也称作互联网层,处理分组在网络中的活动,例如分组的选路.网络层协议包括IP协议(网际协议).ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议). 3.

WireShark:TCP三次握手 抓包

本机ip:192.168.201.200 服务器ip:192.168.230.20 抓到的数据如下: 第一次握手: SYN标记位为1,表示这是一个连接请求.seq 用于服务端返回确认信息,此时ack 无用 此时发送成功后本地主机请求状态为SYN_SENT 第二次握手: 此时服务器接收到本地主机发送的TCP请求,返回本地主机的数据包如上图. 标志位标记了 syn 和 ack 表示 该数据包:1 应答本地主机的请求,2.向本地主机发起TCP连接请求 seq 用于本地主机返回确认信息.此时ack的值为

【转】Wireshark基本介绍和学习TCP三次握手

http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html

wireshark抓包图解 TCP三次握手/四次挥手详解

wireshark抓到的包与对应的协议层如下图所示: 1. Frame:   物理层的数据帧概况 2. Ethernet II: 数据链路层以太网帧头部信息 3. Internet Protocol Version 4: 互联网层IP包头部信息 4. Transmission Control Protocol:  传输层的数据段头部信息,此处是TCP 5. Hypertext Transfer Protocol:  应用层的信息,此处是HTTP协议 1. 源端口号:数据发起者的端口号,16bit

WireShark简单使用以及TCP三次握手

最近一直在用C#编写服务器端的程序,苦于一直找不到合适的方法来测试网络程序,这篇文章很好的解释了网络程序的底层实现. WireShark是最好的学习网络协议最好的工具. wireshark介绍 wireshark不能做的 wireshark VS Fiddler 同类的其他工具 什么人会用到wireshark wireshark 开始抓包 wireshark 窗口介绍 wireshark 显示过滤 保存过滤 过滤表达式 封包列表(Packet List Pane) 封包详细信息 (Packet

wireshark抓包直观图解 TCP三次握手/四次挥手详解

转http://www.seanyxie.com/category/linux/ 作者:seanyxie | 一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡.它们一起处理与电缆(或其他任何传输媒介)的物理接口细节. 2. 网络层,也称作互联网层,处理分组在网络中的活动,例如分组的选路.网络层协议包括IP协议(网际协议

抓包工具-Wireshark(详细介绍与TCP三次握手数据分析)

功能使用的详细介绍 wireshark(官方下载网站: http://www.wireshark.org/),是用来获取网络数据封包,可以截取各种网络封包,显示网络封包的详细信息,包括http,TCP,UDP,等网络协议包.注:wireshark只能查看封包,而不能修改封包的内容,或者发送封包. 一.开始界面 开始界面,如图1所示: 图1(wireshark开始界面) 点击Caputre->Interfaces,出现图2所示对话框,选择需要捕获网络包的网卡,点击start按钮开始抓包. 注:如果