计算机网络

如果你想在校招中顺利拿到更好的offer,阿秀建议你多看看前人的经验 ,比如准备简历实习上岸经历校招总结阿里、字节、腾讯、美团等一二线大厂真实面经也欢迎来一起参加秋招打卡活动 等;如果你是计算机小白,学习/转行/校招路上感到迷茫或者需要帮助,可以点此联系阿秀;免费分享阿秀个人学习计算机以来的收集到的好资源,点此白嫖;如果你需要《阿秀的学习笔记》网站中求职相关知识点的PDF版本的话,可以点此下载

# 1、OSI 的七层模型分别是?各自的功能是什么?

# 简要概括

  • 物理层:底层数据传输,如网线;网卡标准。

  • 数据链路层:定义数据的基本格式,如何传输,如何标识;如网卡MAC地址。

  • 网络层:定义IP编址,定义路由功能;如不同设备的数据转发。

  • 传输层:端到端传输数据的基本功能;如 TCP、UDP。

  • 会话层:控制应用程序之间会话能力;如不同软件数据分发给不同软件。

  • 表示层:数据格式标识,基本压缩加密功能。

  • 应用层:各种应用软件,包括 Web 应用。

# 说明

  • 在四层,既传输层数据被称作(Segments);
  • 三层网络层数据被称做(Packages);
  • 二层数据链路层时数据被称为(Frames);
  • 一层物理层时数据被称为比特流(Bits)。

# 总结

  • 网络七层模型是一个标准,而非实现。
  • 网络四层模型是一个实现的应用模型。
  • 网络四层模型由七层模型简化合并而来。

# 2、说一下一次完整的HTTP请求过程包括哪些内容?

# 第一种回答

  • 建立起客户机和服务器连接。
  • 建立连接后,客户机发送一个请求给服务器。
  • 服务器收到请求给予响应信息。
  • 客户端浏览器将返回的内容解析并呈现,断开连接。

# 第二种回答

域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。

# 3、你知道DNS是什么?

官方解释:DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

通俗的讲,我们更习惯于记住一个网站的名字,比如www.baidu.com,而不是记住它的ip地址,比如:167.23.10.2。

# 4、DNS的工作原理?

将主机域名转换为ip地址,属于应用层协议,使用UDP传输。(DNS应用层协议,以前有个考官问过)

过程: 总结: 浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存。 一、主机向本地域名服务器的查询一般都是采用递归查询。 二、本地域名服务器向根域名服务器的查询的迭代查询。

  1. 当用户输入域名时,浏览器先检查自己的缓存中是否包含这个域名映射的ip地址,有解析结束。 2)若没命中,则检查操作系统缓存(如Windows的hosts)中有没有解析过的结果,有解析结束。 3)若无命中,则请求本地域名服务器解析(LDNS)。 4)若LDNS没有命中就直接跳到根域名服务器请求解析。根域名服务器返回给LDNS一个 主域名服务器地址。 5)此时LDNS再发送请求给上一步返回的gTLD( 通用顶级域), 接受请求的gTLD查找并返回这个域名对应的Name Server的地址 6)Name Server根据映射关系表找到目标ip,返回给LDNS
  2. LDNS缓存这个域名和对应的ip, 把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束

# 5、为什么域名解析用UDP协议?

因为UDP快啊!UDP的DNS协议只要一个请求、一个应答就好了。

而使用基于TCP的DNS协议要三次握手、发送数据以及应答、四次挥手,但是UDP协议传输内容不能超过512字节。

不过客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。

# 6、为什么区域传送用TCP协议?

因为TCP协议可靠性好啊!

你要从主DNS上复制内容啊,你用不可靠的UDP? 因为TCP协议传输的内容大啊,你用最大只能传512字节的UDP协议?万一同步的数据大于512字节,你怎么办?所以用TCP协议比较好!

# 7、HTTP长连接和短连接的区别

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。

# 8、什么是TCP粘包/拆包?发生的原因?

一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和粘包问题。

# 原因

1、应用程序写入数据的字节大小大于套接字发送缓冲区的大小.

2、进行MSS大小的TCP分段。( MSS=TCP报文段长度-TCP首部长度)

3、以太网的payload大于MTU进行IP分片。( MTU指:一种通信协议的某一层上面所能通过的最大数据包大小。)

# 解决方案

1、消息定长。

2、在包尾部增加回车或者空格符等特殊字符进行分割3. 将消息分为消息头和消息尾。4. 使用其它复杂的协议,如RTMP协议等。

# 9、为什么服务器会缓存这一项功能?如何实现的?

原因

  • 缓解服务器压力;
  • 降低客户端获取资源的延迟:缓存通常位于内存中,读取缓存的速度更快。并且缓存服务器在地理位置上也有可能比源服务器来得近,例如浏览器缓存。

实现方法

  • 让代理服务器进行缓存;
  • 让客户端浏览器进行缓存。

# 10、HTTP请求方法你知道多少?

客户端发送的 请求报文 第一行为请求行,包含了方法字段。

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

序 号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
9 PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

# 11、GET 和 POST 的区别,你知道哪些?

  1. get是获取数据,post是修改数据

  2. get把请求的数据放在url上, 以?分割URL和传输数据,参数之间以&相连,所以get不太安全。而post把数据放在HTTP的包体内(requrest body)

  3. get提交的数据最大是2k( 限制实际上取决于浏览器), post理论上没有限制。

  4. GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

  5. GET请求会被浏览器主动缓存,而POST不会,除非手动设置。

  6. 本质区别:GET是幂等的,而POST不是幂等的

    这里的幂等性:幂等性是指一次和多次请求某一个资源应该具有同样的副作用。简单来说意味着对同一URL的多个请求应该返回同样的结果。

正因为它们有这样的区别,所以不应该且不能用get请求做数据的增删改这些有副作用的操作。因为get请求是幂等的,在网络不好的隧道中会尝试重试。如果用get请求增数据,会有重复操作的风险,而这种重复操作可能会导致副作用(浏览器和操作系统并不知道你会用get请求去做增操作)。

# 12、一个TCP连接可以对应几个HTTP请求?

如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。

# 13、一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?

HTTP/1.1 存在一个问题,单个 TCP 连接在同一时刻只能处理一个请求,意思是说:两个请求的生命周期不能重叠,任意两个 HTTP 请求从开始到结束的时间在同一个 TCP 连接里不能重叠。

在 HTTP/1.1 存在 Pipelining 技术可以完成这个多个请求同时发送,但是由于浏览器默认关闭,所以可以认为这是不可行的。在 HTTP2 中由于 Multiplexing 特点的存在,多个 HTTP 请求可以在同一个 TCP 连接中并行进行。

那么在 HTTP/1.1 时代,浏览器是如何提高页面加载效率的呢?主要有下面两点:

  • 维持和服务器已经建立的 TCP 连接,在同一连接上顺序处理多个请求。
  • 和服务器建立多个 TCP 连接。

# 14、浏览器对同一 Host 建立 TCP 连接到的数量有没有限制?

假设我们还处在 HTTP/1.1 时代,那个时候没有多路传输,当浏览器拿到一个有几十张图片的网页该怎么办呢?肯定不能只开一个 TCP 连接顺序下载,那样用户肯定等的很难受,但是如果每个图片都开一个 TCP 连接发 HTTP 请求,那电脑或者服务器都可能受不了,要是有 1000 张图片的话总不能开 1000 个TCP 连接吧,你的电脑同意 NAT 也不一定会同意。

有。Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同的浏览器有一些区别。

如果图片都是 HTTPS 连接并且在同一个域名下,那么浏览器在 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。不过也未必会所有挂在这个域名的资源都会使用一个 TCP 连接去获取,但是可以确定的是 Multiplexing 很可能会被用到。

如果发现用不了 HTTP2 呢?或者用不了 HTTPS(现实中的 HTTP2 都是在 HTTPS 上实现的,所以也就是只能使用 HTTP/1.1)。那浏览器就会在一个 HOST 上建立多个 TCP 连接,连接数量的最大限制取决于浏览器设置,这些连接会在空闲的时候被浏览器用来发送新的请求,如果所有的连接都正在发送请求呢?那其他的请求就只能等等了。

update1:微信好友“卷轴”提出勘误“连接到”-》“连接到的”

# 15、在浏览器中输入url地址后显示主页的过程?

  • 根据域名,进行DNS域名解析;
  • 拿到解析的IP地址,建立TCP连接;
  • 向IP地址,发送HTTP请求;
  • 服务器处理请求;
  • 返回响应结果;
  • 关闭TCP连接;
  • 浏览器解析HTML;
  • 浏览器布局渲染;

# 16、在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤?

# 第一种回答

1、查浏览器缓存,看看有没有已经缓存好的,如果没有

2 、检查本机host文件,

3、调用API,Linux下Socket函数 gethostbyname

4、向DNS服务器发送DNS请求,查询本地DNS服务器,这其中用的是UDP的协议

5、如果在一个子网内采用ARP地址解析协议进行ARP查询如果不在一个子网那就需要对默认网关进行DNS查询,如果还找不到会一直向上找根DNS服务器,直到最终拿到IP地址(全球400多个根DNS服务器,由13个不同的组织管理)

6、这个时候我们就有了服务器的IP地址 以及默认的端口号了,http默认是80 https是 443 端口号,会,首先尝试http然后调用Socket建立TCP连接,

7、经过三次握手成功建立连接后,开始传送数据,如果正是http协议的话,就返回就完事了,

8、如果不是http协议,服务器会返回一个5开头的的重定向消息,告诉我们用的是https,那就是说IP没变,但是端口号从80变成443了,好了,再四次挥手,完事,

9、再来一遍,这次除了上述的端口号从80变成443之外,还会采用SSL的加密技术来保证传输数据的安全性,保证数据传输过程中不被修改或者替换之类的,

10、这次依然是三次握手,沟通好双方使用的认证算法,加密和检验算法,在此过程中也会检验对方的CA安全证书。

11、确认无误后,开始通信,然后服务器就会返回你所要访问的网址的一些数据,在此过程中会将界面进行渲染,牵涉到ajax技术之类的,直到最后我们看到色彩斑斓的网页

update1:为微信好友”卷轴“提出勘误”缺少5“-》现已加上

# 第二种回答

浏览器检查域名是否在缓存当中(要查看 Chrome 当中的缓存, 打开 chrome://net-internals/#dns)。

如果缓存中没有,就去调用 gethostbyname 库函数(操作系统不同函数也不同)进行查询。

如果gethostbyname没有这个域名的缓存记录,也没有在hosts` 里找到,它将会向 DNS 服务器发送一条 DNS 查询请求。DNS 服务器是由网络通信栈提供的,通常是本地路由器或者 ISP 的缓存 DNS 服务器。

查询本地 DNS 服务器

如果 DNS 服务器和我们的主机在同一个子网内,系统会按照下面的 ARP 过程对 DNS 服务器进行 ARP查询

如果 DNS 服务器和我们的主机在不同的子网,系统会按照下面的 ARP 过程对默认网关进行查询

# 17、谈谈DNS解析过程,具体一点

  • 请求一旦发起,若是chrome浏览器,先在浏览器找之前有没有缓存过的域名所对应的ip地址,有的话,直接跳过dns解析了,若是没有,就会找硬盘的hosts文件,看看有没有,有的话,直接找到hosts文件里面的ip
  • 如果本地的hosts文件没有能得到对应的ip地址,浏览器会发出一个dns请求到本地dns服务器本地dns服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动等。
  • 查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
  • 本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。
  • 最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。

# 18、DNS负载均衡是什么策略?

当一个网站有足够多的用户的时候,假如每次请求的资源都位于同一台机器上面,那么这台机器随时可能会崩掉。处理办法就是用DNS负载均衡技术,它的原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等。

# 19、HTTPS和HTTP的区别

1、HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全, HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

2、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

# 20、什么是SSL/TLS ?

SSL代表安全套接字层。它是一种用于加密和验证应用程序(如浏览器)和Web服务器之间发送的数据的协议。 身份验证 , 加密Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。

SSL/TLS协议作用:认证用户和服务,加密数据,维护数据的完整性的应用层协议加密和解密需要两个不同的密钥,故被称为非对称加密;加密和解密都使用同一个密钥的

对称加密:优点在于加密、解密效率通常比较高 ,HTTPS 是基于非对称加密的, 公钥是公开的,