应用层协议
DNS
-
当在浏览器中输入一个网址的时候,一般的都需要进行DNS域名解析将其转化成IP地址,若是输入的直接为IP地址,则不需要解析。
-
过程
1)找浏览器的缓存查找对应的IP地址
2)找操作系统的hosts文件中是否这个网址的映射
3)找本机的DNS解析器缓存,是否有网址映射关系
HTTP
-
http请求协议
1. http请求报文 # 请求行格式 请求方法 请求路径 版本号 # 请求头 key : value # 请求头完之后一个空行为结束 2. http响应报文 # 请求行格式 版本号 状态码 状态码描述信息 # 请求头 key : value # 请求头完之后一个空行为结束
-
请求头
Content-Type: 数据类型(text/html等) Content-Length: Body的长度 Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上; User-Agent: 声明用户的操作系统和浏览器版本信息; referer: 当前页面是从哪个页面跳转过来的; location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问; Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能
-
状态码
1xx 信息状态码 接受的请求正在处理 2xx 成功状态码 请求正常处理完毕 3xx 重定向状态码 需要进行附加操作以完成请求 4xx 客户端错误状态码 服务器无法处理请求 5xx 服务器错误状态码 服务器处理请求出错
HTTPS
-
http是明文传输的不安全
-
https是基于http + ssl/tsl来实现的,发送的数据需要加密,接受的数据需要解密
-
比http安全但是传输效率比http低
使用https的原因
- 当我们使用http传输数据的时候 数据可能存在被窃听的风险 被篡改风险 被第三方冒充风险
ssl/tsl协议
- 基本原理 :采用公钥加密法 客户端先向服务端索要公钥,然后用公钥加密信息,服务器收到信息后用自己的私钥解密
- 基本过程 :
- 客户端向服务器索要并验证公钥,验证公钥一般使用数字证书
- 双方协商生产"对话密钥" (生成”对话密钥的时候“ 使用的非对称加密方法)
- 双发采用”对话密钥“进行加密通信 (通信的时候“对称加密”)
- 细节 实现
- 将公钥放在数字证书中 确保可信,数字证书一般由第三方的可信机构提供,而我们一般安装浏览器的时候里面就内置了数字证书。
- 如何协商生成 ”对话密钥“(https的握手阶段 明文传输)
- 客户端发送一个随机数(Client random) 以及客户端接受的加密方法
- 服务端 确认双方的加密方法 给出数字证书 以及服务器生成的随机数(Sever random)
- 客户端 确认数字证书有效,然后生成一个新的随机数(Premsater secret),使用数字证书中公钥加密这个随机数 发送给服务端
- 服务端使用自己的私钥 解密客户端发来的随机数(Premsater secret)
- 客户端和服务端 根据约定的加密方法,使用前面的三个随机数 生成”对话密钥“。
传输层协议
TCP
-
有连接的 可靠的传输协议
-
确认应答机制 安全
ACK
-
超时重传机制 安全
在一段时间内发送端未收到接受端对应的ACK的时候 会从新发送这段数据
-
三次握手 四次挥手 安全
-
滑动窗口 效率
窗口的大小指的是发送端无需等待确认应答而可以连续发送的数据的最大值
需要开辟发送缓冲区来维护窗口 (记录已经发送的数据 收到对应的ack 才可以清理数据 ;接受端的接受缓冲区 记录已经接受的数据 ,如果发送数据丢包,让对方重发)
窗口的大小和网络的吞吐量成正比
-
流量控制 安全
接受端告诉发送端发慢点
-
拥塞控制 安全
慢开始(指数增加)——— 线性增加 ——— 拥塞避免 ——— 网络拥塞 ——— “乘法减小”
-
延迟应答 效率
接受端接受到数据 为了让缓冲区大点 就会慢点返回ack
马上返回adc的话 因为流量控制 接受端的缓冲区空余空间就会比较小
-
捎带应答 效率
合并返回 数据和ack
-
面向字节流
-
粘包问题
面向字节流读取的时候格式不对或者长度不对就可能导致粘包问题,
明确包之间的边界
UDP
- 无连接的 不可靠的 面向数据包的传输协议
网络层协议
IP
-
就是为在复杂的网络之间确定一个合适的路径
-
目的IP 和 源IP
IP地址不足问题的解决办法
- 引入CIDR,也就是子网掩码,用他来区分是网络号还是主机号,网络号和主机号的划分和IP地址是ABCD类无关
- 动态分配IP地址 : 只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每次接入互联网的时候IP地址不一定相同
- NAT技术
- IPV6 用128位来表示一个IP地址
ICMP
- 辅助IP协议进行工作, 主要做两个事情,确认网络是否正常工作, 以及遇到异常时进行问题诊断
- 确认IP包是否成功送达目标地址,如果未送达的时,未送达的具体原因有ICMP通知
- ICMP大致分为两类 : 诊断查询的消息 和 通知出错原因的消息
MTU
-
简单理解为是用于切分数据报的
-
对IP包
将较大的IP包分成多个小包,并给每个小包打上标签,然后到达对端的时候 ,利用这些标签再将其组装成大的IP包
-
对TCP报
TCP的数据报也受制于MTU,TCP的单个数据报最大的消息长度MSS
MSS受制于发送端和接受端MTU 取较小的。
NAT
NAT就是能够将私有IP对外通信的时转为全局IP,也就是一种将私有IP和全局IP相互转换的过程
NAT的转化机制基于路由器内部有一张自动生成的地址转化表,完成对全局IP和私有IP的转化
TCP建立连接的时候自动生成这个NAT表,断开连接的时候就会删除这个表
ARP和 RARP
ARP : 目的IP为线索,定位下一个MAC地址
RARP:以MAC地址 定位IP地址
数据链路层
封装成帧 差错检验 透明传输
PPP 点对点协议
纯粹的数据链路层协议 与物理层没有任何关系,也就是说仅有PPP协议无法实现通信,需要有物理层的支持