[网络基础原理一]:你打开百度中间所发生的事

[网络基础原理一]:你打开百度中间所发生的事

作者:云基础    浏览次数:225    2021-06-16 14:49:53

从浏览器输入百度网址的那一刻起,发生了什么?
这篇将会从此一范例简单的带过几个在你连上网站时所发生的网络事件
你的浏览器做了什么?
在解答这个问题之前,我们要先了解其中所用到的几个技术与专有名词
但碍于篇幅只能以最基本的情况做简单的介绍
如果还是有不懂的地方,相信前几届铁人赛也有一整个系列的文章在介绍这些东西

FQDN (Fully Qualified Domain Name)
完整的网域名称
在这个例子中为"www.baidu.com"

TCP/IP 模型
TCP/IP 模型

MAC Address
全名Media Access Control Address
简单来说就是每个网络装置独一无二的识别号码

ARP
让电脑可以把IP 对应回MAC Address 的协定

IP
识别电脑用的一组数值
常看到的127.0.0.1就是一组电脑识别自己用的Lookback IP位置
本系列文将用IPv4作为示范

Router
一种电脑,会根据记忆体中的路由表来把带有IP封包转送到对的路径
在现实生活中就跟邮差一样

TCP/UDP
TCP 与UDP 是两个不同的传输层协定

TCP (Transmission Control Protocol)
有状态的协定,建立连线前要先经过三方交握
有资料验证、重传机制,确保对面收到的东西是对的
20129897LHI5nGcTPk.png
三方交互的详细可以看这篇,图片也是这里借来的

UDP (User Datagram Protocol)
无状态协定,资料丢过去,对方没收到就算了
有需要的话要在应用层实现重传机制
DNS (Domain Name System)
将FQDN解析回IP(超级过度简化,功能不只这样)的系统
使用UDP作为底下的传输协定

HTTP/HTTPS
在网址列中我们可以看到"https"开头
HTTPS为HTTP的安全加密版本,将HTTP包在TLS/SSL里面
文章将会忽略加密相关的行为,强制降级成HTTP来解说
HTTP是一个建立在TCP之上的应用层协定

主要的请求封包像是这样(以HTTP 1.1为例,RFC2616)

? HTTP/1.1

常见的Reqeust Method有GET, POST,HEAD等 Header一般至少会带上Host,来让伺服器知道使用者想连哪个网站 借此就可以放多个网站在同一台伺服器上(VHost) Body的部分可以留空 给个范例会像是这样

GET / HTTP/1.1
Host: www.example.com
或是

POST /process?action=login HTTP/1.1
Host: 169.254.13.37

username=seadog007&password=password
而回应封包会是以下的格式

HTTP/1.1

给个范例的话会像这样

HTTP/1.1 200 OK
Content-Type: application/json

{“status”: “OK”}
所以你的浏览器做了什么?
首先,你的浏览器并不能直接连上FQDN,所以浏览器势必得将FQDN转回IP
这时候DNS就派上用场了,浏览器会使用你电脑所设定的DNS Server
(范例为Google DNS, 8.8.8.8)
去问说www.google.com这个FQDN对应的服务器IP是什么
你也可以用一些工具(nslookup、dig等)做到同样的事
找到IP之后,你的系统会随机挑选一个Source Port
用这个Source Port去跟伺服器的Destination Port建立TCP连线
HTTP预设Port为80
假设你电脑IP为1.2.3.4,随机产生的Port为54321
( 1.2.3.4:54321 -> 216.58.200.228:80)

那要怎么建立TCP连线呢?
首先,你的电脑会先去找你设定的预设路由位置
将这个位置解析回MAC Address (L2 Address),找到对应的实体装置(网路卡、无线装置),并且将封包往你的路由器丢
你的路由器会因为L2 的目的地是他,所以收到这个封包,然后根据路由表中的Nexthop 继续改写L2 Destination 将封包转送到目的地

封包到达伺服器后,将会用相同的方法,一路将封包转送回来给你
同理,上方DNS查询封包的转送机制也是一样的

唯一不同点在于DNS使用UDP作为底层,而HTTP使用TCP作为底层,需要三方交握来建立连线
经过三方交握之后,连线正式建立
连线建立后,浏览器将会发送HTTP请求给伺服器,并将回应丢回给浏览器去做相对应的显示
按下F12打开开发者视窗,切换到网路页面,将可以看到请求的细节
如此一来你就能看到网页了

所以知道了这些,能干嘛?
首先,要研究一个东西,要先了解这个东西的基本运作模式
这其中有许多部份不是由你电脑处理的,一般使用者也不会去了解与研究
像是封包丢出去给预设路由,也就是你的路由器后,这些封包会根据什么样的规则转送
又或者是家里如果有多台电脑的状况,你家的路由器帮你做了什么
而这个系列将会针对这些平常End User所碰不到的东西做安全上的探讨

小结
所以看完今天这篇,聪明的你应该稍稍了解了打开网页后所会发生的一些事情
当然,这篇因着重于网路方便,省略了很多其他方面的东西
打开一个网页所发生的事远远不只这些
而下一篇,我将会对封包被丢往路由器后的事做一些基本概念的讲解。

上一篇:2021年6月16日借助谷歌西门子克服制造领域的创新挑战-云资讯
下一篇:[网络基础原理二]Internet 构成(1)