HTTP协议请求分析OSI七层网络 TCP/IP协议
http协议
HTTP协议,即超文本传输协议(Hypertext transfer protocol)
当你输入一个URL的时候,你就会去这个URL域名对于的这条服务器上面下载一个页面
当我们打开一个浏览器访问网站的时候如百度:https://www.baidu.com
浏览器在帮你,去对应的连接上面下载一个文本(index.html)
URL
什么是URL:
# 统一资源定位符(唯一标识符,该标识符可通过Unicode编码转换) 协议 + 主机 + 端口 + 文件路径
https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3
https://www.baidu.com/s? 百度网址
wd=%E7%BE%8E%E5%A5%B3 需要查找的内容
URL的组成
协议+主机+端口+文件路径
http://www.biadu.com:90/epel/1.txt
http:// www.biadu.com: 90 /epe/1.txt
协议: 主机 端口 服务站点下的,目录和文件
HTTP工作原理
当在浏览器中输入一个http://www.123.com/index.html
1.先分析url中的域名是谁 : www.driverzeng.com
2.请求DNS服务器做解析 : 10.0.0.41
- 检查localDNS
- 检查13个根域
- 递归查询
- 迭代查询
3.DNS把10.0.0.41 返回给浏览器
4.跟 10.0.0.41的80端口建立连接(建立TCP连接)
5.你好,我用的GET方法,你把index.html给我
6.10.0.0.41 把页面返回给浏览器
7.断开TCP连接
8.浏览器就能显示页面了
http请求页面分析
1.请求头:浏览器向服务器发送请求的内容
2.响应头:服务器向浏览器响应返回请求的内容
3.主体:内容(如请求的是一张图片,那么主体表示的就是一张图片)
页面分析(火狐浏览器)
# General(基本信息)
请求的URL
Request URL: https://123p2.sogoucdn.com/imgu/2020/05/20200511143510_190.jpg
请求的方法
Request Method: GET
状态码
Status Code: 200 OK
远程连接的地址:端口
Remote Address: 112.13.114.218:443
推荐人的政策
Referrer Policy: unsafe-url(不安全的URL)
# 请求头部
## 请求的资源类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/\*=0.8,application/signed-exchange;v=b3
## 资源类型压缩
Accept-Encoding: gzip, deflate
## 资源类型的语言
Accept-Language: zh-CN,zh;q=0.9
## 缓存控制:服务端没有开启缓存
Cache-Control: no-cache
## 长连接
Connection: keep-alive
## 访问的主机:www.biadu.com
Host: www.biadu.com
## 项目缓存:没有开启
Pragma: no-cache
## 客户端优先加密
Upgrade-Insecure-Requests: 1
## 用户访问网站的客户端工具
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36
# 响应头部
# 建立长连接
Connection: keep-alive
# 解析方式和字符集
Content-Type: text/html;charset=utf-8
# 日期
Date: Wed, 13 May 2020 02:29:35 GMT
#该网站服务器,使用的软件和版本号
server:Nginx/1.14.1
# 状态码
status: 200
HTTP请求方法
方法(Method) | 含义 |
---|---|
GET | 请求读取一个Web页面(使用浏览器下载的一个文本文件也就是一个页面) |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改 |
DELETE | 删除Web页面 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
OPTION | 允许客户端查看服务器的性能 |
HTTP响应方法
用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。所有状态码的第一个数字代表了响应的五种状态之一。所示的消息短语是典型的,但是可以提供任何可读取的替代方案。 除非另有说明,状态码是HTTP / 1.1标准(RFC 7231)的一部分。
我们在使用浏览器打开网站的时候,如该连接未有登入过或者清理缓存,相对较慢。如该连接已登入过未有清除缓存的,那么登入的速度会相对比较快些
Referer
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
.com | 商业机构,任何人都可以注册 |
---|---|
.edu | 教育机构 |
.gov | 政府部门 |
.int | 国家组织 |
.mil | 美国军事部门 |
.net | 网络组织,例如因特网服务商和维修商,现在任何人都可以注册 |
.org | 非盈利组织,任何人都可以注册 |
.biz | 商业 |
.info | 网络信息服务组织 |
.pro | 用于会计、律师和医生 |
.name | 用于个人 |
.muserm | 用于博物馆 |
.coop | 用于商业综合体 |
.arero | 用于航空工业 |
.xxx | 用于成人,色情网站 |
.idv | 用于个人 |
详细的http原理
用输入域名 - > 浏览器跳转 - > 浏览器缓存 - > Hosts文件 - > DNS解析(递归查询|迭代查询)
1.用输入域名
客户端向服务端发起查询 - > 递归查询
服务端向服务端发起查询 - > 迭代查询
2.由浏览器向服务器发起TCP连接(三次握手)
客户端 -->请求包连接 -syn=1 seq=x 服务端
服务端 -->响应客户端syn=1 ack=x+1 seq=y 客户端
客户端 -->建立连接 ack=y+1 seq=x+1 服务端
3.客户端发起http请求:
1)请求的方法是什么: GET获取
2)请求的Host主机是: blog.driverzeng.com
3)请求的资源是什么: /index.html
4)请求的端端口是什么: 默认http是80 https是443
5)请求携带的参数是什么: 属性(请求类型、压缩、认证、浏览器信息、等等)
6)请求最后的空行
4.服务端响应的内容是
1)服务端响应使用WEB服务软件
2)服务端响应请求文件类型
3)服务端响应请求的文件是否进行压缩
4)服务端响应请求的主机是否进行长连接
5.客户端向服务端发起TCP断开(四次挥手)
客户端 --> 断开请求 fin=1 seq=x --> 服务端
服务端 --> 响应断开 fin=1 ack=x+1 seq=y --> 客户端
服务端 --> 断开连接 fin=1 ack=x+1 seq=z --> 客户端
客户端 --> 确认断开 fin=1 ack=x+1 seq=sj --> 服务端
网络协议
OSI七层模型
OSI七层协议
ip+mac可以标识全世界范围内独一无二的一台计算机的位置
port可以标识一台计算机之上唯一的一个基于网络通信的应用软件
ip+mac+port:可以标识全世界范围内独一无二的一个应用软件(基于网络通信)
物理层
物理层主要是一些硬件,为计算机的最基础层
数据链路层
以太网协议
ethernet规定:
1.必须要有一块网卡,每块网卡的每个RJ45接口都需要有一个全世界独一无二的MAC地址
#什么是MAC地址
没一块网卡的每个RJ45口在一出厂的时候就会有一个MAC地址,也就是每个网卡的身份证号码
#作用
局域网络通信:在一个空间内的网络,如一个学校的每个班级,每个班级的网段不同,一个班级就是一个局域网络。
2.一组电信号构成一组数据包,叫做‘帧’,
#数据包
我们在上网的时候请求或者下载东西,都是通过网络来传输的。
#电信号
我们在使用电的时候会产生+ -级,也就是0和1
#所有我们的数据都是通过0和1的二进制进行传输的,(一组数据包就是由0和1组成的)一组数据包叫做帧
3.每一个数据帧,被分为报头(网络中交换和传输数据的帧源),请求头又可以叫做请求报文
报头:head 数据:data
#head包含:固定的18个字节
发送者/原来地址:6个字节
接受者/目标地址:6个字节
数据类型:6个字节
#data包含:(最短46字节,最长1500个字节)
数据包的具体字节
head+data=最短64个字节,最长1518字节
计算机通信,基本靠吼
广播:广播风暴是一种故障
网络层
为了解决广播风暴,形成一个局域网络。把所有的计算机通过一个局域网隔绝开来
IP
是由四段十进制的数字组成,每一段的范围是0-255,点分十进制
如:192.168.1.12,以点来区分开来10进制
子网掩码
一般常见的是:255.255.255.0
IP和子网掩码可以计算出来IP的概念
计算方式
#IP:192.168.1.12 netmask:255.255.255.0
ipaddress:11000000.10101000.00000001.00001100
netmask: 11111111.11111111.11111111.00000000
计算结果: 11000000.10101000.00000001.00000000
#网段:192.168.1.0
#注意:如果只有IP提供没有子网掩码提供是无法计算出来IP的
AND运算
AND在编程术语中表示一种运算方法,不可逆
常用符号:&(按位与),&&(逻辑与)
其运算规则如下:
1&1=1; 真&&真=真;
1&0=0; 真&&假=假;
0&1=0; 假&&真=假;
0&0=0; 假&&假=假;
即与0则0,常用此特性来将某些位置0或保存某些位。
如汇编语句:AND EAX,80000007,其位31、2、1、0不变,其余位置0。
ip数据包
ip数据包也分为head和data部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分
head:长度为20到60字节
data:最长为65,515字节。
而以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。
下图是一个传输的过程
# ARP协议(Address Resolution Protocol)
arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到
通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议
arp协议功能:广播的方式发送数据包,获取目标主机的mac地址
#IP是需要和MAC地址绑定在一起的
# ARP协议(Address Resolution Protocol)
arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到
通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议
arp协议功能:广播的方式发送数据包,获取目标主机的mac地址
#IP是需要和MAC地址绑定在一起的
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
TCP/IP协议
客户端和服务器建立连接的过程(3次握手)
1.客户端向服务端发送syn
2.服务端收到后返回ACK(客户端建立连接)但是服务端不确定客户端是否收到,所有向服务端发送一个syn向客户端确认是否有收到了吗?
3.客户端确认收到后给服务端确认返回了ACK(服务端建立连接)
建立连接完成后开始数据传输(数据传输的过程)
4次挥手
1.客户端向服务端发送断开连接fin
2.服务端收到后返回ACK
3.服务端同时发送一个是否要端口连接
4.客户端给服务端确认返回了ACK
服务端和客户端就开始断开连接
TCP协议的11种状态
三次握手中:
1.SYN_SENT
2.LISTEN
3.SYN_REVD(syn洪水攻击)****半连接池
4.ESTABLISHED
四次挥手中:
1.FIN_WAIT_1
2.CLOSE_WAIT
3.FIN_WAIT_2
4.LAST_ACK
5.TIME_WAIT(TIME_WAIT多,证明服务器上有大并发)
关闭状态:
1.CLOSED(被动关闭端在接收到ack包后,进入CLOSED状态关闭TCP连接)
2.CLOSING(客户端和服务端同时发起断开连接)
总结
在浏览器中输入一个域名
1.浏览器找DNS(递归查询,迭代查询,本地LOCKDNS)最终需要给浏览器返回一个IP
2.我们用的是HTTP协议端口:80
3.浏览器会通过‘IP+端口’就可以确定我们需要找的主机
4.浏览器就会吼一下我需要找这台机器
5.报头就会传输数据,就会报这个数据拆开确认是哪台机器,确认机器吼返回MAC地址
6.带着IP+端口+MAC建立tcp连接
7.客户端给服务器发送一个syn
7.1.客户端向服务端发送syn
7.2.服务端收到后返回ACK(客户端建立连接)但是服务端不确定客户端是否收到,所有向服务端
送一个syn向客户端确认是否有收到了吗?
7.3.客户端确认收到后给服务端确认返回了ACK(服务端建立连接)