浏览器解析URL生成请求信息,发送给web服务器。
一、浏览器解析URL
& 浏览器解析URL作用:确定了 Web 服务器和文件名
URL组成:http: + // + web服务器域名 + /目录名/ + / 目录名/ ....文件名
当没有具体文件路径名时,就代表访问根目录下事先设置的默认文件,也就是 /index.html
或者 /default.html
这些文件。
二、生成HTTP请求信息
三、查询真实地址--DNS
操作系统将http消息发给web服务器,是要知道web服务器IP地址!由域名解析出IP地址。
浏览器自身查看缓存有没有域名对应的IP,没有问操作系统,再没有查看hosts文件,再没有就开始问域名服务器。
本地DNS问根DNS,根DNS直接说顶级DNS,顶级DNS说权威DNS,得到结果后本地DNS返回IP
协议栈:
浏览器通过调用socket库来委托协议栈工作。
四、TCP--可靠传输
TCP报文头部格式:
端口号:确定数据从哪个应用发到那个应用;
序号:解决包乱序;
确认号:确认对方收到。解决丢包问题;
状态位:ACK回复、SYN连接、RST重新连接、FIN结束连接;
TCP面向连接,带状态位包发送,会引起双方状态变更;
窗口大小:TCP要做流量控制,不可太快太慢;
TCP连接的建立--三次握手
三次握手目的:保证双方都有发送和接受的能力。
在 Linux 可以通过 netstat -napt
命令查看TCP链接状态。
TCP分割
若HTTP请求信息超过MSS,TCP就将HTTP的数据拆分。
MTU
:一个网络包的最大长度,以太网中一般为1500
字节。MSS
:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度。
五、IP--远程定位
IP报文头部格式:
HTTP 是经过 TCP 传输的,所以在 IP 包头的协议号,要填写为 06
(十六进制),表示协议为 TCP。
六、MAC--两点传输
一般在 TCP/IP 通信里,MAC 包头的协议类型只使用:
0800
: IP 协议0806
: ARP 协议
网络包报文:
七、网卡--出口
将内存中二进制数字信息转为电信号;
网卡获取网络包:开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。
- 起始帧分界符是一个用来表示包起始位置的标记
- 末尾的
FCS
(帧校验序列)用来检查包传输过程是否有损坏
最后网卡会将包转为电信号,通过网线发送出去。
接下来就是交换机送别、路由器出境。
八、互相扒皮--服务器与客户端
@发送:服务器检查MAC头部,符合再检查IP头,符合再检查TCP序列号,符合返回ACK不是就丢弃,符合就返回给http进程,将请求信息封装在http响应报文,http响应报文再穿上TCP、IP、MAC头部 返回出去。
@接收:客户端收到,再逐层扒,将服务器返回信息交给对应的http进程。
@结束:最后,客户端要离开了,向服务器发起了 TCP 四次挥手,至此双方的连接就断开了。
协议概念对比补充:面试:HTTP协议与TCP协议的区别和联系_bug 的博客-CSDN博客
TCP是底层通讯协议,定义的是数据传输和连接方式的规范 ,HTTP是应用层协议,定义的是传输数据的内容的规范 HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP也就一定支持TCP HTTP支持的是www服务 而TCP/IP是协议 它是Internet国际互联网络的基础。 TCP/IP是网络中使用的基本的通信协议。 TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等, 而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。 通常说TCP/IP是Internet协议族, 而不单单是TCP和IP。 http协议是应用层协议,主要是解决如何包装数据。 而tcp协议是传输层协议,主要解决数据如何在网络中传输。