输入www.baidu.com作为网址,
孤身的人-HTTP
浏览器要做的第一步就是 解析URL,根据url里面的资源路径,确认服务器资源和路径,生成http请求消息,包括请求消息(请求行 消息头 请求体)
举例:访问https://example.com:8080/api/data?name=john 生成的http请求可能如下
Get /api/data?name=John HTTP/1.1
Host:example.com:8080
ACCEPT:*/*
Connection:keep-alive
只指路不带路-DNS
发送消息需要IP地址,通过DNS来查询
在查询之前 查询 浏览器 缓存 操作系统缓存 host文件缓存
然后本地DNS服务器 再去通过本地DNS服务器询问 根域名服务器 顶级域名服务器 权威域名服务器 www.server.com.(最后还有一个 点)
根域名 . 顶级域名 .com 权威域名 server.com
导航地图-协议栈
应用程序调用socket库,来委托协议栈工作
可靠 面像字节流 面向连接的---TCP
在http传输数据之前,通常需要进行TCP连接建立,通常称为三次握手
建立了连接之后,TCP报文中的数据部分就开始存放 HTTP头部+数据 ,组装好TCP报文之后,开始交给网络层处理。
遇上了TCP的数据包现在找到了可靠大哥保护,下一步该往哪走呢?
远程定位---IP
此时,加上了 IP 头部的数据包表示 :“有 IP 大佬给我指路了,感谢 IP 层给我加上了 IP 包头,让我有了远程定位的能力!不会害怕在浩瀚的互联网迷茫了!可是目的地好远啊,我下一站应该去哪呢?”
两点传输--MAC
首先 发送方的MAC地址就比较简单 网卡生产时候写入的 读取出来加入到MAC头就可以了
对于接收方的MAC地址,略微复杂
通过route -n 命令查询路由表
匹配到响应的条目之后 找到对应的gateway也就是ip地址 然后利用ARP协议找到路由器的MAC地址。
至此,网络包的报文如下图。
至此,加上了MAC头部的数据包万分干旱写二,说道:感谢MAC,我现在有很多头部大哥,相信我可以到达重点。准备出门。
出口---网卡
把二进制的数据包转化为电信号,负责执行的是网卡
城门守卫--交换机
出境大门--路由器
首先路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。
检查 MAC 头部中的接收方 MAC 地址
完成包接收操作之后,路由器就会去掉包开头的 MAC 头部。
MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃。
接下来,路由器会根据 MAC 头部后方的 IP
头部中的内容进行包的转发操作。
接下来就会进入包的发送操作。
首先,我们需要根据路由表的网关列判断对方的地址。
- 如果网关是一个 IP 地址,则这个IP 地址就是我们要转发到的目标地址,还未抵达终点,还需继续需要路由器转发。
- 如果网关为空,则 IP 头部中的接收方 IP 地址就是要转发到的目标地址,也是就终于找到 IP 包头里的目标地址了,说明已抵达终点。
知道对方的 IP 地址之后,接下来需要通过 ARP
协议根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方 MAC 地址。
网络包完成后,接下来会将其转换成电信号并通过端口发送出去。这一步的工作过程和计算机也是相同的。
发送出去的网络包会通过交换机到达下一个路由器。由于接收方 MAC 地址就是下一个路由器的地址,所以交换机会根据这一地址将包传输到下一个路由器。
接下来,下一个路由器会将包转发给再下一个路由器,经过层层转发之后,网络包就到达了最终的目的地。
数据包通过多个路由器道友的帮助,在网络世界途经了很多路程,最终抵达了目的地的城门!城门值守的路由器,发现了这个小兄弟数据包原来是找城内的人,于是它就将数据包送进了城内,再经由城内的交换机帮助下,最终转发到了目的地了。数据包感慨万千的说道:“多谢这一路上,各路大侠的相助!