快速过一遍计算机网络

今天来总结一下面试中常常遇到的有关计算机网络的面试题,主要有如下知识点:git

  • OSI与TCP/IP各层的结构与功能,都有哪些协议?
  • TCP三次握手和四次挥手
  • TCP和UDP协议的区别
  • TCP协议如何保证可靠传输
  • 在浏览器中输入url地址到返回页面这过程发生了什么
  • 各类协议与HTTP协议之间的关系
  • HTTP长链接、短链接
  • HTTP 1.0和HTTP 1.1的主要区别是什么?
  • URI和URL的区别是什么?
  • HTTP和HTTPS的区别

OSI与TCP/IP各层的结构与功能,都有哪些协议?

学习计算机网络时咱们通常采用折中的办法,也就是中和 OSI 和 TCP/IP 的优势,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。github

1.png

结合互联网的状况,自上而下地,很是简要的介绍一下各层的做用。面试

应用层

应用层(application-layer)的任务是经过应用进程间的交互来完成特定网络应用。在互联网中应用层协议不少,如域名系统DNS,支持万维网应用的HTTP协议等等。咱们把应用层交互的数据单元称为报文。浏览器

运输层

运输层(transport layer)的主要任务就是负责向两台主机进程之间的通讯提供通用的数据传输服务。缓存

运输层主要使用如下两种协议:服务器

  1. 传输控制协议 TCP(Transmission Control Protocol)--提供面向链接的,可靠的数据传输服务。
  2. 用户数据协议 UDP(User Datagram Protocol)--提供无链接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。

网络层

在 计算机网络中进行通讯的两个计算机之间可能会通过不少个数据链路,也可能还要通过不少通讯子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。
在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP/IP 体系结构中,因为网络层使用IP协议,所以分组也叫IP数据报 ,简称数据报。网络

数据链路层

数据链路层(data link layer)一般简称为链路层。两台主机之间的数据传输,老是在一段一段的链路上传送的,这就须要使用专门的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。app

物理层

物理层(physical layer)的做用是实现相邻计算机节点之间比特流的透明传送,尽量屏蔽掉具体传输介质和物理设备的差别。 ide

总结如下就是下面这张图学习

2.png

TCP三次握手

为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。

4.png

  • 客户端–发送带有 SYN 标志的数据包 ——> 一次握手–服务端
  • 服务端–发送带有 SYN/ACK 标志的数据包——> 二次握手–客户端
  • 客户端–发送带有带有 ACK 标志的数据包——> 三次握手–服务端

为何要三次握手

三次握手的目的是创建可靠的通讯信道,说到通信,简单来讲就是数据的发送与接收,而三次握手最主要的目的就是双方确认本身与对方的发送与接收是正常的。

三次握手就能确认双方收发功能都正常,缺一不可。

为何TCP连接须要三次握手,两次不能够么,为何?

为了防止已失效的连接请求报文忽然又传送到了服务端,于是产生错误。

客户端发出的链接请求报文并未丢失,而是在某个网络节点长时间滞留了,以至延误到链接释放之后的某个时间才到达Server。这时,Server误觉得这是Client发出的一个新的链接请求,因而就向客户端发送确认数据包,赞成创建链接。若不采用“三次握手”,那么只要Server发出确认数据包,新的链接就创建了。因为client此时并未发出创建链接的请求,因此其不会理睬Server的确认,也不与Server通讯;而这时Server一直在等待Client的请求,这样Server就白白浪费了必定的资源。若采用“三次握手”,在这种状况下,因为Server端没有收到来自客户端的确认,则就会知道Client并无要求创建请求,就不会创建链接。

TCP四次挥手

断开一个 TCP 链接则须要“四次挥手”

  • 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
  • 服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 同样,一个 FIN 将占用一个序号
  • 服务器-关闭与客户端的链接,发送一个FIN给客户端
  • 客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1

5.png

为何要四次挥手

任何一方均可以在数据传送结束后发出链接释放的通知,待对方确认后进入半关闭状态。当另外一方也没有数据再发送的时候,则发出链接释放通知,对方确认后就彻底关闭了TCP链接。

TCP和UDP协议的区别

image

UDP 在传送数据以前不须要先创建链接,远地主机在收到 UDP 报文后,不须要给出任何确认。虽然 UDP 不提供可靠交付,但在某些状况下 UDP 确是一种最有效的工做方式(通常用于即时通讯),好比: QQ 语音、 QQ 视频 、直播等等

TCP 提供面向链接的服务。在传送数据以前必须先创建链接,数据传送结束后要释放链接。 TCP 不提供广播或多播服务。因为 TCP 要提供可靠的,面向链接的传输服务(TCP的可靠体如今TCP在传递数据以前,会有三次握手来创建链接,并且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开链接用来节约系统资源),这一难以免增长了许多开销,如确认,流量控制,计时器以及链接管理等。这不只使协议数据单元的首部增大不少,还要占用许多处理机资源。TCP 通常用于文件传输、发送和接收邮件、远程登陆等场景。

TCP协议如何保证可靠传输

  1. 应用数据被分割成 TCP 认为最适合发送的数据块。
  2. TCP 给发送的每个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
  3. 校验和:TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程当中的任何变化。若是收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  4. TCP 的接收端会丢弃重复的数据。
  5. 流量控制:TCP 链接的每一方都有固定大小的缓冲空间,TCP的接收端只容许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方下降发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
  6. 拥塞控制:当网络拥塞时,减小数据的发送。
  7. ARQ协议:也是为了实现可靠传输的,它的基本原理就是每发完一个分组就中止发送,等待对方确认。在收到确认后再发下一个分组。
  8. 超时重传:当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。若是不能及时收到一个确认,将重发这个报文段。

在浏览器中输入url地址到返回页面这过程发生了什么

image

各类协议与HTTP协议之间的关系

image

HTTP长链接、短链接

HTTP/1.0中默认使用短链接。也就是说,客户端和服务器每进行一次HTTP操做,就创建一次链接,任务结束就中断链接。当客户端浏览器访问的某个HTML或其余类型的Web页中包含有其余的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会从新创建一个HTTP会话。

从HTTP/1.1起,默认使用长链接,用以保持链接特性。使用长链接的HTTP协议,会在响应头加入这行代码:

Connection:keep-alive

在使用长链接的状况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP链接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经创建的链接。Keep-Alive不会永久保持链接,它有一个保持时间,能够在不一样的服务器软件(如Apache)中设定这个时间。实现长链接须要客户端和服务端都支持长链接。

HTTP协议的长链接和短链接,实质上是TCP协议的长链接和短链接。

HTTP 1.0和HTTP 1.1的主要区别是什么?

  1. 长链接:在HTTP/1.0中,默认使用的是短链接,也就是说每次请求都要从新创建一次链接。HTTP 是基于TCP/IP协议的,每一次创建或者断开链接都须要三次握手四次挥手的开销,若是每次请求都要这样的话,开销会比较大。所以最好能维持一个长链接,能够用个长链接来发多个请求。HTTP 1.1起,默认使用长链接,默认开启Connection: keep-alive。HTTP/1.1的持续链接有非流水线方式和流水线方式。流水线方式是客户在收到HTTP的响应报文以前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。
  2. 错误状态响应码:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  3. 缓存处理:在HTTP1.0中主要使用header里的If-Modified-Since,Expires来作为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
  4. 带宽优化及网络链接的使用:HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是须要某个对象的一部分,而服务器却将整个对象送过来了,而且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它容许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和链接。

URI和URL的区别是什么?

  • URI(Uniform Resource Identifier) 是统一资源标志符,能够惟一标识一个资源。
  • URL(Uniform Resource Location) 是统一资源定位符,能够提供该资源的路径。它是一种具体的 URI,即 URL 能够用来标识一个资源,并且还指明了如何 locate 这个资源。

URI的做用像身份证号同样,URL的做用更像家庭住址同样。URL是一种具体的URI,它不只惟一标识资源,并且还提供了定位该资源的信息。

HTTP和HTTPS的区别

Http协议运行在TCP之上,明文传输,客户端与服务器端都没法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。两者之间存在以下不一样:

  • 端口不一样:Http与Http使用不一样的链接方式,用的端口也不同,前者是80,后者是443;
  • 资源消耗:和HTTP通讯相比,Https通讯会因为加减密处理消耗更多的CPU和内存资源;
  • 开销:Https通讯须要证书,而证书通常须要向认证机构购买; 
      

Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。

参考

快速过一遍计算机网络

相关文章
相关标签/搜索