简单描述之常见网络面试题

前一段时间都在笔试面试,现在拿一小段时间记录一下记忆比较深刻的网络面试题,整理下思路,希望能讲得清楚。


一,关于HTTP

HTTP是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器,然后用户端通过浏览器访问url地址来获取网页的显示内容。现在我们的web页面越来越复杂,不仅仅单纯的是一些简单的文字和图片,所以我们的 HTML 页面有了CSS,Javascript,来丰富我们的页面展示,当 ajax 的出现,我们又多了一种向服务器端获取数据的方法,这些其实都是基于 HTTP 协议的。

Http1.0和Http1.1的区别

我们的http发展从http1.0到http1.1变化体现在:

1. 缓存处理

在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

2. 带宽优化及网络连接的使用

HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

3. Host头处理

在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

4. 长连接

HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

5. 错误通知的管理

在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

HTTP报文头解析

上边那道题中,我们可以发现几个HTTP协议的常用头部字段,HTTP正是通过头部字段来实行内部机制,管理报文。

HTTP头部字段可以分为通用头部字段,请求头部字段,响应头部字段以及实体头部字段。

常用的通用头部字段
1.Cache-Control ,与Expires(过期时间)和Last-Modified(最后修改时间)配合操作缓存
2. Connection 管理持久连接(Keep-alive)以及控制不转发给代理服务器的首部字段
3. Transfer-Encoding 表示报文在传输过程中采用的编码方式,在HTTP/1.1的报文传输过程中仅对分块编码有效。
4. Via
追踪请求和响应报文测传输路径,报文经过代理或者网关是会在Via字段添加该服务器的信息,然后再进行转发。

请求头部字段
1. Accept 通知服务器用户代理能够处理的媒体类型以及该媒体类型对应的优先级。
2. Authorization 用来告知服务器用户端的认证信息,下方就是连接公司内部SVN系统时需要认证时的请求头部信息。
3. If-Match 与If-None-Match
如果后方的字符串与ETag相等/不等则服务器端进行请求,否则不进行处理。
4. If-Modified-Since与If-Unmodified-Since
该字段后方跟的是一个日期,意思是在该日期后发生了资源更新,那么服务器就会处理该请求。

响应头部字段
1. Accept-Ranges:告知客户端服务器那边是否支持范围请求(请求部分内容,请求头中使用Range字段)。Accept-Ranges的值为bytes时,就说明服务器支持范围请求,为none时,说明服务器不支持客户端的范围请求。
2.Age
该字段告知客户端,源服务器在多久前创建了该响应。
3 Etag
Etag是服务器当前请求的服务器资源(图片,HTML页面等)所对应的一个独有的字符串。不同资源间的Etag是不同的,当资源更新时Etag也会进行更新。

实体头部字段
1  Allow
该字段用于服务器通知客户端服务器这边所支持的所有请求方法(GET、POST等)。如果服务器找不到客户端请求中所提到的方法的话,就会返回405 Method Not Allowed,于此同时还会把所有能支持的HTTP方法写入到首部字段Allow后返回。
2 Content-Encoding,Content-Language,Content-Length
该字段用来说明报文实体的编码方式,自然语言,报文实体字节长度

Cookie也放在报文头部,字段set-cookie等

HTTP与HTTPS

HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
HTTP 先和 SSL(Secure Socket Layer)通信,再由 SSL 和 TCP 通信。通过使用 SSL,HTTPs 提供了加密、认证和完整性保护。
HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

HTTP2.0的改进

新的二进制格式,header压缩,多路复用,服务端推送
HTTP 性能优化的关键并不在于高带宽,而是低延迟。TCP 连接会随着时间进行自我「调谐」,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。这种调谐则被称为 TCP 慢启动。由于这种原因,让原本就具有突发性和短时性的 HTTP 连接变的十分低效。HTTP/2 通过让所有数据流共用同一个连接,可以更有效地使用 TCP 连接,让高带宽也能真正的服务于 HTTP 的性能提升。


二,关于DNS

层次结构

1. 层次结构
域名服务器可以分为以下四类:
(1) 根域名服务器:解析顶级域名;
(2) 顶级域名服务器:解析二级域名;
(3) 权限域名服务器:解析区内的域名;
区和域的概念不同,可以在一个域中划分多个区。
(4) 本地域名服务器:也称为默认域名服务器。可以在其中配置高速缓存。

解析过程

2. 解析过程
主机向本地域名服务器解析的过程采用递归,而本地域名服务器向其它域名服务器解析可以使用递归和迭代两种方式。
迭代的方式下,本地域名服务器向一个域名服务器解析请求解析之后,结果返回到本地域名服务器,然后本地域名服务器继续向其它域名服务器请求解析;而递归地方式下,结果不是直接返回的,而是继续向前请求解析,最后的结果才会返回。


三,关于TCP可靠传输

1. 数据分片和排序

先考虑UDP的情况,当IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报.
tcp面向字节流,会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。

2. 序号和确认号

接收方收到报文就会确认,发送方发送一段时间(计时器到时间)后没有收到确认就重传。

3. 校验和

用于容错,比如目的ip地址是否正确,传输层协议是否正确

4. 拥塞控制

慢启动

慢开始不是指cwnd的增长速度慢(指数增长),而是指TCP开始发送设置cwnd=1。
思路:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小

拥塞避免(加法增大乘法减小)

达到阈值时,加法增大与乘法减小
乘法减小:无论是慢开始阶段还是拥塞避免,只要出现了网络拥塞(超时),就把慢开始门限值ssthresh减半
加法增大:执行拥塞避免算法后,拥塞窗口线性缓慢增大,防止网络过早出现拥塞

快恢复快重传

快重传:要求接收方在收到一个失序的报文段后就立即发出重复确认,而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。

快恢复:当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半。但是接下去并不执行慢开始算法。
考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。

5.流量控制

流量控制是为了控制发送方发送速率,保证接收方来得及接收。

接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。例如将窗口字段设置为 0,则发送方不能发送数据。

 

参考文献:tcp可靠传输:https://www.cnblogs.com/williamjie/p/9390183.html

http版本区别部分:https://www.cnblogs.com/zhangyfr/p/8662673.html

猜你喜欢

转载自blog.csdn.net/wannuoge4766/article/details/100023244