admin管理员组

文章数量:1532440

基础

1.说下计算机网络体系结构

计算机网络体系结构,一般有三种:OSI 七层模型、TCP/IP 四层模型、五层结构。

简单说,OSI 是一个理论上的网络通信模型,TCP/IP 是实际上的网络通信模型,五层结构就是为了介绍网络原理而折中的网络通信模型。

OSI 七层模型

OSI 七层模型是国际标准化组织(International Organization for Standardization)制定的一个用于计算机或通信系统间互联的标准体系。

  • 应用层:通过应用进程之间的交互来完成特定网络应用,应用层协议定义的是应用进程间通信和交互的规则,常见的协议有:HTTP FTP SMTP SNMP DNS.

  • 表示层:数据的表示、安全、压缩。确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。

  • 会话层:建立、管理、终止会话,是用户应用程序和网络之间的接口。

  • 运输层:提供源端与目的端之间提供可靠的透明数据传输,传输层协议为不同主机上运行的进程提供逻辑通信。

  • 网络层:将网络地址翻译成对应的物理地址,实现不同网络之间的路径选择, 协议有 ICMP IGMP IP 等.

  • 数据链路层:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路。

  • 物理层:建立、维护、断开物理连接。

TCP/IP 四层模型

  • 应用层:对应于 OSI 参考模型的(应用层、表示层、会话层)。

  • 传输层: 对应 OSI 的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。

  • 网际层:对应于 OSI 参考模型的网络层,主要解决主机到主机的通信问题。

  • 网络接口层:与 OSI 参考模型的数据链路层、物理层对应。

五层体系结构

  • 应用层:对应于 OSI 参考模型的(应用层、表示层、会话层)。

  • 传输层:对应 OSI 参考模型的的传输层

  • 网络层:对应 OSI 参考模型的的网络层

  • 数据链路层:对应 OSI 参考模型的的数据链路层

  • 物理层:对应 OSI 参考模型的的物理层。

2.说一下每一层对应的网络协议有哪些?

一张表格总结常见网络协议:

3.那么数据在各层之间是怎么传输的呢?

对于发送方而言,从上层到下层层层包装,对于接收方而言,从下层到上层,层层解开包装。

  • 发送方的应用进程向接收方的应用进程传送数据

  • AP 先将数据交给本主机的应用层,应用层加上本层的控制信息 H5 就变成了下一层的数据单元

  • 传输层收到这个数据单元后,加上本层的控制信息 H4,再交给网络层,成为网络层的数据单元

  • 到了数据链路层,控制信息被分成两部分,分别加到本层数据单元的首部(H2)和尾部(T2)

  • 最后的物理层,进行比特流的传输

这个过程类似写信,写一封信,每到一层,就加一个信封,写一些地址的信息。到了目的地之后,又一层层解封,传向下一个目的地。

网络综合

4.从浏览器地址栏输入 url 到显示主页的过程?

这道题,大概的过程比较简单,但是有很多点可以细挖:DNS 解析、TCP 三次握手、HTTP 报文格式、TCP 四次挥手等等。

  1. DNS 解析:将域名解析成对应的 IP 地址。

  2. TCP 连接:与服务器通过三次握手,建立 TCP 连接

  3. 向服务器发送 HTTP 请求

  4. 服务器处理请求,返回 HTTp 响应

  5. 浏览器解析并渲染页面

  6. 断开连接:TCP 四次挥手,连接结束

我们以输入http://www.baidu 为例:

各个过程都使用了哪些协议?

 

5.说说 DNS 的解析过程?

DNS,英文全称是 domain name system,域名解析系统,它的作用也很明确,就是域名和 IP 相互映射。

DNS 的解析过程如下图:

假设你要查询 http://www.baidu 的 IP 地址:

6.说说 WebSocket 与 Socket 的区别?

7.说一下你了解的端口及对应的服务?

具体来说,Socket 是一套标准,它完成了对 TCP/IP 的高度封装,屏蔽网络细节,以方便开发者更好地进行网络编程。

  • 首先会查找浏览器的缓存,看看是否能找到http://www.baidu对应的 IP 地址,找到就直接返回;否则进行下一步。

  • 将请求发往给本地 DNS 服务器,如果查找到也直接返回,否则继续进行下一步;

  • 本地 DNS 服务器向根域名服务器发送请求,根域名服务器返回负责com的顶级域名服务器的 IP 地址的列表。

  • 本地 DNS 服务器再向其中一个负责com的顶级域名服务器发送一个请求,返回负责baidu的权限域名服务器的 IP 地址列表。

  • 本地 DNS 服务器再向其中一个权限域名服务器发送一个请求,返回http://www.baidu所对应的 IP 地址。

  • Socket 其实就是等于 IP 地址 + 端口 + 协议

  • WebSocket 是一个持久化的协议,它是伴随 H5 而出的协议,用来解决 http 不支持持久化连接的问题。

  • Socket 一个是网编编程的标准接口,而 WebSocket 则是应用层通信协议。

HTTP

8.说说 HTTP 常用的状态码及其含义?

HTTP 状态码首先应该知道个大概的分类:

1XX:信息性状态码

2XX:成功状态码

几个常用的,面试之外,也应该记住:

 

    • 3XX:重定向状态码

    • 4XX:客户端错误状态码

    • 5XX:服务端错误状态码

说一下 301 和 302 的区别?

301:永久性移动,请求的资源已被永久移动到新位置。服务器返回此响应时,会返回新的资源地址。

302:临时性性移动,服务器从另外的地址响应资源,但是客户端还应该使用这个地址。

9.HTTP 有哪些请求方式?

用一个比喻,301 就是嫁人的新垣结衣,302 就是有男朋友的长泽雅美。

 

其中,POST、DELETE、PUT、GET 的含义分别对应我们最熟悉的增、删、改、查。

10.说⼀下 GET 和 POST 的区别?

可以从以下几个方面来说明 GET 和 POST 的区别:

  1. 从 HTTP 报文层面来看,GET 请求将信息放在 URL,POST 将请求信息放在请求体中。这一点使得 GET 请求携带的数据量有限,因为 URL 本身是有长度限制的,而 POST 请求的数据存放在报文体中,因此对大小没有限制。而且从形式上看,GET 请求把数据放 URL 上不太安全,而 POST 请求把数据放在请求体里想比较而言安全一些。

  2. 从数据库层面来看,GET 符合幂等性和安全性,而 POST 请求不符合。这个其实和 GET/POST 请求的作用有关。按照 HTTP 的约定,GET 请求用于查看信息,不会改变服务器上的信息;而 POST 请求用来改变服务器上的信息。正因为 GET 请求只查看信息,不改变信息,对数据库的一次或多次操作获得的结果是一致的,认为它符合幂等性。安全性是指对数据库操作没有改变数据库中的数据。

  3. 从其他层面来看,GET 请求能够被缓存,GET 请求能够保存在浏览器的浏览记录里,GET 请求的 URL 能够保存为浏览器书签。这些都是 POST 请求所不具备的。缓存是 GET 请求被广泛应用的根本,他能够被缓存也是因为它的幂等性和安全性,除了返回结果没有其他多余的动作,因此绝大部分的 GET 请求都被 CDN 缓存起来了,大大减少了 Web 服务器的负担。

11.GET 的长度限制是多少?

HTTP 中的 GET 方法是通过 URL 传递数据的,但是 URL 本身其实并没有对数据的长度进行限制,真正限制 GET 长度的是浏览器。

例如 IE 浏览器对 URL 的最大限制是 2000 多个字符,大概 2kb 左右,像 Chrome、Firefox 等浏览器支持的 URL 字符数更多,其中 FireFox 中 URL 的最大长度限制是 65536 个字符,Chrome 则是 8182 个字符。

这个长度限制也不是针对数据部分,而是针对整个 URL。

12.HTTP 请求的过程与原理?

HTTP 协议定义了浏览器怎么向服务器请求文档,以及服务器怎么把文档传给浏览器。

  • 每个服务器都有一个进程,它不断监听 TCP 的端口 80,以便发现是否有浏览器向它发出连接建立请求

  • 监听到连接请求,就会建立 TCP 连接

  • 浏览器向服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应

  • 最后,释放 TCP 连接

在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则,这些格式和规则就是超文本传输协议 HTTP。

PS:这道题和上面浏览器输入网址发生了什么那道题大差不差。

13.说一下 HTTP 的报文结构?

HTTP 报文有两种,HTTP 请求报文和 HTTP 响应报文:

HTTP 请求报文

HTTP 请求报文的格式如下:

GET / HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*

 

HTTP 请求报文的第一行叫做请求行,后面的行叫做首部行,首部行后还可以跟一个实体主体。请求首部之后有一个空行,这个空行不能省略,它用来划分首部与实体。

请求行包含三个字段:

  • 方法字段:包括 POST、GET 等请方法。

  • URL 字段

  • HTTP 版本字段。

HTTP 响应报文

HTTP 响应报文的格式如下:

HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
<html>
  <body>Hello World</body>
</html>

 

HTTP 响应报文的第一行叫做状态行,后面的行是首部行,最后是实体主体

  • 状态行包含了三个字段:协议版本字段、状态码和相应的状态信息。

  • 实体部分是报文的主要部分,它包含了所请求的对象。

  • 首部行首部可以分为四种首部,请求首部、响应首部、通用首部和实体首部。通用首部和实体首部在请求报文和响应报文中都可以设置,区别在于请求首部和响应首部。常见的请求首部有 Accept 可接收媒体资源的类型、Accept-Charset 可接收的字符集、Host 请求的主机名。常见的响应首部有 ETag 资源的匹配信息,Location 客户端重定向的 URI。常见的通用首部有 Cache-Control 控制缓存策略、Connection 管理持久连接。常见的实体首部有 Content-Length 实体主体的大小、Expires 实体主体的过期时间、Last-Modified 资源的最后修改时间。

14.URI 和 URL 有什么区别?

 

  • URI,统一资源标识符(Uniform Resource Identifier, URI),标识的是 Web 上每一种可用的资源,如 HTML 文档、图像、视频片段、程序等都是由一个 URI 进行标识的。

  • URL,统一资源定位符(Uniform Resource Location),它是 URI 的一种子集,主要作用是提供资源的路径。

它们的主要区别在于,URL 除了提供了资源的标识,还提供了资源访问的方式。这么比喻,URI 像是身份证,可以唯一标识一个人,而 URL 更像一个住址,可以通过 URL 找到这个人——人类住址协议://地球/中国/北京市/海淀区/xx 职业技术学院/14 号宿舍楼/525 号寝/张三.男。

15.说下 HTTP/1.0,1.1,2.0 的区别?

关键需要记住 HTTP/1.0 默认是短连接,可以强制开启,HTTP/1.1 默认长连接,HTTP/2.0 采用多路复用

HTTP/1.0

  • 默认使用短连接,每次请求都需要建立一个 TCP 连接。它可以设置Connection: keep-alive 这个字段,强制开启长连接。

HTTP/1.1

  • 引入了持久连接,即 TCP 连接默认不关闭,可以被多个请求复用。

  • 分块传输编码,即服务端每产生一块数据,就发送一块,用” 流模式” 取代” 缓存模式”。

  • 管道机制,即在同一个 TCP 连接里面,客户端可以同时发送多个请求。

HTTP/2.0

  • 二进制协议,1.1 版本的头信息是文本(ASCII 编码),数据体可以是文本或者二进制;2.0 中,头信息和数据体都是二进制。

  • 完全多路复用,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。

  • 报头压缩,HTTP 协议不带有状态,每次请求都必须附上所有信息。Http/2.0 引入了头信息压缩机制,使用 gzip 或 compress 压缩后再发送。

  • 服务端推送,允许服务器未经请求,主动向客户端发送资源。

16.HTTP/3 了解吗?

HTTP/3 主要有两大变化,传输层基于 UDP、使用 QUIC 保证 UDP 可靠性

HTTP/2 存在的一些问题,比如重传等等,都是由于 TCP 本身的特性导致的,所以 HTTP/3 在 QUIC 的基础上进行发展而来,QUIC(Quick UDP Connections)直译为快速 UDP 网络连接,底层使用 UDP 进行数据传输。

HTTP/3 主要有这些特点:

  • 使用 UDP 作为传输层进行通信

  • 在 UDP 的基础上 QUIC 协议保证了 HTTP/3 的安全性,在传输的过程中就完成了 TLS 加密握手

  • HTTPS 要建⽴⼀个连接,要花费 6 次交互,先是建⽴三次握⼿,然后是 TLS/1.3 的三次握⼿。QUIC 直接把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数。

  • QUIC 有⾃⼰的⼀套机制可以保证传输的可靠性的。当某个流发⽣丢包时,只会阻塞这个流,其他流不会受到影响。

我们拿一张图看一下 HTTP 协议的变迁:

17.HTTP 如何实现长连接?在什么时候会超时?

什么是 HTTP 的长连接?

  1. HTTP 分为长连接和短连接,本质上说的是 TCP 的长短连接。TCP 连接是一个双向的通道,它是可以保持一段时间不关闭的,因此 TCP 连接才具有真正的长连接和短连接这一说法。

  2. TCP 长连接可以复用一个 TCP 连接,来发起多次的 HTTP 请求,这样就可以减少资源消耗,比如一次请求 HTML,如果是短连接的话,可能还需要请求后续的 JS/CSS。

如何设置长连接?

通过在头部(请求和响应头)设置 Connection 字段指定为keep-alive,HTTP/1.0 协议支持,但是是默认关闭的,从 HTTP/1.1 以后,连接默认都是长连接。

在什么时候会超时呢?

  • HTTP 一般会有 httpd 守护进程,里面可以设置 keep-alive timeout,当 tcp 连接闲置超过这个时间就会关闭,也可以在 HTTP 的 header 里面设置超时时间

  • TCP 的 

本文标签: 计算机网络详解建议收藏三万字