title: 《网络协议》04. 应用层(DNS & DHCP & HTTP)
date: 2022-09-05 14:28:22
updated: 2023-11-12 06:55:52
categories: 学习记录:网络协议
excerpt: 应用层、DNS、DHCP、HTTP(URI & URL,ABNF,报文格式,请求方法,状态码,头部字段,Form 提交,同源策略)。
comments: false
tags:
top_image: /images/backimg/SunsetClimbing.png
网络协议从入门到底层原理。
为了更好地促进互联网络的研究和发展,国际标准化组织 ISO 在 1985 年制定了网络互连模型:OSI 参考模型(Open System Interconnect Reference Model)。
应用层常见的协议有:
DNS,Domain Name System,域名系统。
由于 IP 地址不方便记忆,并且不能表达组织的名称和性质,人们设计出了域名(Domain Name)(比如 baidu.com)。
但实际上,为了能够访问到具体的主机,最终还是得知道目标主机的 IP 地址。
域名申请注册:https://wanwang.aliyun.com/
为什么不直接全程用域名,不用 IP 地址?
IP 地址固定 4 个字节,域名随随便便都至少 10 几个字节,这无疑会增加路由器的负担,浪费流量。
根据级别不同,域名可以分为:
通用顶级域名(General Top-level Domain,gTLD):
.com(公司)
.net(网络机构)
.org(组织机构)
.edu(教育)
.gov(政府部门)
.int(国际组织)
......
国家及地区顶级域名(Country Code Top-level Domain,ccTLD)
.cn(中国)
.jp(日本)
.uk(英国)
......
新通用顶级域名(New Generic Top-level Domain,New gTLD)
.vip
.xyz
.top
.club
.shop
......
二级域名是指顶级域名之下的域名。
在通用顶级域名下,它一般指域名注册人的名称。例如 google、baidu、microsoft 等(例:google.com、baidu.com、microsoft.com)
在国家及地区顶级域名下,它一般指注册类别。例如 com、edu、gov、net 等(例:china.com.cn)
全球一共 13 台 IPv4 的 DNS 根域名服务器、25 台 IPv6 的 DNS 根域名服务器
Windows 下与 DNS 相关的命令。
查看 DNS 缓存记录:
ipconfig /displaydns
清空 DNS 缓存记录:
ipconfig /flushdns
解析 DNS:
nslookup <域名>
ping 会自动解析 DNS:
ping <域名>
DHCP(Dynamic Host Configuration Protocol),动态主机配置协议。
DHCP 协议基于 UDP 协议,客户端使用 68 端口,服务器使用 67 端口(双方端口都固定)。
DHCP 服务器会从 IP 地址池中,挑选一个 IP 地址 “ 出租 “ 给客户端一段时间,时间到期就回收。
平时家里上网的路由器就可以充当 DHCP 服务器。
IP 地址按照分配方式可以分为:静态 IP 地址、动态 IP 地址。
静态 IP 地址:
动态 IP 地址:
分配 IP 的四个阶段:
0.0.0.0
,目标 IP 是 255.255.255.255
,目标 MAC 是 FF:FF:FF:FF:FF:FF
)图示:
DHCP 服务器可以跨网段分配 IP 地址吗?(DHCP 服务器、客户端不在同一个网段)
自动续约:
Windows 下相关的命令。
查看 DHCP 相关的详细信息,比如租约过期时间、DHCP 服务器地址等:
ipconfig /all
释放租约:
ipconfig /release
重新申请 IP 地址、申请续约(延长租期):
ipconfig /renew
HTTP(Hyper Text Transfer Protocol),超文本传输协议。
HTML( Hyper Text Markup Language),超文本标记语言。用以编写网页
HTTP 版本:
HTTP 的标准:
由万维网协会(W3C)、互联网工程任务组(IETF)协调制定,最终发布一系列的 RFC(Request For Comments,请求意见稿)
RFC 官网:
https://www.rfc-editor.org
报文格式图示:
URN
(Universal Resource Name,统一资源名称)
URL
(Uniform Resource Locator,统一资源定位符)
URI
(Uniform Resource Identifier,统一资源标识符)
URL 给出资源位于哪里(哪台主机、哪个路径、哪个文件夹)
URl 给出具体某资源的定位路径(从资源自身出发,给出可达的路径)
# URI 语法规则:
scheme://user:[email protected]:port/path/filename?id=1#ch1
# URL 语法规则:
scheme://host.domain:port/path/filename
# 解释:
scheme 定义因特网服务的类型。最常见的类型是 http
user:pass 认证登录信息
host 定义域主机(http 的默认主机是 www)
domain 定义因特网域名,比如 baidu.com
port 定义主机上的端口号(http 的默认端口号是 80)
path 定义服务器上的路径(如果省略,则文档必须位于网站的根目录中)
filename 定义文档/资源的名称
id=1 查询字符串
ch1 片段标识
URL 属于 URI。
URL 编码:URL 中出现的一些特殊字符(比如中文、空格),需要进行 URL 编码。
在浏览器地址栏输入 URL 时,采用 UTF-8 进行编码。
URL 在线编解码:
https://tool.oschina.net/encode?type=4
比如:
编码前:https://www.baidu.com/s?wd=百度
编码后:https://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6
ABNF(Augmented BNF)
核心规则:
标记 | 解释 |
---|---|
/ |
任选一个 |
* |
0 个或多个。2 * 表示至少 2 个,3 * 6 表示 3 到 6 个 |
() |
组成一个整体 |
[] |
可选(可有可无) |
RFC 2616 4.HTTP Message(旧)
RFC 7230 3.Message Format(新)
目前有 9 种请求方法。
RFC 7231, section 4: Request methods:描述了 8 种请求方法:
GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE
RFC 5789, section 2: Patch method:描述了 PATCH 方法
GET
:POST
:HEAD
:OPTIONS
:PUT
:PATCH
:DELETE
:TRACE
:CONNECT
:状态码(Status Code)。指示 HTTP 请求完成状态。
在 RFC 2616 10.Status Code Definitions 规范中定义。
状态码可以分为 5 类:
1XX
:信息响应2XX
:成功响应3XX
:重定向4XX
:客户端错误5XX
:服务器错误常见状态码:
100 Continue
:200 OK
:302 Found
:304 Not Modified
:400 Bad Request
:401 Unauthorized
:403 Forbidden
:404 Not Found
:405 Method Not Allowed
:406 Not Acceptable
:408 Request Timeout
:500 Internal Server Error
:501 Not Implemented
:502 Bad Gateway
:503 Service Unavailable
:头部字段(Header Field)可以分为 4 种类型:
====================================================================
头字段名 说明
====================================================================
User-Agent 浏览器的身份标识字符串。
--------------------------------------------------------------------
Host 服务器域名、端口号。
--------------------------------------------------------------------
Date 发送该消息的日期和时间。
--------------------------------------------------------------------
Referer 表示浏览器访问的前一个页面,
正是那个页面上的某个链接
将浏览器带到了当前所请求的这个页面。
--------------------------------------------------------------------
Content-Type 请求体的类型
--------------------------------------------------------------------
Content-Length 请求体的长度(字节为单位)
--------------------------------------------------------------------
Accept 能够接受的响应内容类型
--------------------------------------------------------------------
Accept-Charset 能够接受的字符集
q 的值越大,优先级越高
默认为 1.0 (最大值)
--------------------------------------------------------------------
Accept-Encoding 能够接受的编码方式列表
--------------------------------------------------------------------
Accept-Language 能够接受的响应内容的自然语言列表
--------------------------------------------------------------------
Range 仅请求某个实体的一部分。
字节偏移以 0 开始
--------------------------------------------------------------------
Origin 发起一个针对跨域资源共享的请求
--------------------------------------------------------------------
Cookie 之前由服务器通过 Set-Cookie 发送的 Cookie
--------------------------------------------------------------------
Connection 该浏览器想要优先使用的连接类型
--------------------------------------------------------------------
Cache-Control 用来指定在这次请求/响应链中的所有缓存机制都必须遵守的指令
====================================================================
====================================================================
头字段名 说明
====================================================================
Date 发送该消息的日期和时间
--------------------------------------------------------------------
Last-Modified 所请求的对象的最后修改日期
--------------------------------------------------------------------
Server 服务器的名称
--------------------------------------------------------------------
Expires 指定一个时间,超过该时间则认为此响应已过期
--------------------------------------------------------------------
Content-Type 响应体的类型
--------------------------------------------------------------------
Content-Encoding 内容所使用的编码类型
--------------------------------------------------------------------
Content-Length 响应体的长度(字节为单位)
--------------------------------------------------------------------
Content-Disposition 一个可以让客户端下载文件并建议文件名的头部
--------------------------------------------------------------------
Accept-Ranges 服务器支持哪些种类的部分内容范围
--------------------------------------------------------------------
Content-Range 这条部分消息是属于完整消息的哪部分
--------------------------------------------------------------------
Access-Control-Allow-Origin 指定哪些网站可以参与到跨域资源共享
--------------------------------------------------------------------
Location 进行重定向,或者在创建了某个新资源时使用
--------------------------------------------------------------------
Set-Cookie 返回一个 Cookie 让客户端保存
--------------------------------------------------------------------
Connection 针对该连接所预期的选项
--------------------------------------------------------------------
Cache-Control 向从服务器到客户端在内的所有缓存机制告知,
它们是否可以缓存这个对象。(单位为秒)
====================================================================
常用属性:
application/x-www-form-urlencoded
(默认值)multipart/form-data
multipart/form-data
:参考 RFC 1521
浏览器有个同源策略(Same-Origin Policy)。它规定默认情况下,AJAX 请求只能发给同源的 URL。
同源是指 3 个相同:协议、域名(IP)、端口。
img、script、link、iframe、video、audio 等标签不受同源策略的约束。
CORS(Cross-Origin Resource Sharing,跨域资源共享),解决 AJAX 跨域请求的常用方法。
CORS 的实现需要客户端和服务器同时支持。
清浊易辨,邪正难辨。
——《冰鉴》(清)曾国藩