如何把数据包送达目的主机
主机A -> 网络层(添加IP头信息) -> 底层 -> 物理网络 -> 主机B -> 解析IP头信息 -> 将数据部分交给应用
如何把数据包送达应用程序
UDP协议: User Datagram Protocol
网络层和上层之间添加一层(传输层)、封装UDP头信息
UDP并不提供重传机制、只是丢弃当前数据包、且发送之后不知道是不是数据能到达目的地
TCP将数据完整送达应用程序
对于数据包丢失的情况、TCP提供重传机制
引入数据包排序机制、保证将乱序的数据包组合成一个完整的文件
1 | 浏览器使用HTTP协议作为应用层协议、用来封装请求的文本信息 |
HTTP请求流程
- 构建请求
GET /index.html HTTP1.1
- 查找缓存
浏览器在网络请求之后会保存资源副本在本地
- 缓解服务端压力、提升性能
- 对于网站来说、可以实现快速下载
- 若本地无资源副本、就会进入网络请求
- 准备IP地址和端口
思考:
- http请求的第一步是什么呢 ?- 构建请求信息
- 建立连接的信息都包含什么? - ip和端口号
- 如果只有url可以拿到建立连接的信息么 ?- 通过DNS解析、http协议默认80端口
- 等待TCP队列
准备好IP和端口、是不是就可以建立TCP连接?
不一定, Chrome 同一个域名最多建立6个TCP连接、若同时有10个请求、会有4个请求进入排队队列等待、直到进行中的请求完成
- 建立TCP连接
在http开始工作之前、需要先建立TCP连接
- 发送HTTP请求
- 请求行(请求方法、路由、http版本)
- 请求头(cookie等信息)
- 请求体(请求参数等)
服务端处理http请求流程
- 返回请求
- 断开连接(正常情况下、一单server返回响应数据、就会关闭TCP连接、若头信息加入 Connection:Keep-Alive则保持TCP连接不断开)
- 重定向