3月份第一次总结

转自掘金网https://juejin.im/post/5c591fda6fb9a049dc02b1cc#heading-23

 作者:小生方勤




网络基础

1.五层因特网协议栈

2.HTTP与HTTPS的区别

3.TCP/IP 协议

4.三次握手和四次挥手

5.DNS域名解析

6.五类IP地址

7.跨域的原因及处理方式

8.正向代理和反向代理

9.CDN带来的性能优化

10.HTTP强缓存&协商缓存

1.五层因特网协议栈

(1).应用层(application-layer)  

           作用:用来定义应用进程(进程:主机中正在运行的程序)间的通信和交互的规则

           在互联网中,应用层的协议还有域名系统DNS (Domain  name  system)、万维网应用的HTTP协议、支持电子邮件的SMTP协议

(2).传输层(transport layer)

           作用:负责两台主机进程间的通信提供的数据传输服务。

           传输层常用的两种协议:

           1.传输控制协议-TCP:提供面向连接的,可靠的数据传输服务

           2.用户数据协议-UDP:提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)

          TCP(transmission  Control   Protocol) 

           1.TCP是面向连接的(需要先建立连接)

           2.每一条TCP连接只能有两个端点,每一条TCP连接只能是一对一,

           3.TCP提供可靠交付的服务。通过TCP连接传送的数据,误差错、不丢失、不重复、并且序列到达

           4.TCP提供双全工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP两端都设有发送缓存和接收缓存,用来临时存放通信的数据。

          5.面向字节流。TCP中的流(Stream)指的是流入进程或从进程流出的字节序列。

          UDP(User Datagram  Protocol)

          1.UDP是无连接的。

          2.UDP是尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态。

          3.UDP是面向报文的。

          4.UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如直播、实时视频会议等....)

          5.UDP支持一对一、一对多、多对一和多对多的交互通信。

          6.UDP的首部开销小,只有8个字节,比TCP首部的20个字节要短。

                   (1).单工数据传输只支持数据在一个方向上传输

                    (2).半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,值允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。

                    (3).双全工数据通信允许数据同时在两个方向上传输,因此,双全工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。

  (3).网络层

             作用:选择合适的网间路由和交换节点,确保计算机通信的数据及时传送。

             互联网是由大量的异构网络通过路由器相互连接起来的。互联网使用的网络层协议是无连接的网际协议(intert prococol)和许多路由选择协议,因此互联网的网络层也叫做网际层或IP层。

(4).数据链路层(链路层)  data llink  layer

            作用:两台主机间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。

            在两个相邻节点之间传送数据时,数据链路层将网络层接下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息、地址信息,差错控制等)

          在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始到哪个比特结束。

(5).物理层

           作用:实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。

           “透明传输比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。在互联网使用的各种协议中最重要的和最著名的就是TCP/IP 两个协议。


同OSI七层协议模型、TCP/IP四层模型的区别

           1.OSI七层模型

                      OSI七层协议模型主要是:

                      应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data link) 、物理层。

         2.TCP/IP四层模型

                     TCP/IP是一个四层的体系结构,主要包括:

                     应用层(Application)、传输层(Transport)、网络层(Network)、和链路层(Link)


   

  HTTP 和HTTPS的区别

 1.协议

          HTTP:运行在TCP上,明文传输,客户端与服务端都无法验证对方的身份。

          HTTPS:审批SSL(secure  socker  layer  ) 外壳的HTTP,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP.

2.端口

       HTTP:80

      HTTPS:443

3.资源消耗

      HTTP:较少

      HTTPS:由于加密处理,会消耗更多的CPU和内存资源

4.开销

      HTTP:无需证书

      HTTPS:需要证书,而证书一般需要向认证机构购买

5.加密机制

      HTTP:无

      HTTPS:共享密钥加密和公开密钥加密并用的混合加密机制

6.安全性

      HTTP:弱

      HTTPS:由于加密机制,安全性强

对称加密与非对称加密

      对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全的将密钥发送给对方;

 而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。

由于非对称加密的方式不需要发送用来解密的私钥,所以可保证安全性;但是和对称加密比起来,非常的慢。

      因此,我们还是用对称加密来发送消息,但对称加密使用的私钥我们可以通过非对称加密的方式发送出去。

HTTP2

       意义:提高了网页的性能

       在HTTP1中浏览器限制了同一域名下的请求数量(chrome下一般是六个),当在请求很多资源的时候,由于对头阻塞,当浏览器达到最大请求数量时,剩余的资源需要等待当前的六个请求完成后才能进行请求。

        HTTP2中引用了多路复用的技术,这个技术可以只通过一个TCP连接就可以传送所有的请求数据。多路复用可以绕过浏览器限制同一个域名下的请求数量的问题,进而提高了网页的性能。



TCP/IP协议

        负责传输的IP协议

       按层次分,IP(Internet  Protocol)  网际协议位于网络层,IP协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件,其中两个重要的条件是IP地址和MAC地址(Media   Access  Control  Address) .

      IP地址和MAC地址:指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址,IP地址可以和MAC地址进行配对。IP地址可变换但MAC地址基本上不会更改

     使用ARP协议凭借MAC地址进行通信

     1.IP间的通信依赖MAC地址。

     2.ARP是一种用以解释地址的协议,根据通信方的IP地址就可以反查出对应方的MAC地址。

TCP协议如何保证传输的可靠性

     tcp提供一种面向连接的、可靠的字节流服务。

      1.面向连接

          意味着两个使用TCP的应用(通常是一个应用和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信;

      2.字节流服务

         意味着两个应用程序通过TCP连接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符。

    TCP之所以可靠,大体上由于以下原因:

           1.数据包校验:目的是检测数据在传输过程中的任何变化,若校验包有错,则丢弃报文段并且不给出响应,这是TCP发送数据端超时后会重发数据;

           2.对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将会对失序数据进行重新排序,然后才交给应用层;

         3.丢弃重复数据:对于重复数据,能够丢弃重复数据;

         4.应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。

        5.超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

       6.流量控制:TCP连接的每一方都有固定大小的缓存空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓存区溢出,这就是流量控制。

  TCP/IP通信传输流



发送端在层与层之间传送数据时,每经过一层必定会加上一个该层的首部信息。反之,接收端在层与层之间传输数据时,每经过一层会把相关的首部信息去掉。

TCP三次握手和四次挥手

TCP(Transmission  control Protocol 传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层控制协议,由IPTF的RFC793定义。

三次握手

TCP连接  

 


第一次握手:

建立连接时,向服务器发出连接请求报文,这是报文首部中的同部位   SYN = 1,同时选择一个初始序列号   seq = x ,客户端进程进入了SYN-SENT(同步已发送状态)状态,等待服务器确认;

第二次握手:

服务器收到SYN 包后,如果同意连接,则发出确认报文;确认报文ACK=1,SYN = 1,确认号是ack=x + 1,同时也要为自己初始化一个序列号seq = y,此时服务器进程进入了SYN-RCVD(同步收到)状态;

第三次握手:

客户端收到服务器的SYN+ACK包,要向服务器给出确认。确认报文的ACK=1,ack =y+1,自己的序列号seq=x+1,此时TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。


完成三次握手,客户端与服务器开始传送数据。

注:

seq:"sequance" 序列号;

ack:"acknowledge" 确认号;

SYN:"synchronize" 请求同步标志;

ACK:"acknowledge" 确认标志;

FIN:"Finally" 结束标志。


未连接队列

在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目已表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所表示的连接在服务器处于SYN_RECV状态,当服务器收到客户端的确认包时,删除该条目,服务器进入ESTABLISHED状态。

建立一个连接需要三次握手,而终止一个连接要经过四次挥手,这是由TCP的半关闭(half - close)造成的。



四次挥手



第一次挥手:

客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部FIN = 1,其序列号为seq = u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。

第二次挥手:

服务器收到连接报文,发出确认报文,ACK= 1,ack = u+1,并且带上自己的序列号seq= v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。


第三次挥手:

服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN = 1,ack = u + 1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq= w ,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手:

客户端收到服务器的连接释放报文后,必须发出确认,ACK = 1,ack = w + 1,而自己的序列号是 seq = u + 1,此时,客户端就进入了 TIME-WAIT(时间等待)状态。

四次的原因

这是因为服务端的 LISTEN 状态下的 SOCKET 当收到 SYN 报文的建连请求后,它可以把 ACK 和 SYN(ACK 起应答作用,而 SYN 起同步作用)放在一个报文里来发送。    但关闭连接时,当收到对方的 FIN 报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你未必会马上会关闭 SOCKET ,也即你可能还需要发送一些数据给对方之后,再发送 FIN 报文给对方来表示你同意现在可以关闭连接了,所以它这里的 ACK 报文和 FIN 报文多数情况下都是分开发送的.

由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个 FIN 来终止这个方向的连接。收到一个 FIN 只意味着这一方向上没有数据流动,一个 TCP 连接在收到一个 FIN 后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

DNS 域名解析


当你在浏览器的地址栏输入https://juejin.im后会发生什么,大家在心中肯定是有一个大概的,这里我将DNS 域名解析这个步骤详细的讲一遍。在讲概念之前我先放上一张经典的图文供大家思考一分钟。



查找域名对应的 IP 地址的具体过程

1.浏览器搜索自己的 DNS 缓存(浏览器维护一张域名与 IP 地址的对应表);如果没有命中,进入下一步;

2.搜索操作系统中的 DNS 缓存;如果没有命中,进入下一步;

3.搜索操作系统的 hosts 文件( Windows 环境下,维护一张域名与 IP 地址的对应表);如果没有命中,进入下一步;






DNS Prefetch

即 DNS 预获取,是前端优化的一部分。一般来说,在前端优化中与 DNS 有关的有两点:

减少 DNS 的请求次数

进行 DNS 预获取

典型的一次 DNS 解析需要耗费 20-120  毫秒,减少DNS解析时间和次数是个很好的优化方式。DNS Prefetching 是让具有此属性的域名不需要用户点击链接就在后台解析,而域名解析和内容载入是串行的网络操作,所以这个方式能减少用户的等待时间,提升用户体验。




TCP状态转换图





SSL单向/双向认证详解(其实是握手过程的详解)

     


 

   

你可能感兴趣的:(3月份第一次总结)