//以在浏览器输入www.taobao.com为例
客户端:
层名 | 所含协议 |
---|---|
应用层 | DNS HTTP |
传输层 | UDP TCP |
网络层 | ARP IP |
数据链路层 | 以太网 无线LAN |
物理层 |
路由器:
层名 | 所含协议 |
---|---|
网络层 | ARP IP |
数据链路层 | 以太网 无线LAN |
物理层 |
运营商:
DNS服务器 | IP |
---|
服务器端:
层名 | 所含协议 |
---|---|
应用层 | DNS HTTP |
传输层 | UDP TCP |
网络层 | ARP IP |
数据链路层 | 以太网 无线LAN |
物理层 |
正文:
用户在浏览器中输入网址-->浏览器开始解析域名[看看有没有DNS缓存
(有的话直接拿到服务器端IP地址,没有的话会到本地host文件查看
是否有配置)]
//这里插一句:本地配置开发环境的时候需要在本地的host文件中
//添加相应的域名配置 比如:127.0.0.1 www.xxx.com
没有的话会在客户端的应用层发起一个DNS请求,然后应用层调用
传输层的接口,DNS调用UDP协议进行传输-->传输层向网络层请求ip
-->传到数据链路层[在数据链路层会添加一个自己的Mac头
(从网络层的ARP获取到)]-->通过客户端物理层到达路由器物理层-->
到达数据链路层(会检查是否有Mac地址存在 存在就解析 不存在就舍弃
)-->到达网络层(会查找存放到下一个路由器的地址,然后通过运营商的
网络接口传到运营商的路由器上)-->运营商有一个自己的DNS服务器
(会找对应的域名拿到对应的ip地址然后原理返回到客户端的应用层
找DNS拿到请求报文进行HTTP协议传输)
客户端应用层 HTTP+参数-->传输层TCP-->网络层ip(+ip头)-->
数据链路层(+数据链路的头)-->客户端物理层-->路由器-->运营商
(找服务器的ip地址)-->服务器环境
服务器端物理层-->数据链路层(核对数据是否存在)-->网络层
(核对ip是否是服务器的ip)-->传输层(解析UDP和TCP的一些端口)
-->应用层(通过端口号找到对应的应用程序,然后应用程序拿到我们
客户端的请求报文之后进行解析然后在服务器端构造一个HTTP响应
报文)-->一层一层解析传回客户端