iOS开发进阶iOS 开发网络

网络层面试题

2018-03-15  本文已影响888人  果哥爸

主要参考:
[面试∙网络] TCP/IP(六):HTTP 与 HTTPS 简介
[面试∙网络] TCP/IP(五):TCP 协议详解
[面试∙网络] TCP/IP(四):TCP 与 UDP 协议
[面试∙网络] TCP/IP(三):IP协议相关技术
[面试∙网络] TCP/IP(二):IP协议
[面试∙网络] TCP/IP(一):数据链路层

1. 简介TCPUDP 区别,他们位于哪一层?

A. TCPUDP 区别:

TCP协议:
是面向有连接的协议,也就是说在使用TCP协议传输数据之前一定要在发送方接收方之间建立连接。建立连接后,通过数据重传流量控制等功能,TCP协议能够正确处理丢包问题,保证接收方能够收到数据,同时还能有效利用网络带宽

UDP协议:
是面向无连接的协议,它只会把数据传递给接收端,但不会关注接收端是否收到数据。

区别:

B. TCPUDP位于OSI七层模型第四层传输层

2. 路由器和交换机的工作原理大概是什么,他们分别用到什么协议,位于哪一层?

A.路由器和交换机的工作原理大概是什么

a.交换机

三层交换机工作原理.png

例如:对于并发访问量非常大的一个企业级Web站点,使用一台服务器不足以满足前端的访问需要,这时通常会通过多台服务器来分担,这些服务器前端访问的入口地址通常只有一个(企业为了使用者的方便,只会向最终的用户开放一个统一的访问URL)。为了能通过同一个URL将前端访问分发到后台多个服务器上,可以在这些服务器的前端加一个负载均衡器。这种负载均衡器就是4-7层交换机的一种。

image

此外,实际通信当中,人们希望在网络比较拥堵的时候,优先处理像语音这类对及时性要求较高的通信请求,放缓处理像邮件或数据转发等稍有延迟也并无大碍的通信请求,这种处理被称为宽带控制,也是4-7层交换机的重要功能,还有其他很多功能,例如广域网加速器,特殊应用访问加速以及防火墙等。

主机A的地址是10.1.1.30,要把数据发往地址为10.1.2.10的主机。在主机A的路由表中,保存了两个字段,由于目标地址10.1.2.1010.1.1.0/24段不匹配,所以它被发往默认路由10.1.1.1也就是图中路由器1的左侧网卡的IP地址
路由器1继续在它自己的路由控制表中查找目标地址10.1.2.10,它发现目标地址属于10.1.2.0/24这一段,因此将数据转发至下一个路由器10.1.0.2,也就是路由器2的左侧网卡的地址。
路由器2在自己的路由控制表中查找目标地址10.1.2.10,根据表中记录将数据发往10.1.2.1接口,也就是自己的右侧网卡IP地址主机B检查目标IP地址和自己相同,于是接收数据。

3. 描述TCP 协议三次握手,四次释放的过程。

A. TCP 三次握手:

三次握手.png

图片取自:TCP三次握手和四次挥手深入实践

客户端收到确认后,检查ack是否为x+1ACK是否为1,如果正确将标志位ACK置为1ack = y + 1, 并将该数据包发送给服务端,服务端检查ack是否为y+1ACK是否为1,如果都正确则连接建立成功,客户端服务端进入ESTABLISHED状态,完成三次握手,随后客户端服务端之间开始进行数据传输。

B. TCP 四次挥手:

TCP 四次挥手.png

图片取自:TCP三次握手和四次挥手深入实践

4. TCP 协议是如何进行流量控制,拥塞控制的?

A. 如何进行流量控制:

B. 如何进行拥塞控制:

流量控制是由发送方接收方共同控制的。刚刚我们介绍了接收方会把自己能够承受的最大窗口长度写在TCP 首部中,实际上在发送方这里,也存在流量控制,它叫拥塞窗口。TCP 协议中的窗口是指发送方窗口接收方窗口的较小值。
慢启动过程如下:

以上过程可以用下图概括:

窗口调整.png

5. 为什么建立连接时是三次握手,两次行不行?如果第三次握手失败了怎么处理

A. 为什么是三次握手:

B. 第三次握手失败了怎么处理

6. 关闭连接时,第四次握手失败怎么处理?

实际上,在第三步中,客户端收到FIN 包时,它会设置一个计时器,等待相当长的一段时间。如果客户端返回的ACK 丢失,那么服务端还会重发FIN并重置计时器。假设在计时器失效前服务器重发的 FIN 包没有到达客户端客户端就会进入 CLOSE状态,从而导致服务端永远无法收到 ACK 确认,也就无法关闭连接

示意图如下:


image.png

7. 为什么TCP握手是三次,挥手却是四次?(假设客户端主动,服务器端被动)

TCP三次握手中,服务器端的SYNACK是放在一个TCP报文段中向客户端发送的,而在断开连接的过程中,服务器端客户端发送的ACKFIN是是分别在两个不同的TCP报文段中。这是因为在服务器端接收到客户端FIN后,服务器端可能还有数据要传输,所以先发送ACK服务器端把数据发完之后就可以发送FIN断开连接了。

7. 你怎么理解分层和协议?

A. 如何理解分层

分层的理由:
B. 分层的原则

B. 如何理解协议

协议实际上是一种通信双方共同遵守规范。比如我需要把性别年龄传递给另外一台主机,那么我可以定义一个"A 协议",协议规定数据的前 4 个字节表示性别后四个字节表示年龄。这样对方主机接收时就知道前 4 个字节性别,而不会错把它当成年龄来处理。

协议的规范和共同遵守,有利于各个分层之间的交流和处理,也有利于促进协议标准化过程

8. HTTP 请求中的 GET 和 POST 的区别,Session 和 Cookie 的区别。

A. HTTP 请求中的 GET 和 POST 的区别

GET 请求通常用于查询、获取数据,而 POST 请求则用于发送数据,除了用途上的区别,它们还有以下这些不同:

注意: POST 请求仅比GET 请求略安全一点,它的数据不在 URL 中,但依然以明文的形式存放于 HTTP 的请求头中。

B.Cookie 和 Session

HTTP 是一种无状态的连接,客户端每次读取web 页面时,服务器都会认为这是一次新的会话。但有时候我们又需要持久保持某些信息,比如登录时的用户名、密码,用户上一次连接时的信息等。这些信息就由 CookieSession 保存。
这两者的根本性区别在于,cookie保存在客户端上,而 session 则保存在服务器中。由此我们还可以拓展出以下结论:

服务器接收到cookie 后,会根据cookie 中的 SessionID 来找到这个客户的 session。如果没有,则会生成一个新的 SessionID发送给客户端。

9. 谈谈你对 HTTP 1.1,2.0 和 HTTPS 的理解。

一、HTTP

HTTP(超文本传输协议,HyperText Transfer Protocol)应用层的协议,目前在互联网中应用广泛。

它被设计用于Web浏览器Web服务器之间的通信,但它也可以用于其他目的。 HTTP遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待它收到服务器端响应。HTTP
无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。

二、HTTP1.0 ——构建可扩展性

HTTP 1.0规定浏览器服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。

三、HTTP1.1 ——标准化的协议

HTTP/1.0的多种不同的实现运用起来有些混乱,HTTP1.1是第一个标准化版本,重点关注的是校正HTTP1.0设计中的结构性缺陷:

http1.1中,clientserver都是默认对方支持长链接的, 如果不希望使用长链接,则需要在header中指明connection:close

四、HTTP2.0——为了更优异的表现

HTTP/2.0HTTP/1.1有几处基本的不同:

五、HTTPS

我们知道HTTP 协议直接使用了TCP 协议进行数据传输。由于数据没有加密,都是直接明文传输,所以存在以下三个风险:

比如你在手机上打开应用内的网页时,有时会看到网页底部弹出了广告,这实际上就说明你的HTTP 内容被窃听、并篡改了。
HTTPS 协议旨在解决以上三个风险,因此它可以:

HTTPS 的结构如图所示:

image.png

可见它仅仅是在 HTTPTCP 之间新增了一个TLS/SSL 加密层,这也印证了一句名言:“一切计算机问题都可以通过添加中间层解决”。
使用HTTPS 时,服务端会将自己的证书发送给客户端,其中包含了服务端的公钥。基于非对称加密的传输过程如下:

这里的证书服务器证明自己身份的工具,它由权威的证书颁发机构(CA)发给申请者。如果证书是虚假的,或者是自己给自己颁发的证书,服务器就会不认可这个证书并发出警告:

image.png

总结一下 HTTPS 协议是如何避免前文所说的三大风险的:

详见: [面试∙网络] TCP/IP(六):HTTP 与 HTTPS 简介

上一篇下一篇

猜你喜欢

热点阅读