其他后端所需技术栈个人总结链接汇总:
- 秋招面经(后端开发)——语言篇(C++)
- C++ STL容器底层学习(个人总结)
- 秋招面经(后端开发)——数据库篇(MySQL)
- 秋招面经(后端开发)——操作系统篇
- 秋招面经(后端开发)——计算机网络篇
阿秀:OSI的七层模型分别是?各自的功能是什么?
简要概括
- 物理层:底层的数据传输,如网线;网卡标准 。设备:中继器、集线器
- 数据链路层:定义数据的基本格式,如何传输,如何标识;如网卡MAC地址。链路层设备:交换机
- 网络层:定义IP编址,定义路由转发;如不同设备的数据转发。设备:路由器
- 传输层:端到端数据传输的基本功能;如TCP、UDP
- 会话层:控制应用程序之间的会话能力;如不同软件数据分发给不同软件
- 表示层:数据格式标识;基本压缩加密功能(也就是把计算机能够识别的东西转换成人能够识别的东西)
- 应用层:各种应用软件,包括Web应用
说明:
- 传输层数据称作段(Segments)
- 网络层数据称作报(Packages)
- 数据链路层数据称作帧(Frames)
- 物理层数据称作比特流(Bits)
总结
- 网络七层模型是一个标准,而非实现
- 网络四层模型是一个实现的应用模型
- 网络四层模型由网络七层模型简化而来
表格形式:
OSI七层模型 |
功能 |
对应的网络协议 |
TCP/IP 四层概念模型 |
设备 |
应用层 |
各种应用软件,包括Web应用 |
HTTP,FTP |
应用层 |
|
表示层 |
数据格式标识;基本压缩加密功能 |
Telnet |
应用层 |
|
会话层 |
控制应用程序之间的会话能力; |
SMTP,DNS |
应用层 |
|
传输层 |
端到端数据传输的基本功能 |
TCP,UDP |
传输层 |
|
网络层 |
定义 IP 地址,定义路由转发;如不同设备的数据转发 |
IP,ICMP |
网络层 |
路由器 |
数据链路层 |
定义数据的基本格式,如何传输,如何标识 |
PPP、ARP |
数据链路层 |
交换机 |
物理层 |
定义物理设备的标准,底层的数据传输 |
IEEE 802 |
数据链路层 |
中继器/集线器 |
1.1 简述静态路由和动态路由
- 静态路由:
- 概念: 静态路由是由系统管理员设计与构建的路由表。
- 应用场景: 适用于网关数量有限的场合,且网络拓补结构不经常变化的网络。
- 缺点: 不能动态地适用网络状况的变化,当网络状况变化后必须由网络管理员修改路由表
- 动态路由:
- 概念: 动态路由是通过路由选择协议动态的实时更新路由表。
- 优点: 可以自动学习网络的拓扑结构,并更新路由表。
- 缺点: 路由广播更新信息将占据大量的网络带宽。
1.2 说说有那些路由协议,都是如何更新的
-
路由协议概述: 路由协议是路由器之间实现路由信息共享的一种机制,它允许路由器之间相互交换和维护各自的路由表。当一台路由器的路由表由于某种原因发生变化时,它需要及时地将这一变化通知与其相连接的其他路由器,以保证数据的正确传递。路由协议不承担网络上终端用户之间的数据传输任务。
路由分类: 路由可分为静态&动态路由。
路由选择算法的必要步骤:
- 向其他路由器传递路由信息。
- 接受其他路由器的路由信息。
- 根据收到的路由信息计算出到每个目的网络的最优路径,并由此生成路由选择表。
- 根据网络拓扑的变化及时的做出反应,调整路由生成新的路由选择表,同时把拓扑变化以路由信息的形式向其他路由器宣告。
-
路由选择算法: 距离向量法(Distance Vector Routing) 和链路状态算法(Link-State Routing)。
由此分为距离矢量路由协议(RIP、IGRP、EIGRP)和链路状态路由协议(OSPF、IS-IS)。
-
路由协议:
- RIP路由协议:距离向量算法,也称为距离向量协议
- 概述: 路由器收集所有可到达目的地的不同路径,并且保存有关到达每个目的地的最少站点数的路径信息,除到达目的地的最佳路径外,任何其他信息予以丢弃,同时路由器也把所收集的路由信息用 RIP 协议通知相邻的其他路由器
- 使用场景: 它简单、可靠、便于配置。只适用于小型的同构网络、
- IGRP 和 EIGRP 协议:是基于距离向量算法的动态路由协议。
- OSPF路由协议: 是一种基于链路状态的路由协议。
- BGP 和 BGP4 路由协议: 是为 TCP/IP 互联网设计的外部网关协议。主要目的是与其他自治域的 BGP 交换网络信息。
---------------------TCP-------------------
2.1 说说 TCP 与 UDP 在网络协议中的那一层,它们之间有什么区别?
相同点:它们都是位于传输层的协议。
不同点:
|
TCP |
UDP |
连接性 |
面向连接 |
面向无连接 |
可靠性 |
提供可靠交付 |
不可靠的 |
有序性 |
TCP能够保证信息的有序性 |
不提供有序性保证 |
数据边界 |
TCP不提供数据边界 |
UDP保证 |
速度 |
TCP速度慢 |
UDP速度快 |
发送消耗 |
TCP是重量级 |
UDP是轻量级 |
首部开销 |
TCP报头大 |
UDP报头小 |
拥塞或流量控制 |
TCP有拥塞控制和流量控制 |
UDP不能进行流量控制 |
传输方式 |
面向字节流 |
面向报文 |
通信 |
支持一对一 |
支持一对一、一对多、多对多的通信 |
使用场景 |
可靠性高的应用 |
实时应用 |
TCP对应的应用层协议
- FTP:文件传输协议,21 端口
- Telnet:用于远程登陆。23 端口
- SMTP:邮件传输协议。25 端口
- POP3:与 SMTP 对应,用来接收邮件。
UDP对应的应用层协议
- DNS:域名解析服务,53 端口
- SNMP:简单网络管理协议,161 端口
- TFTP:简单文件传输协议,69 端口
2.2 简述 TCP 三次握手和四次挥手的过程
三次握手
- 第一次握手:建立连接时,客户端向服务器发送 SYN 包(seq = x, SYN =1),请求连接,等待确认。
- 第二次握手:服务器收到客户端的请求,回一个 ACK 包,并同时发送 SYN包。(SYN = 1,seq = y,ACK = 1,ack = x+1)
- 第三次握手:客户端收到 SYN + ACK 包,再回一个 ACK 包告诉服务器已经收到(ACK = 1,ack = y+1,seq = x+1),这一次也可以同时向服务器发送数据了
四次挥手
- 第一次挥手:客户端发送 FIN 包给服务器,请求终止连接,此时客户端不能再发送数据,但能够接受数据(FIN = 1,seq = z)
- 第二次挥手:服务器收到客户端的 FIN 包,回一个 ACK 包给客户端,这个时候还不会断开连接,还需要把剩下要发送的数据传输完。(ACK = 1,ack = z+1,seq= w)
- 第三次挥手:服务器等到剩下数据发送完毕,向客户端发送一个 FIN 包,表明可以断开连接。(FIN = 1,seq = w+x)
- 第四次挥手:客户端收到服务器的 FIN 包,回复一个 ACK 包表明确认收到,并且等待一段时间(TIME_WAIT),确保服务器不会有数据发过来,然后彻底断开连接
状态转移
三次握手:
- 第一次握手:客户端:CLOSED --> SYN_SENT。服务器端:LISTEN
- 第二次握手:客户端:SYN_SENT。服务器端:LISTEN --> SYN_RCVD
- 第三次握手:客户端:SYN_SENT --> ESTABLISHED。服务器端:SYN_RCVD
- 服务器收到客户端的ACK:服务器端:SYN_RCVD --> ESTABLISHED
四次挥手:
- 第一次挥手:客户端(请求方):ESTABLISHED --> FIN_WAIT_1。服务器端(被动方):ESTABLISHED
- 第二次挥手:客户端:FIN_WAIT_1。服务器端:ESTABLISHED --> CLOSE_WAIT。
- 当客户端收到服务器端发送的 ACK:客户端:FIN_WAIT_1 --> FIN_WAIT_2。
- 第三次挥手:服务器端:CLOSE_WAIT --> LAST_ACK。
- 第四次挥手:客户端: FIN_WAIT_2 --> TIME_WAIT。服务器端:LAST_ACK
- 当服务器端收到客户端的 ACK 报文:LAST_ACK --> CLOSED
- 当客户端等待一段时间,确认服务端收到ACK。客户端: TIME_WAIT --> CLOSED。
TCP 通信流程
2.3 说说 TCP 2次握手行不行?为什么要3次?
不行,因为2次握手的话,客户端可以确定客户端的收、发功能和服务器端的收、发功能可以工作,但是服务器端只能确定服务器端的收功能和客户端的发功能可以工作,但是不能确定客户端的收功能和自己的发功能也可以工作。
扩展:TCP 为什么 4 次挥手?
服务器端收到客户端请求断开连接的时候,可能还有数据没有发送完,需要等待发送完,再与客户端断开连接,所以是四次挥手(确认报文和请求断开连接报文不能一起发送,要分两次)。
2.4 简述 TCP 滑动窗口以及超时重传机制
滑动窗口:
- 概念: 滑动窗口协议是进行流量控制的一种措施,接收方通过告知发送方自己的窗口大小,从而控制发送方的发送速度,以防止发送方因发送速度过快而导致自己被淹没的目的。
- 作用:解决了端到端的流量控制问题,允许接收方对传输进行限制,直到它拥有足够的缓冲空间来容纳更多的数据。
超时重传机制:
- 概念: 在发送一个数据以后就开启一个计时器,在一定时间内如果没有得到发送数据包的 ACK 报文,那么就重新发送数据,直到成功为止。
- 作用: 是保证 TCP 协议数据可靠性的一个重要机制
2.5 说说滑动窗口过小怎么办
如果滑动窗口过小,当传输较大的数据的时候需要不停的对数据进行确认,这个时候就会造成很大的延迟。
2.6 说说如果三次握手时每次握手信息对方没收到会怎么样,分情况介绍
- 第一次握手: 请求方将不会收到 ACK 消息,超时后进行重传。(服务端没有发送ACK)
- 第二次握手: 请求方不会收到 ACK 消息,超时后进行重传。(服务端发送 ACK,但是丢失了)
- 第三次握手: 服务器端收不到客户端的 ACK 消息,会根据 TCP 的超时重传机制,在等待3秒、6秒、12秒重新发送 SYN + ACK包。当达到一定的次数,还没有收到客户端的 ACK,服务器端就会关闭这个连接。
2.7 简述 TCP 的 TIME_WAIT,为什么需要有这个状态?
概述: TIME_WAIT 状态也称为 2MSL(一个报文段的最大生存时间) 等待状态。
作用:
- 保证客户端发送的最后一个 ACK 报文段能够到达服务器。为了防止在第四次挥手的时候,客户端(请求断开连接的)发送的 ACK 确认报文丢失,如果丢失可以重新发送。
- 防止"已失效的连接请求报文段"出现在下次连接中,这次连接的报文段在这段时间内就都会结束。
缺点: 在 TIME_WAIT 时间内,客户端和服务器端的端口不能再被使用。
2.8 什么是 MSL
MSL: 最长报文段寿命,它是任何报文在网络上存在的最长时间,超过这个时间,报文将被丢弃。
2.9 说说什么是 SYN flood,如何防止这类攻击
概念:它是当前最流行的 DoS(拒绝服务攻击) 与 DDoS(分布式拒绝服务攻击)的方式之一,通过一直向被攻击方发送大量伪造的 TCP 连接请求,使被攻击方资源耗尽。
预防措施:
- 从互联网服务提供商(ISP)购买服务。
- 保留在内部并自己解决。
- 使用内容分发网络(CDN)
2.10 什么是 TCP 粘包和拆包?
一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的包发送,这就是TCP的拆包和粘包问题。
原因
- 应用程序写入数据的字节大小大于套接字发送缓冲区的大小(Socket=(主机IP地址,端口号))。
- 进行MSS大小的TCP分段。(MSS=TCP报文段长度-TCP首部长度)
- 以太网的playload大于MTU进行IP分片。(MTU指:一种通信协议的某一层(通常是数据链路层)上面所能通过的最大数据包大小。)
解决方案
- 消息定长
- 在包尾部增加回车或者空格符等特殊字符进行分割
- 将消息分为消息头和消息尾
- 使用其他复杂的协议,如RTMP协议等
2.11 TCP四大拥塞控制算法总结(极其重要)
出现拥塞的条件: 对资源需求的总和 > 可用资源
四个算法:(1) 慢启动(Slow Start)(2)拥塞避免(Congestion Avoidance)(3)拥塞发生(快重传)(4)快速恢复(Fast Reconvery)
明确几个描述:cwnd:拥塞窗口。ssthrest:慢开始门限。MSS:一个最大报文长度。
传输轮次:也就是往返时延 RTT。开始发送一批报文到发送下一批报文的时间。
慢启动:
- 在 TCP 刚开始的时候,初始 cwnd 为 1。
- 每经过一个传输轮次,cwnd = 2 * cwnd。拥塞窗口进行指数级增长。
- 当 cwnd 达到 ssthrest 的时候,进入拥塞避免阶段。
拥塞避免:
- 在拥塞避免阶段,每经过一个传输轮次,cwnd = cwnd + 1,拥塞窗口进行线性增长。
- 当收到 3 个重复的确认,会执行快重传算法进入快恢复阶段。
快重传:
- 设置 ssthresh = cwnd / 2。并且设置 cwnd = cwnd / 2;
- 然后进入快恢复阶段
快恢复:
- 首先设置 cwnd = cwnd +3 MSS(原因是收到3个重复的 ACK 确认)
- 如果再收到这个重传的 ACKs , cwnd = cwnd + 1
- 直到收到新的确认ACK,cwnd 就又会变回去,cwnd = ssthresh。
扩展:为何快重传是选择 3 次 ACK?
两次重复 ACK 很有可能是乱序造成的,三次 ACK 很可能是丢包引起的,四次的话就更可能是了,但是这样的相应策略太慢了,所以是 3 次 ACK。
2.12 TCP 的可靠性传输
主要通过校验和、序列号/确认应答、超时重传(快速重传)、最大消息长度、滑动窗口控制
- 校验和: 通过校验和可以检测数据是否有差错和异常。
- 序列号/确认应答: 接收端会回复确认报文,说明已经确认收到的报文,能够保证数据的完整性。
- 超时重传: 如果一段时间没有收到报文的确认,就会重新发送。注意,如果多次重发都没有收到确认,就会认为接收端异常,强制关闭连接。
- 最大信息长度: 双方约定发送单位,为了防止出现粘包和拆包现象。
- 滑动窗口: 接收端在没有收到自己所期望的序列号数据之前,会对之前的数据进行重复确认。如果发生3次冗余确认,就会执行快速重传,重新发送。
- 拥塞控制: 采用慢启动,防止发生丢包问题。
2.13 说说 UDP 如何保证尽量可靠?
在应用层模仿传输层的可靠性传输。
- 添加 seq/ack 机制,确保数据发送的对端。
- 添加发送和接收缓冲区,类似于 TCP 的滑动窗口。
- 添加超时重传机制。
2.14 说一说 TCP 的 keepalive,以及和 HTTP 的 keepalive 的区别?
TCP 的 keepalive: TCP 为了确认链接还需不需要保持,会在超过一段时间之后,发送一个空报文给对方,对方如果回应,就继续保持链接,否则,如果多次都没有收到回应,就会断开链接。
HTTP 的 keepalive: 在一次 TCP 连接中可以持续发送多份数据而不会断开。它是为了减少 TCP 连接建立次数,以此来提高性能和 http 服务器的吞吐率。
两者的区别:
- 这两个是完全不同的两个东西,tcp 的是检测链接是否继续保持。http 的是为了避免重复进行TCP三次握手和四次挥手的环节(重复建立/释放 TCP 连接)。
2.15 简述 TCP 协议的延迟 ACK 和累计应答
延迟应答: TCP 在收到对端的报文后,不会立即发送 ACK,而是等待一段时间将 ACK 和要发送的数据一块发送。但是不能无限延长。Linux 采用动态调节算法来确定延时的时间。
累计应答: 对应发送的包都要进行应答,但不是一个个应答,而是会应答某个之前的ID,这个ID前边的已经接收完毕。
2.16 TCP 如何加速一个大文件的传输
- 建立连接优化,通过缩短定时器
- 平滑法爆:避免瞬间拥塞
- 丢包预测:针对丢包规律,针对性提前多发数据,提高有效发包率。
- RTO 探测:提前与 RTO 去试探,可以规避由于 ACK 报文丢失而导致的速度下降问题。
- 带宽评估:通过带宽速率,控制发包速度。
- 带宽争抢
2.17 服务器怎么判断客户端断开了连接
总共两种:keepalive 和 heart-beat
keepalive(TCP 内部机制): 见 2.14
heart-beak(应用层实现): 一般测试连接是否中断采用的时间间隔都比较短,可以很快的决定连接是否中断。
面试:一台服务器最多能支撑多少个 TCP 连接
一台Linux服务器最多能支撑多少个TCP连接?
限制因素:
- Linux 系统出于安全角度的考虑,对各个位置的进程都限制了可打开的文件描述符的数量。
- 系统级: 当前系统可打开的最大数量,通过fs.file-max参数可修改
- 用户级: 指定用户可打开的最大数量,修改/etc/security/limits.conf
- 进程级: 单个进程可打开的最大数量,通过fs.nr_open参数可修改
- 一个空的 TCP 连接占 3.3Kb,业务逻辑处理数据越多,所占内存就越大(因为接收缓冲区容量都变大)。
--------------------HTTP------------------
阿秀:说一下完整的 HTTP 请求包括那些内容?
- 客户机通过 DNS 域名解析获取目标 IP
- 发起 TCP 三次握手与服务器建立连接
- 建立连接后发送 HTTP 请求
- 服务器收到 HTTP 请求报文,返回 HTTP 响应报文
- 客户端对浏览器收到的内容进行解析并呈现。断开连接。
3.1 说说浏览器从输入 URL 到展现页面的全过程(HTTP的过程)
- 输入地址
- 浏览器通过 DNS 查找域名的 IP 地址
- 发起 TCP 三次握手与服务器建立连接
- 浏览器向 Web 服务器发送一个 HTTP 请求
- 服务器处理请求,并且返回一个 HTTP 响应
- 浏览器显示 HTML
- 浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频等等)
3.2 简述 HTTP 和 HTTPS 的区别?
HTTP(超文本传输协议): 是一种网络协议,用于从 WWW 服务器传输超文本到本地浏览器的传输协议,可以使浏览器更加高效,使网络传输减少。
HTTPS(安全超文本传输协议): 简单讲是 HTTP 的安全版,即在 HTTP 下加入 SSL(Secure Sockets Layer 安全套接字协议)层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。它的主要作用有两种:
- 建立一个信息安全通道,来保证数据传输的安全。
- 确认网站的真实性。
HTTP 和 HTTPS 的区别
|
HTTP(超文本传输协议) |
HTTPS(安全超文本传输协议) |
申请证书 |
不需要 |
需要到 CA 申请证书 |
传输方式 |
超文本传输协议,明文传输 |
具有安全性的 SSL 加密传输协议 |
端口 |
80 |
443 |
连接方式 |
简单的、无状态的 |
可进行加密传输、身份认证的网络协议 |
HTTPS的三个特点:简单记录下HTTPS中的SSL
- 保密:在握手协议中定义了会话密钥后,所有的消息都被加密。
- 鉴别:可选的客户端认证,和强制的服务器端认证。
- 完整性:传送的消息包括消息完整性检查(使用MAC)。
3.3 简述 HTTPS 的加密与认证过程
加密过程:
- 客户端在浏览器中输入一个 HTTPS 网址,然后连接到服务器的 443 端口。
- 服务器有一套数字证书(一套公钥和密钥),服务器将证书(公钥)传送给客户端。
- 客户端解析证书,验证成功,则生成一个随机数(私钥),并用证书将该随机数加密后传回服务器。
- 服务器用密钥解密后,获得这个随机值,然后将要传输的信息和私钥通过某种算法混合在一起后传给客户端。
- 客户端用之前生成的随机数(私钥)解密服务器端传来的消息。
认证过程:
- 首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥
- 用机构的证书公钥解密得到证书的内容和证书签名,内容包括网站的网址、网站的公钥、证书的有效期等。浏览器会先验证证书签名的合法性。签名通过后,浏览器验证证书记录的网址是否和当前网址是一致的,不一致会提示用户。如果网址一致会检查证书有效期,证书过期了也会提示用户。这些都通过认证时,浏览器就可以安全使用证书中的网站公钥了。
采用的加密方式: HTTP 采用混合的加密机制,使用非对称密钥加密用于传输的对称加密的密钥来保证传输过程的安全性。
加密过程另外说法:
- 客户端在浏览器中输入一个 https 网址,然后连接到服务器端的 443 端口。
- 服务器将非对称密钥的公钥(证书)发给客户端
- 客户端验证证书,然后生成之后用于通信的私钥(对称加密的密钥),将其用刚刚的公钥加密后传给服务器端,
- 服务器通过非对称密钥的私钥解密,获取之后用于通信的私钥(对称加密的密钥)。这样双方就完成了加密过程。
对称加密和非对称加密对比
对称加密:
- 优点:运算速度块
- 缺点: 无法安全地将密钥传输给通信方
非对称加密:
3.4 说说 HTTP 中的 referer 头的作用
- HTTP Referer是 header 的一部分,会告诉服务器该网页是从那个页面链接过来的,服务器因此可以获得一些信息用于处理。
- 防盗链。如果发送的 referer 不符合服务器的要求,就会拦截或者跳转到他要求的地址。
- 防止恶意请求。
- 空 Referer。服务器允许 Referer 为空,意味着你允许浏览器直接访问
- 防御 CSRF(Cross-site request forgery,跨站请求伪造)
3.5 说说 HTTP 的方法有那些?
- GET: 请求访问被 URL 识别的资源,可以通过 URL 传参给服务器。
- POST: 用于传输信息给服务器,主要功能与 GET 方法类似,一般推荐使用 POST 方式。
- PUT: 传输文件,报文主体中包含文件内容,保存到对应 URL 位置。
- HEAD: 获得报文首部,与 GET 方法类似,只是不返回报文主体,一般用于验证 URL 是否有效。
- DELETE: 删除文件,与 PUT 方法相反,删除对应 URL 位置的文件。
- OPTIONS: 查询响应 URL 支持的 HTTP 方法。
3.6 说说 GET 请求和 POST 请求的区别?
|
GET |
POST |
作用 |
用来从服务器上获得数据 |
向指定的资源提交要被处理的数据 |
长度 |
传送参数有长度限制 |
没有 |
安全性 |
不安全,参数直接暴漏在 URL上 |
安全 |
参数存放位置 |
URL 上 |
Request body中 |
参数保存 |
请求参数会被完整保留在浏览器历史记录里 |
POST 中的参数不会被保留 |
编码 |
仅支持 URL 编码 |
支持多种编码方式,例如json 和 表单数据 |
是否 cache |
会被浏览器主动 cache |
除非手动设置,否则不会被 cache |
是否被 Bookmark(网摘) |
可以 |
不可以 |
回退时 |
回退时无害的 |
回退时会再次提交请求 |
说一说 Put 与 Delete 区别
Put:更新操作,报文主体中包含文件内容,保存到对应 URL 位置。
Delete:删除文件,与 Put 方法相似,删除对应 URL 位置的文件。
3.7 说说 HTTP 常见的响应状态码及其含义
总的来说:
- 1XX: 信息类状态码( 表示接收请求状态处理)
- 2XX: 成功状态码(表示请求正常处理完毕)
- 3XX: 重定向(表示需要进行附加操作,已完成请求)
- 4XX: 客户端错误(表示服务器无法处理请求)
- 5XX: 服务器错误状态码(表示服务器处理请求的时候出错)
常见错误:
- 200: 从状态码发出的请求被服务器正常处理。
- 204: 正常处理,但是响应报文中不含主体部分(即没有内容)
- 303: 由于请求对应的资源存在另一个 URL(因使用get方法,定向获取请求的资源)
- 400: 请求报文中有语法错误。
- 404: 服务器上无法找到请求的资源。
- 403: 请求的资源被服务器拒绝
- 503: 服务器暂时处于超负载或者是正在进行停机维护,现在无法处理请求。
3.8 简述 HTTP 1.0,1.1,2.0 的主要区别
HTTP/1.0:
- 不支持长连接,需要手动设置。
- 缓存有一定的缺陷。
HTTP/1.1:
- 增加了长连接,但是同一时间只能发送一个 HTTP 请求。
- 带宽优化及网络连接的使用。
- 增加了强缓存(cache-control)。
- Host头处理。
HTTP/2.0:
- 多路复用,一个 TCP 可以同时建立多个 HTTP 请求。
- 采用二进制格式编码传输。
- 使用 HPACK 算法作 header 首部压缩(客户端和服务器同时维护和更新一个包含之前见过的首部字段表,从而避免了重复传输)
- 增加了服务端推送技术(在客户端请求一个资源时,会把相关的资源一起发送给客户端)。
扩展:说说常见的 HTTP 头
协议头 |
说明 |
Accept |
可接受的相应类型 |
connection |
是否保持长连接 |
cookie |
客户端的Cookie信息 |
Content-Length |
数据长度 |
--------------------DNS------------------
4.1 你知道DNS是什么?
官方解释: DNS就是域名解析系统,因特网上作为域名和ip地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不需要去记住它的IP地址,只需要通过主机名,就可以得到对应的IP地址。
通俗的讲, 我们更习惯于记住一个网站的名字,比如www.baidu.com,而不是它的ip地址,167.23.10.2。
4.2 DNS的工作原理?
将主机域名转换为ip地址,属于应用层协议,采用的传输层协议是UDP传输。
它的结构:
过程:
- 当用户输入域名时,浏览器先检查自己的缓存中是否有这个域名映射的ip地址,有则解析结束
- 若没命中,则检查操作系统缓存(如Windows的hosts)中是否有解析过的结果,有则解析结束
- 若没命中,则请求本地域名服务器解析(LDNS)
- 若LDNS没有命中就直接跳到根域名服务器请求解析。根域名服务器返回给LDNS一个对应的主域名服务器地址。
- 此时LDNS再发送请求给上一步返回的gTLD(通用顶级域),接受请求的gTLD查找并返回这个域名对应的Name Server的地址
- Name Server根据映射关系表找到目标ip,返回给LDNS
- LDNS缓存这个域名和对应的ip,把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束。
总结:
浏览器缓存、系统缓存、路由器缓存、IPS(互联网协议群)服务器缓存、根域名服务器缓存、顶级域名服务器缓存、主域名服务器缓存。
查询方式:分为两种,递归查询和迭代查询
-
主机向本地域名服务器的查询一般都是采用递归查询。
-
本地域名服务器向根域名服务器的查询通常是迭代查询
4.3 为什么域名解析使用UDP协议?
因为UDP速度快,资源消耗少!UDP的DNS协议只要一个请求、一个应答就好了。
如果使用基于TCP的DNS协议,要三次握手、发送数据以及应答、四次挥手。
但是UDP协议传输内容不能超过512字节,不过客户端向DNS查询域名,一般返回的内容都不超过512字节,所以用UDP传输即可。
4.4 DNS 劫持是什么?
DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现。
--------------------------------------------
5.1 说说 Cookie 和 Session 的关系和区别是什么?
共同点: 都是会话的一种方式,服务器可以通过它们保存用户信息。
不同点:
- Cookie 数据存放在客户的浏览器上,Session 数据存放在服务器上。
- Cookie 不是很安全,别人可以分析本地的 Cookie 进行 Cookie 欺骗。Session 较安全。
- Session 保存在服务器上,会占用服务器性能。
- Cookie 保存数据不能超过 4k,很多浏览器还限制一个站点最多保存 20 个 Cookie。
5.2 简述网关的作用是什么,同一网段的主机如何通信
网关即网络中的关卡,它是保证网络互连的,使不同的网络体系能够进行通信
同一网段的主机无需经过路由器就可以通信。
5.3 简述 CSRF 攻击的思想以及解决方法。
概念: 跨站请求伪造,黑客通过伪造用户身份去做一些操作。(例如 Cookie 欺骗)
解决办法:
- HTTP 请求头中的 Referer 验证(不推荐)
- 请求令牌验证(token验证):token验证是一种比较广泛使用的防止
CSRF攻击
的手段,当用户通过正常渠道访问服务器时,服务器会生成一个随机的字符串保存在session中,并作为令牌(token)返回给客户端,以隐藏的形式保存在客户端中,客户端每次请求都会带着这个token,服务器根据该token判断该请求是否合法
5.4 说说 MAC 地址和 IP 地址分别有什么作用
IP地址:
- IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
- IP地址的分配是根据网络的拓扑结构
MAC 地址:
转换:ARP协议(IP --> MAC)和RARP协议
扩展:当在局域网中使用ping www.xxx.com时,用到了哪些协议
使用ping时,所用到的协议
ICMP、DNS和ARP