「一道面试题」输入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

「一道面试题」输入URL到烘托全面梳理上-网络通信篇

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地址 来标识对方

再来看一个图 ( 网图侵删 )

「一道面试题」输入URL到烘托全面梳理上-网络通信篇

如上图所示,如核算机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.1192.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 Io * 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报文时是很高效的

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端愉快的侃起了大山

根据上面的内容,我们再来看下图 (网图侵删)

「一道面试题」输入URL到烘托全面梳理上-网络通信篇

按正规流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 )侵删)

「一道面试题」输入URL到烘托全面梳理上-网络通信篇

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 uCLOSED 情况,当 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 LD 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 yIP地址 就像门牌号相同,我们在输入域名拜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 ,那么要阅历什么呢,先来看一张图 ( 网图侵删 )

「一道面试题」输入URL到烘托全面梳理上-网络通信篇

先简略的瞄一眼这张图,看不懂也不要紧,结合文字再看

上图首要分为三个段

  • 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
  • 路由器缓存

    • 当浏览器及系统缓存中均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服务器
  • 主域名l a D ! c B l服务器

    • 主域名服务器接受到央求后查询自己的缓存,假定没有则进入下一级域r c } y名服务器( www.qq.coU X H 2 @ q 2 km )进行查找,并重复该过程直至找到正确纪录
  • 保存作用至缓存

    • 本地域名服务器把回来的作用保存到缓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 值 ( 如下图阿里云域名解析中所示 )

「一道面试题」输入URL到烘托全面梳理上-网络通信篇

它指的是域名解析的生命周期 ( 秒为单位 ),简略来说它表明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 HTTL 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 @正派的前端】也欢迎关注呦

「一道面试题」输入URL到烘托全面梳理上-网络通信篇