探秘网络包捕获与分层解析

235 阅读4分钟

1.从一段抓包程序说起

什么是抓包

平时我们会或多或少的听到过抓包这个词,某某说看看包有没有丢,那么到底什么是抓包呢?

抓包是由两个字组成的,抓(动词) + 包(名词)。英文名 packet capture,捕获包。包也常常称作数据包,看一下百度百科中给出的定义。

抓包就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作。也用来检查网络安全,抓包也常常用来进行数据截取等。

包的说法可能还是有些形象化为了容易理解,具体来说数据在网络上以更小的被称为帧(Frame)的单位传输的,帧由几部分组成,不同的部分执行不同的功能。帧再经由网络驱动的程序进行成型,然后通过网卡发送到网线上,通过网线来到达目标机器,具体细节后续会再描述。

为什么需要抓包

为什么需要抓包呢,见的比较多的场景就是处理前后端的bug之争,比如前端调后端提供的接口,后端给前端返回的数据没问题,那是显示的问题还是后端处理的问题。这时就可以通过抓包来看看数据到底是哪部分的问题。

抓包的工具有哪些

目前市面上抓包工具很多,可以参考这篇文章常见的网络抓包工具推荐,我选择的是wireshark,tcpdump,以及浏览器自带的“开发者工具”。

看一段简单的抓包程序

利用抓包工具wireshark来抓一次调用百度的网络过程。

先设定抓取条件

image.png

通过命令行发送一次请求 curl www.baidu.com

观察拦截效果

image.png

查看本地ip image.png

可以看出已经正常抓取到了本次的请求的数据包了。

2.抓包信息中展示的都是什么内容

  • Hypertext Transfer Protocol 应用层HTTP协议的信息,具体结构如下

image.png

  • Transmission Control Protocol 传输层TCP协议的信息,具体结构如下

image.png

  • Internet Protocol Version 4 网络层IP协议信息,具体结构如下

image.png

  • Ethernet II 网络接口层 以太网头部帧信息,具体结构如下

image.png

  • TCP三次握手

image.png

  • 帧信息

image.png

3.在真实场景发送一次网络请求后,会触发哪些动作

当我们平时发送一次网络请求,计算机内部会触发哪些动作呢?

以下为大白话描述这部分动作

  • 首先我电脑打开了一个浏览器,输入一个网址如 www.baidu.com
  • 浏览器需要根据这个域名找对应的IP地址,这里会用到DNS协议
  • 浏览器知道目标地址之后,会打包请求,这里是HTTP协议
  • 像以上的DNS协议、HTTP协议所在的层叫做应用层
  • 浏览器将打包好的数据传输到下一层传输层
  • 传输层有两种协议,一种是面向连接的TCP,还有一种无连接的UDP,我们这里是TCP协议
  • 传输层打包好数据以后,要继续传输给下一层网络层,这层常用的IP协议
  • 网络层打包好数据以后要传输到MAC层,增加以太网头部等信息,打包之后会通过网卡将数据包发送过去
  • 中间会经历一些网关啊,各种协议啊,到达了目标服务器
  • 目标服务器会反向执行一遍,进行一层层的拆包
  • 最后根据请求再处理将数据包返回
  • 浏览器就会打开一个请求后的页面

4.网络分层的真实含义

从上面大概可以看出,主要将网络分成了四层

  • 应用层
  • 传输层
  • 网络层
  • MAC层

对于复杂的设计来讲,一般都要分层设计,让各层独立,灵活性也会更好。

5.结语

本篇以一次抓包过程总体性的展现网络的分层和一些常见的协议,希望以此篇先建立一个初步的印象。

参考

《TCP/IP网络编程》尹圣雨

《趣谈网络协议》 刘超

《深入理解TCP协议:从原理到实战》 挖坑的张师傅