使用WireShark抓包分析TCP_IP协议

这篇具有很好参考价值的文章主要介绍了使用WireShark抓包分析TCP_IP协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

TCP/IP 协议 是一组用于互联网通信的协议。它由两个主要协议组成:传输控制协议(TCP)和互联网协议(IP)。TCP/IP协议是互联网上最常用的协议之一,它使得不同类型的计算机和网络设备能够相互通信。

  • TCP负责将数据分割成数据包,并确保它们在网络上的传输。
  • IP负责将数据包从源地址路由到目标地址。

计算机网络(谢希仁编著)这本书中,详细介绍了TCP/IP网络传输涉及的分层,及各个比特的含义。在这篇文章中,我们将使用Wireshark 抓包分析 TCP/IP 协议,用实践来验证理论。

  • Wireshark是一个网络协议分析器,可以帮助你抓取和分析网络数据包,它是一个开源软件,可以在多个操作系统上
    运行。
  • Wireshark 最新版下载地址:https://www.wireshark.org。

一、TCP/IP协议

1.1 OSI分层

OSI 是 OSI/RM(Open Systems Interconnecation Reference Model)开放互联基本参考模型的简称,由 ISO 于 1983 年制定,形成正式文件。

OSI 分层是一种网络架构模型,它将网络通信分为七个不同的层次。每个层次都有自己的功能和任务。下面是由上到下每个层次的简要介绍:

序号 层级 名称
1 应用层 负责提供各种应用程序,例如电子邮件、文件传输和远程登录等。
2 表示层 负责将数据转换为应用程序可以理解的格式,它定义了如何在不同的系统之间交换数据。
3 会话层 负责建立、管理和终止会话,它定义了如何在两个节点之间建立连接。
4 传输层 负责将数据分割成数据包,并确保它们在网络上的传输。它还提供了可靠的端到端传输服务。
5 网络层 负责将数据包从源地址路由到目标地址,它定义了如何在不同的网络之间传输数据包。
6 数据链路层 负责将数据包从一个节点传输到另一个节点,它定义了如何在物理介质上传输数据包。
7 物理层 负责将数据从一个节点传输到另一个节点,它定义了电气、光学和机械接口的规范。

使用WireShark抓包分析TCP_IP协议

虽然标准已经制定了,但是由于一些缺陷,现今规模最大的、覆盖全世界的因特网并未使用 OSI 标准,而是使用 TCP/IP 标准。

1.2 TCP/IP 分层

相比OSI 7层模型,TCP/IP协议只有4层,它将部分层进行了合并。

使用WireShark抓包分析TCP_IP协议

通常讲的TCP/IP协议是指TCP/IP协议簇,按照分层可以分为以下部分

层级 协议名称
应用层 HTTP、FTP、SMTP、POP3、IMAP、Telnet、SSH、DNS
传输层 TCP、UDP
网络层 IP、ICMP、ARP、RARP
网络接口层 Ethernet、Token Ring、FDDI、PPP

下面抓包使用的 WireShark 用的就是TCP/IP标准。

二、抓包

2.1 Socket代码

使用 Java 编写服务端和客户端代码, 通过调用 Socket API 实现两者通讯。

Socket 即套接字,是应用层 与 TCP/IP 协议族通信的中间软件抽象层,表现为一个封装了 TCP / IP协议簇 的编程接口(API),ServerSocket 是使用 TCP 协议,如果想使用 UDP 协议,可以使用 DatagramSocket。

WireShark 需要管理员权限启动,默认不能查看不走网卡的 loopback,需要下个 npcap。

  1. Server.java

    public class Server {
        public static void main(String[] args) throws IOException {
            ServerSocket server = new ServerSocket(10007);
            System.out.println("服务器已启动,等待客户端连接...");
            Socket socket = server.accept();
            System.out.println("客户端已连接!");
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String str = br.readLine();
            System.out.println("客户端说:" + str);
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            pw.println("欢迎您!");
            pw.flush();
            socket.close();
        }
    }
    
  2. Client.java

    public class Client {
        public static void main(String[] args) throws IOException, InterruptedException {
            Socket socket = new Socket("localhost", 10007);
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String str = br.readLine();
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            pw.println(str);
            pw.flush();
            BufferedReader br2 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String str2 = br2.readLine();
            System.out.println("服务器说:" + str2);
            socket.close();
        }
    }
    

2.2 过滤包

  1. 使用管理员权限开启 Wireshark

  2. 选择对应的网卡接口
    使用WireShark抓包分析TCP_IP协议

  3. 开启过滤

    使用WireShark抓包分析TCP_IP协议

  4. 启动Server,再启动Client,发送hello

  5. 已过滤的包

    使用WireShark抓包分析TCP_IP协议

三、分析

3.1 TCP首部

TCP 首部如下所示:

使用WireShark抓包分析TCP_IP协议

3.2 实战分析

  1. 源端口和目的端口,各占2个字节

    使用WireShark抓包分析TCP_IP协议

  2. 序号,占4个字节

    使用WireShark抓包分析TCP_IP协议

  3. 确认号,占4个字节

    使用WireShark抓包分析TCP_IP协议

  4. 数据偏移,占4位,半个字节

    使用WireShark抓包分析TCP_IP协议

  5. 保留,占6位

    使用WireShark抓包分析TCP_IP协议

  6. flag 控制位: URG/ACK/PSH/RST/SYN/FIN,占6位

    使用WireShark抓包分析TCP_IP协议

  7. 窗口,占2个字节

    使用WireShark抓包分析TCP_IP协议

  8. 检验和,占2个字节

    使用WireShark抓包分析TCP_IP协议

  9. 紧急指针,占2个字节

    使用WireShark抓包分析TCP_IP协议

  10. 选项,字节数不固定,下面是12字节

    使用WireShark抓包分析TCP_IP协议

3.3 三次握手

tcp 建立连接的最先三个包就是握手的三个包,下面会从理论结合实际抓包分析三次握手具体流程

  1. 客户端发送给服务端

    客户端在建立TCP连接时,会启用一个随机的序列号,并将其值存入相互交换的第一个报文段的TCP头部的序列号字段,后续TCP报文段的序列号字段值将依次递増

    在以下抓包过程中,可以发现 0x4cf2bfaa 就是第一个包的随机序列号,而且 wireshark 已经标注相对序号Seq为0,就是第一个包.

    而且TCP 客户端在发送时需要将 SYN 设置为1,此时客户端进入SYN-SENT 状态

    使用WireShark抓包分析TCP_IP协议

  2. 服务端发送给客户端

    服务端接到报文后,同意建立连接后向客户端发送确认报文,此报文需要将 SYN 和 ACK 都设置为1,ack 设为发送过来的 seq+1,并且为自己启用一个随机序号,在报文中,可以发现随机序号为 0x890b1b78 ,此时服务器进入到 SYN-RCVD 状态

    使用WireShark抓包分析TCP_IP协议

  3. 客户端发送给服务端

    客户端收到后还需要进行确认,再次发送报文,这次报文将 ACK 设为1,序号设为之前自身序号+1=0x4cf2bfab, 将 ack 设为服务器发送过来的序号+1=0x890b1b79,当发送过去后,进入ESTABLISHED状态,服务器接收到后也会进入ESTABLISHED状态

    使用WireShark抓包分析TCP_IP协议

以上过程可以总结如下,在上述例子中 x 实际为 0x4cf2bfaa,y 实际为 0x890b1b78

3.4 四次挥手

从书上226页可以得到的图表如下:

使用WireShark抓包分析TCP_IP协议

建立连接的服务端和客户端都可以释放连接,双方需要进行四次挥手,上面 java 代码经抓包发现是服务端先释放连接

  1. 服务端发送FIN报文

    发送FIN=1, ACK=1, seq=u(此次抓包u实际为0x91dd5af1)。

    书上记载 u是前面已发送过的数据的最后一个字节的序号加1, 这个不太明白,还有实际ACK也被置为1,是否必须?后续再研究

    使用WireShark抓包分析TCP_IP协议

  2. 客户端发送ACK=1,seq=v(此次抓包实际seq为0x6a067550),ack为u+1(此次抓包实际为0x91dd5af2)

    v是前面已发送过的数据的最后一个字节的序号加1。

    使用WireShark抓包分析TCP_IP协议

  3. 客户端接着发送FIN=1,ACK=1,seq=w(此次抓包实际为0x6a067550),ack=u+1(此次抓包实际为0x91dd5af2)

    此处的w实际抓包发现w和v一样

    使用WireShark抓包分析TCP_IP协议

  4. 服务端发送ACK=1,seq=u+1(此次抓包实际为0x91dd5af2),ack=w+1(此次抓包实际为0x6a067551 )

    使用WireShark抓包分析TCP_IP协议

上述过程可以总结如下,由于客户端和服务器都可以发送FIN包释放连接,下面图表由客户端释放连接文章来源地址https://www.toymoban.com/news/detail-483962.html

参考

  1. 计算机网络(第6版,谢希仁编著)
  2. OSI七层模型
  3. TCP 协议转让层规格
  4. TCP的三次握手和四次挥手

到了这里,关于使用WireShark抓包分析TCP_IP协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Wireshark抓包分析TCP协议:三次握手和四次挥手

    面试中我们经常会被问到TCP协议的三次握手和四次挥手的过程,为什么总喜欢问这个问题呢? 其实我们平时使用的很多协议都是应用层协议,比如HTTP协议,https协议,DNS协议,FTP协议等;而应用层协议都是要基于传输层的两个协议之上的,也就是TCP协议和UDP协议。我们在使用

    2024年01月21日
    浏览(34)
  • Wireshark抓包分析微信功能----tcp/ip选修课期末大作业

    分析相关功能所抓取的数据包和完整大作业报告(word版)均已上传至 Wireshark抓包分析微信功能----tcp/ip选修课期末大作业-网络监控文档类资源-CSDN文库 适合Wireshark入门的小伙伴们或者赶计算机网络期末大作业无从下手的uu们。 铁汁们,请放心食用!加油吧,期末人!开卷,绝

    2024年02月08日
    浏览(52)
  • 使用wireshark抓包并分析TCP四次挥手

    ①第一次挥手: (FIN+ACK) 客户端发送FIN+ACK包给服务端,用来关闭客户端到服务器的数据传送。此时客户端进入FIN_WAIT_1状态。 ②第二次挥手: (ACK) 服务端收到FIN包后, 此时有可能服务端还在与其他客户端进行交互,但会先发送ACK包。确认字符ack=X+1,此时会发送一个新的序

    2024年02月12日
    浏览(37)
  • 基于Wireshark的ARP协议分析和IP报文、ICMP报文的分析|网络数据抓包|课程设计|traceroute|ping|

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 https://blog.csdn.net/yu_cblog/category_12379430.html?spm=1001.2014.3001.5482 目录 ​编辑前言 Wireshark软

    2024年02月10日
    浏览(38)
  • 实验:Wireshark 抓包软件的使用及MAC协议分析

    1、理解抓包软件的工作原理; 2、掌握Wireshark软件的安装和使用方法。 3、掌握MAC协议分析的技术与方法 1、安装和运行Wireshark软件; 2、使用Wireshark软件抓取网络报文; 3、选取两个以上的以太网报文进行深入对比分析。 硬件:连接互联网的PC机; 软件:Wireshark 3.6.2。 1、安

    2024年02月01日
    浏览(30)
  • Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理

    作为一款高效免费的抓包工具,wireshark可以捕获并描述网络数据包,其最大的优势就是免费、开源以及多平台支持,在GNU通用公共许可证的保障范围下,用户可以免费获取软件和代码,并拥有对其源码修改和定制的权利,如今其已是全球最广泛的网络数据包分析软件之一。接

    2023年04月08日
    浏览(42)
  • TCP/UDP协议抓包-工具wireshark与tcp侦听工具

    目录 一、工具下载链接 二、实验 链接:https://pan.baidu.com/s/1nvNdCyET-8JFn_wQXuH2sw?pwd=abcd  提取码:abcd  --来自百度网盘超级会员V1的分享 物理机与虚拟机都需要下载tcp侦听工具,虚拟机还要下Wireshark。 1、先检测网络流通性,物理机与虚拟机双方,各ping一下对方。  物理机与虚

    2024年02月16日
    浏览(45)
  • 利用wireshark对TCP抓包分析

    抓包结果已上传可免费下载对应观看: wireshark抓包结果 我的机子192.168.1.131简称A与服务端机子223.166.138.30简称B先三次握手建立TCP连接,再进行HTTP请求,最后四次挥手断开TCP连接 1.三次握手: A先给B发出一个SYN包请求建立连接 B给A发回一个ACK SYN包针对上一个SYN请求且发出请求

    2024年02月09日
    浏览(37)
  • Linux tcp/ip 网路协议栈学习-00 前言

    Linux tcp/ip 网路协议栈学习-00 前言 目录 Linux  tcp/ip 网路协议栈学习-00 前言 (1)预备知识  (2)前置知识 (3)学习目标 (4)总结     (1)预备知识  好工具事半功倍,做任何事情都需要有方法和工具,同样,阅读 Linux 内核源码也是如此。由于当前内核源码非常庞大,学习上,不能一

    2024年04月26日
    浏览(33)
  • Wireshark抓包分析ICMP协议

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 分析目的:分析ICMP协议的数据格式、报文类型及作用。 操作系统:Windows

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包