网络抓包与协议学习
网络抓包与协议学习
HTTP协议
HTTP 特性:
- HTTP 是无连接无状态的HTTP 一般构建于 TCP/IP 协议之上,默认端口号是 80
- HTTP 可以分为两个部分,即请求和响应。
HTTP 请求:
- HTTP 定义了在与服务器交互的不同方式,最常用的方法有 4 种,分别是 GET,POST,PUT, DELETE。URL 全称为资源描述符,可以这么认为:一个 URL 地址,对应着一个网络上的资源,而 HTTP 中的 GET,POST,PUT,DELETE 就对应着对这个资源的查询,修改,增添,删除4个操作。
- HTTP 请求由 3 个部分构成,分别是:状态行,请求头(Request Header),请求正文。
GET 请求报文实例:
- 状态行由请求方式,路径、协议等构成,各元素之间以空格分隔。对应到图中即为 GET、/books/?sex=man&name=Professional、 HTTP/1.1
- 请求头提供一些参数比如:Cookie,用户代理信息,主机名等等。(图中即从第二行到最后一行)
- 请求正文就放一些发送的数据,一般 GET 请求会将参数放在 URL 中,也就是在请求头中而请求正文一般为空,而 POST 请求将参数放在请求正文中。请求正文可以传一些 json 数据或者字符串等等。
- GET 一般用于信息获取,比如刚才我们浏览百度首页,其使用的就是GET方法。
- GET 请求一般不会产生副作用,它仅仅只是获取资源信息,就像数据库查询一样,不会修改、增加数据,不会影响资源的状态,并且对同一个 URL 的多次GET请求应该返回相同的结果。
而 POST 请求表示可能会修改服务器上的资源。
GET 请求和 POST 请求的区别:
(1)GET 和 POST 请求参数位置不同,从上面两个请求报文可以看出,GET 请求对应的参数放在 URL 中,而 POST 请求对应的参数放在 HTTP 请求主体中。(但是这只是一种约定,GET 请求中出现 Body 也是被允许的)
(2)虽然 HTTP 协议的 RFC规范 并没有详细规定 URL 的最大字符长度限制,但实际上,在浏览器或者服务器中总会存在限制的,这就导致了 GET 请求中参数数量是有限的。
(3) 处于安全考虑,在一些涉及安全的请求比如:登录请求需要用 POST 提交表单,而GET 请求一般用来获取静态资源。
(4)GET 请求可以被缓存,可以被收藏为书签,但 POST 可以被缓存,但不能被收藏为书签。
(5)GET 请求的参数在 URL 中,因此绝不能用 GET 请求传输敏感数据。POST 请求数据则写在 HTTP 的请求头中,安全性略高于 GET 请求。
HTTP 响应:
HTTP 响应是服务器在客户端发送 HTTP 请求后经过一些处理而做出的响应,HTTP 响应和 HTTP 请求相似,也是由三个部分构成。分别是:状态行,响应头(Response Header),响应正文。
下面是一个 HTTP 响应的例子:
HTTP 响应中包含一个状态码,用来表示服务器对客户端响应的结果。
状态码一般由3位构成:
比如常见的状态码:
知道了 HTTP 请求和响应后,一个完整的流程一般是这样的:
通常,由 HTTP 客户端发起一个请求,建立一个到服务器指定端口(默认是 80 端口)的 TCP 连接。HTTP 服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。
TCP协议
TCP是一种面向连接(连接导向)的、可靠的基于字节流的传输层通信协议。TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据。
TCP的特点有:
-
TCP是面向连接的运输层协议
-
每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
-
TCP提供可靠交付的服务
-
TCP提供全双工通信。数据在两个方向上独立的进行传输。因此,连接的每一端必须保持每个方-向上的传输数据序号。
-
面向字节流。面向字节流的含义:虽然应用程序和TCP交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅是一连串的无结构的字节流。
TCP帧格式:
TCP的三次握手:
wireshark抓包实验
1.打开wireshark软件界面选择自己的网络
在上方输入框中便输入需要筛选的条见,输入http便可以发现展示的都是http协议相关的了
先在浏览器打开这个网址,打开命令提示符,通过ping指令查看一个目标网址的IP地址(ping www.bilibili.com
)来查看目标IP地址。
在显示过滤器中填入过滤条件:tcp and ip.addr== 118.112.227.129
,过滤结果如下:
可以看到了TCP 的三次握手
在这里我们便可以看到相关的数据例如源端口号以及目的端口号等等。第一次握手数据包:客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接,第二次握手的数据包:服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1,第二条。
总结
通过学习HTTP以及TCP协议对网络通信协议有一个基础的了解,通过wireshark实现让我们更加清晰的看到了自己电脑网络连接的底层操作,看到了这几次握手挥手是如何发生在电脑中的。
学习参考:
https://blog.csdn.net/fortune_cookie/article/details/89632006
https://zhuanlan.zhihu.com/p/24913080
https://blog.csdn.net/weixin_46129506/article/details/121048294