应用层

应用层

Thu Oct 03 2024
zzcoe
12 分钟
计网
未分配标签
3318 字

Http#

请求报文#

HTTP 报文是面向文本的,报文中的每一个字段都是一些 ASCII 码串,每个字段的长度是不确定的。

HTTP 报文传过来的都是一堆的 0 x ASCII 码,例如” 41 63 63 65 70 74”这段十六进制 ASCII 码串对应的是“accept” 单词。 Pasted image 20240930181106|752

请求行由 请求方法字段URL 字段HTTP 协议版本 字段 3 个字段组成,它们用空格分隔

请求方法#

HTTP 协议的请求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。GET 和 POST 是最常用的请求方法。

  1. GET:向指定的资源发出“显示”请求。使用 GET 方法应该只用在读取数据,最好不要对服务器数据产生影响,防止受爬虫影响数据,并且最好不要请求敏感信息,会存储在 URL 中被浏览器记录。
  2. HEAD:与 GET 方法一样,都是向服务器发出指定资源的请求。但是不返回具体的信息,可以用来快速检查资源状态或缓存时候有效
  3. POST:向指定资源 提交数据,请求服务器进行处理(例如提交表单或者上传文件,评论等等)。数据被包含在请求数据中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
  4. PUT:向指定资源位置上传其最新内容。
  5. DELETE 请求服务器删除 Request-URI 所标识的资源。
  6. TRACE 回显服务器收到的请求,主要用于测试或诊断。
  7. OPTIONS 这个方法可使服务器传回该资源所支持的所有 HTTP 请求方法。用 * 来代替资源名称,向 Web 服务器发送 OPTIONS 请求,可以测试服务器功能是否正常运作。
  8. CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于 SSL 加密服务器的链接(经由非加密的 HTTP 代理服务器)。

URL#

超文本传输协议(HTTP)的统一资源定位符,

  • 传送协议:如 http,https 等等
  • 域名:有时也会是 IP 地址
  • 端口号:(以数字方式表示,若为 HTTP 的默认值“: 80”可省略)
  • 路径:以“/”字符区别路径中的每一个目录名称
  • 查询:“?”字符为起点,每个参数以“&”隔开,
  • 片段:以“#”字符为起点

http://www.luffycity.com:80/news/index.html?id=250&page=1 为例, 其中:

http,是协议;
www.luffycity.com,是服务器;
80,是服务器上的默认网络端口号,默认不显示;
/news/index.html,是路径(URI:直接定位到对应的资源);
?id=250&page=1,是查询。

版本协议#

HTTP 1.0 和 HTTP 1.1 的主要区别#

  1. 长连接 : 在 HTTP/1.0 中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接(TCP)。HTTP 1.1 起,默认使用长连接 ,默认开启Connection: keep-alive。 HTTP/1.1 的持续连接有非流水线方式和流水线方式。
    1. 流水线方式 是客户在收到 HTTP 的响应报文之前就能接着发送新的请求报文。效率更高
    2. 非流水线方式是客户在收到前一个响应后才能发送下一个请求。
  2. 带宽优化及网络连接的使用 : HTTP 1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且 不支持断点续传功能HTTP 1.1 则在请求头引入了 range 头域,它 允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于 充分利用带宽和连接
  3. Host 域区分一台主机多台虚拟机,在 HTTP 1.0 中认为每台服务器都绑定一个唯一的 IP 地址,因此,请求消息中的 URL 并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个 IP 地址。HTTP 1.1 的请求消息和响应消息都应支持 Host 头域,且请求消息中如果没有 Host 头域会报告一个错误(400 Bad Request)。HTTP 1.0 是没有 host 域的,HTTP 1.1 才支持这个参数。
  4. 错误状态响应码 : 在 HTTP 1.1 中新增了 24 个错误状态响应码,
  5. 缓存处理 : 在 HTTP 1.0 中主要使用 header 里的 If-Modified-Since, Expires 来做为缓存判断的标准,HTTP 1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

HTTP 2.0 的优化#

  1. 新的二进制格式:HTTP 1. X 的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认 0 和 1 的组合。基于这种考虑 HTTP 2.0 的协议解析决定采用二进制格式,实现方便且健壮。
  2. 多路复用在同一个 TCP 连接中,同一时刻可以发送多个请求和响应, 下一次的请求不需要等待上一个响应来之后再发送。但响应的顺序是不变的,FIFO(先进先出)
    1. 2.0 之前是同一个连接只能用一次,如果开启了 keep-alive,虽然可以用多次,但是同一时刻只能有一个 HTTP 请求。
    2. HTTP 2.0 的多路复用主要是指:因为 http 2.0 的传输是基于二进制帧的。每一个 TCP 连接中承载了多个双向流通的流,每一个流都有一个独一无二的标识和优先级,而流就是由二进制帧组成的。二进制帧的头部信息会标识自己属于哪一个流,所以这些帧是可以交错传输,然后在接收端通过帧头的信息组装成完整的数据。这样就解决了线头阻塞的问题,同时也提高了网络速度的利用率。
    3. 如果是单路那就和 http 1.1 的流水线模式很像了,但是流水线可能会造成阻塞,比如某个请求很耗时等等。
  3. header 压缩减少头部信息,提高传输速率。HTTP 1. X 的 header 带有大量信息,而且每次都要重复发送,HTTP 2.0 使用 HPACK 算法对 header 的数据进行压缩,避免了重复 header 的传输,又减小了需要传输数据的大小,基本原理 是客户端和服务端分别缓存一份索引表,如果头部存在于索引表,则用对应的索引值;否则进行霍夫曼编码,并加入索引表。参考
  4. 服务器推送,当我们对支持 HTTP 2.0 的 web server 请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。

响应报文#

HTTP 响应报文由状态行(status line)、响应头部(headers)、空行(blank line)和响应数据(也叫响应体或响应正文)(response body)4 个部分组成。 Pasted image 20240930183949|664

状态行#

状态行由 3 部分组成,分别为:协议版本、状态码、状态码描述。其中协议版本与请求报文一致,状态码描述是对状态码的简单描述。

状态码#

重点 Pasted image 20240930184117

HTTP 的缺点#

在正式介绍 HTTPS 前我们先来看看 HTTP 协议当前存在的三大缺点:

  1. 机密性问题:通信使用了明文,第三方可以拦截并获悉通信内容;
  2. 完整性问题不验证报文的完整性,第三方可以篡改通信内容;
  3. 认证问题不验证对方的身份,第三方可以冒充他人身份参与通信。 Pasted image 20240930180921

Https#

DNS 协议#

通过域名找到相应 IP 地址协议

DNS 系统#

  1. 一个组织的系统管理机构, 维护系统内的每个主机的 IP 和主机名的对应关系
  2. 如果新计算机接入网络,将这个信息注册到数据库中
  3. 用户输入域名的时候,会自动查询 DNS 服务器,由 DNS 服务器检索数据库,得到对应的 IP 地址。

DNS 域名结构#

级别最低的域名写在左边,级别最高的域名写在右边。
域名服务主要是基于 UDP 实现的,服务器的端口号为 53 Pasted image 20240930164633

域名服务器#

分类作用
根域名服务器最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助
顶级域名服务器负责管理在该顶级域名服务器下注册的二级域名
权限域名服务器负责一个区的域名解析工作,
本地域名服务器当一个主机发出 DNS 查询请求时,这个查询请求首先发给本地域名服务器

例如 www.zzoce.com, com 是顶级域名,zzoce 是二级域名,www 就是三级域名

权限域名服务器:例如我在华为云服务注册了zzoce.com的域名,那么这个域名的权限域名服务器就是华为提供的

域名解析#

  1. 主机先向本地域名服务器进行递归查询
  2. 本地域名服务器采用迭代查询,向一个根域名服务器进行查询
  3. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的 IP 地址
  4. 本地域名服务器向顶级域名服务器进行查询
  5. 顶级域名服务器告诉本地域名服务器,下一步查询权限服务器的 IP 地址
  6. 本地域名服务器向权限服务器进行查询
  7. 权限服务器告诉本地域名服务器所查询的主机的 IP 地址
  8. 本地域名服务器最后把查询结果告诉主机

DHCP#

DHCP(动态主机配置协议,Dynamic Host Configuration Protocol)是一种网络管理协议,用于自动分配 IP 地址和其他网络配置参数,使设备能够快速、方便地连接到网络,通过 UDP 实现

DHCP 的主要功能#

  1. 自动分配 IP 地址:DHCP 服务器从预定义的 IP 地址池中分配 IP 地址给客户端设备,避免了手动配置的麻烦。
  2. 提供其他网络配置信息:除了 IP 地址,DHCP 还可以分配子网掩码、网关地址、DNS 服务器地址等网络参数
  3. IP 地址租赁:DHCP 分配的 IP 地址是有租期的,租期到期后可以续租或重新分配,确保 IP 地址的有效利用

DHCP 的工作原理#

DHCP 的工作过程通常分为四个阶段

  1. 发现(Discover):客户端发送 DHCP 发现报文,寻找可用的 DHCP 服务器。
  2. 提供(Offer):DHCP 服务器响应发现报文,提供一个可用的 IP 地址和其他配置信息。
  3. 请求(Request):客户端选择一个 DHCP 服务器,并请求使用提供的 IP 地址。
  4. 确认(Acknowledge):DHCP 服务器确认请求,并正式分配 IP 地址给客户端。

当客户端重启后只需要进行 3,4 两个步骤就好了

DHCP 的优点#

  • 简化网络管理:自动分配 IP 地址和网络配置,减少手动配置的工作量。
  • 提高网络灵活性:设备可以随时加入或离开网络,IP 地址可以动态分配和回收。
  • 减少配置错误:自动化配置减少了人为错误的可能性。

DHCP 协议广泛应用于家庭网络、企业网络和数据中心,确保设备能够快速、可靠地连接到网络。