应用层
应用层: 解决通过应用进程的交互来实现特定网络应用的问题, 是计算机网络体系结构的最顶层, 是设计和建立计算机网络的最终目的, 也是计算机网络中发展最快的部分
应用层常见协议
- 超文本传输, HTTP, HTTPS
- 文本传输, FTP
- 电子邮件, SMTP, POP3, IMAP
- 动态主机配置, DHCP
- 域名系统, DNS
域名 Domain Name
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
二级域名
二级域名是指顶级域名之下的域名
- 在通用顶级域名下, 它一般是指域名注册人的名称, google, baidu, microsoft
- 在国家及地区顶级域名下, 它一般是指注册类别的, com, edu, gov, net
DNS 服务器
DNS(Domain Name System), 域名系统
- 利用DNS 协议, 可以将域名解析成对应的ip 地址
- DNS 可以基于UDP协议, 也可以基于TCP 协议, 服务器占用53 端口
DNS 服务器
- 客户端首先访问最近的一台DNS 服务器, 客户端自己配置的DNS 服务器
- 所有DNS 服务器都记录了DNS 根域名服务器的ip 地址
- 上级DNS 服务器记录下一级DNS 服务器的ip 地址
- 全球共有13 台IPv4 的DNS 根域名服务器, 25 台IPv6 的DNS 根域名服务器
用户在浏览器地址中输入域名, TCP/IP的网际层使用IP 地址, 从域名到IP 地址的转换, 由属于应用层范畴的域名系统DNS, 在后台帮用户完成
dns查询总结 dns查询例题客户/服务器方式(C/S方式)和对等方式(P2P)
概念
两种方式的概念客户/服务器方式
客户服务器方式对等方式
对等方式DNS 常用命令
ipconfig /displaydons 查看DNS 缓存记录
ipconfig /flushdns 清空DNS 缓存记录
ping 域名 ping 域名会自动解析DNS
nslookup 域名 主动解析DNS
DHCP(DISCOVER OFFER REQUEST ACKNOWLEDGE)
ip地址的分配
静态IP 地址, 动态IP 地址
-
静态IP 地址
手动配置, 场景: 不需要经常移动的台式机, 学校机房, 服务器等
-
动态IP 地址
从DHCP 服务器自动获取IP 地址, 场景: 移动设备, 无线设备等
DHCP, Dynamic Host Configuration Protocol, 动态主机配置协议
DHCP, 基于UDP 协议, 客户端68 端口, 服务器67 端口
DHCP 服务器会从IP 地址池中, 挑选一个IP 地址出租给客户端使用一段时间, 到期回收. 路由器可以充当DHCP 服务器.
提供了即插即用联网(plug-and-play networking)的机制.
dhcp的访问过程分配ip 的过程
DISCOVER: 发现服务器
- 发广播包(源IP为0.0.0.0, 目标IP 是255.255.255.255, 目标MAC是FF:FF:FF:FF:FF:FF)
OFFER: 提供租约
- 服务器返回可以租用的IP 地址, 以及期限, 子网掩码, 网关, DNS等信息
REQUEST: 选择IP 地址
- 客户端选择一个OFFER, 发送广播包进行回应
ACKNOWLEDGE: 确认
- 被选中的服务器发送ACK 数据包给客户端, 分配完毕
遇到的问题?
DHCP服务器可以跨网段分配IP 地址吗? DHCP 服务器和客户端不在一个网段
- 可以借助DHCP 中继代理(DHCP Relay Agent), 实现跨网段分配IP 地址
自动续约
- 客户端会在租期不足的时候, 自动向DHCP 服务器发送REQUEST 申请续约
常用命令
ipconfig /all DHCP 详细信息, 租约, 过期时间, DHCP 服务器地址
ipconfig /release 释放租约
ipconfig /renew 重新申请IP 地址, 申请续约
HTTP(Hyper Text Transfer Protocol), 超文本传输协议
URL 和URI 的关系
URI 包括了URL
html/login.html, 这是一个URI, 但是不能标识唯一标识
http://localhost:8080/hello/html/logn.html, 这是一个URL, 可以标识唯一
HTTP 协议
- 互联网最广泛的应用层协议
- 设计最初的目的, 提供一种发布和接收HTML 页面的方法, 由URI 来标识具体的资源
- 之后传递的数据不仅仅是HTML, 应用非法广泛
HTML(Hyper Text Markup Language), 超文本标记语言
HTTP 版本和标准
HTTP/0.9
- 只支持GET 请求获取文本数据, 且不支持请求头响应头等, 无法向服务器传递太多数据
HTTP/1.0
- 支持POST, HEAD 请求方法, 支持请求头响应头, 支持更多种数据类型
- 浏览器每次请求都需要与服务器建立一个TCP 连接, 请求处理完成后立即断开
HTTP/1.1(最广泛的版本)
- 支持PUT, DELETE 方法
- 采用持久连接(Connection: keep-alive). 多个请求公用一个TCP连接
HTTP/2.0 HTTP/3.0 ?
http版本标准
万维网协会W3C, 互联网工程任务组IETF协调制定, 最终发布RFC
RFC(Request For Comments, 请求意见稿)
- HTTP/2 标准已正式发表, 取代HTTP/1.1 称为HTTP 的实现标准
报文格式
http报文格式ABNF
ABNF(Augmented BNF)
- BNF 的增强版
- 用作Internet 中通信协议的定义语言
- 是最严谨的HTTP 报文格式描述形式
ABNF 规则
abnf规则 报文整体格式报文格式 request-line, status-line
request-line格式header-filed, message-body
header-field格式URL 编码
url 中出现特殊字符, 例如中文空格等, 需要进行采用UTF-8 编码
请求方法
GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE
GET: 常用于读取操作, 请求参数直接拼接在URL 的后面
POST: 常用于添加, 修改, 删除操作, 请求参数放在请求体中, 没有大小限制
HEAD: 请求得到与GET 请求相同的响应, 但没有响应体, 场景, 下载一个大文件前, 先获取其大小HEAD, 再决定是否下载, 节省宽带资源
OPTIONS: 用于获取目的资源所支持的通信选项, 比如服务器支持的请求方法
PUT: 对已经存在的资源进行整体覆盖
PATCH: 对资源进行部分修改, 不存在则创建新的资源
DELETE: 删除指定资源
TRACE: 请求服务器回显其收到的请求信息, 主要用于HTTP 请求的测试和诊断
CONNECT: 可以开启一个客户端与所请求资源之间的双向沟通的通道, 它可以用来创建隧道(tunnel)
头部字段(Header Field)
分为4 种类型
- 请求头字段(Request Header Fields), 有关要获取的资源或客户端本身信息的信息头
- 响应头字段(Response Header Fields), 有关响应的补充信息, 服务器本身的例如名称版本等信息头
- 实体头字段(Entity Header Fields), 有关实体主题的更多的信息, 例如主体的长度(Content-Length)或MIME类型
- 通用头字段(General Header Fields), 同时适用于请求和响应消息, 但是与消息主体无关的信息头
Referer, 可用于防盗链
请求头字段2 请求头字段3响应头字段
响应头字段1 响应头字段2 响应头字段3Cookie 记录用户信息
cookie记录用户信息状态码 Status Code
只是HTTP 请求是否已成功完成
分为以下几类
- 信息响应: 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 方法的请求
406 Not Acceptable, 服务器无法提供与Accept-Charset以及Accept-Language指定的值向匹配的响应
408 Request Timeout, 服务器想要将没有在使用的连接关闭
500 Internal Server Error, 所请求的服务器遇到以外的情况并阻止其执行请求
501 Not Implemented, 请求的方法不被服务器支持, 无法处理
502 Bad Gateway, 作为网关或代理角色的服务器, 从上游服务器中接收到的响应的时无效的
503 Service Unavailable, 服务器尚未处于可以接收请求的状态. 服务器停机维护或超载
form 提交 常用属性, multipart/form-data
action: 请求的URI
method: 请求方法(GET, POST)
enctype: POST请求时, 请求体的编码方式
- application/x-www-form-urlencoded, 用& 分隔参数, 用= 分隔键和值, 字符使用URL 编码方式进行编码
- multipart/form-data, 文件上传时必须使用这种编码方式
同源策略, 跨域资源共享
同源策略(Same-Origin Policy)
- 默认情况先AJAX 请求只能发给同源的URL
- 同源是指3个相同: 协议, 域名, 端口
img, script, link, iframe, video, audio 标签不受同源策略的约束
解决方法
- CORS(Cross-Origin Resource Sharing), 跨域资源共享
CORS的实现需要客户端和服务器同时支持
服务器返回相应的响应头, Access-Control-Allow-Origin, 允许跨域访问
跨域访问代理服务器 (Proxy Server)
特点
- 本身不产生内容
- 处于中间位置转发上下游的请求和响应
正向代理 方向代理
正向代理: 代理的对象时客户端
反向代理: 代理的对象时服务器
代理对象正向代理的作用
- 隐藏客户端身份
- 绕过防火墙(突破访问限制)
- Internet 访问限制
- 数据过滤
反向代理作用
- 隐藏服务器身份
- 安全防护
- 负载均衡
代理服务器 头部字段
代理服务器头部字段HTTP 总结
http总结CDN(内容分发网络)
CDN(Content Delivery Network), 内容分发网络
- 利用最靠近每位用户的服务器
- 更快更可靠的将音乐, 图片, 视频等资源文件, 一般是静态资源, 传递给用户
CDN 运营商在全国乃至全球的各个大枢纽城市都建立了机房, 部署大量拥有高存储高带宽的节点, 构建一个跨运营商, 跨地域的专用网络
FTP 文件传送协议
概念
ftp概念文件传送协议FTP 应用
采用C/S 方式
FTP 客户计算机可将各种类型的文件上传到FTP 服务计算机上
ftp上传文件FTP客户也可以从FTP 服务计算机下载文件
ftp下载文件根据应用需求的不同, FTP 服务器肯需要一台高性能和高可靠的服务器计算机, 有可能是一台普通的个人计算机
FTP 工作原理
FTP 服务器监听端口21, 使得客户进程能够连接上
FTP 客户随机选择一个临时端口号与其建立TCP 连接, 这条TCP 连接用于FTP 客户与服务器之间传送FTP 的相关控制命令, 这条命令是FTP 客户与服务器之间命令的通道
ftp建立传输通道FTP 服务器使用自己的端口号20 与其建立TCP 连接, 用于传送文件
服务器建立ftp通道被动模式建立连接通道
ftp被动建立连接通道两种模式对比
ftp两种模式对比两种模式都是以下情况
- 控制连接在整个会话期间保持打开
- 数据传输完毕后关闭
网友评论