当我们在浏览器输入网址
www.juejin.cn,网页上出现了掘金的页面,这个过程中,我们的请求是如何到达掘金服务器的呢?
菜鸟教程的七层协议划分——
接下来就按照七层协议对计算机基础知识进行简单的回顾
应用层(HTTP,DNS,)
当输入网址www.juejin.cn后,网址是我们所要访问的服务器。按下回车,浏览器创建了一个HTTP请求(请求方法+请求头+请求体)。为了给这个网址发送请求,我们需要找到网址对应的IP地址,这个网址->IP地址的转换过程就是DNS解析。
- IP地址:由四组八位二进制数组成,所以一个IPv4的最大地址就是255.255.255.255,也就是每一位都是1。IP地址由网络号和主机号组成,网络号和主机号是使用子网掩码来切分,前半部分为网络号,后半部分为主机号。
网络号相同的设备处于同一个网段(也就是局域网),网络号不同的设备通过路由进行通信。IP是随着网络动态变化的,同一设备在学校可能是一个IP,在家里可能又是另一个IP。当我们的设备希望连接互联网,DHCP协议就负责分配给这些设备在网络中唯一的IP地址和子网掩码,所以当某设备移动到网络中的其他位置,总是能自动收到新的IP地址。
- 子网掩码:附加在IP地址后面,比如18.2.3.1/16,就表示前16位的18.2是网络号,后16位的3.1是主机号。
- 私有IP和公有IP:DHCP提供的其实是私有IP,也就是在同一个局域网中唯一标识,但是不在公有网络中!公有IP是全球唯一的,通过互联网通信时使用;私有IP则是在局域网内部使用,不直接暴露在公网。
传输层——TCP协议
现在我们已经有了源和目标的IP,传输层会创建一个TCP协议(三次握手)或UDP协议(不稳定)包,HTTP协议使用的是TCP协议,那么HTTP请求就被封装在了TCP里面。TCP同样包含一个Header,这个header中会包含HTTP协议对应的端口号(PORT 80),这个端口号代表服务器使用80端口鉴定客户端的HTTP请求。
网络层——IP协议
接下来把TCP Packet进一步封装到IP packet中,IP数据包需要设置前面已知的双方IP地址。现在的数据包已经包含了IP协议(TCP协议(HTTP协议))
以太网
接下来就需要把IP数据包顺着网线传输给掘金服务器。为此,电脑将IP数据包封装为以太网帧。以太网帧将数据切分为小部分,并设置双方的MAC地址。MAC地址不同于IP地址,IP对应的是网络,而MAC对应的是更实在的物理设备(比如电脑,路由器,交换机),每个设备的mac地址都是唯一的。数据包中的IP地址在传输的全程中不会变化,而MAC地址在传输过程中会不断的改变! 在即将发出前,电脑判断目标的ip是否和源ip在同一局域网内:
如果在同一局域网内:
源设备通过向广播地址(FF:FF:FF:FF:FF)发出一个带有目标IP(掘金)的广播来查找目标服务器的MAC地址,所有该局域网内的设备都会收到该消息。每一个设备都会包以太网帧中的数据包拆开查看自己是否就是目标IP,最终寻找的服务器会返回一个ARP reply,带着自己的MAC地址,交换机会经过一系列操作并把这条消息返回给之前发送广播的我们。
如果不在同一局域网内:
源设备同样向广播地址发送广播,但是这条广播中带有的IP不再是掘金的IP,而是默认网关(路由)的ip,因此最终我们找到的是路由的MAC地址,并把准备好的数据包(带有真正掘金的目标IP)发送给路由。default gateway接收到frame后,会根据⽬标 IP 地址(掘金服务器的 IP)查找⾃⼰的routing table,决定将数 据包转发到哪个下⼀个路由器,直到数据包最终到达位于⼴东的 掘金 服务器所在的⽹络。这个过程中,MAC地址就不断地在不断变化的两个传输设备上更改。我们最终来到掘金服务器所在的放落后,同样发送ARP请求来查找目的地址,得到回应后,就完成了我们的数据传输。
总之,在互联网中,我们的数据被层层包裹,就这么在线路上传输了!