「一道面试题」输入URL到渲染全面梳理上-网络通信篇
写在前面
此文是一道面试题,又不仅仅是一道面试题
从输入 URL
到页面烘托发作了什么?比方在浏览器输入了 www.qq.com
后浏览器是怎样把终究的页面出现,这是一个非常经典的面试题,不管是2 [ G 1 $ 5 + #大公司仍是小公司甚至前* [ x : H [端或后端的面试中命中率都极高,因为触及到的知识点和可发掘的/ S 8当地比较多,而且这中心几乎每一步都是可以优化的
已然我们刷到了I y z y ^ C | q这篇帖子,希望我们花~ % r { 8 T ~ L h点时间耐心看完,不会让你绝望的,e ` ! ( 3 : i此文从网络五层模型详解析及浏览器页面烘托机制等多方面来知道URL从输入到页面烘托的整个进程,内容仍是满充& L 1 d |分的
写着写着发现有点长,就分红三篇了
前两篇文章都是帮助我们了解整个进程,所以并没有直接给出答案,而是给我们梳了解说一些相关琐碎的知识,3 T ^ 7目的不是答题,而是完y l p a # A W全了解此间流程,我们只需仔细看到终究一篇就可以自豪的答复这道题了,自己心中给自己一个答案,再看终究一篇我个人通过这些知识总结的答案 ( 假定你的总结更加充分u * ! O %/详尽,请在评论差异享出来,我们一起查漏补缺 ) ,先看后考虑,再总结彼此讨论,作用最佳
URL从输入到页u ! t V – k J r面烘托这整个进程可以分为 网络通讯
和9 t ! ) % # C 页面烘托
两个方面,一般u k c 6 b l y后端程序猿答复这个问题偏重网络通讯就行了,但是前端页面烘托也得了解,总之答复的越详细分值越高
那么初步吧,这篇文章我们先来看网络通讯方面,9 S 3 J (或许前端同学我们对网络方面的认知应该没有后端同学强,其实这道面试题最能出色自己的也是网络方面,因为它触及到了许多网络通讯原理的知识,所以这块我们慢慢收拾
网络分层的由来
不晓得我们知不知道网络分层,网络其实有许多层,层与层之间又有许多协议存在,还有各式各样的数据包,这玩意干巴巴的,很没意思,这么多层太费事了,为什么有这么多层呢?为什么不直接一层呢?
起先核算机与核算机之间的通讯只4 Z需求一根线就可以完毕通讯,但是国际那么大,那么多核算机,间隔太远了,而且这线还老4 * i _ a [ T O简单被无良的人悄然剪断
后来就出来了无线网,虽然其间网关、路由之间也需求连线,但不是让每台L m A f核算机两两联接,而是一个区域为单位核算机彼此衔U # Y f q W接通讯
后来发现核算机之间的连线只能传送0/1信号,另一台计h 0 j算并不知道那么多0/1代表什么,就像 010101010101111000111011010
你知道这一大串是? x ! e ? , o (什么意思吗,核算机也不知道,不同厂商生产的核算机连线完毕通讯D N v也是很` $ u ) & b d 2费事的,干脆定义一套规则吧,不管是哪个牌子的核算机,都有必要遵守这套规则,这套规则就是我们常常说的 网络协议
哦哦,是在说 网络分层
,不是讲 网络协议
,持续持续,接着我们上面的论题,问题来了,核算机之间通过连线传送0/1信号的问题虽然规则了通讯规则,但是除了像0/7 H + z I 3 u ^ i1这种无意义的信号之外,网络中还存在着其他各式各样的问题
- 两个核算机之间怎样进行辨认?
- 怎样才华知道对方的地址?
- 不同核算机运用程序怎样知道是给自n V ` M 8 H r / –己传递的数据?
- 不同的通讯数据格式怎样来规则等等一系列的问题
假定各种问题都写v _ K成一套协议来规则两头通讯的规则,但是z J 3 ) Y v ;假定其间哪些规则通讯中出现问题,影响到了其他规则,最常见的就是数据包,一个数据包中假定包括各式各样的协议,呀呀呀
假定我们对网络进行分层,每一层担任一项详细的作业,然后把数据传送到下一层,那么来往通讯和网络互联这一杂乱( T 2 W的} ` } b ` t M Z L问题是不是就变得较为简略化了呢
或许我们没有太了解,不要紧,接着看
TCP/IP五层模型
已然要分层,那么分为几层才好呢?
现在的网络层次可划分为 四层因特网协议栈
和 七层因特网协议栈
,其实起先网络分层是标准的七层,也就是我们所说的 OSI 七层模型
,参看模型是国际标准化安排 ISO
拟定的D i L一个用于核算机或通讯系统间互联的标准系统,一般称为 OSP [ U 4 .I参看模型
或 七层模型
或许对网络有些了解的同学知{ 6 w 8道还有 TCP/IP 四层模型
和 TCP/IP 五层模型
,这又是怎样出来的呢?
其实所谓的 TCP/IP 四层模型
和 TCP/IP 五层模型
是以 OSI 七层
优化而来,把某些层进行兼并了,本质上仍是相同的,OSI七层, } F ( ; : + %模型
太过细化,有必定F * = K 9的参看含H ; 7义,但完毕起来比较繁琐,比较较而言,TCP/IP模型
比较简洁,具有较强的实践运用价值
我们来看一个模型的? j s 5 4 $ I &图片 ( 网图* E 6 / k s 9 )侵删 ); _ a # | 2 t

TCP/IP
将核算机网络分红了四个层次,一般材料或教程里都是结合 OSI7层模型
和 TCP/IP4层模型
,将核算机网络按照5层的模型来讲,5层模型仅仅s p [ g m V 3为了便当介绍核算机网络原理而规划的,而在实践运用中仍是 TCP/IP四层模型
,这点我们要了解
这儿我们相同用五层来解说,比较好了解些,当j = U X然,这儿只能让我们脑海里有一个详细的网络分层结构D r X P ( o D 1 4的认知,作为面试答复了解这些足够,而后引荐我们持续深入,可以看相关的书本和材料,此文也可以起到一个引导的作用
PS: 作为一个前端或许9 s x h c ]是后端,我们都是软件开发,所以偏重点放在网络层以上就可以了,物理层和数8 $ u据链路层都a E U @ n # ]是硬件相关的,所以这两个层下面不会过多叙说,了解即可
物理层
物理层,望文E 0 r g M T生义,通过物理办法 ( 网线,光纤,无线 ) 将设备联接在一起,传输0/1电信号 ( 也叫比特流 ) ,就像我们上边讲到的核算机j b 4 k m之间的物理连线
首要用来传输0/1信号,因为0/1信号( ^ 4 Q R没有任何的现实意义,所以用另H 8 + u A W一层用来规则不同0/1组合的意义
数据链路层
仍是上面说的,010101010101111000111011010
,像这么一串数据核算机并不知道是什么意思
基层的物理层不能规则不同0/1组合的信号代表什么意义,所以在数据链路层规则了一套协议,专门给0/1信号进行分组,规则不同的组代表的是什么意思,然后让两头核算机都可以进行辨认,这个协议就是我们常说的 以太网协议
以太网协议
以太网协议规则一组电信号构成一O { w C & )个数据包,我们把这个数据包称为 帧
,每一个帧由 标头
和 数据
两部分组成
帧的大小一般为 64 - 1518
个字节 较大的数据则需求分红多个桢
标头 HeadO Q * K & (
,18个字节组成,标头中包括这个 桢
是由谁发送、发送给谁这些信息,所以标头1 :首要是一些说明数据 例如发送者/接受者等信息
数据 Data
,46-1500个字u n f I b A Q节组成,里面| i Y 2 (首要是发送者想给接收者的内容
把一台核算F Z & – % & D S机的数据通过物理层和数据q , p z链路层发送给别的一台核算机,怎I 1 |样标识对方以及怎样知道对方的地址呢? 仅有标明 MAC地址
出现了
MAC地址
进入网络的每一台计h c Q 1算机,都会有网卡接口,每一个网卡都会有一个仅有的地址,就是所谓的 MAC地址( D , R E
,它就是网络中每台核算机设备的仅n w % W Q ) v有标识,是一串由48个字节组成的十六进制数,每台核算机在厂商 @ R R 2 X e E –生产出来的时分就标识好了,所以我们用 MAC地址
来标识对方
再来看一个图 ( 网图侵删 )

如上图所示,如核算机A知道了核算机B的MAC地址,然后核算机A想要给核算机B传送数据,尽w H p C 6管核算机A知道了核算机B的MAC地址,但是A要怎样给B传送数据呢?
核算机A不仅连着核算机B,而且核算机A也联接着核算机C和D,虽然核算机_ Z . : j m MA知道核算机B的MAC地址,但是却不知道B是在w f _哪一路上,所认为了处理这个问题,广播( Z ^ u k V V
这个概念就出现了
广播
在同一子网络,就是我们常说的局域网中,核算机通过广播来通讯,即向K + . ? } B –同子网中全部核算Q @ ) y机发送数据包,其它核算机根据数据包中接收者的 MAC地址
来w v F p 1 z C判别是否接收数据包
通俗来讲,就是A会一_ w & 9 } / ? 起给B/C/D发送数据包,这个数据包中会包括着接收者的 MAC地址
信息,当B/C3 D a p/D接收t n { b + {到了数据包,会取出数据包中的 MAC地址
与自身的 MAC地址
对比,如相同就接收这个数据包,不然就丢掉这个数据包 ( 丢包 ),这种办法我们称之为 广播
就像,你和女友在人群中走散了,{ 9 + M ` d你大喊一声她的姓名,听到的人会自己匹配,是自己就会答理,不是自己就当你是傻子不理你
那么到了现在,我们知道了核算机之间的标明和怎样通讯,但是还有一个问题,要怎样知道对方的 MAC地址
呢 ?这又牵出了 ARP协议
,通过 ARP协议
来得知对方的 MAC地址
,这个协议是网络层的一个协议,所以我们暂且放置,先接着往下看
网络层
看了物理层和数据链路层的作用,或许我们会觉得好像现已可以完毕正常通讯了,那么网络层又是做什么的呢?
其实我们所c U ` M [ q * A处的网络,是由无数个子网络 ( 局域网 ) 构成的,广播的时分,也只有同一个子网里的核算机可以收到,如过没有子网这种东西,核算机A通过广播的办法发一个n a c U & E i B数据包给核算机B,那么P R V v全国际一切的核算机都能收到这个数据包,然后进行对比再放弃,那么多台计I 8 D # W ]算机后果可想而知,子网也因此而发作
那么问题又来了,我们要怎样差异 Mac地址
是属于同一个子网的呢?假定是X 1 V = Z c Y同一个子网,我们就用广播的办法把数据传送给对方,假定不是同( W C m O b !一个子网的,我们就会把数据发给网关,让网关进行转发
怎样判别两台核算机是否在同一个子网中呢,这就是网络层干的事情,为了处理这个问题,就有了 IP协议
的概念
IP协议~ H E * – 7
IP协议
所定义的地址,就是我们常说的 IP地址
,IP协议
有两个版别,ipv4 / ipv6
,现在用的最多的仍是ipv4,这个地址由32位的二进制数组成,我们一般把它分红4A A f段的十进制表明,地址规模在 0.0.0.0 ~ 255.255.255.255Z p ! h p e N
,这个我们应该都很= V 8 K q V B b常见
每一台想要联网的计( ; S算机都会有一个 I% j M 7 f [ ] EP地址
,这个 IP地P [ k e址
分为两部分,前面一部分代表网络,后面一部分代表主机,可u y E E ; .是网络部分和主机部分所占用的二级制位数是不固定的
假定两台e o = [ [ P 7 k核算机的网络部分是如出 E l a C一辙的,我们就说这两台核算机是属于同一个子v % 9网 ( 局域网 ) 中,例如 192.168.17.1
和 192.168.1? e b7.2
, 假定这两个 IP地址
的网络部分为 24 位,主机部分为 8 位,那么他们的网络部分都为 192.168.43
, 所以我们说这两台核算机处于同一个子网中
问题又随之而来了,给我们两个 IP地址
,鬼8 – i u知道网络部分占几位,主机部分又占几位呢?
这就又引出了R m b ` A }我们另一个关键词 子网掩码
子网掩码
子网掩码
和 IP地址
相同也是32位二进制数,但是它的网络部分规则d E k Z c o ^ 0 n全部为1,主机部分规则全部为0,也就是说假定上面那两个 IP地址 的网络部分为24位,主机部分为8位的z & G X * a U话,那他们的子网掩码为
11111111.11111111.11111111.00000000
,也就是 255.255.255.0
有了子网掩码,怎样来判别 IP地址
是否处于同r J & X一个子网中呢?
显着,知道了子网掩码,相当于我们知道了5 B x X ; e网络部z 2 M分是几位,主机部分是几位,我们只需求把 IP地址
与他的子网掩码做一个 ( and8 _ ; V ) 运算,然后把各自的作用进行比较就行了,假定比较的作用相同,则代表的是同一子网,不然不是同一子网
也就是说有了两台核算机的 IP地址
和 子网掩码
,我们就可以判T e X {别他们是否处在同一子网傍边了
假定他们处在同一子网傍边,核算机A要. D . ] 1和核算机B发送数据时,我们通过是 ARP协议
来得到i e A核算机的 MAC地址
ARP协议
ARP协议
也是通过广播的办法,给同一个子网中每个电脑发送一个数据包,这个数据包会包括接收者的 IP地址
,对方收到这个数据之后,会取出 IP地址
与自身的对比,相同则会+ – U把自己的 MAC地址
回复给对方,不然就丢掉这个数据包,这样核算机A就知道核算机B的 MAC地# d ! P 2 w c m址
了
或许我们会问,知道了 MAC地址
后,发送数据是通过广播的D w 1办法发送,问询对方的 MAC地址
也是通过广播的办法来发送,那其他核算机怎样知道你是要传输数据仍是问询 MAC地址
呢?
其实在问询 MAC地址
的数据包里,在对方的 MAC地址
这儿填的是一个特别的 MAC地址
,其他核算机看到这个特别的 MAC地址
后,就知道广播是在问询了
假定两台核算机的 IP 不是处于同一个子网之中,这个时分我们就会把数据包发送给网关,然后让网关帮我们进行转发
运送层
通过 物理层
/ 数据链路层
以及 网络层
的互相协调,我们成功的把数据 P D = f }从核算机A传到了核算机B,但是核算机B里面有各式各样的运用程序,核算机是怎样知道这个数据是发给哪个运用程序的呢?
这个时分,端口
就上场了,当核算机A传输给核算机B的时分,还得指定一个端口,以供# ~ N ! l r d特定的运用程序来接r / D , F纳处理,作为程序员的我们对端口就更了解了,端口规模:0~65535
,其间前1023个端口被系统占用
那么也就是说,传输层的功用就是建立端口到端口的通讯,而比较之下网络层的功用是7 X . k ` E :建立主机到主机的通5 Z Q K ~ )讯
有了 IP
和 端口
,我们才华w = ` X x 5 e G精确通讯,我们输入的IP有些并没有指定端口号,其实是有些传输协议,s f 2 b设定了一些默Q T Q N W n l B许端口,例如 HTTP
默许是80,HTTPS
默许是443,这些端口信息也会包括在数据包里面
传输层最常见了两大协议就是 TCP协议
和 UDP协议
UDP协议
UDP协议
全称是用户数据报协议,是一种无联接的协议,与TCP协议相同用于处理数据} ; ( b ( W }包
UDP/ G + # b F 数据包分 标头
(8个字节) 和 数据
(加标头不逾越65535个字节), UDP数据$ S M X包放在IP数据包的 数据
中,标头首要包括宣告– J P A 4 i H p端口和接收端口
UDP有不供应数据包分组、拼装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全无缺抵达的
UDP协议特色
-
面向无联接
- UDP 想发数据就可以初步发送了,不需求联接,它仅仅数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作
- 在发送端,运用层将数据传递给传输层的 UDP 协议,UDP 只会给数据添加一个 UDP 头标识下是 UDP 协议,然后就传递给网络层了
- 在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给运用层,不会任何拼接操作
-
有单播I @ O k E N x z、多播、广播
- UDP 不止支撑一对一的传输办法,相同支撑一对多,多对多,多对一的办法,也就是说 UDP 供应了单播,多播,广播的功用
-
面向报文
- 发送方的UDP对运用程序交下来的报文,在添加R q ^ ) C 1 I首o * m ~ W %部后就向下交付IP层
- UDP对运用层交下来的报文,既不兼并,也不拆分,而是保存这些报文的鸿沟
- 因此,运用程序有必要选择适合大小的报文
-
不可靠性
- 不可靠性首要体现在无联接上,通讯都0 m _ x # (不需求建立联接,想发就发,这样的情况必v t G s定不可靠
- 收到什么数据就传什么数据,而且也不会备份数据,发送数据也不会关心对方是否现已正| U 1 )确接收到数据了
- 网络环境时好时坏,但 UDP 没有拥塞控制,一贯会以安稳的速度发送数据,即便网络条件欠好,也不会对发送速率进行调整,这样完毕的弊端就是在网络条件欠好的情况下或许会导致丢包,但是长处也很显着,在某些实时性要求高的场景 ( 比方电话会议 ) 就需求运用 UDP 而不是 TCP
-
头部开支小,传输数据报文高效
- UDP, { ? s S z p 头部包括了以下几D U q E : q F 1个数据
- 两个十六位的端口号,分6 } U 9 U别为宣告端口和接收端口
- 整个数据报文的长度
- 整个数据报文的查验和(IPv4 可选字段),该字段用于发现头部信息和数据中的差错
- 所以UDP 的头部开支小,只有8字节,比较 TCP 的至少20字节要少L 3 9得多,在传输数据n O x $ ! ^ Y 4报文时是很高效的
- UDP, { ? s S z p 头部包括了以下几D U q E : q F 1个数据
TCP协议
当一台核算机想要与另一台核算机通讯时,两台核算机之8 ) ;间的通讯需求畅通且可靠,这样才华保证正确收发数据
-
例如你想检查网页或检查电子邮件时,A h ! 2 / a F希望无缺且按顺序检查网页,而不丢掉任何内容
-
又例如当你下载文件时,希望获得的是无缺的文件,而不仅仅是文件的一部分
假定数据丢掉或乱序,都不是你希望得到的作用,于是就用到了 T= C s ^ TCP
TCP协议
全称是传输控制协议是一种面向联接的、可靠的、根据字节省的传输层通讯协议,TCP
是面向联接的、可靠的流协议,什么是流?流就是指不间断的数据结构,可以把它幻想成排水管中的水流
TCP三次握手建立联接,四次挥手断开联接4 N 又是一个论题,接下来我们就简略说一下
TCP三次握手
三次握手建立链接,为便当了解,仿一次电面
-
小李 (客户端):您好,您是xx的面试官a @ t 0吗?
-
面试官 (服务端):嗯嗯,是的,你是昨日投简历的小李吗?
-
小李H z m g w W D } P (客户端):嗯嗯,是的,K + b K t 0 * z T我是
接_ h X k , ! 5 L D着,小李和面试官开A = 1 A端愉快的侃起了大山
根据上面的内容,我们再来看下图 (网图侵删)

按正规流D n ] [ z @ s e 2程来说} w F ? u [ 9 a建立联接的三次握手如下
-
榜初次9 D V B w ~握手 客户端向服务端发送联接央求报文段,该报文段中包括自身的数据通讯初始序号,央求发送后,客户端便进入
SYN-SENT
情况 -
第2次握手 服务端收到联接央求报文段后{ . P T F ) : : !,假定附和联接,则会发送一个应对,该应对中也会包括自身的( = Q数据通讯初始序号,发送完毕后便进入
SYN-RECEIVED
情况 -
第三次握手 当客户端收到联接G S J附和的应对后,还要向服务端发, [ % 6 @ V U H A送一q w ? J个供认报文,客户端发完这个报文段后便进入
ESTABLISHED
情况,服务端收到这个应对后也进入ESTABLISHEDy z 6 ^ )
情况,此时联接建立成功
或许我们会有疑问,为什么 TCP 建立联接需求三次握手,而不是两次?
其实这是为了避免出现失效N k n的联接央求报文段被服务端接收的情况,然后发作差错
TCP四次挥手
四次挥手断开链接,接着仿电面
-
面试官 (主动方):嗯,你的情况我这边了解了,等告诉吧 ( 我想挂了 )
-
小李 (被逼方):嗯嗯,好的 ( 这就想挂了?我还没侃够 )
-
小李 (被逼方):那希望) { e ( + W有时机能和您一块同w 9 L =事 ( 拜拜吧您嘞 )
-
面试官 (主动方):嘀…嘀…嘀…嘀
再看正派的进程图 (网图x 1 4 3 l h p r )侵删)

TCP是双向的,所以在断开联接U } 4 v : X _ 1 N时两头都需求发送 FIN 和 AC. n DK
-
榜: E r P 1 k n ? A初次挥手 若客户端 A 认为数据发送完毕,则它需求向服务端 B 发送联接开释央求
-
第2次挥手 B 收到联接开释央求后` k ` |,会奉告运用层要开释 TCP 链接,7 u k然后会发送
ACK
包,并进入CLOSE_WAIT
情况,此时表明 A 到 B 的联接现已开释,不再接收 A 发的数据了,但是1 l | % W ^ ( M .因为0 = p U O TCP 联接是双向的,所以 B 依旧可以发送数据给 A -
第B q l m y 7三次挥手= o k 4 : F B 假定此时还有没发完的数据会持续发送,完毕后会B – | D向 A 发送联接开释央求,然后 B 便进入
LAB i G Q L 4 ; QST-ACK
情况 -
第四次挥手 A 收到开释央求后,向T l F Z i f B 发送供认应对,此时 A 进入
TIME-WAIT
情况,该情况会持续 2MSL(最大段生存期,指报文段在网络中生存的时间c l s c [,超时会被扔掉)时间,若该时间段内没有 B 的重发央求的话,就进9 t I f 5 K u入CLOSED
情况,当 B 收到供认应对后,也便进入CLOSED
情况
为何客户端终究还等候2MSL
客户端需求保证终究一次发送的 ACK
报文到服务器,假定服务器未收到,可以# 5 * n W p :央求客户端/ e ; S重发,这样客户端还有时间再发,重启 2MSL 计时
TCP~ 0 H x/IP的并发束缚
其实浏览器对同一m J ( P域名下并发的 TCP 联接是有束缚的(O Z n b V y . ) 02-10个不等)
并] r 8 J且在 HTTP1.0
中往往一个资源下载就需求对应一个 TCP/IP 央求
TCP协议特色
-
面向联接
- 面向联接,是指发送数据之前有必要在两头建立联接,建立联接的办法就是
三次握手
,这样能建立可靠的联接,为数据的牢h @ y U ) : c V靠传输打下了基础
- 面向联接,是指发送数据之前有必要在两头建立联接,建立联接的办法就是
-
仅支撑单播传输
- 每条TCP传输1 Y ? + [ Q 8联接只能有两个端点,只能进行点对点的数据传输,不支撑多播和广播传输办法
-
面k c s向字节省
- TCP不像UDP相同那样一个个报文独立传输,而是在不保存报文鸿沟的情况下以字节省办法进行~ ) ! Z D传输
-
可靠传输
- 关于可靠传输,判别丢包,误码靠的是TCP的段编号以及供认号,TCP为R T = h * D b了保证报文a r [ q传输的可靠,就给每个包一个序号,一起序号也保证了传送到接收端实体的包的按序接收
- 然后接收端实体对已成功收到的字节发回d @ & X _ ~一个相应的供认(ACK),假定发送端实体在合理的往复时延(RTT)内! u W ~未收到供认,那么对应的数据(假定丢掉了)将会被重传
-
供应拥塞控制
- 当网络出现拥塞的时分,TCP 可以减小向网络注入数据的速率和数量,缓解拥塞
-
TCP供应全双工通讯
- TCP容许通讯两头的运用程序在任何时分都能发送数据,因为TCP联接0 ^ { 6 G ( O L的D X w x U / f 2两头都设有缓存,用来暂时存放双向通讯的数据
- 当然,TCP可以当即发送一个数据y 9 C l h ^ _ }段,也可以缓存一段Z ^ = : + 7时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)
UDP协议和TCP协议差异
到了现在,我们应该对UDP和TCP都有些了解了,我们直接对比其作用再P k Y 1 J进行总结
对比 | UDP | TCP |
---|---|---|
是否联接 | 无联接 | 面向联接 |
是否可靠 | 不可靠传输,不运用流量控制和拥塞控制 | 可靠传输,运用流量操W H p k u ` o控和拥塞控制 |
联接个数 | 支撑一对一,一对多,多对一和多对多通讯 | 只能一对一通讯1 W a N e |
传输办法 | 面向报文 | 面向字节省 |
首部开支 | 首部开支小,仅8字节 | 首部最小20字节,最大60字节 |
适N t * I用场景 | 适用于实时运N ? W m C ] 4用 ( IP电话、视频 G |会议、直播等 ) | 适用于要求可靠传输的运用,例如文件传输 |
- TCP向上层供应面向联接的牢& j g / ~ ;靠服务 ,UDP向上层供应无联接不可靠服务
- 虽然 UDP 并没有 TCP 传输来的精确,但是也能在许多实时性要求高的当地有所作为
- 对数据% 2 ) w g J m精确性要求高,速度可以相对较慢的,可以选用 TCP
TCP 我们就简略说到这儿,接下来我们接着来看运用层
运用层
运用层是最接触用户的,上面几层咱g B ,们收到了传输层收到的数据,TCP/UDP协议可以传递各种程序的数! 2 l据包,就像邮箱/网页/FTP等等,所以就需求不同的协议来规则数据的格式,收到后才华烘托解读,运用层就是由这些协议构成,它的数据包放在UDP包/TCP包的 数据
中
咱h I q P 6 f B g们遨游网络时常常用到的 HTTP 协议、文件传输用的 FTP 协议、电子邮件发d j [ k } @ l送的 SMTP、域名解析的 DNS 协议、长途登录的r 4 l Telnet 协议等等都是属于运用层F , . B 9 N Z t的
还有Socket,它是在运用层和传输层之m i , H V间的一个笼统层,它把TCP/IP层杂乱的操作封装成几个简略的接口供运用层调用,然后完毕进程在网络中的通讯
上面我们现已底子了解到了核算机的一些通讯基础,可以说到现在停止从一个IP到通讯完毕都现已知道了,但是我们输入的是域名不是IP,那W T Y m么它是怎样变成IP通讯的呢?这就要详细说a ! L ) E ? E +说 DNS
了
DNS是什么
D/ ~ ; w P K gomain Name System
简写 DNS
,翻译过来就是域名系统的意思,它是一种安排成域? _ 9 ?层次结构的核算机和网络服务命名系统,用于 T) j A YCP/IP
网络,作为将w @ 9 3 G –域名和IP; K – } 4 Z @ +地址彼此映射的一个分布式数据库,它所供应的服务是用来将 主机名
和 域名
转换为 IP地址
的8 m j z t ? 4作业
简略来说& N N i p & x y,IP地址
就像门牌号相同,我们在输入域名拜Q & s 8 & G S H 9访网站时,数据服务器] b a是不知道你这个j ~ ` * m域名的,它只知道IP,你的域名会通过 DNS服务器
解析成IP值,通过这个门牌号 (IP值) 向数据服务器查找你的网站数据并给你回来到浏览器上9 C ] A B
为什么需求DNS
上面我们说,网络通讯大部分是根据TCP/IP的,而TCP/I q 0IP是根据IP地址的,所以核算机5 w _在网络上进行通讯时只能辨认如 252.94.131.A - I12
之类的IP ` f & p m 2 )P地址,而不能知道域名
我们没办法记住= a . V10个以上IP地址的网– ^ o . [站 ( 你G U J * a 4 b , b要说记性好那俺就乖乖闭嘴了 ),一般我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需求的页面,这是因为有一个叫 DNS服务器
的核算机主动把我们的域名 翻译
成了相应的IP地址,然后通过 IP地址
回来所对应的网页
域名结构
先来简略介绍下域4 e ! C X =名结构,有些前端同学或许不太了解,域名是在 Internet
上用于处理IP地址的一种办法,一个无缺的域名由2个或2个以上的部分组成,各部分之间用英文的句号 .
来分隔
拿 www.qq.com.
来说,等等,是不是多打了一个点,当然不是多打,这个终究的 .
代表的是根域名,默许状– ] W a S : p } p况下Q n 8 u e ,一切的网址的终究一位都是 .
,只不过为了便当用户,一般都会省B J { . 4 H略,浏览器在V w t 5 m q I 4 @ DNS解析
时会主动加上的,c2 5 J ]om
是顶级域名,qq
是二级域名,www
是三级域名,假定 www
前还有,那就四级等等
那么我们在解析时的顺序Q A a 5 F w K @就是
. -> .com -> qq.com -> wwwb t ! ?.qq.com
DNS获Z p P取流程
DNS是运用层协议,用于将用户供应的主机名解析E | 为i8 ( % U Cp地址,它的获取流程大致分为下面这五步
-
用户主机上工作着DN6 Q & E AS客户端,就是我们的PC机或许手机客户端工作着DNS客户端v B ,
-
浏览器将接收到的URL中抽取出域姓名段,就是访问的U 7 D g : z M z 7主机名7 * = R f,例如
http://www.qq.com
-
DNS客户机端向DNH I _ n $ . y !S服务器端发送一份查询报文,报文中包括着要访问的主机姓名段,~ * * O 3 c N w中心还包括一些列缓存查询以及分布式DNS集群的作y I ? h C Q业
-
该DNS客户机终究会收到一份答复报文,其间包括有该主机名对应的IP地址
-
一旦该浏览器收到L B S =来自DNS的IP地址,就可以m D 0向该IP地址定位的HTTP服务器主张W ; x ? ZTCP联接
DNS解析进程
假定我们要访问 www.qq.com
,那么要阅历什么呢,先来看一张图 ( 网图侵删 )

先简略的瞄一眼这张图,看不懂也不要紧,结合文字再看
上图首要分为三个段
- DNS客户机,就是我们主机上工作– N Q `的DNS客户端,PC机或许手机客户S B V g 3 W z 0端都有
- 客户机到服务器,这个服务器可以简略了解为我们其时所处网络环境的路由器
- 服务器到服务器,终究这个服务器指的是
互联网服务供应商服务器/根域名服务器/顶级域名服6 ~ 4 M t q q 3 k务器/主域名服务器
DNS获取流程有许多过程,这个进程中存在多个– / N a / S央求,假定每次都通过这么多过程,那就太耗时间了,所以DNS有多级缓存的概念,接下来我们来简略描绘下这个进程
-
浏览器缓存
- 当用户通过浏览器访问
www.qq.com
时,浏览器首要J 4 , % `会在自己缓存中查找是否有该z M / A 7域名对应的IP地址 - 若曾经访问过该域名且没有清空缓存便存在,不存在则持续下一步
- 当用户通过浏览器访问
-
系统缓存
- 当浏览器缓存中无域名对[ + P % ? F 7 – 1应IP则会主动检查用户核算机系统
Hosts
文件5 ! S : zDNS缓存是否有该域名对应IP
- 当浏览器缓存中无域名对[ + P % ? F 7 – 1应IP则会主动检查用户核算机系统
-
路由器缓存
- 当浏览器及系统缓存中均Y 0 y a V a V f $无域名对应IP则进入路由器缓存中检查,以上三步均为客服p + P端的DNS缓存
-
互联网服务供应商 ( ISP ) DNS缓存
- 当在用户客服端查找不到域名对应$ 0 k S – LIP地址,则将进入互联网服务供应商 ( ISP ) DNS缓存中进行查} + F x询
- 比方你用的是电信的网络,则会进入电信的DNS缓存服务器中进= F d / y B y行查找
-
根域名服务器
- 当以上均未完毕,则进入根服务器进行查询
- 根域名服务器收到央求后会检查区域文件记载,若无则将其统辖规模内顶级域名 (
.com
) 服务器IP奉告本地DNS服务器
-
顶级域名服务器
- 顶级域名服务器收到央求后检查区域文件记载,若无则将其q 2 w h S M K b统辖规模内主域名(
qq.com
)服务器的IP地址奉告本地DNS服务器
- 顶级域名服务器收到央求后检查区域文件记载,若无则将其q 2 w h S M K b统辖规模内主域名(
-
主域名l a D ! c B l服务器
- 主域名服务器接受到央求后查询自己的缓存,假定没有则进入下一级域r c } y名服务器(
www.qq.coU X H 2 @ q 2 km
)进行查找,并重复该过程直至找到正确纪录
- 主域名服务器接受到央求后查询自己的缓存,假定没有则进入下一级域r c } y名服务器(
-
保存作用至缓存
- 本地域名服务器把回来的作用保存到缓W r ~ L r存,以备下一次运用,一起将该作用反馈给客户端,客户端通过这个IP地址与Web服务器建立链接
DNS客户机可通过从曾经查询获得的缓F G V P X w i存信息就地应对查询m I q S,DNS服务器可运用其自身的资源记载信息缓存来应对查询,也可代表央求客户机来查询或联络其他DNS 服务器,以完全解析该称号,并随后将应b p r对回来至客户机,这个进程称为 递归查询
客户机自己检验联络其他的 DNS服务器来解析称号,假定客户机| q 1 T ! ? #这么做,它会运用根据服务器应对的独立和附加的查询,该进程称作迭代,即DNS服务器之间的交互查询就是 迭代查询
这就是DNS的整个进程了,是这道面试题的榜首步,面试官或许还会问DNS解析要怎样优化,不急,慢慢来
为什么要优化DNS解析
用户打开网站的整个流程中,DNS解析是榜首环,当用户输入q l N u ] m }域名并敲回车后,系统调用 DNS客户端
,寻找到用户配备Q 5 a E j ; 7或许主动分配的DNS IL 2 H ;P
,之后就初步整个解析进程,DNS服务器
完毕解析到此域名的 数字IP服务器
,一般情况下回来给定域名对应的IP地址会花费 20~120毫秒
的时间,而且在这个进程中浏览器什么都不会做直到DNS查询完毕
一旦解析完毕,联接建立并坚持– 3 2 2 u,也@ J d A ;就是顺畅的访问往后,网页往后的下载速度就和DNS不要紧了,直到下一次从头解析和主张访问央求
许多小型网站,DNS解析时间都靠近 0.5s
,有些甚至需求 1s
左右才华够解析出作用,一般网站用户的等候时间逾越 8s; | z
就会放弃访问,而关于电子商务网站,4s
就是用户忍耐极限,而一般通过优化的小型网站,DNS解析时间都可以控制在 200ms
左右,而带宽在 100M
左右的网站,通过优化,DNS解析时间可以控制在 50~100ms
那么P ( ! z i,你现在知道为什么要优化DNS解析了吧,怎样优化呢?我们接着看
DNS解析优化-善用缓存之TTL
上买i L q 8 ; y我们也看了,DNS存在着多级缓存,每次找这么多级,很定* v 6 . J I D耗时间,我们要尽量多的让用户直接从运营商的DNS缓存中拿到解析记载,这样就不需求走根域名服务器以下的这些进程,天然就节省了一些时间
我们购买域名做域名解析时,有一个 TTL
值 ( 如下图阿里云域名解析中所示 )

它指的是域名解析的生命周期 ( 秒为单位 ),简略来说它表明DNS服务器解析域名时记载在DNS服务器上的缓存时间,这个值的大小设置也是很有学识的,我们要在尽或许快的r a 4 w d 9 n D情况下又要保证当服务器出问题时可以赶快切换
- 我们 A X 9 d L s ?自己必定清楚自己的服务器有没有多台或备份,若无备份,那服务器宕机时只能生抗,所以,
TTL
时间关于你来说是K – z & 0 E u E越长越好,因为TTL
短的目的是服务器发作问题时,可以及时切换,这个关于没有备份的网站底子使用不上,所以这时你的TTL
设置就越长越好,当然了,也不能太长,一般设置TTL 3. H : M r M l ~6H k x 8 F b a & .00
即可 - 若有备份或多台服务器,会发作因为服务器宕机需求及时做切换,
TTL
时间越短切换越及时,但是TTL
时间越短,也就意味着运营商DNS常常缓存不住,一般用户,设置为TTL 600
即可,假定对及时切换,要求特别苛刻的网站,设e ; ` o x l W K H置TTL 120
就行
DNS解析优化-负载均衡
在DNS服务器中为同一个主机名配备多个IP地q t @址,在应对DNS查询时,DNS服务器对每个查2 I v : z D o询将以DNS文件中主机记载的IP地址按顺序回来不同的解析作用,将客户端的访问g P 3 r j引导到不同的机器上去,使得不同的客户端访问不同的服务器,然后抵达负载均衡的目的,可以根据每台机器的负载量或该机器离用户地理位置的间隔下手
就像我们运用CDN厂商做P 3 H o = @ O l域名解析,它也是使用DNS的重定向技能,DNS服务器会回来一个跟用户最靠近的点的IP地址给用户,CDN节点的服务器担任响运用户的央求,供应所需的_ o 9 R * _ u L o内容,CDN厂商的域名解析服务器用户量多被访问的次数也多,域名解析服务器的A记载9 T A x T ! L l底子上会被各地运营商的DNS一贯缓存着,所以服务作用也是最好的
HTTP & HTTPs ~ 9 oS
说完DNS,本来还想写段HTV 0 v O ! ^ | 5TP和HTTPS,这块也能说良久,但是后来又感觉写在这有些不太适合,那就下次有时机单独写吧
感悟
网络通讯篇到此完毕,虽然此文写了上万字,C 1 G f但只能说整合了内容讲了个大约,怎样g j k Y说呢,网络通讯相关的一些知识都有说到,但并未深入,所以面试前临阵磨枪或查漏补缺可以,不L : E i ` u U要梦想通过看此文或许某一篇帖子就认为自己懂了网络通讯,TCP/IP/DNS/HTTP/A x t h W f Q . iHTTPSl g * I F D w这些内容随意挑出来一个都可以长篇大论
当然,和大多数帖子相同,此文庞观的为我们收拾了一下网络通讯的内容,并用通俗易懂的口气为我们描绘,这也是为了大多数非科班出身的小伙伴,有差错的当地望海涵也望提出
假定我们想进一步了解网络通讯,也可以此文为引子,深入看一些相关知识,第三文总结也为我们收拾出来了网络和浏览器方面知识的思想导图,哪里不会自己去查材料找答案即可
下一文「一道面试题」输入URL到烘托全面收拾中-页面烘托篇,待续哦。。
哦,还有,可以加个老友加下群一起交流噻,公众号【不j ! ( & U @正派的前端】也欢迎关注呦
