http请求过程
从源端到终端,请求报文和响应报文要经过四层关口,才可以传输,分为:
- 应用层 (如http)
- 传输层 (如TCP)
- 网络层 (如IP)
- 链接层 (设备驱动程序以及网卡)
协议
经过约定,使通信两端以相同规则来存储,接收,发送数据
分层初探
应用层
应用程序将数据以相应规则进行包装,发给传输层【HTTP,FTP,SMTP,SNMP】
传输层
将应用层传来的数据进行分组,标记,交给网络层【TCP,UDP】
分组和标记是为了保证顺序及完整性
网络层
以最快的方式将数据发送到目标终端【IP,ICMP,IGMP】
链路层
为网络层发送和接收数据单元【ARP,RARP】
[!IMPORTANT]
在这整个过程中,数据在发送及接收时,需要进行封装和分用的操作
- 封装:报文==>向下层,添加协议标识【此后递归操作到最底层】
- 分用:去掉报文首部(协议标识)==>向上层【递归到最上层直至接收】
HTTP应用层
报文分类
- 用户触发交互的行为数据
- 服务端对此做出的响应
报文作为了客户端和服务端沟通的载体
起始行
- 请求:
方法+请求URL+协议版本
- 响应:
协议版本+状态码+描述文本
方法的分类
方法 | 含义 | 有无主体 |
---|---|---|
GET | 从服务端获取资源 | 无 |
HEAD | 只获取资源头部 | 无 |
POST | 向服务端发送数据 | 有 |
…还有其他的没有列出来
状态码的分类
范围 | 已定义范围 | 含义 |
---|---|---|
100~199 | 100~101 | 信息提示 |
200~299 | 200~206 | 成功 |
300~399 | 300~305 | 重定向 |
400~499 | 400~415 | 客户端错误 |
500~599 | 500~505 | 服务端错误 |
首部
形式为键值对==>为了协商具体行为
首部可分类为
请求 | 响应 | 通用 | 实体 | 扩展 |
---|
- 请求为告诉服务端的信息
- 响应为告诉客户端的信息
- 通用为大家都可用到的,如时间相关的信息
- 实体可有在报文实体中数据的类型,长度等等 【可有可无】
- 扩展为了在一些对应传输中进行一些个性化的操作
实体
实体分为实体首部和实体主体,实体首部是用来描述主体的
实体部分是可选的,它被用来运送请求或者响应的数据
传输层-TCP
HTTP连接是建立在TCP连接的基础上
以流形式通过一条已经打开的TCP连接,按顺序进行传输
需要判断完整性,顺序,是否损坏,重复,通过检验和,序列号,确认应答,重发控制,连接管理和窗口机制
传输控制依赖首部包含的6个标志【0/1】
- URG:紧急指针
- ACK:确认序号是否有效
- PSH:接收方应尽快将这个报文段交给应用层
- RST:重建连接
- SYN:同步序号用来发起一个连接
- FIN:发送端完成发送任务
一个TCP通过4个值确认:源IP,源端口,目的IP,目的端口
[!IMPORTANT]
TCP还有一些超时重传,拥塞避免,慢启动的机制,都可以保证分组数据按照顺序完整的传到目标端
网络层-IP
提过了两个节点之间的连接 【保证快但不保证稳定】–IP就像是装着货物的卡车
选路,分片,重组
若两端IP协议版本不同,IP数据会丢失
[!IMPORTANT]
- 服务类型TOS:4bit为最小时延,最大吞吐量,最高可靠性,最小费用,1bit为未用位
- 生存时间TTL:表示可经过的路由个数,每过一个路由,值-1,解决了数据报在一个路由环路一直转发的问题
- 上层协议:决定接收端上层为TCP还是UDP
- 分组标识:这个标识相当于ID,每成功发送一个分片,+1
- 片偏移:标识了当前分片距离原始数据报开始处的位置
路由选择
IP层可配置成主机,也可配置成路由器
- 主机:若IP地址不为本机IP,数据报会丢失
- 路由器:根据路由表进行路由选择,将数据包传到下一跳
路由器
–用来连接两个或多个网络的硬件设备–
做什么
通过查询路由表,查看是否有对应的IP地址,将数据报传到下一个路由或目标IP
有什么用
- 实现网络互联互通 – 不同接口和协议,实现局域网和广域网的互联
- 实现数据高性能转发
- 实现网络管理(配置,性能,容错,流量)
路由表
存储在路由器中的数据表 – 一个条目为一个路由
若在路由表中找不到对应的IP地址,会向发送数据报的设备发送ICMP报错信息
路由条目
以来源分类
- 直连路由:本地接口所在的网段,路由器自行写入
- 静态路由:(网络管理员手动配置)
- 动态路由:由动态路由协议发现并写入路由表中
以目的地分类
- 主机路由:唯一目的地主机
- 网段路由:一个网络段中的所有主机
- Mask:网络掩码
- Proto:路由协议名
- Pre:本条目加入该路由器的优先级
- Cost:路由开销
- Flag:路由标记
- Interface:输出接口,说明IP包将从该路由器哪个接口转发
路由协议
路由设备之间维护路由表的规则,用于发现路由,生成路由表,并指导报文转发
- IGP
- EGP
路由器分类
以使用场景分类
- 企业路由器
- 运营商路由器
- 家用路由器
以实际作用分类
- 骨干路由器
- 城域路由器
- 接入路由器
数据分片
根据目的端IP层的MTU来决定最大数据量(MSS)
MTU:Max Transform Unit
传输时,数据报是无序的
链路层
地址解析协议ARP
前言:
光有IP地址无法直接发送数据报,需找到对应的MAC地址(结合链路层的ARP协议)
MAC地址:用于网络中唯一标识一个网卡
过程
[!IMPORTANT]
若ARP缓存表中有IP与MAC的映射,直接封装并发送到链路层传输
若无,则发送请求广播,若为目标IP地址,且请求内有源IP和源MAC地址,回应一个ARP应答
封装发送的是以太网数据帧
传输和接收
- 接收到,根据MTU及数据报大小对IP数据报分片
- 封装成一帧,传给底层组件,转为比特流,发送出去,以太网设备接收到帧,检查目标地址,若与本机地址匹配,处理,向上传递(分用过程)