网络-应用层

应用层

基础概念

应用层常见的协议

  • 超文本传输:HTTPHTTPS
  • 文件传输:FTP
  • 电子邮件:SMTPPOP3IMAP
  • 动态主机配置:DHCP
  • 域名系统:DNS

域名(Domain Name)

由于IP地址不方便记忆,并且不能表达组织的名称和性质,人们设计出了域名(比如baidu.com),但实际上,为了能够访问到具体的主机,最终还是得知道目标主机的IP地址。域名申请注册

如果干脆全程使用域名,不用IP地址会有什么问题?
IP地址是固定4个字节,域名随随便便都至少十几个字节,这无疑会增加路由器的负担,浪费流量

根据级别不同,域名可以分为:

  • 顶级域名(Top-level Domain, 简称TLD)
  • 二级域名
  • 三级域名
  • ...
顶级域名

通用顶级域名(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

二级域名

二级域名是指顶级域名之下的域名

  • 在通用顶级域名下,它一般指域名注册人的名称,例如googlebaidumicrosoft
  • 在国家及地区的顶级域名下,它一般指注册类别的,例如comedugovnet

DNS

  • DNS 的全称是:Domain Name System,译为:域名系统
  • 利用DNS协议,可以将域名(比如baidu.com) 解析成对应的IP地址(比如 220.181.38.148)
  • DNS 可以基于UDP协议,也可以基于TCP协议,服务器占用53端口

DNS 服务器

  • 客户端会首先访问最近的一台DNS服务器(也就是客户端自己配置的DNS服务器)
  • 所有的DNS服务器都记录了DNS根域名服务器(域名最后隐藏的".") 的IP地址
  • 上级DNS服务器记录了下一级DNS服务器的IP地址
  • 全球一共13IPv4DNS根域名服务器、25IPv6DNS根域名服务器
常用命令

ipconfig /displaydns : 查看DNS缓存记录

ipconfig /flushdns :清空DNS缓存记录

ping 域名

nslookup 域名

DHCP

  • DHCP(Dynamic Host Configuration Protocol),译为:动态主机配置协议
    • DHCP协议基于UDP协议,客户端是68端口,服务器是67端口
  • DHCP服务器会从IP地址池中,挑选一个IP地址“出租”给客户端一段时间,时间到期就回收它们
    • 平时家里上网的路由器就可以充当DHCP服务器

分配IP地址的4个阶段

DISCOVER: 发现服务器,发广播包(源IP0.0.0.0,目标IP255.255.255.255,目标MACFF:FF:FF:FF:FF:FF)

OFFER:提供租约,服务器返回可以租用的IP地址,以及租用期限、子网掩码、网关、DNS等信息,注意:这里可能会有多个服务器提供租约

REQUEST:选择IP地址,客户端选择一个OFFER,发送广播包进行回应

ACKNOWLEDGE:确认,被选中的服务器发送ACK数据包给客户端,至此IP地址分配完毕

细节

DHCP服务器可以跨网段分配IP地址么?(DHCP服务器、客户端不在同一个网段)

可以借助DHCP中继代理(DHCP Relay Agent)实现跨网段分配IP地址

自动续约

客户端会在租期不足的时候,自动向DHCP服务器发送REQUEST信息申请续约

常用命令

ipconfig /all :可以看到DHCP相关的详细信息,比如租约过期时间、DHCP服务器地址等

ipconfig /release:释放租约

ipconfig /renew:重新申请IP地址、申请续约(延长租期)

HTTP

HTTP(Hyper Text Transfer Protocol),译为超文本传输协议,是互联网中应用最广泛的应用层协议之一。设计HTTP最初的目的是:提供一种发布和接收HTML页面的方法,由URI来标识具体的资源,后面用HTTP来传递的数据格式不仅仅是HTML,应用非常广泛

HTML(Hyper Text Markup Language):超文本(不单单可以表达文本,还可以表达超过文本的信息)标记语言,用以编写网页

URI包含URL,可能是不完整的一个路径(相对路径),URL是完整路径

版本

  • 1991年,HTTP/0.9

只支持GET请求方法获取文本数据(比如HTML文档),且不支持请求头、响应头等,无法向服务器传递太多的数据

  • 1996年,HTTP/1.0

支持POSTHEAD等请求方法,支持请求头、响应头等,支持更多种数据类型(不再局限于文本数据),浏览器的每次请求都需要跟服务器建立一个TCP连接,请求处理完成后立即断开TCP连接

  • 1997年,HTTP/1.1 (最经典、使用最广泛的版本)

支持PUTDELETE等请求方法,采用持久连接(Connection:Keep-alive),多个请求可以共用同一个TCP连接 (以前的请求是请求网页HTML要三次握手、四次挥手,如果网页里面有图片又要三次握手、四次挥手,现在是可以一次连接,传递完毕资源后再断开连接,或者根本不断开连接,直到关闭网页再关闭连接)

  • 2015年,HTTP/2.0
  • 2018年,HTTP/3.0

标准

  • HTTP的标准由万维网协会(W3C)、互联网工程任务组(IETE)协调制定,最终发布了一些了的RFC

  • RFC (Request For Comments,可以译为:请求意见稿),HTTP/1.1 最早是在1997年的RFC_2068中记录的,该规范在1999年的RFC_2626中已作废,2014年又由RFC_7230系列的RFC取代。

  • HTTP/2标准于2015年5月以RFC_7540正式发表,取代HTTP/1.1成为HTTP的实现标准

  • 中国的RFC

  • 1996年3月,清华大学提交的适应不同国家和地区中文编码的汉字统一传输标准被IETF通过为RFC_1922,成为中国大陆第一个被认可为RFC文件的提交协议

报文格式

报文格式
报文格式1


注意每个换行部分有一个回车和换行符,请求头和请求体之间也有回车和换行符

ABNF

ABNFBNF(Backs-Naur Form,译为:巴科斯-瑙尔范式)的修改、增强版

RFC_5234中表明:ABNF用作internet中通信协议的定义语言

ABNF是最严谨的HTTP报文格式描述形式,脱离ABNF谈论HTTP报文格式,往往都是片面、不严谨的

关于HTTP报文格式的定义

ABNF核心规则

ABNF表示的报文格式

URL的编码

URL中一旦出现了一些特殊字符(比如中文、空格),需要进行编码

在浏览器地址栏输入URL时,是采用UTF-8进行编码

请求方法

RFC 7231,section 4: Request methods:描述了8中请求方法
GET HEAD POST PUT DELETE CONNECT OPTIONS TRACE

RFC 5789,section 2: Patch method: 描述了PATCH方法

POST(增删改):常用于添加、修改、删除的操作,请求参数可以放到请求体中(没有大小限制)

GET(查) : 常用于读取的操作,请求参数直接拼接在URL的后面(浏览器对URL是有长度限制的)

HEAD:请求得到与GET请求相同的响应,但没有响应体

使用场景举例:在下载一个大文件前,先获取其大小,再决定是否要下载。以此可以节约带宽资源。

OPTIONS:用于获取目的资源所支持的通信选项,比如服务器支持的请求方法

PUT:用于对已存在的资源进行整体覆盖

PATCH:用于对资源进行部分修改(资源不存在,会创建新的资源)

DELETE:用于删除指定的资源

TRACE:请求服务器回显其收到的请求信息(发出什么就收到什么),主要用于HTTP请求的测试或诊断

CONNECT:可以开启一个客户端与所请求资源之间的双向沟通的通道,它可以用来创建隧道(tunnel)

 可以用来访问采用了SSL(HTTPS)协议的站点

头部字段

头部字段可以分为4种类型 (了解即可,主要看请求头和响应头)

请求头字段(Request Header Fields): 有关要获取的资源或客户端本身信息的消息头

响应头字段(Response Header Fields): 有关响应的补充信息,比如服务器本身(名称和版本等)的消息头

实体头字段(Entity Header Fields): 有关实体主体的更多信息,比如主体长度(Content-Length) 或其MIME类型

通用头字段(General Header Fields): 同时适用于请求和响应消息,但与消息主体无关的消息头

请求头

响应头

部分详解

请求体Origin 和 响应头Access-Control-Allow-Origin 用在跨域,受到同源策略(基于安全策略)影响,前端和后台要进行跨域处理

CookieSet-Cookie

Cookie: 在客户端(浏览器)存储一些数据,存储到本地磁盘(硬盘),服务器可以返回Cookie交给客户端去存储

Session:在服务器存储一些数据,存储到内存中(默认时长是30分钟)

状态码(Status Code)

RFC 2616 10.Status Code Definitions规范中定义,状态码指示HTTP请求是否已成功完成

状态码可以分为5类:

  • 信息响应:100~199
  • 成功响应:200~299
  • 重定向:300~399
  • 客户端错误:400~499
  • 服务器错误:500~599
常见状态码
  • 100 Continue

请求的初始部分已经被服务器收到,并且没有被服务器拒绝。客户端应继续发送剩余的请求,如果请求已经完成,就忽略这个响应

  • 200 OK

请求成功

  • 302 Found

请求的资源被暂时的移动到了由Location头部指定的URL上 (会进行重定向)

  • 304 Not Modified

说明无需再次传输请求的内容,也就是说可以使用缓存的内容(服务器给回的响应体中没有数据,使用缓存资源)

  • 400 Bad Request

由于语法无效,服务器无法理解该请求

  • 401 Unauthorized

用于缺乏目标资源要求的身份验证凭证(网页中出现身份验证的弹框)

  • 403 Forbidden

服务器端有能力处理该请求,但是拒绝授权访问

  • 404 Not Found

服务端无法找到所请求的资源

  • 405 Method Not Allowed

服务器禁止使用当前HTTP方法的请求 (服务器可以处理GET方法,但是某个请求禁止了GET方法)

  • 406 Not Acceptable

服务端无法提供与Accept—Charset以及Accept-Laguage指定的值相匹配的响应

  • 408 Request Timeout

服务器响应将没有在使用的连接关闭,一些服务器在空闲连接上发送此消息,即便是客户端没有发送任何请求的情况下

  • 500 Internal Server Error

所请求的服务器遇到意外的情况,并阻止其执行请求(服务器宕机)

  • 501 Not Implemented

请求的方法不被服务器支持,因此无法被处理,服务器必须支持的方法(即不会返回这个状态码的方法)只有GETHEAD

  • 502 Bad Gateway

作为网关或代理角色的服务器,从上游服务器(如tomcat)中接收的响应是无效的

  • 503 Service Unavailable

服务器尚未处于可以接受请求的状态(通常造成这种情况的原因是由于服务器停机维护或者已超载)

表单(form)提交

常用属性

action:请求的URI

method:请求的方法 (GETPOST)

enctypepost请求时,请求体的编码方式

  • application/x-www-form-urlencoded(默认值)
    • 用&分隔参数,用=分隔键和值,字符用URL编码方式进行编码,举例: username=123&password=456(类似普通的post请求体格式)
  • multipart/form-data
    • 文件上传时候必须使用这种编码方式
multipart/form-data

参考RFC 1521

代理服务器(Proxy Server)

特点:本身不生成内容,处于中间位置转发上下游的请求和响应

  • 面向下游的客户端:它是服务器
  • 面向上游的服务器:它是客户端
正向代理、反向代理

正向代理:代理的对象是客户端

作用

  1. 隐藏客户端身份
  2. 绕过防火墙(突破访问限制)
  3. Internet访问控制
  4. 数据过滤
    等等

反向代理:代理的对象是服务器

作用

  1. 隐藏服务器身份
  2. 安全防护
  3. 负载均衡
    等等
抓包工具的原理

FiddlerCharles等抓包工具的原理:在客户端启动了正向代理服务

需要注意的是Wireshark的原理是:通过底层驱动,拦截网卡上流过的数据

代理服务器- 相关的头部字段

CDN

CDN(Content Delivery Network 或 Content Distribution Network),译为:内容分发网络

  • 利用最靠近每位用户的服务器
  • 更快更可靠的将音乐、图片、视频等资源文件(一般是静态资源)传递给用户

使用CDN前后

  • CDN运营商在全国、乃至全球的各个大枢纽城市都建立了机房,部署了大量拥有高存储带宽的节点,构建了一个跨运营商、跨地域的专用网络,* * 内容所有者向CDN运营商支付费用,CDN将其内容交付给最终用户

使用CDN前

使用CDN后

HTTPS

HTTPS (HyperText Transfer Protocol Secure),译为超文本传输安全协议,常称为HTTP over TLSHTTP over SSLHTTP Secure

由网景公司于1994年首次提出

HTTPS的默认端口号是443HTTP80

现在在浏览器上输入 http://www.baidu.com
会自动重定向到 https://www.baidu.com

SSL/TLS

HTTPS是在HTTP的基础上使用SSL/TLS来加密报文,对窃听和中间人攻击提供合理的保护

SSL/TLS 也可以用在其他的协议上,比如

  • FTP + SSL/TLS --> FTPS
  • SMTP + SSL/TLS --> SMTPS
定义

SSL/TLS - 工作在哪一层

在应用层和传输层之间

OpenSSL

OpenSSL SSL/TLS协议的开源实现,始于1998年,支持windowsMacLinux等平台

  • LinuxMac一般自带OpenSSL
  • Windows下载安装OpenSSL

常用命令
生成私钥、生成公钥

  • 可以使用OpenSSL构建一套属于自己的CA,自己给自己颁发证书,称为“自签名证书”

HTTPS的成本

HTTPS的通信过程

TLS 1.2的连接

TLS 1.2的连接 - ①

TLS 1.2的连接 - ②

TLS 1.2的连接 - ③

TLS 1.2的连接 - ④

TLS 1.2的连接 - ⑤

TLS 1.2的连接 - ⑥

TLS 1.2的连接 - ⑦

TLS 1.2的连接 - ⑧

TLS 1.2的连接 - ⑨、⑩

posted @ 2021-03-05 16:59  康王驾到  阅读(219)  评论(0)    收藏  举报
Language: HTML