计算机基础

浏览器输入网址获取内容的背后-网络是怎么连接的

写于19年9月

互联网是个复杂的玩意儿

我们每天都在上网

对,上网很简单!!!

可是其实它并不简单!!!

那从浏览器输入网址到获取信息经历了啥呢???

总步骤

图上的步骤只是重要的部分

相信看完也是半懂半懂的

图中的每一步都包含了太多的知识

下面将具体介绍这些东西.

解析图中的各个步骤

浏览器解析网址

网址:URL(统一资源定位符)

网址形式 意义
http: 访问web服务器
ftp: 在本地主机和远程主机之间传送文件
file: 本地文件传输协议 访问本地计算机中的文件
mailto: HTML e-mail 链接


当然我们用的最多的还是http

这个形式就是HTTP协议

等用到其他的再来写吧hahaha

解析网址

如图所示可以确定web服务器名以及文件名

但一般来说我们并没有输出文件名
直接在浏览器中输入网址
它会进入首页中
忽略了文件名
像我的域名是http://.nj-jay.com直接进入的话会进到首页之中

但是如果显示文件名 同样可以实现的

web服务器

服务器的种类
文件服务器
数据库服务器
应用程序服务器
web服务器

web服务器提供提供网上信息浏览服务

Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。
例如我的网站,基于github搭建 此时的github就充当了web服务器的作用

生成HTTP请求消息

解析完url后,即确定了web服务器,接下来就是根据这些信息来生成HTTP请求消息了.

HTTP消息在格式上有严格的要求,浏览器会按照规定的格式来自动生成请求消息.

具体的格式:

<form method="GET" ACTION="/cgi/sample.cgi">
 <input type="text" name="Field1" size="20">
 <input type="submit" value="SEND" name="SendButton">
 <input type="reset" value="RESET" name="ResetButton">
</form>

其中常用的method方法:
1.GET:获取信息
2.POST:客户端输入信息 举例:我们在表单填写数据并将其发送给Web服务器.购物时填写收货地址等信息,都会使用到POST方法.POST工作原理:使用POST方法时,URL会指向Web服务器运行中的一个应用程序的文件名,客户端写进数据,Web服务器从应用程序中接受数据,并将它存放到响应消息中,并返回到客户端.

so 问题来了 那么这么消息通过什么发送出去的呢?

委托操作系统将消息发送给web服务器

生成 HTTP 消息之后,接下来我们需要委托操作系统将消息发送给Web 服务器。尽管浏览器能够解析网址并生成 HTTP 消息,但它本身并不具备将消息发送到网络中的功能,因此这一功能需要委托操作系统来实现.
但在此之前,还有一项重要的工作要做

查询网址中服务器域名对应的IP地址

那么什么是IP地址呢?

在网络中,所有的设备都会被分配一个地址。这个地址就相当于现实中某条路上的“×× 号 ×× 室”。其中“号”对应的号码是分配给整个子网的,而“室”对应的号码是分配给子网中的计算机的,这就是网络中的地址。“号”对应的号码称为网络号,“室”对应的号码称为主机号,这个地址的整体称为 IP 地址。通过 IP 地址我们可以判断出访问对象服务器的位置,从而将消息发送到服务器。

用自己的一个例子来说说

我的域名是在腾讯云上购买的,服务器也可以购买,但我嫌服务器太贵了,就利用github搭建了一个网站,所以此时github就相当于一个服务器.
可见域名与服务器不是一一对应的.那么必须要查询你的域名的所对应的服务器的IP.

域名与IP地址并用的理由

域名是唯一的 那么为什么还要有对应的IP地址呢?
TCP/IP 网络是通过 IP 地址来确定通信对象的,因此不知道 IP 地址就无法将消息发送给对方,这和我们打电话的时候必须要知道对方的电话号码是一个道理。因此,在委托操作系统发送消息时,必须要先查询好对方的 IP 地址。可能你会问“既然如此,那么在网址中不写服务器的名字,直接写 IP地址不就好了吗?”实际上,如果用 IP 地址来代替服务器名称也是能够正常工作的。然而,就像你很难记住电话号码一样,要记住一串由数字组成的 IP 地址也非常困难。因此,相比 IP 地址来说,网址中还是使用服务器名称比较好。

DNS查询IP

通过Socket提供查询IP的功能
通过 DNS 查询 IP 地址的操作称为域名解析,因此
负责执行解析(resolution)这一操作的就叫解析器(resolver)了。
DNS:Domain Name System(域名服务系统)
将服务器名称和IP地址进行关联,但DNS的功能不仅仅局限与此,他还可以将邮件地址和邮件服务器进行关联,以及为各种信息关联相应的名称,可以让其他的应用程序调用操作系统中的网络功能,解析器局势这个库中的一种程序组件.
解析器实际上是一段程序它包含在操作系统的 Socket.
通过解析器向DNS服务器发出查询
调用解析器后,解析器会向 DNS 服务器发送查询消息,然后 DNS 服务器会返回响应消息。响应消息中包含查询到的 IP 地址,解析器会取出 IP地址,并将其写入浏览器指定的内存地址中。只要运行图 1.11 中的这一行程序,就可以完成前面所有这些工作,我们也就完成了 IP 地址的查询。接下来,浏览器在向 Web 服务器发送消息时,只要从该内存地址取出 IP 地址,并将它与 HTTP 请求消息一起交给操作系统就可以了。

但是我就是想用IP试试能不能打开网站!!!
作死系列

$ ping www.njnj-gif.github.io

ip为:xxx.xxx.xxx.xxx
然后进入网站提示找不到服务器地址 我慌了
然后我想这不会吧!
然后我尝试把这篇博客提交到github上,感觉跟平常提交的信息不太一样,然后我在github上查询,果然最近一次的提交是在3天前,完蛋 我开始慌了(是不是前几天给弄坏了)  然后我又在我腾讯云上找到我的域名管理
惊喜发生了:解析记录的ip跟我用终端命令查询的ip不一致
然后我用解析记录的ip登进浏览器,可以访问,但是没有写进内容
于是我果断把解析记录的ip给换了,然后再提交到github上面,成功了!!!
我竟然这几天都没有意识到这个错误!!!
当今天学到这个知识才发现,,感谢老天!!!
于是我再用终端查询到的ip输入到浏览器中
但是!!!
还是找不到ip
经过一波分析:我觉得是这样子的
因为我的github绑定了我自己的域名
而我的域名绑定的是github的服务器
这个ip可以用来访问github的博客页面
我又去验证了一波
看看github的那个网址能不能进我的网站
http://njnj-gif.github.io
输进去之后,自动转化为 nj-jay.com
那为什么输ip却不能显示网站呢???
我又去百度找了答案
使用nslookup对多个杭电下的网站进行解析,发现很多站点的ip地址是相同的,都是218.75.123.182,218.75.123.181这两个。如下图所示,杭电网站cloud.hdu.edu.cn和www.hdu.edu.cn以及杭电oj系统.www.hdu.edu.cn对应的是同一个公网ip地址(不知道公网ip和私网ip的,可以查一下百度)
这么多站点对应同一个ip地址,你只输入ip地址,浏览器当然不知道你到底要访问哪一个站点,这就是为什么你不能够使用ip地址去访问的原因所在.
这里面的知识可谓是个玄学 建议多百度
探究结束!!!
总结
输入github的网站,跳转到绑定的域名
或者直接通过输入域名,自动解析(寻找解析记录),查询对应的IP,就可以一一对应了

协议栈通过TCP/IP协议发送消息

发送者发出的消息首先经过子网中的集线器,转发到距离发送者最近的路由器上。接下来,路由器会根据消息的目的地判断下一个路由器的位置,然后将消息发送到下一个路由器,即消息再次经过子网内的集线器被转发到下一个路由器。前面的过程不断重复,最终消息就被传送到了目的地。

服务器返回响应消息

响应码

若响应失败
则出现404 not found信息
若响应成功
就他妈的复杂了哈

上图生动了表明了数据是怎么传输过去的
简单来说,收发数据的两台计算机之间连接了一条数据通道,数据沿着这条通道流动,最终到达目的地。我们可以把数据通道想象成一条管道,将数据从一端送入管道,数据就会到达管道的另一端然后被取出。数据可以从任何一端被送入管道,数据的流动是双向的。不过,这并不是说现实中真的有这么一条管道,只是为了帮助大家理解数据收发操作的全貌。
实际上
建立管道的关键在于管道两端的数据出入口,这些出入口称为套接字。我们需要先创建套接字,然后再将套接字连接起来形成管道。实际的过程是下面这样的。首先,服务器一方先创建套接字,然后等待客户端向该套接字连接管道。当服务器进入等待
状态时,客户端就可以连接管道了。具体来说,客户端也会先创建一个套接字,然后从该套接字延伸出管道,最后管道连接到服务器端的套接字上。当双方的套接字连接起来之后,通信准备就完成了。接下来,就像我们刚刚讲过的一样,只要将数据送入套接字就可以收发数据了.
综上所述,收发数据的操作分为若干个阶段,可以大致总结为以下 4 个。
(1)创建套接字(创建套接字阶段)
(2)将管道连接到服务器端的套接字上(连接阶段)
(3)收发数据(通信阶段)
(4)断开管道并删除套接字(断开阶段)

交换机和路由器的包转换动作通过互联网发送到客户端

这一过程同样是很复杂的
交换机的包转换工作:交换机并不只是简单地让信号流过,而是先接收信号并将其还原为数字信息,然后再重新转换成信号并发送出去的过程。
交换机的包转换工作:路由器和交换机一样也负责对包进行转发,但它们的工作方式有一些差异。交换机是基于以太网规格工作的设备,而路由器是基于 IP 工作的

终于回到了客户端的界面啦
可真够辛苦的呢
其实,交换机与路由器还有很多的东西没有讲呢
但是具备了我写的这么对东西也已经很不错了呢
没想到吧 
我连运营商都没有提到呢
 
是不是瞬间醒悟了过来
网络上还有很多的东西在等着我们去探索呢
加油吧!!!(我不行了 以后有时间再来探讨这些问题吧 哈哈哈)

rpc远程调用

上一篇

git打包go程序并安装库

下一篇

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

个人微信公众号

we-tuiguang

qq交流群

群号:1046260719

微信扫一扫

微信扫一扫