网络协议的三要素:
- 符合语法:需要按照特定的格式。
- 符合语义:需要按照一定的约定(如 各类状态码)。
- 符合顺序:发出http请求才能有报文返回。
浏览器输入一个网址后,背后都有那些操作(面试比较常问)。
- 在浏览器的地址栏输入网址后,浏览器会根据DNS去查找对应的地址(也可以使用更加精准的HTTPDNS),通过DNS查找得到对应的IP地址。
- 找到了地址后,浏览器就会对请求进行封装加密,对于普通的浏览请求就会使用HTTP协议(对应为应用层)。
- 经过封装后,浏览器会将包交给下一层(传输层),该层使用的是socket编程来实现的。使用的协议一般有两种:1)无连接协议UDP。2)面向连接协议TCP。(TCP相对UDP来说更加的安全,能携带的数据也会更多,但是因为要三次握手,四次挥手速度上会慢上一些。三次握手主要是为了确认双方建立了链接并能收到对方发生的包;四次挥手主要是为了确认对方已经没有需要发生的包关闭连接;生活中的例子:打电话、挂电话。)TCP封装会将机器所在的IP地址与目标IP地址信息封装到IP头中,此外浏览器监听的端口与服务器监听的端口会封装到TCP的头信息当中。此时数据包就会如下图所示:
- 操作系统就会根据IP信息去判断是本地IP还是远程IP,如果是远程IP地址就会根据IP地址去查找网关,然后通过网关去查找对应的MAC地址(ARP协议:根据IP地址来获取MAC地址,将MAC地址也封装到数据包内)。
- 服务器的MAC地址对应上了就会将MAC头取下,然后再对比IP地址,对应上了就会将IP头取下,然后将TCP数据包交给服务器的传输层(TCP)。这时会返回浏览器一个数据包说明已经收到请求(三次握手)。然后就会解析TCP数据包当中的信息,根据端口去查找对应的程序,然后将HTTP头的信息进行解析,通过RPC等协议进行处理,然后将数据进行返回,最后显示再浏览器当中。
加上了数据分层后的整个过程图: