TCP/IP 不齐全详解

TCP/IP是通信协议的统称。首先,咱们先认识一下OSI参考模型

OSI 参考模型

OSI 参考模型中各个分层的作用如下:

概括的说:

  • 应用层:为应用程序提供服务并规定应用程序中通信的相干细节。包含文件传输、电子邮件、远程登陆等协定
  • 表示层:将利用解决的信息转换为适宜网络传输的格局,或将下一层的数据转换为下层可能解决的格局。因而它次要负责数据格式的转换。 具体来说,就是将设施固有的数据格式转换为网络规范传输格局。不同设施比照同一比特流解释的后果可能会不同。因而,使它们保持一致是这一层的次要作用。
  • 会话层:负责建设和断开通信链接,以及数据的宰割等数据传输相干的治理。
  • 传输层:起着牢靠传输的作用。只在通信单方节点上进行解决,而无需在路由器上解决。
  • 网络层:将数据传输到指标地址。指标地址能够是多个网络通过路由器连贯而成的某一个地址。因而这一层次要负责寻址和路由抉择。
  • 数据链路层:负责物理层面上互连的、节点之间的通信传输。例如与1个以太网相连的2 个节点之间的通信。 将0、1序列划分为具备意义的数据帧传送给对端(数据帧的生成与接管)。
  • 物理层:负责0、1比特流(0、1序列)与电压的高下、光的闪灭之间的调换。

TCP/IP 基础知识

TCP/IP与OSI参考模型

硬件(物理层)

TCP/IP的最底层是负责数据传输的硬件。这种硬件就相当于以太网或电话线路等物理层的设施。对于它的内容始终无奈对立定义。因为只有人们在物理层面上所应用的传输媒介不同(如应用网线或无线),网络的带宽、可靠性、安全性、 提早等都会有所不同,而在这些方面又没有一个既定的指标。总之,TCP/IP是在网络互连的设施之间可能通信的前提下才被提出的协定。

网络接口层(数据链路层)

利用以太网中的数据链路层进行通信,因而属于接口层。也就是说,把它当做让NIC起作用的“驱动程序”也不妨。驱动程序是在操作系统与硬件之间起桥梁作用的软件。计算机的外围附加设施或扩展卡,不是间接插到电脑上或电脑的扩展槽上就能马上应用的,还须要有相应驱动程序的反对。

互联网层(网络层)

互联网层应用IP协定,它相当于OSI模型中的第3层网络层。IP协定基于IP地址转发分包数据。

TCP/IP分层中的互联网层与传输层的性能通常由操作系统提供。尤其是路由 器,它必须得实现通过互联网层转发分组数据包的性能。

此外,连贯互联网的所有主机跟路由器必须都实现IP的性能。其余连贯互联网的网络设备(如网桥、中继器或集线器)就没必要肯定实现IP或TCP的性能。

IP

  • ip是逾越网络传送数据包,使整个互联网都能收到数据的协定。ip协定使数据可能发送到地球的另一端,这期间它应用IP地址作为主机的标识。
  • IP还隐含着数据链路层的性能。通过IP,互相通信的主机之间不管通过怎么的底层数据链路都可能实现通信。
  • 尽管IP也是分组替换的一种协定,然而它不具备重发机制。即便分组数据包未能达到对端主机也不会重发。因而,属于非可靠性传输协定。

ICMP

  • IP数据包在发送途中一旦产生异样导致无奈达到对端指标地址时,须要给发送端发送一个产生异样的告诉。ICMP就是为这一性能而制订的。它有时也被用来诊断网络的健康状况。

ARP

  • 从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协定。

传输层

TCP/IP的传输层有两个具备代表性的协定。该层的性能自身与OSI参考模型 中的传输层相似。

传输层最次要的性能就是可能让应用程序之间实现通信。计算机外部,通常同一时间运行着多个程序。为此,必须分清是哪些程序与哪些程序在进行通信。辨认这些应用程序的是端口号。

TCP

  • TCP是一种面向有连贯的传输层协定。它能够保障两端通信主机之间的通信可达。TCP可能正确处理在传输过程中丢包、传输程序乱掉等异常情况。此外, TCP还可能无效利用带宽,缓解网络拥挤。
  • 然而,为了建设与断开连接,有时它须要至多7次的发包收包,导致网络流量的节约。此外,为了进步网络的利用率,TCP协定中定义了各种各样简单的标准,因而不利于视频会议(音频、视频的数据量既定)等场合应用。

UDP

  • UDP有别于TCP,它是一种面向无连贯的传输层协定。UDP不会关注对端是否真的收到了传送过来的数据,如果须要检査对端是否收到分组数据包,或者对端是否连贯到网络,则须要在应用程序中实现。
  • UDP罕用于分组数据较少或多播、播送通信以及视频通信等多媒体畛域。

应用层(会话层以上的分层)

TCP/IP的分层中,将OSI参考模型中的会话层、表示层和应用层的性能都集中到了应用程序中实现。这些性能有时由一个繁多的程序实现,有时也可能会由多个程序实现。因而,细看TCP/IP的应用程序性能会发现,它不仅实现OSI模型中应用层的内容,还要实现会话层与表示层的性能。

TCP/IP利用的架构绝大多数属于客户端/服务端模型。提供服务的程序叫服务端,承受服务的程序叫客户端。在这种通信模式中,提供服务的程序会事后被部署到主机上,期待接管任何时刻客户可能发送的申请。

客户端能够随时发送申请给服务端。有时服务端可能会有解决异样、超出负载等状况,这时客户端能够在期待片刻后重发一次申请。

WWW

  • WWW能够说是互联网可能如此遍及的一个重要原动力。用户在一种叫Web 浏览器的软件上借助鼠标和键盘就能够轻轻松松地在网上自在地冲浪。也就是说轻按一下鼠标架设在远端服务器上的各种信息就会出现到浏览器上。浏览器中既能够显示文字、图片、动画等信息,还能播放声音以及运行程序。
  • 浏览器与服务端之间通信所用的协定是HTTP( HyperText Transfer Protocol)。所传输数据的次要格局是HTML( HyperText Markup Language )。WWW中的HTTP属于OSI应用层的协定,而HTML属于表示层的协定。

E-Mail

  • 电子邮件其实就是指在网络上发送函件。有了电子邮件,不论间隔多远的人,只有连着互联网就能够互相发送邮件。发送电子邮件时用到的协定叫做SMTP。

文件传输(FTP)

  • 文件传输是指将保留在其余计算机硬盘上的文件转移到本地的硬盘上,或将本地硬盘的文件传送到其余机器硬盘上的意思。
  • 该过程应用的协定叫做FTP(File Transfer Prototol)。FTP很早就曾经投入使用、传输过程中能够抉择用二进制形式还是文本形式。
  • 在FTP中进行文件传输时会建设两个TCP连贯,别离是收回传输申请时所要用到的管制连贯与理论传输数据时所要用到的数据连贯。

近程登录(TELNET与SSH)

  • 近程登录是指登录到近程的计算机上,使那台计算机上的程序得以运行的一种性能。TCP/IP网络中近程登录罕用TELNET和SSH两种协定。

网络管理(SNMP)

  • 在TCP/IP 中进行网络管理时,采纳SNMP( Simple Network Management Protocol)协定。应用SNMP治理的主机、网桥、路由器等称作SNMP代理(Agent),而进行治理的那一段叫做管理器(Manager)。SNMP正是这个Manager与Agent所要用到的协定。
  • 在SNMP的代理端,保留着网络接口的信息、通信数据量、异样数据量以及设施温度等信息。这些信息能够通过MIB( Management Information Base)拜访。因而,在TCP/IP的网络管理中,SNMP属于利用协定,MIB属于表示层协定。
  • 一个网络范畴越大,构造越简单,就越须要对其进行无效的治理。而SNMP能够让管理员及时检査网络拥挤状况,及早发现故障,也能够为当前扩充网络收集必要的信息。

TCP/IP 分层模型与通信示例

数据包首部

每个分层中,都会对所发送的数据附加一个首部,在这个首部中蕴含了该层必要的信息,如发送的指标地址以及协定相干信息。通常,为协定提供的信息为包首部,所要发送的内容为数据。


网络中传输的数据包由两局部组成:一部分是协定所要用到的首部,另一部分是下层传过来的数据。首部的构造由协定的具体标准具体定义。例如,辨认上一层协定的域应该从包的哪一位开始取多少个比特、如何计算校验和并插入包的哪一位等。互相通信的两端计算机如果在辨认协定的序号以及校验和的计算方法上不一样,就根本无法实现通信。

因而,在数据包的首部,明确表明了协定应该如何读取数据。反过来说,看到首部,也就可能理解该协定必要的信息以及所要解决内容。因而,看到包首部就如同看到协定的标准。首部就像是协定的脸。

示例:发送数据包

假如甲给乙发送电子邮件,内容为:“早上好”。而从TCP/IP通信上看,是从一台计算机A向另一台计算机B发送电子邮件。咱们就通过这个例子来解说一 下TCP/IP通信的过程。

  • 利用程序处理

    启动应用程序新建邮件,将收件人邮箱填好,再由键盘输入邮件内容“早上好”,鼠标点击“发送”按钮就能够开始TCP/IP的通信了。

    首先,应用程序中会进行编码解决。(UTF-8等)这些编码相当于OSI的表示层性能。

    编码转化后,理论邮件不肯定会马上被发送进来,因为有些邮件的软件有一次同时发送多个邮件的性能,也可能会有用户点击“收信”按钮当前才一并接管新邮件的性能。像这种何时建设通信连贯何时发送数据的治理性能,从某种宽泛的意义上看属于OSI参考模型中会话层的性能。

    利用在发送邮件的那一刻建设TCP连贯,从而利用这个TCP连贯发送数据。 它的过程首先是将利用的数据发送给下一层的TCP,再做理论的转发解决。

  • TCP模块的解决

    TCP依据利用的批示负责建设连贯、发送数据以及断开连接。TCP提供将应用层发来的数据顺利发送至对端的牢靠传输。

    为了实现TCP的这一性能,须要在应用层数据的前端附加一个TCP首部。TCP首部中包含源端口号和指标端口号(用以辨认发送主机跟接管主机上的利用)、序号(用以发送的包中哪局部是数据)以及校验和(用以判断数据是否被损坏)。随后将附加了TCP首部的包再发送给IP。

  • IP模块的解决

    IP将TCP传过来的TCP首部和TCP数据合起来当做本人的数据,并在TCP首部的前端在加上本人的IP首部。因而,IP数据包中IP首部前面紧跟着TCP首部,而后才是利用的数据首部和数据自身。IP首部中蕴含接收端IP地址以及发送端IP地址。紧随IP首部的还有用来判断其前面数据是TCP还是UDP的信息。

    IP包生成后,参考路由管制表决定承受此IP包的路由或主机。随后,IP包将被发送给连贯这些路由器或主机网络接口的驱动程序,以实现真正发送数据。

    如果尚不晓得接收端的MAC地址,能够利用ARP( Address Resolution Protocol)查找。只有晓得了对端的MAC地址,就能够将MAC地址和IP地址交给以太网的驱动程序,实现数据传输。

  • 网络接口(以太网驱动)的解决

    从IP传过来的IP包,对于以太网驱动来说不过就是数据。给这数据附加上以太网首部并进行发送解决。以太网首部中蕴含接收端MAC地址、发送端MAC地址以及标记以太网类型的以太网数据的协定。根据上述信息产生的以太网数据包将通过物理层传输给接收端。发送解决中的FCS由硬件计算,增加到包的最初。设置FCS的目标是为了判断数据包是否因为噪声而被毁坏。

总结如下图:


通过数据链路的包

包流动时,从前往后依此被附加了以太网包首部、IP包首部、TCP包首部 (或者UDP包首部)以及利用本人的包首部和数据。而包的最初则追加了以太网包尾

每个包首部中至多都会蕴含两个信息:一个是发送端和接收端地址,另一个是上一层的协定类型。

通过每个协定分层时,都必须有辨认包发送端和接收端的信息。以太网会用MAC地址,IP会用IP地址,而TCP/UDP则会用端口号作为辨认两端主机的地址。即便是在应用程序中,像电子邮件地址这样的信息也是一种地址标识。这些地址信息都在每个包经由各个分层时,附加到协定对应的包首部里边。如图:

此外,每个分层的包首部中还蕴含一个辨认位,它是用来标识上一层协定的品种信息。例如以太网的包首部中的以太网类型,IP中的协定类型以及TCP/UDP中两个端口的端口号等都起着辨认协定类型的作用。就是在利用的首部信息中,有时也会蕴含一个用来辨认其数据类型的标签。

数据包接管解决

接管与发送是逆序的过程:

  • 网络接口 (以太网驱动)的解决

    主机收到以太网包当前,首先从以太网的包首部找到MAC地址判断是否为发给本人的包。如果不是发给本人的包则抛弃数据。

    而如果接管到了恰好是发给本人的包,就查找以太网包首部中的类型域从而确定以太网协定所传送过去的数据类型。在这个例子中数据类型显然是IP包,因而再将数据传给解决IP的子程序,如果这时不是IP而是其余诸如ARP的协定, 就把数据传给ARP解决。总之,如果以太网包首部的类型域蕴含了一个无奈辨认的协定类型,则抛弃数据。

  • IP模块的解决

    IP模块收到IP包首部及前面的数据局部当前,也做相似的解决。如果判断得出包首部中的IP地址与本人的IP地址匹配,则可接收数据并从中查找上一层的协定。如果上一层是TCP就将IP包首部之后的局部传给TCP解决;如果是UDP则将IP包首部前面的局部传给UDP解决。对于有路由器的状况下,接收端地址往往不是本人的地址,此时,须要借助路由管制表,在调査应该送达的主机或路由器当前再转发数据。

  • TCP模块的解决

    在TCP模块中,首先会计算一下校验和判断数据是否被毁坏。而后查看是否在依照序号接收数据。最初查看端口号,确定具体的应用程序。

    数据接管结束后,接收端则发送一个“确认回执”给发送端。如果这个回执信息未能达到发送端,那么发送端会认为接收端没有接管到数据而始终重复发送。

    数据被残缺地接管当前,会传给由端口号辨认的应用程序。

  • 应用程序的解决

    接收端应用程序会间接接管发送端发送的数据。通过解析数据能够获知邮件的收件人地址是乙的地址。如果主机B上没有乙的邮件信箱,那么主机B返回给发送端一个“无此收件地址”的报错信息。

    但在这个例子中,主机B上恰好有乙的收件箱,所以主机B和收件人乙可能收到电子邮件的注释。邮件会被保留到本机的硬盘上。如果保留也能失常进行, 那么接收端会返回一个“解决失常”的回执给发送端。反之,一旦呈现磁盘满、邮件未能胜利保留等问题,就会发送一个“解决异样”的回执给发送端。

    由此,用户乙就能够利用主机B上的邮件客户端,接管并浏览由主机A上的用户甲所发送过去的电子邮件——“早上好”。


数据链路

数据链路,指OSI参考模型中的数据链路层,有时也指以太网、无线局域网等通信伎俩。

数据链路层的协定定义了通过通信媒介互连的设施之间传输的标准。通信媒介包含双绞线电缆、同轴电缆、光纤、电波以及红外线等介质。此外,各个设施之间有时也会通过交换机、网桥、中继器等直达数据。

数据链路也能够被视为网络传输中的最小单位。其实,仔细观察连通全世界的互联网就能够发现,它也不外乎是由泛滥这样的数据链路组成的,因而又能够称互联网为“数据链路的汇合”。

MAC地址

MAC地址用于辨认数据链路中互连的节点。以太网或FDDI中,依据IEEE802.3V的标准应用MAC地址。其余诸如无线LAN(IEEE802.lla/b/g/n等)、蓝牙等设施中也是用雷同规格的MAC地址。

MAC地址长48比特。MAC地址中3~24位(比特位)示意厂商识别码,每个NICT商都有特定惟一的辨认数字。25-48位是厂商外部为辨认每个网卡而用。因而,能够保障全世界不会有雷同MAC地址的网卡。

IEEE802.3制订MAC地址标准时没有限定数据链路的类型,即不管哪种数据链路的网络(以太网、FDDI、ATM、无线LAN、蓝牙等),都不会有雷同的MAC地址呈现。

  • 例外情况:人们能够在微机板上自在设置本人的MAC地址。再例如,一 台主机上如果启动多个虚拟机,因为没有硬件的网卡只能由虚构软件本人设定MAC地址给多个虚构网卡,这时就很难保障所生成的MAC地址是举世无双的了。然而,无论哪个协定成员通信设施,设计前提都是MAC地址的唯一性。这也能够说是网络世界的基本准则。

共享介质型网络

从通信介质(通信,介质)的应用办法上看,网络可分为共享介质型和非共享介质型。

共享介质型网络指由多个设施共享一个通信介质的一种网络。最早的以太网和FDDI就是介质共享型网络。在这种形式下,设施之间应用同一个载波信道进行发送和接管。为此,基本上采纳半双工通信形式,并有必要对介质进行访问控制。

共享介质型网络中有两种介质访问控制形式:一种是争用形式,另一种是令牌传递形式。

  • 争用形式

    争用形式(Contention)是指抢夺获取数据传输的势力,也叫CSMA(载波监听多路拜访)。这种办法通常令网络中的各个站采纳先到先得的形式占用信道发送数据,如果多个站同时发送帧,则会产生抵触景象。也因而会导致网络拥挤和性能降落。

另在一部分以太网当中,采纳了改进CSMA的另一种形式——CSMA/CD形式。CSMA/CD要求每个站提前检査抵触,一旦发生冲突,则尽早开释信道。其具体工作原理如下:

  • 如果载波信道上没有数据流动,则任何站都能够发送数据。
  • 检査是否会发生冲突。一旦发生冲突时,放弃发送数据同时立刻开释载波信道。
  • 放弃发送当前,随机延时一段时间,再从新争用介质,从新发送帧。

  • 令牌传递形式

    令牌传递形式是沿着令牌环发送一种叫做“令牌”的非凡报文,是控制传输的一种形式。只有取得令牌的站能力发送数据。这种形式有两个特点:一是不会有抵触,二是每个站都有通过平等循环取得令牌的机会。因而,即便网络拥挤也不会导致性能降落。

    当然,这种形式中,一个站在没有收到令牌前不能发送数据帧,因而在网络不太拥挤的状况下数据链路的利用率也就达不到100%。为此,衍生了多种令牌传递的技术。例如,晚期令牌开释、令牌追加等形式以及多个令牌同时循环等形式。这些形式的目标都是为了尽可能地进步网络性能。

非共享介质网络

非共享介质网络是指不共享介质,是对介质采取专用的一种传输管制形式。在这种形式下,网络中的每个站直连交换机,由交换机负责转发数据帧。此形式下,发送端与接收端并不共享通信介质,因而很多状况下采纳全双工通信形式。

不仅ATM采纳这种传输管制形式,最近它也成为了以太网的支流形式。通过以太网交换机构建网络,从而使计算机与交换机端口之间造成一对一的连贯,即可实现全双工通信。在这种一对一连贯全双工通信的形式下不会发生冲突,因而不须要CSMA/CD的机制就能够实现更高效的通信。

半双工与全双工通信

半双工是指,只发送或只接管的通信形式。它相似于无线电收发器,若两端同时谈话,是听不见对方说的话的。而全双工不同,它容许在同一时间既能够发送数据也能够接收数据。相似于电话,接打单方能够同时谈话。

依据MAC地址转发

在应用同轴电缆的以太网(10BASE5、10BASE2)等介质共享网络中,同一时间只能有一台主机发送数据。当连网的主机数量减少时,通信性能会显著降落。若将集线器或集中器等设施以星型连贯,就呈现了一款新的网络设备--替换集线器,这是一种将非介质共享型网络中所应用的交换机用在以太网中的技术,替换集线器也叫做以太网交换机

以太网交换机就是持有多个端口的网桥。它们依据数据链路层中每个帧的指标MAC地址,决定从哪个网络接口发送数据。这时所参考的、用以记录发送接口的表就叫做转发表。

  • 交换机转发形式

    交换机转发形式有两种,一种叫存储转发,另一种叫直通转发。

    存储转发形式查看以太网数据帧开端的FCS位后再进行转发。因而,能够防止发送因为抵触而被毁坏的帧或噪声导致的谬误帧。

    直通转发形式中不须要将整个帧全副接管下来当前再进行转发。只须要得悉指标地址即可开始转发。因而,它具备提早较短的劣势。但同时也不可避免地有发送谬误帧的可能性。

IP协定

IP相当于OSI参考模型的第3层

IP (IPv4、IPv6)相当于OSI参考模型中的第3层——网络层。网络层的次要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点(end-to-end)通信”。

网络层的下一层一数据链路层的次要作用是在互连同一种数据链路的节点之间进行包传递。而一旦逾越多种数据链路,就须要借助网络层。网络层能够逾越不同的数据链路,即便是在不同的数据链路上也能实现两端节点之间的数据包传输。

IP的次要作用就是在简单的网络环境中将数据包发给最终的指标地址。

在互联网世界中,将那些配有IP地址的设施叫做“主机”。能够是超天型计算机,也能够是小型计算机。然而,精确地说,主机的定义应该是指“配置有IP地址,然而不进行路由管制的设施”。既配有IP地址又具备路由控制能力的设施叫做“路由器”,跟主机有所区别。而节点则是主机和路由器的统称。

网络层与数据链路层的关系

数据链路层提供直连两个设施之间的通信性能。与之相比,作为网络层的ip则负责在没有直连的两个网络之间进行通信传输。

IP基础知识

IP大抵分为三大作用模块,它们是IP寻址、路由(最终节点为止的转发)以及IP分包与组包。

MAC地址正是用来标识 同一个链路中不同计算机的一种识别码。IP地址用于在“连贯到网络中的所有主机中辨认出进行通信的指标地址”。

路由管制

路由管制(Routing)是指将分组数据发送到最终目标地址的性能。即便网络非常复杂,也能够通过路由管制确定达到指标地址的通路。一旦这个路由管制的运行出现异常,分组数据极有可能“迷失”,无奈达到指标地址。因而,一个数据包之所以可能胜利地达到最终的指标地址,全靠路由管制。

IP属于面向无连贯型

ip面向无连贯。即在发包之前,不须要建设与对端指标地址之间的连贯。下层如果遇到须要发送给ip的数据,该数据会立刻被压缩成ip包发送进来。

在面向有连贯的状况下,须要当时建设连贯。如果对端主机关机或不存在,也就不可能建设连贯。反之,一个没有建设连贯的主机也不可能发送数据过去。

而面向无连贯的状况则不同。即便对端主机关机或不存在,数据包还是会被发送进来。反之,对于一台主机来说,它会何时从哪里收到数据也是不得而知的。通常应该进行网络监控,让主机只接管发给本人的数据包。若没有做好筹备很有可能会错过一些该收的包。因而,在面向无连贯的形式下可能会有很多冗余的通信。

ip面向无连贯的起因:一是为了简化,二是为了提速。面向连贯比起面向无连贯解决绝对简单。甚至治理每个连贯自身就是一个相当繁琐的事件。此外,每次通信之前都要当时建设连贯,又会升高处理速度。须要有连贯时,能够委托上一层提供此项服务。因而,ip为了实现简单化与高速化采纳面向无连贯的形式。

与此对应的下层(传输层)TCP采纳的是面向有链接型

ip的作用在于尽力将数据包发送到目的地,它不做最终收到与否的验证。ip数据包在发送途中可能会呈现丢包、错位、数据量翻倍等问题。而这时就须要tcp提供这种保障,tcp负责保障对端主机的确收到收据。

DNS

DNS是用来保护一个用来示意组织外部主机名和IP地址之间对应关系的数据库。在利用中,当用户输出主机名(域名)时,DNS会自动检索那个注册了主机名和IP地址的数据库,并迅速定位对应的IP地址。而且,如果主机名和IP地址须要进行变更时,也只须要在组织机构外部进行解决即可,而没必要再向其余机构进行申请或报告。

域名和域名服务器须要依照分层进行设置。如果域名服务器宕机,那么针对该域的DNS査询也就无奈失常工作。因而,为了进步容灾能力,个别会设 置至多两个以上的域名服务器。一旦第一个域名服务器无奈提供查问时,就会主动转到第二个甚至第三个域名服务器上进行,以此能够依照程序进行灾备解决。

进行DNS査询的主机和软件叫做DNS解析器。用户所应用的工作站或个人电脑都属于解析器。一个解析器至多要注册一个以上域名服务器的IP地址。通常,它至多包含组织外部的域名服务器的IP地址。

DNS查问

dns查问机制

  • 计算机A要拜访www.baidu.com。
  • 首先向域名服务器中查问对应IP地址。
  • DNS服务器如果晓得IP就间接返回,不晓得就会向根域名服务器申请查问。
  • 根域名返回地址。
  • DNS服务器向www.baidu.com的域名服务器查问IP地址。
  • 将查到的IP地址返回给客户端。
  • 计算机A建设起跟www.baidu.com的通信。

TCP与UDP

TCP是面向连贯的、牢靠的流协定。流就是指不间断的数据结构。TCP为提供可靠性传输,履行“顺序控制”或“重发管制”机制。此外还具备“流控制(流量管制)”、“拥塞管制”、进步网络利用率等泛滥性能。

UDP是不具备可靠性的数据报协定。轻微的解决它会交给下层的应用层去实现。在UDP的状况下,尽管能够确保发送音讯的大小,却不能保障音讯肯定会达到。因而有时利用须要做重发解决。

UDP的特点

UDP不提供简单的管制机制,利用IP提供面向无连贯的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻依照原样发送到网络上的一种机制。即便是呈现网络拥挤的状况下,UDP也无奈进行流量管制等防止网络拥塞的行为。此外,传输途中即便呈现丢包,UDP也不负责重发。甚至当呈现包的达到程序乱掉时也没有纠正的性能。如果须要这些细节管制,那么不得不交由釆用UDP的应用程序去解决。因为UDP面向无连贯,且自身的解决简略高效,因而常常用于以下几个方面:

  • 包总量较少的通信(DNS,SNMP等)
  • 视频、音频等多媒体通信
  • 限定于LAN等特定网络中的利用通信
  • 播送通信

TCP的特点

TCPUDP的区别相当大。它充沛地实现了数据传输时各种管制性能,能够进行丢包时的重发管制,还能够对秩序乱掉的分包进行顺序控制。而这些在UDP中都没有。此外,TCP作为一种面向有连贯的协定,只有在确认通信对端存在时才会发送数据,从而能够管制通信流量的节约。TCP通过测验和、序列号、确认应答、重发管制、连贯治理以及窗口管制等机制实现可靠性传输。

TCP握手挥手示意图:

TCP窗口管制与重发管制

在应用窗口管制中,如果呈现段失落,先思考确认应答未能返回的状况。在这种状况下,数据曾经达到 对端,是不须要再进行重发的。然而,在没有应用窗口管制的时候,没有收到确认应答的数据都会被重发。

其次思考发送时失落状况,接管主机如果收到一个本人应该接管的序号以外的数据时,会针对以后为止收到数据返回确认应答。如下图:

当某一报文段失落后,发送端会始终收到序号为1001的确认应答,这个确认应答如同在揭示发送端“我想接管的是从1001开始的数据”。 因而,在窗口比拟大,又呈现报文段失落的状况下,同一个序号的确认应答将会被反复一直地返回。而发送端主机如果间断3次收到同一个确认应答、就会将其所对应的数据进行重发。这种机制比之前提到的超时治理更加高效,因而也被称作高速重发管制

流控制

发送端依据本人的理论状况发送数据。然而,接收端可能收到的是一个毫无关系的数据包又可能会在解决其余问题上破费一些工夫。因而在为这个数据包做其余解决时会消耗一些工夫,甚至在高负荷的状况下无奈接管任何数据。如此一来,如果接收端将本应该接管的数据抛弃的话,就又会触发重发机制,从而导致网络流量的无端节约。

为了避免这种景象的产生,TCP提供一种机制能够让发送端依据接收端的理论接管能力管制发送的数据量。这就是所谓的流控制。它的具体操作是,接收端主机向发送端主机告诉本人能够接收数据的大小,于是发送端会发送不超过这个限度的数据。该大小限度就被称作窗口大小。

TCP首部中,专门有一个字段用来告诉窗口大小。接管主机将本人能够接管的缓冲区大小放入这个字段中告诉给发送端。这个字段的值越大,阐明网络的吞吐量越高。

不过,接收端的这个缓冲区一旦面临数据溢出时,窗口大小的值也会随之被设置为一个更小的值告诉给发送端,从而控制数据发送量。也就是说,发送端主机会依据接收端主机的批示,对发送数据的量进行管制。这也就造成了一个残缺的TCP流控制

拥塞管制

一般来说,计算机网络都处在一个共享的环境。因而也有可能会因为其余主机之间的通信使得网络拥挤。在网络呈现拥挤时,如果忽然发送一个较大量的数据,极有可能会导致整个网络的瘫痪。

TCP为了避免该问题的呈现,在通信一开始时就会通过一个叫做慢启动的算法得出的数值,对发送数据量进行管制。

利用协定

应用层协定的定义

利用网络的应用程序有很多,包含Web浏览器、电子邮件、近程登录、文件 传输、网络管理等。可能让这些利用进行特定通信解决的正是利用协定。

TCP和IP等上层协定是不依赖于下层利用类型、适用性十分广的协定。而利用协定则是为了实现某种利用而设计和发明的协定。

TCP/IP的应用层涵盖了 OSI参考模型中第5、第6、第7层的所有性能,不仅蕴含了治理通信连贯的会话层性能、转换数据格式的表示层性能,还包含与对端主机交互的应用层性能在内的所有性能。

近程登录

实现从本人的本地计算机登录到网络另一端计算性能的利用就叫做近程登录。通过近程登录到通用计算机或UNIX工作站当前,不仅能够间接应用这些主机上的利用,还能够对这些计算机进行参数设置。近程登录次要应用TELNET和SSH两种协定。

TELNET

TELNET利用TCP的一条连贯,通过这一条连贯向主机发送文字命令并在主机上执行。本地用户如同间接与远端主机外部的Shell相连着似的,间接在本地进行操作。

TELNET能够分为两类根本服务。一是仿真终端性能,二是协商选项机制。

SSH

SSH是加密的近程登录零碎。TELNET中登录时无需输出明码就能够发送,容易造成通信窃听和非法入侵的危险。应用SSH后能够加密通信内容。即便信息被窃听也无奈破解所发送的明码、具体命令以及命令返回的后果是什么。

文件传输

FTP是在两个相连的计算机之间进行文件传输时应用的协定。

FTP工作机制

FTP应用两条TCP连贯来实现文件传输:一条用来管制,另一条用于数据(文件)的传输。

用于管制的TCP连贯次要在FTP的管制局部应用。例如登录用户名和明码的验证、发送文件的名称、发送形式的设置。利用这个连贯,能够通过ASCII码字符串发送申请和接管应答。在这个连贯上无奈发送数据,数据须要一个专门的TCP进行连贯。

管制用的连贯,在用户要求断开之前会始终放弃连贯状态。不过,绝大多数FTP服务器都会对长时间没有任何新命令输出的用户的连贯强制断开。

通常,用于数据传输的TCP连贯是依照与管制用的连贯相同的方向建设的。

电子邮件

提供电子邮件服务的协定叫做SMTP ( Simple Mail Transfer Protocol) o SMTP为了实现高效发送邮件内容,在其传输层应用了TCP协定。

WWW

WWW定义了3个重要的概念,它们别离是访问信息的伎俩与地位(URI, Uniform Resource Identifier)、信息的表现形式(HTML, HyperText Markup Language) 以及信息转发(HTTP, HyperText Transfer Protocol)等操作。

URI

URI是Uniform Resource Identifier的缩写,用于标识资源。URI是一种能够用于WWW之外的高效的识别码,它被用于主页地址、电子邮件、电话号码等各种 组合中。

URL常被人们用来示意互联网中资源(文件)的具体位置。然而URI不局限于标识互联网资源,它能够作为所有资源的识别码。当初,在无效的RFC文档中,曾经不再应用URL,转而在应用URI,相比URL广义的概念,URI则是一个狭义的概念。因而,URI能够用于除了WWW之外的其余利用协定中。

URI格局

http: //主机名:端口号/门路?拜访内容#局部信息

TLS/SSL与HTTPS

通过TLS/SSL对HTTP通信进行加密叫做HTTPS通信。如图:

结尾一道题

文章到这里,曾经写的差不多了。接下来由一道题深刻坚固一下常识体系

从输出URL到页面加载的过程?

先梳理骨干局部:

  1. 从浏览器接管url到开启网络申请线程(这一部分能够开展浏览器的机制以及过程与线程之间的关系)
  2. 开启网络线程到收回一个残缺的http申请(这一部分波及到dns查问,tcp/ip申请,五层因特网协定栈等常识)
  3. 从服务器接管到申请到对应后盾接管到申请(这一部分可能波及到负载平衡,平安拦挡以及后盾外部的解决等等)
  4. 后盾和前台的http交互(这一部分包含http头部、响应码、报文构造、cookie等常识,能够提下动态资源的cookie优化,以及编码解码,如gzip压缩等)
  5. 独自拎进去的缓存问题,http的缓存(这部分包含http缓存头部,etag,catch-control等)
  6. 浏览器接管到http数据包后的解析流程(解析html-词法剖析而后解析成dom树、解析css生成css规定树、合并成render树,而后layout、painting渲染、复合图层的合成、GPU绘制、外链资源的解决、loaded和domcontentloaded等)
  7. CSS的可视化格局模型(元素的渲染规定,如蕴含块,管制框,BFC,IFC等概念)
  8. JS引擎解析过程(JS的解释阶段,预处理阶段,执行阶段生成执行上下文,VO,作用域链、回收机制等等)
  9. 其它(能够拓展不同的常识模块,如跨域,web平安,hybrid模式等等内容)

从浏览器接管url到开启网络申请线程

浏览器是多过程的,有一个主控过程,以及每一个tab页面都会新开一个过程。

过程可能包含主控过程,插件过程,GPU,tab页(浏览器内核)等等

  • Browser过程:浏览器的主过程(负责协调、主控),只有一个
  • 第三方插件过程:每种类型的插件对应一个过程,仅当应用该插件时才创立
  • GPU过程:最多一个,用于3D绘制
  • 浏览器渲染过程(内核):默认每个Tab页面一个过程,互不影响,管制页面渲染,脚本执行,事件处理等(有时候会优化,如多个空白tab会合并成一个过程)

每一个tab页面能够看作是浏览器内核过程,而后这个过程是多线程的,它有几大类子线程

  • GUI线程
  • JS引擎线程
  • 事件触发线程
  • 定时器线程
  • 网络申请线程

输出URL后,会进行解析(URL的实质就是对立资源定位符)。URL个别包含几大部分:

  • protocol,协定头,譬如有http,ftp等
  • host,主机域名或IP地址
  • port,端口号
  • path,目录门路
  • query,即查问参数
  • fragment,即#后的hash值,个别用来定位到某个地位

每次网络申请时都须要开拓独自的线程进行,譬如如果URL解析到http协定,就会新建一个网络线程去解决资源下载

因而浏览器会依据解析出得协定,开拓一个网络线程,返回申请资源(这里,临时了解为是浏览器内核开拓的,如有谬误,后续修复)

开启网络线程到收回一个残缺的http申请

这一部分次要内容包含:dns查问tcp/ip申请构建五层因特网协定栈等等

DNS解析

如果输出的是域名,须要进行dns解析成IP,大抵流程:

  • 如果浏览器有缓存,间接应用浏览器缓存,否则应用本机缓存,再没有的话就是用host
  • 如果本地没有,就向dns域名服务器查问(当然,两头可能还会通过路由,也有缓存等),查问到对应的IP

域名查问时有可能是通过了CDN调度器的(如果有cdn存储性能的话),而且,须要晓得dns解析是很耗时的,因而如果解析域名过多,会让首屏加载变得过慢,能够思考dns-prefetch优化

TCP/IP申请

tcp将http长报文划分为短报文,通过三次握手与服务端建设连贯,进行牢靠传输。

而后,待到断开连接时,须要进行四次挥手(因为是全双工的,所以须要四次挥手)

tcp/ip的并发限度

浏览器对同一域名下并发的tcp连贯是有限度的(2-10个不等)。而且在http1.0中往往一个资源下载就须要对应一个tcp/ip申请

get和post的区别

get和post尽管实质都是tcp/ip,但两者除了在http层面外,在tcp/ip层面也有区别。

get会产生一个tcp数据包,post两个

  • get申请时,浏览器会把headers和data一起发送进来,服务器响应200(返回数据),
  • post申请时,浏览器先发送headers,服务器响应100 continue,浏览器再发送data,服务器响应200(返回数据)。

http层面区别:

  • GET在浏览器回退时是有害的,而POST会再次提交申请。
  • GET申请会被浏览器被动cache,而POST不会,除非手动设置。
  • GET申请只能进行url编码,而POST反对多种编码方式。
  • GET申请在URL中传送的参数是有长度限度的,而POST没有。
  • GET比POST更不平安,因为参数间接裸露在URL上,所以不能用来传递敏感信息。
  • GET参数通过URL传递,POST放在Request body中。

五层因特网协定栈

这里的五层就是:应用层、传输层、网络层、数据链路层、硬件层。对应的OSI模型:

从服务器接管到申请到对应后盾接管到申请

负载平衡

用户发动的申请都指向调度服务器(反向代理服务器,譬如装置了nginx管制负载平衡),而后调度服务器依据理论的调度算法,调配不同的申请给对应集群中的服务器执行,而后调度器期待理论服务器的HTTP响应,并将它反馈给用户

http报文构造

  1. 通用头部
Request Url: 申请的web服务器地址Request Method: 申请形式(Get、POST、OPTIONS、PUT、HEAD、DELETE、CONNECT、TRACE)Status Code: 申请的返回状态码,如200代表胜利Remote Address: 申请的近程服务器地址(会转为IP)
  1. 状态码
1xx——批示信息,示意申请已接管,持续解决2xx——胜利,示意申请已被胜利接管、了解、承受3xx——重定向,要实现申请必须进行更进一步的操作4xx——客户端谬误,申请有语法错误或申请无奈实现5xx——服务器端谬误,服务器未能实现非法的申请// 常见状态码200——表明该申请被胜利地实现,所申请的资源发送回客户端304——自从上次申请后,申请的网页未修改过,请客户端应用本地缓存400——客户端申请有错(譬如能够是平安模块拦挡)401——申请未经受权403——禁止拜访(譬如能够是未登录时禁止)404——资源未找到500——服务器外部谬误503——服务不可用
  1. 申请/响应头部
Accept: 接管类型,示意浏览器反对的MIME类型(对标服务端返回的Content-Type)Accept-Encoding:浏览器反对的压缩类型,如gzip等,超出类型不能接管Content-Type:客户端发送进来实体内容的类型Cache-Control: 指定申请和响应遵循的缓存机制,如no-cacheIf-Modified-Since:对应服务端的Last-Modified,用来匹配看文件是否变动,只能准确到1s之内,http1.0中Expires:缓存管制,在这个工夫内不会申请,间接应用缓存,http1.0,而且是服务端工夫Max-age:代表资源在本地缓存多少秒,无效工夫内不会申请,而是应用缓存,http1.1中If-None-Match:对应服务端的ETag,用来匹配文件内容是否扭转(十分准确),http1.1中Cookie: 有cookie并且同域拜访时会主动带上Connection: 当浏览器与服务器通信时对于长连贯如何进行解决,如keep-aliveHost:申请的服务器URLOrigin:最后的申请是从哪里发动的(只会准确到端口),Origin比Referer更尊重隐衷Referer:该页面的起源URL(实用于所有类型的申请,会准确到具体页面地址,csrf拦挡罕用到这个字段)User-Agent:用户客户端的一些必要信息,如UA头部等
  1. 罕用的响应头部(局部)
Access-Control-Allow-Headers: 服务器端容许的申请HeadersAccess-Control-Allow-Methods: 服务器端容许的申请办法Access-Control-Allow-Origin: 服务器端容许的申请Origin头部(譬如为*)Content-Type:服务端返回的实体内容的类型Date:数据从服务器发送的工夫Cache-Control:通知浏览器或其余客户,什么环境能够平安的缓存文档Last-Modified:申请资源的最初批改工夫Expires:应该在什么时候认为文档曾经过期,从而不再缓存它Max-age:客户端的本地资源应该缓存多少秒,开启了Cache-Control后无效ETag:申请变量的实体标签的以后值Set-Cookie:设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端Keep-Alive:如果客户端有keep-alive,服务端也会有响应(如timeout=38)Server:服务器的一些相干信息

cookie

长连贯与短连贯

TCP/IP 层面:

  • 长连贯:一个tcp/ip连贯上能够间断发送多个数据包,在tcp连贯放弃期间,如果没有数据包发送,须要单方发检测包以维持此连贯,个别须要本人做在线维持(相似于心跳包)
  • 短连贯:通信单方有数据交互时,就建设一个tcp连贯,数据发送实现后,则断开此tcp连贯

HTTP层面

  • http1.0中,默认应用的是短连贯,也就是说,浏览器没进行一次http操作,就建设一次连贯,工作完结就中断连贯,譬如每一个动态资源申请时都是一个独自的连贯
  • http1.1起,默认应用长连贯,应用长连贯会有这一行Connection: keep-alive,在长连贯的状况下,当一个网页关上实现后,客户端和服务端之间用于传输http的tcp连贯不会敞开,如果客户端再次拜访这个服务器的页面,会持续应用这一条曾经建设的连贯

keep-alive不会永远放弃,它有一个持续时间,个别在服务器中配置(如apache),另外长连贯须要客户端和服务器都反对时才无效

http 2.0

http2.0与http1.1的显著不同点:

  • http1.1中,每申请一个资源,都是须要开启一个tcp/ip连贯的,所以对应的后果是,每一个资源对应一个tcp/ip申请,因为tcp/ip自身有并发数限度,所以当资源一多,速度就显著慢下来
  • http2.0中,一个tcp/ip申请能够申请多个资源,也就是说,只有一次tcp/ip申请,就能够申请若干个资源,宰割成更小的帧申请,速度显著晋升。

http2.0个性:

  • 多路复用(即一个tcp/ip连贯能够申请多个资源)
  • 首部压缩(http头部压缩,缩小体积)
  • 二进制分帧(在应用层跟传送层之间减少了一个二进制分帧层,改良传输性能,实现低提早和高吞吐量)
  • 服务器端推送(服务端能够对客户端的一个申请收回多个响应,能够被动告诉客户端)
  • 申请优先级(如果流被赋予了优先级,它就会基于这个优先级来解决,由服务器决定须要多少资源来解决该申请。)

https

SSL/TLS握手:

  1. 浏览器申请建设SSL链接,并向服务端发送一个随机数–Client random和客户端反对的加密办法,比方RSA加密,此时是明文传输。
  2. 服务端从中选出一组加密算法与Hash算法,回复一个随机数–Server random,并将本人的身份信息以证书的模式发回给浏览器(证书里蕴含了网站地址,非对称加密的公钥,以及证书颁发机构等信息)
  3. 浏览器收到服务端的证书后
  4. 验证证书的合法性(颁发机构是否非法,证书中蕴含的网址是否和正在拜访的一样),如果证书信赖,则浏览器会显示一个小锁头,否则会有提醒
  5. 用户接管证书后(不论信不信赖),浏览会生产新的随机数–Premaster secret,而后证书中的公钥以及指定的加密办法加密Premaster secret,发送给服务器。
  6. 利用Client random、Server random和Premaster secret通过肯定的算法生成HTTP链接数据传输的对称加密key-session key
  7. 应用约定好的HASH算法计算握手音讯,并应用生成的session key对音讯进行加密,最初将之前生成的所有信息发送给服务端。
  8. 服务端收到浏览器的回复
  9. 利用已知的加解密形式与本人的私钥进行解密,获取Premaster secret
  10. 和浏览器雷同规定生成session key
  11. 应用session key解密浏览器发来的握手音讯,并验证Hash是否与浏览器发来的统一
  12. 应用session key加密一段握手音讯,发送给浏览器
  13. 浏览器解密并计算握手音讯的HASH,如果与服务端发来的HASH统一,此时握手过程完结。

HTTP缓存

缓存能够简略的划分成两种类型:强缓存(200 from cache)与协商缓存(304)

  • 强缓存(200 from cache)时,浏览器如果判断本地缓存未过期,就间接应用,无需发动http申请
  • 协商缓存(304)时,浏览器会向服务端发动http申请,而后服务端通知浏览器文件未扭转,让浏览器应用本地缓存

http1.1中的缓存管制:

  • Cache-Control:缓存管制头部,有no-cache、max-age等多种取值
  • Max-Age:服务端配置的,用来管制强缓存,在规定的工夫之内,浏览器无需发出请求,间接应用本地缓存,留神,Max-Age是Cache-Control头部的值,不是独立的头部,譬如Cache-Control: max-age=3600,而且它值得是相对工夫,由浏览器本人计算
  • If-None-Match/E-tag:这两个是成对呈现的,属于协商缓存的内容,其中浏览器的头部是If-None-Match,而服务端的是E-tag,同样,发出请求后,如果If-None-Match和E-tag匹配,则代表内容未变,告诉浏览器应用本地缓存,和Last-Modified不同,E-tag更准确,它是相似于指纹一样的货色,基于FileEtag INode Mtime Size生成,也就是说,只有文件变,指纹就会变,而且没有1s精确度的限度。

Last-Modified

  • 表明服务端的文件最初何时扭转的
  • 它有一个缺点就是只能准确到1s
  • 而后还有一个问题就是有的服务端的文件会周期性的扭转,导致缓存生效

E-tag:

  • 是一种指纹机制,代表文件相干指纹
  • 只有文件变才会变,也只有文件变就会变,
  • 也没有准确工夫的限度,只有文件一遍,立马E-tag就不一样了

如果同时带有E-tag和Last-Modified,服务端会优先查看E-tag

如果同时启用了Cache-Control与Expires,Cache-Control优先级高。

解析页面流程

  1. 解析HTML,构建DOM树
  2. 解析CSS,生成CSS规定树
  3. 合并DOM树和CSS规定,生成render树
  4. 布局render树(Layout/reflow),负责各元素尺寸、地位的计算
  5. 绘制render树(paint),绘制页面像素信息
  6. 浏览器会将各层的信息发送给GPU,GPU会将各层合成(composite),显示在屏幕上

整个渲染步骤中,HTML解析是第一步。简略的了解,这一步的流程是这样的:浏览器解析HTML,构建DOM树。 过程如下 Bytes → characters → tokens → nodes → DOM

  1. Conversion转换:浏览器将取得的HTML内容(Bytes)基于他的编码转换为单个字符
  2. Tokenizing分词:浏览器依照HTML标准规范将这些字符转换为不同的标记token。每个token都有本人独特的含意以及规定集
  3. Lexing词法剖析:分词的后果是失去一堆的token,此时把他们转换为对象,这些对象别离定义他们的属性和规定
  4. DOM构建:因为HTML标记定义的就是不同标签之间的关系,这个关系就像是一个树形构造一样。例如:body对象的父节点就是HTML对象,而后段略p对象的父节点就是body对象

CSS规定树的生成也是相似。

构建渲染树

当DOM树和CSSOM都有了后,就要开始构建渲染树了。一般来说,渲染树和DOM树绝对应的,但不是严格意义上的一一对应。因为有一些不可见的DOM元素不会插入到渲染树中,如head这种不可见的标签或者display: none等。

渲染

有了render树,接下来就是开始渲染,根本流程如下:

  1. 计算CSS款式
  2. 构建渲染树
  3. 布局,次要定位坐标和大小,是否换行,各种position overflow z-index属性
  4. 绘制,将图像绘制进去

而后,图中的线与箭头代表通过js动静批改了DOM或CSS,导致了从新布局(Layout)或渲染(Repaint)

Layout和Repaint的区别:

  • Layout,也称为Reflow,即回流。个别意味着元素的内容、构造、地位或尺寸产生了变动,须要从新计算款式和渲染树
  • Repaint,即重绘。意味着元素产生的扭转只是影响了元素的一些外观之类的时候(例如,背景色,边框色彩,文字色彩等),此时只须要利用新款式绘制这个元素就能够了

什么会引起回流?

  1. 页面渲染初始化
  2. DOM构造扭转,比方删除了某个节点
  3. render树变动,比方缩小了padding
  4. 窗口resize
  5. 最简单的一种:获取某些属性,引发回流。很多浏览器会对回流做优化,会等到数量足够时做一次批处理回流,然而除了render树的间接变动,当获取一些属性时,浏览器为了取得正确的值也会触发回流,这样使得浏览器优化有效,包含
  6. offset(Top/Left/Width/Height)
  7. scroll(Top/Left/Width/Height)
  8. cilent(Top/Left/Width/Height)
  9. width,height
  10. 调用了getComputedStyle()或者IE的currentStyle

扭转字体大小会引发回流

优化计划

  • 缩小逐项更改款式,最好一次性更改style,或者将款式定义为class并一次性更新
  • 防止循环操作dom,创立一个documentFragment或div,在它下面利用所有DOM操作,最初再把它增加到window.document
  • 防止屡次读取offset等属性。无奈防止则将它们缓存到变量
  • 将简单的元素相对定位或固定定位,使得它脱离文档流,否则回流代价会很高

简略层与复合层

  • 能够认为默认只有一个复合图层,所有的DOM节点都是在这个复合图层下的
  • 如果开启了硬件加速性能,能够将某个节点变成复合图层
  • 复合图层之间的绘制互不烦扰,由GPU间接管制
  • 而简略图层中,就算是absolute等布局,变动时不影响整体的回流,然而因为在同一个图层中,依然是会影响绘制的,因而做动画时性能依然很低。而复合层是独立的,所以个别做动画举荐应用硬件加速

资源外链的下载

当遇到外链时,会独自开启一个下载线程去下载资源(http1.1中是每一个资源的下载都要开启一个http申请,对应一个tcp/ip链接)

CSS资源的解决有几个特点

  • CSS下载时异步,不会阻塞浏览器构建DOM树
  • 然而会阻塞渲染,也就是在构建render时,会等到css下载解析结束后才进行(这点与浏览器优化无关,避免css规定一直扭转,防止了反复的构建)
  • 有例外,media query申明的CSS是不会阻塞渲染的

JS脚本资源的解决有几个特点

  • 阻塞浏览器的解析,也就是说发现一个外链脚本时,需期待脚本下载实现并执行后才会持续解析HTML
  • 浏览器的优化,个别古代浏览器有优化,在脚本阻塞时,也会持续下载其它资源(当然有并发下限),然而尽管脚本能够并行下载,解析过程依然是阻塞的,也就是说必须这个脚本执行结束后才会接下来的解析,并行下载只是一种优化而已
  • defer与async,一般的脚本是会阻塞浏览器解析的,然而能够加上defer或async属性,这样脚本就变成异步了,能够等到解析结束后再执行

留神,defer和async是有区别的: defer是提早执行,而async是异步执行。

  • async是异步执行,异步下载结束后就会执行,不确保执行程序,肯定在onload前,但不确定在DOMContentLoaded事件的前或后
  • defer是提早执行,在浏览器看起来的成果像是将脚本放在了body前面一样(尽管按标准应该是在DOMContentLoaded事件前,但实际上不同浏览器的优化成果不一样,也有可能在它前面)

遇到图片等资源时,间接就是异步下载,不会阻塞解析,下载结束后间接用图片替换原有src的中央

loaded和domcontentloaded

  • DOMContentLoaded 事件触发时,仅当DOM加载实现,不包含样式表,图片(譬如如果有async加载的脚本就不肯定实现)
  • load 事件触发时,页面上所有的DOM,样式表,脚本,图片都曾经加载实现了

BFC(Block Formatting Context)

特点:

  • 外部box在垂直方向,一个接一个的搁置
  • box的垂直方向由margin决定,属于同一个BFC的两个box间的margin会重叠
  • BFC区域不会与float box重叠(可用于排版)
  • BFC就是页面上的一个隔离的独立容器,容器外面的子元素不会影响到里面的元素。反之也如此
  • 计算BFC的高度时,浮动元素也参加计算(不会浮动坍塌)

如何触发BFC?

  • 根元素
  • float属性不为none
  • position为absolute或fixed
  • display为inline-block, flex, inline-flex,table,table-cell,table-caption
  • overflow不为visible

致谢

本文参考:[从输出URL到页面加载的过程?如何由一道题欠缺本人的前端常识体系!
](https://zhuanlan.zhihu.com/p/...
《图解TCP/IP》

因为自己技术无限,文内如有谬误,敬请与我分割,不胜感激!