五分钟了解网络连接

前言:笔者最近阅读大量网络原理相关书籍,因此总结出此文,读完本文,读者们应该要了解下面名词:

浏览器、Web服务器、网址(URL)、HTTP、HTML、协议、URI、请求消息、解析器、Socket库、DNS服务器、域名

网络原理系列文章:
一、五分钟了解网络连接(已完成)
二、收发数据的原理(上)(已完成)
三、收发数据的原理(下)(已完成)
四、收发数据的番外篇(未完成)

  • 生成HTTP请求消息
  • 向DNS服务器查询Web服务器的IP地址
  • DNS服务器的互相配合(如何找出IP地址)
  • 委托协议栈发送消息

生成HTTP请求消息

1、从网址开始

我们看NBA,要在浏览器输入某个nba网址吧,没错。就是那串http://开头的那串玩意儿, http://sports.qq.com/,如下图,只不过浏览器把前面的http://隐藏而已,复制可以见到完整网址。

腾讯体育

这串玩意儿叫网址,更准确的叫URL(统一资源定位符)

我们一般访问的是Web服务器,但实际上浏览器还有很多功能,FTP(文件传输协议)服务器上下载和上传文件,同时也具备电子邮件客户端的功能。所以有各种不同的URL。访问Web服务器用“http”,而访问FTP服务器用“ftp”.下面图一列举了互联网常见的几种URL,不💖喜欢看请忽略。
在此,请对域名,有个浅显了解。往后会详细介绍。

域名:像www.baidu.com这样以句点(.)分隔的名称。

图一

URL开头的文字,即 “http:” “file:” “mailto:” 这部分文字都表示文字都表示浏览器应当使用的访问方法。比如访问Web服务器时应该使用HTTP协议,而访问FTP服务器则应该使用FTP协议。因为,我们可以把这部分理解为访问时使用的协议类型

HTTP协议:超文本协议

2、HTTP的思路

HTTP的基本思路

HTTP协议定义了客户端和服务端之间交互的消息内容和步骤。首先,客户端向服务器发送请求消息,请求消息包含两部分(“对什么”和“进行怎样的操作”)。“对什么”是指访问目标(URI),“进行怎样的操作”则是指方法,也称HTTP谓词。收到请求消息后,Web 服务器会对其中的内容进行解析,通过接收的URI和方法完成自己的工作,然后将结果存放在响应消息中,返回给客户端。

笔者认为,URI强调的是给资源标记命名,URL强调的是给资源定位,URL显然比URI包含信息更多,举个例子,我是小肥仔,我是来自广东深圳市光明区某路某小区201号房的小肥仔彭友。如果URI为前者,则URL为后者。

3、生成HTTP请求消息

使用GET方法的情况下,仅凭方法和URI,Web 服务器就能判断需要进行怎样的操作,因此消息体中不需要填写任何数据。而POST则需要消息体。

4、返回响应消息

我们把请求消息发送出去之后,Web服务器会返回响应消息。其中会有状态码和响应短语。


状态码概要

1条请求消息中只可以写1个uRI,所以每次只能获取1个文件。比如1个页面中包含3张图片,那么获取网页加上获取图片,一共需要向Web服务器发送4条请求。

向DNS服务器查询Web服务器的IP地址

1、IP地址的基本知识

生成HTTP消息之后,我们需要委托操作系统将消息发送给Web服务器。

因为浏览器只能解析网址并生成HTTP消息,但它本身不具将消息发送到网络中的功能,只能委托操作系统。操作系统发送消息,必须提供IP地址,而不是通信对象的域名(前面说过,类似www.baidu.com的一串玩意)。所以生成HTTP消息的下一个步骤就是根据根据域名查询IP地址。

IP地址科普:

互联网和公司内部的局域网都是基于TCP/IP的思路来设计,TCP/IP结构是由一些小的子网,通过路由器连接起来组成一个大网络。这里的子网暂时可以理解为几台计算机。
在网络中,所有的设备都会被分配一个地址。这个地址就相当于现实中某条路上的“xx号xx室”。其中“号”是分配给整个子网的,而“室”对应的号码称为网络号,“室”对应的号码称为主机号,这个地址的整体叫做IP地址。
通过IP地址,我们可以判断出对象服务器的位置,从而将消息发送到服务器。实际的IP地址是一串32比特的数字,按照8比特(1字节)为一组分成4组,分别用十进制表示,然后再用圆点隔开。eg:“10.11.12.13”、“202.96.128.86”

2、域名和IP地址并用的理由

TCP/IP网络是通过IP地址来确定通信对象,因此不知道IP地址就无法将消息发送给对方,这跟我们打电话需要知道对方的电话号码一样才可以。

可能有人会问,为什么不直接用IP地址去访问网址,确实,我们直接输入IP地址是可以访问的。但是IP地址那串数字,难以记住。比如百度的网址,不是“www.baidu.com”,而是“202.96.128.99”,你怎么记住呢?

然后你可能又会问,干么不直接用域名去确定通信对象呢,其实,这是可以的,但是这会影响运行效率。

IP地址的长度为32比特(4字节),而域名最短的也要几十个字节,最长甚至可以达到255字节。字节长而且长短不一,处理起来非常复杂,所以这影响了效率(增加路由器的负担)。

3、Socket 库提供查询IP地址的功能

DNS服务器可以帮我们查询到IP地址。

通过DNS服务器发出查询的操作成为域名解析。负责解析的这个操作就叫做解析器,解析器它是一段程序,包含在操作系统的Socket库中(Socket库包含很多发送和接受数据的程序组件,是网络开发的一种标准库)。Socket库是标准组件,我们从应用程序进行调用即可。如果,解析器的程序名称为“getIPadressWithDN”,以及需要解析的域名为“www.baidu.com”,过程如下:

解析器的调用方法

4、解析器的内部原理

解析器生成要给DNS服务器的查询消息,但是解析器本身也不具备使用网络收发数据的功能(之所以用“也”,是因为这一过程跟浏览器生成HTTP消息发送给Web服务器类似),所以需要委托协议栈(操作系统内部的网络控制软件,也叫“协议驱动”、“TCP/IP驱动”)执行操作,再通过网卡发给DNS服务器。

网络程序调用解析器,程序的控制流程会发生转移。那么“控制流程转移”指的是什么呢?
一般来说,应用程序编写的操作内容是从上往下按顺序执行的,当到达需要调用解析器的部分时,对应的那一行程序就会执行,应用程序本身的工作就会暂停,然后,Socket库的解析器开始运行,完成应用程序委托的操作。像这样,由于调用其他的程序,原本运行的程序进入暂停状态,而被调用程序的开始运行。这就是“控制流程转移”。

DNS服务器的互相配合

1、DNS服务器的基本工作

DNS的基本工作就是接受来自客户端查询消息,然后根据消息的内容返回响应。其中,客户端的消息包含3中信息

1、域名:
服务器、邮件服务器(邮件地址中@后面的部分)的名称
2、Class:它的值永远为“IN”
3、记录类型:
表示域名对应何种类型的记录。当类型为A(Address)时,表示域名对应的是IP地址;MX(Mail eXchange)时,则表示域名对应的是邮件服务。

一、查询“www.baidu.com”IP地址:

域名=www.baidu.com、Class = IN、记录类型=A

二、查询“dwyane@qq.com”邮件服务器:

域名=qq.com”、Class = IN、记录类型=MX

DNS服务器的基本工作

2、域名的层次结构

互联网中不计其数的服务器,所以存储他们信息的只用一台DNS服务器是不可能的,需要将信息分布在多台DNS服务器,然后它们相互接力配合,从而查找出要查的信息。DNS服务器中所有信息都是按照域名以分层次的结构保存。类似公司中的事业集团、部门、科室结构。

DNS中的域名是用句点来分隔的,域名越靠右的位置表示层级越高。比如:“www.ituring.com.cn”域名,cn 是公司集团,com 是研发部, ituring 是后台小组,所以可以理解为某公司集团cn 下的com 研发部的 ituring 后台小组的 www。其中相当一个层级的部分称为域,即 com 域的下一层级是 ituring 域, 再下一层才是 www 这个名字

cn是国家顶级域名,中国是cn,美国是us,日本是jp,表示工商企业的 .com,表示网络提供商的.net,表示非盈利组织的.org等

有时我们会看到类似这种“sports.qq.com”、“finance.qq.com ”,这两者有什么关联吗?
这两者其实就是某讯旗下的体育和金融版本,“qq.com”是他的公司域,因为不可能说一个公司的不同板块(或者说不同的事业集团),我给你公司多个DNS服务器,一个域是不可分割的。解决办法是建立子域。例如某讯就是在公司域“qq.com”的下面建立子域“sports.qq.com”、“finance.qq.com ”

寻找相应的DNS服务器并找到IP地址

找到DNS服务器中存放的信息,关键是找到信息归哪台DNS服务器管。

HTTP的三次握手、四次挥手
https://blog.csdn.net/AI_Gentleman/article/details/81209053

互联网有无数台DNS服务器,不可能一台一台挨个找。所以采取以下方法。首先,将负责管理下级域的DNS服务器的IP地址注册到他们的上级DNS服务器中,然后上级DNS服务器的IP地址再注册到更高一级的DNS服务器中,以此类推。

在互联网中,比com和cn更高一级,称为根域。根域在域名的最后加上一个点,如“www.baidu.com.”最后的那个句点代表根域名,但是那个句点经常被省略,根域的DNS服务器保管着com、cn等DNS服务器的信息。由于上级DNS服务器保管着所有下级DNS服务器的信息,所以我们可从根域开始一路往下顺藤摸瓜找到任意一个域的DNS服务器。

另外,根域的DNS服务器信息存在互联网中所有的DNS服务器中。分配给根域DNS服务器的IP地址只有13个。

下面以“www.gov.cn”和“sports.qq.com”举例说明DNS服务器查找流程

DNS服务器查找流程

客户端首先会访问最近的一台DNS服务器(也就是客户端的TCP/IP设置中填写的DNS服务器地址),假设我们要查找“sports.qq.com”这台Web服务器相关信息,但由于最近的DNS服务器没有存放“sports.qq.com”这一域名对应的信息,所以从该服务器获取根域的地址,把查询消息转发给根域,继续从根域查找,根域没有该域名信息,继续往下找,去到com域找,com域没有“sports.qq.com”的信息,所以返回他下一级的“qq.com”域的DNS服务器IP地址,继续往下找...


DNS地址

通过缓存加快DNS服务器的响应

有时候不需要从最上级的根域开始查找,因为DNS服务器有一个缓存功能,可以记住之前的域名。如果要查询的域名和相关信息已经在缓存中,那么可以直接从缓存处得到所需信息,然后从缓存位置开始向下查找。这样对比与从根域开始,减少了查询时间。

当查询的域名不存在时,缓存也会存储起来,下次查询时,直接快速反应。
如果信息被缓存了,原本的注册信息可能会发生改变,那么缓存中的信息就可能不正确了,因此,DNS服务器中保存的信息设置一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。

委托协议栈发送消息

数据收发操作

获悉ip之后,就可以委托操作系统内部的协议栈发送消息到目标IP地址,也就是发送到Web服务器,发送给Web服务器的HTTP消息是一种数字消息。

简单来说,整体思路就是收发数据的两台计算机之间连接了一个数据通道,数据沿着这个通道流动,最终到达目的地,会在目的地的那一端被取出。数据流动是双向的,可以从任何一个端流入。

实际过程,可把收发数据总结为四步:

  • 1、创建套接字(创建套接字阶段)
  • 2、将管道连接到服务器端的套接字上(连接阶段)
  • 3、收发数据(通信阶段)
  • 4、断开管道并删除套接字(断开阶段)



参考文献:
域名知识百科
网络是怎样连接的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342