1.从一段抓包程序说起
什么是抓包
平时我们会或多或少的听到过抓包这个词,某某说看看包有没有丢,那么到底什么是抓包呢?
抓包是由两个字组成的,抓(动词) + 包(名词)。英文名 packet capture,捕获包。包也常常称作数据包,看一下百度百科中给出的定义。
抓包就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作。也用来检查网络安全,抓包也常常用来进行数据截取等。
包的说法可能还是有些形象化为了容易理解,具体来说数据在网络上以更小的被称为帧(Frame)的单位传输的,帧由几部分组成,不同的部分执行不同的功能。帧再经由网络驱动的程序进行成型,然后通过网卡发送到网线上,通过网线来到达目标机器,具体细节后续会再描述。
为什么需要抓包
为什么需要抓包呢,见的比较多的场景就是处理前后端的bug之争,比如前端调后端提供的接口,后端给前端返回的数据没问题,那是显示的问题还是后端处理的问题。这时就可以通过抓包来看看数据到底是哪部分的问题。
抓包的工具有哪些
目前市面上抓包工具很多,可以参考这篇文章,常见的网络抓包工具推荐,我选择的是wireshark,tcpdump,以及浏览器自带的“开发者工具”。
看一段简单的抓包程序
利用抓包工具wireshark来抓一次调用百度的网络过程。
先设定抓取条件
通过命令行发送一次请求 curl www.baidu.com
观察拦截效果
查看本地ip
可以看出已经正常抓取到了本次的请求的数据包了。
2.抓包信息中展示的都是什么内容
- Hypertext Transfer Protocol 应用层HTTP协议的信息,具体结构如下
- Transmission Control Protocol 传输层TCP协议的信息,具体结构如下
- Internet Protocol Version 4 网络层IP协议信息,具体结构如下
- Ethernet II 网络接口层 以太网头部帧信息,具体结构如下
- TCP三次握手
- 帧信息
3.在真实场景发送一次网络请求后,会触发哪些动作
当我们平时发送一次网络请求,计算机内部会触发哪些动作呢?
以下为大白话描述这部分动作
- 首先我电脑打开了一个浏览器,输入一个网址如 www.baidu.com
- 浏览器需要根据这个域名找对应的IP地址,这里会用到DNS协议
- 浏览器知道目标地址之后,会打包请求,这里是HTTP协议
- 像以上的DNS协议、HTTP协议所在的层叫做应用层
- 浏览器将打包好的数据传输到下一层传输层
- 传输层有两种协议,一种是面向连接的TCP,还有一种无连接的UDP,我们这里是TCP协议
- 传输层打包好数据以后,要继续传输给下一层网络层,这层常用的IP协议
- 网络层打包好数据以后要传输到MAC层,增加以太网头部等信息,打包之后会通过网卡将数据包发送过去
- 中间会经历一些网关啊,各种协议啊,到达了目标服务器
- 目标服务器会反向执行一遍,进行一层层的拆包
- 最后根据请求再处理将数据包返回
- 浏览器就会打开一个请求后的页面
4.网络分层的真实含义
从上面大概可以看出,主要将网络分成了四层
- 应用层
- 传输层
- 网络层
- MAC层
对于复杂的设计来讲,一般都要分层设计,让各层独立,灵活性也会更好。
5.结语
本篇以一次抓包过程总体性的展现网络的分层和一些常见的协议,希望以此篇先建立一个初步的印象。
参考
《TCP/IP网络编程》尹圣雨
《趣谈网络协议》 刘超
《深入理解TCP协议:从原理到实战》 挖坑的张师傅