应用层:负责应用程序之间的数据沟通
1.自定制协议
结构化数据传输
序列化:将数据对象安按照指定协议组织成为可持久化存储/数据传输的二进制数据串格式
反序列化:二进制数据串按照指定的协议解析出数据对象
2.HTTP协议
认识URL:统一资源定位符
日常生活中说的“网址”其实就是说URL。
for example
http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1
http 协议方案名
user:pass 登录信息
www.example.jp 服务器地址
80 服务器端口
dir/index.htm 带层次的文件路径
uid=1 查询字符串
ch1 片段标识符
HTTP协议格式:
HTTP请求
- 首行:[方法]+[url]+[版本]
- Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束。
- Body:空行后面的内容都是Body,Body允许为空字符串,如果Body存在,则会在Header中会有一个Content-Length属性标识Body的长度。
HTTP响应
- 首行:[版本号]+[状态码]+[状态码解释]
- Header:请求的属性,冒号分割的键值对,每组属性之间使用\n分隔;遇到空行表示Header部分结束。
- Body:空行后面的内容都是Body,Body允许为空字符串,如果Body存在,则会在Header中会有一个Content-Length属性标识Body的长度;如果服务器返回一个html页面,那么html页面内容就是在body中。
HTTP的方法
方法 | 说明 | 支持的HTTP协议版本 |
---|---|---|
GET | 获取资源 | 1.0 、1.1 |
POST | 传输实体主体 | 1.0、1.1 |
PUT | 传输文件 | 1.0、1.1 |
HEAD | 获得报文首部 | 1.0、1.1 |
DELETE | 删除文件 | 1.0、1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK | 建立和资源之间的联系 | 1.0 |
UNLINE | 断开连接关系 | 1.0 |
HTTP的状态码
类别 | 原因短语 | |
---|---|---|
1XX | 信息性状态码 | 接收的请求正在处理 |
2XX | 成功状态码 | 请求正常处理完毕 |
3XX | 重定向状态码 | 需要进行附加操作完成请求 |
4XX | 客户端错误状态码 | 服务器无法处理请求 |
5XX | 服务器错去状态码 | 服务器处理请求出错 |
常见的状态码,比如:200(OK),404(Not Found),403,302(重定向),504(Bad Gateway)
详细的状态见此篇博客(转载自origination_star):HTTP状态码 – 详细
HTTP常见的Header
- Content-Type:数据类型(text/html等)
- Content-Length:Body的长度
- Host:客户端告知服务器,所请求的资源是在那个主机的那个端接口上
- User-Agent:声明用户的操作系统和浏览器版本信息
- referer:当前页面是从哪个页面跳转过来的
- location:搭配3XX状态码使用,告诉客户端接下来要去哪里访问
- Cookie:用于在客户端存储少量的信息,通常用于实现会话的功能
DNS协议
- DNS是应用层协议
- DNS底层使用UDP进行解析
- 浏览器会缓存DNS结果
DNS协议是一整套从域名映射到IP的系统,域名解析
域名服务器的层级划分:根域名服务器 -> 顶级域名服务器 -> 二级域名服务器 -> 三级域名服务器
域名的层级划分:顶级域名(.com/.org/.gov/.edu/.cn/.ru/.us/.jp) -> 二级域名(baidu.com/qq.com) -> 三级域名(image.baidu.com)
域名解析流程:浏览器缓存查看域名对应关系 — 查看操作系统缓存,解析hosts文件 — 根域名服务器 — 顶级域名服务器 — 二级域名服务器
(都是在前一级域名服务器尚未找到,在访问下一级服务器)
浏览器中输入URL后回车发生了什么
ICMP协议
ICMP协议是一个网络层协议,作用是进行网络探测
NAT技术
网络地址转换服务
NAT服务通常部署在网关设备上,对流经网关的数据进行地址替换,将数据中的源端地址,替换为本机地址,目的是为了让数据怎么出去,响应就怎么回来
代理服务:NAT服务部署在网关设备上,工作在网络层,进行源端地址替换,希望对方能将数据恢复到自己这里,代理服务可以部署在任意设备上,是一个应用层服务,要求源端先将数据交给自己,自己在发送给另一端。