前言
题目汇总来源 史上最全各类面试题汇总,没有之一,不接受反驳
计网抢救一下。
目录
说说Session、Cookie 与 Application
计算机网络
OSI网络体系结构与TCP/IP协议模型
OSI七层协议模型、TCP/IP四层模型和五层协议体系结构之间的关系
OSI七层模型 | TCP/IP四层模型 | 五层体系结构 | |
---|---|---|---|
7 | 应用层 | 应用层 | 应用层 |
6 | 表示层 | ||
5 | 会话层 | ||
4 | 传输层 | 传输层 | 传输层 |
3 | 网络层 | 网络层 | 网络层 |
2 | 数据链路层 | 网络接口层 | 数据链路层 |
1 | 物理层 | 物理层 |
网络模型各层作用
TCP的3次握手和四次挥手
三次握手
四次挥手
为什么TCP链接需要三次握手,两次不可以么,为什么?
详细讲解看上一题链接。
如果只有两次握手,当出现丢包时,比如第一次服务器端传给客户端的包丢失,导致服务器建立连接而客户端没有;
当出现因为延时重发等原因出现的重复包时,没有经过客户端的判断并返回消息,可能会重复建立连接。
四次挥手是因为客户端完成发送后服务器端可能还有数据发送,因此FIN要分开发。
TCP协议如何来保证传输的可靠性
详细讲解看上面的链接。继续偷懒
- 校验和
- 序列号
- 确认应答
- 超时重传
- 连接管理 —— 就是三次握手四次挥手
- 流量控制 —— 返回接收窗口大小
- 拥塞控制 —— 慢启动,拥塞避免等
TCP与UDP的区别
- TCP 面向连接,UDP 无连接
- TCP 提供可靠服务,UDP 尽最大努力交付,不可靠
- TCP 面向字节流,UDP 面向报文 为什么说UDP是面向报文的
- TCP 有拥塞控制,UDP 没有拥塞控制,实时性好
- TCP 连接只能是点到点的,UDP 支持一对一,一对多,多对一和多对多的交互通信
- TCP 对系统资源要求高,UDP 对系统资源要求低
TCP与UDP的有哪些应用
TCP 用于实时性要求低,但对准确率要求高的场景。反之使用 UDP。
HTTP1.0与2.0的区别
HTTP1.0的缺陷
- 每个请求都需单独建立连接(keep-alive能解决部分问题但不能交叉推送)
- 每个请求和响应都需要完整的头信息
- 数据未加密
- 多路复用 —— 即可以交叉推送
- 压缩头信息
- 请求划分优先级
- 支持服务器端主动推送 —— js, css 等文件不需要客户端解析完HTLM后再请求
HTTP报文结构
请求行,请求头部,空格,请求正文
HTTP的长连接和短连接?
短连接的操作步骤是:
建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接
长连接的操作步骤是:
建立连接——数据传输...(保持连接)...数据传输——关闭连接
HTTP与HTTPS的区别以及如何实现安全性
如何验证证书的合法性
HTTP:A → 明文 → B
HTTPS:A → 加密 → B
HTTPS 的 TLS/SSL 保证安全性。
- 对称加密保证传输内容的私密。A 使用对称密钥加密内容发送给 B,B 再通过对称密钥解密。
- 非对称加密保证对称密钥传输的安全性。A 和 B 互相有对方公钥,A 将对称密钥用私钥加密发送给 B,B 用 A 的公钥获取对称密钥,即可在两方之间使用对称加密通信。对称加密解密速度快于非对称,若直接使用非对称加密传输数据可能开销过大。
- 数字签名保证传输内容未被篡改。A 先哈希出传输内容的摘要,用私钥加密后生成数字签名,附在传输内容后发送给 B,B 通过 A 的公钥解密数字签名得到摘要,并与自己哈希的摘要对比,若一致则表示内容未被篡改。
- 数字证书保证会话双方身份的有效性。证书中心 CA 用自己的私钥加密被认证方的公钥生成数字证书,以后在会话时,A 和 B 都要带上数字证书,确保对方的身份不被冒名顶替。浏览器会存有 CA 根证书,用于验证数字证书有效性。而 CA 根证书的有效性由 CA 的权威性做担保。
非对称加密中,公钥和私钥谁负责加密,谁负责解密
既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;
既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。
Get与POST的区别
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
HTTP无状态
什么是Http无状态?Session、Cookie、Token三者之间的区别
HTTP无状态协议,是指协议对于交互性场景没有记忆能力。
同域和跨域
同域:同协议,同域名,同端口
跨域:不满足上述条件。因为JavaScript有同源策略的限制,一个域名js无法访问跨域域名下的对象。
URL | 说明 | 是否允许通信 |
---|---|---|
http://www.a.com/a.js http://www.a.com/b.js | 同一域名下 | 允许 |
http://www.a.com/lab/a.js http://www.a.com/script/b.js | 同一域名下不同文件夹 | 允许 |
http://www.a.com:8000/a.js http://www.a.com/b.js | 同一域名,不同端口 | 不允许 |
http://www.a.com/a.js https://www.a.com/b.js | 同一域名,不同协议 | 不允许 |
http://www.a.com/a.js http://70.32.92.74/b.js | 域名和域名对应ip | 不允许 |
http://www.a.com/a.js http://script.a.com/b.js | 主域相同,子域不同 | 不允许 |
http://www.a.com/a.js http://a.com/b.js | 同一域名,不同二级域名(同上) | 不允许(cookie这种情况下也不允许访问) |
http://www.cnblogs.com/a.js http://www.a.com/b.js | 不同域名 | 不允许 |
TCP的拥塞处理
慢开始与拥塞避免
快重传与快恢复
随机早期检测 RED
TCP是如何进行流量控制
利用可变窗口进行流量控制
接收方接到发送方的消息后,返回确认消息要带上缓存窗口的剩余大小,若为0则停止发送。
为防止窗口大小为0的消息丢失导致的发送方等待,给发送方设置计时器。
Nagle 算法:发送方收到上一次的 ACK 后才把缓冲区里的数据一并发出去。
延迟 ACK:接收方接到数据后延时一段时间,等待是否有要发送的数据捎带回 ACK。
TCP和UDP分别对应的常见应用层协议
IP地址的分类
有了唯一的Mac地址为啥还需要IP地址?
交换机、集线器与路由器有什么区别?
集线器:连接多台设备,一部设备发送消息以广播形式传播,同时只能有一部设备发送消息。
交换机:能够记录连接设备的地址,一部设备发送消息可通过交换机直接转发到相应设备。
路由器:连接不同网段。
网桥的作用
作用于数据链路层,连接多个可以是不同协议的局域网。
过滤:A 与 B 原来在同一局域网下,A 向 B 的请求会被网桥过滤。
转发:C 与 D 原来不在同一局域网下,C 向 D 的请求会被网桥转发。
泛红算法与后向学习算法。
ARP是地址解析协议,简单语言解释一下工作原理。
地址解析协议(Adress Resolution Protocol)。在已知目的IP地址,需要知道目的硬件地址时使用。
设备 A 要与设备 B 通信,需要知道设备 B 的 IP 地址与 MAC 地址,但通常情况下高层应用只关心 IP 地址。因此需要使用 ARP。
设备 A 先发出“我是设备 A,MAC 地址 xx 和 IP 地址 xx,谁是设备 B?”这样的请求,交由交换机和路由器广播;
所有不是 B 的设备丢弃该包,设备 B 将 A 的 IP 与 MAC 记录 ARP 列表,并将自己的 IP 与 MAC 单播给 A,双方可以正常通信了。
网络接口卡(网卡)的功能?
网卡的功能主要有两个:
- 将电脑的数据封装为帧,并通过网线(对无线网络来说就是电磁波)将数据发送到网络上去;
- 接收网络上其它设备传过来的帧,并将帧重新组合成数据,发送到所在的电脑中。
IO 中同步与异步,阻塞与非阻塞区别
也是个人理解。
阻塞和非阻塞 IO 都属于同步 IO。
同步 IO 表示调用者要主动向被调用者索要返回结果。阻塞 IO 调用者在等待返回结果时线程会被挂起,而非阻塞 IO 不会被挂起,而是接下去执行其他任务,但要时常回来检查是否得到返回结果。
异步 IO 调用者不会发生阻塞,被调用者得到返回结果后会主动通知调用者。
URI和URL的区别
URI:Uniform Resource Identifier,即统一资源标志符,用来唯一的标识一个资源。
URL:Uniform Resource Locator,统一资源定位符。即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URN:Uniform Resource Name,统一资源命名。即通过名字来表示资源的。
常见状态码及原因短语
状态码 | 类别 | 原因短语 |
---|---|---|
1XX | Informational(信息状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redireection(重定向状态码) | 每次请求中使用重定向不要超过 5 次。 |
4XX | Client Error(客户端错误状态码) | 表示请求可能出错,服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器本身的错误,而不是请求出错 |
状态码 | 英文名称 | 说明 |
---|---|---|
100 | Continue | 客户必须继续发出请求 |
101 | Switching Protocols | 客户要求服务器根据请求转换HTTP协议版本 |
200 | OK | 请求成功 |
201 | Created | 服务器已经创建了文档,Location头给出了它的URL |
202 | Accepted | 接受和处理、但处理未完成 |
203 | Non-Authoriative Information | 返回信息不确定或不完整 |
204 | No Content | 服务器成功处理了请求,但没有返回任何内容 |
205 | Reset Content | 服务器完成了请求,用户代理必须复位当前已经浏览过的文件 |
206 | Partial Content | 服务器已经完成了部分用户的GET请求 |
300 | Multiple Choices | 请求的资源可在多处得到 |
301 | Moved Permanently | 删除请求数据 |
302 | Found | 在其他地址发现了请求数据 |
303 | See Other | 建议客户访问其他URL或访问方式 |
304 | Not Modified | 客户端已经执行了GET,但文件未变化 |
305 | Use Proxy | 请求的资源必须从服务器指定的地址得到 |
306 | Unused | 前一版本HTTP中使用的代码,现行版本中不再使用 |
307 | Temporary Redirect | 申明请求的资源临时性删除 |
400 | Not Found | 客服端请求的语法错误,服务器无法解析 |
401 | Unauthorized | 请求授权失败 |
402 | Payment Granted | 保留有效ChargeTo头响应 |
403 | Forbidden | 请求不允许 |
404 | Not Found | 服务器无法根据客户端的请求找到资源 |
405 | Method Not Allowed | 用户在Request-Line字段定义的方法不允许 |
406 | Not Acceptable | 根据用户发送的Accept拖,请求资源不可访问 |
407 | Proxy Authentication Required | 类似401,用户必须首先在代理服务器上得到授权 |
408 | Request Time-out | 客户端没有在用户指定的时间内完成请求 |
409 | Conflict | 对当前资源状态,请求不能完成 |
410 | Gone | 服务器上不再有此资源且无进一步的参考地址 |
411 | Length Required | 服务器拒绝用户定义的Content-Length属性请求 |
412 | Precondition Failed | 一个或多个请求头字段在当前请求中错误 |
413 | Request Entity Too Large | 请求的资源大于服务器允许的大小 |
414 | Request-URI Too Large | 请求的资源URL长于服务器允许的长度 |
415 | Unsupported Media Type | 请求资源不支持请求项目格式 |
416 | Requested range not satisfiable | 请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求 也不包含If-Range请求头字段 |
417 | Expectation Failed | 服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下 一级服务器不能满足请求 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的函数 |
502 | Bad Gateway | 服务器暂时不可用,有时是为了防止发生系统过载 |
503 | Service Unavailable | 服务器过载或暂停维修 |
504 | Gateway Timeout | 关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长 |
505 | HTTP Version Not Supported | 服务器不支持或拒绝支请求头中指定的HTTP版本 |
200 OK:客户端请求成功。
301: 永久重定向, Location响应首部的值仍为当前URL,因此为隐藏重定向。
302: 临时重定向,显式重定向, Location响应首部的值为新的URL。
304:Not Modified 未修改,比如本地缓存的资源文件和服务器上比较时,发现并没有修改,服务器返回一个304状态码,告诉浏览器,你不用请求该资源,直接使用本地的资源即可。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
502: Bad Gateway 前面代理服务器联系不到后端的服务器时出现
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。
504:Gateway Timeout 这个是代理能联系到后端的服务器,但是后端的服务器在规定的时间内没有给代理服务器响应
说说Session、Cookie 与 Application
方法 | 信息量大小 | 保存时间 | 应用范围 | 保存位置 |
---|---|---|---|---|
Application | 任意大小 | 整个应用程序的生命期 | 所有用户 | 服务器端 |
Session | 小量,简单的数据 | 用户活动时间+一段延迟时间(一般为20分钟) | 单个用户 | 服务器端 |
Cookie | 小量,简单的数据 | 可以根据需要设定 | 单个用户 | 客户端 |
什么是分块传送
如果 HTTP 整块传输,需要提前设置 Content-Length。
分块传输编码(Chunked transfer encoding)允许服务端在不预先给出报文长度的情况下,分块将输出发送给客户端。
输出空段表示报文结束。
谈谈SQL 注入
DDos 攻击
分布式拒绝服务(DDoS: Distributed denial-of-service)攻击是恶意破坏目标服务器、服务或网络的正常通信量的企图,其方法是用大量Internet通信量淹没目标或其周围的基础设施。DDoS攻击通过利用多个受损的计算机系统作为攻击流量的来源来达到有效性。被利用的机器可以包括计算机和其他网络资源,如物联网设备。从高层来说,DDoS攻击就像堵塞高速公路的交通堵塞,阻止常规交通到达它想要的目的地。
什么是XSS 攻击
XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
从输入网址到获得页面的过程
(3)字节跳动面试题:从输入网址到获得页面的网络请求的过程,请详细说一下
- 输入网址
- 通过 DNS 获取服务器 IP 地址
- 浏览器与服务器建立 TCP/IP 连接
- 浏览器发送 HTTP 请求
- 服务器处理请求,返回 HTTP 响应
- 浏览器显示 HTML
- 浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS等等)
- 浏览器发送异步请求
DNS服务器类型
- Root Dns Servers 根服务器,记录TLD服务器ip,全球13个+若干镜像。
- Top-Level Domain Servers 顶级域名服务器,如.com .org等,记录Authoritative DNS servers 的 IP。
- Authoritative DNS servers. 权威域名服务器,由 ISP 提供或机构组织自己提供,记录了目标域名的 IP(A record)或别名(CNAME record)或委托的其它 Authoritative DNS servers 的 IP(NS record)等。
- Recursive DNS servers. 与客户端直接打交道的 DNS server, 通常情况下,客户端的解析请求都由它响应,大多数情况下指 local DNS server, 除此以外,还有 public DNS server。作用类似代理服务器。
DNS请求方式
迭代式查询:
递归式查询:
实际使用中,多是客户端到local dns servers使用递归式,其余部分使用迭代式。递归式dns服务器易被攻击。
DNS请求过程
https://cloud.tencent.com/developer/news/324975
DNS报文格式
Message Format
Header |
Question 请求查询的数据区域 |
Answer dns回答的数据区域 |
Authority 授权区域 |
Additional 附加区域 |
Header Format
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
ID 确认请求和回包是否匹配 | |||||||||||||||
QR | Qpcode | AA | TC | RD | RA | z | RCODE | ||||||||
QDCOUNT 报文请求段中的问题记录数 | |||||||||||||||
ANCOUNT 报文回答段中的回答记录数 | |||||||||||||||
NSCOUNT 报文授权段中的授权记录数 | |||||||||||||||
ARCOUNT 报文附加段中的附加记录数 |
QR | 1位 | 为0表示此为查询报文 | |
Qpcode | 4位 | 为0表示此为标准请求报文 | |
AA | 1位 | 请求时为0,此字段在回包时使用,表明answser section可能含多个domain的别名 | |
TC | 1位 | Truncation位,为1时表明被截断 | |
RD | 1位 | 一般为1,表明需要递归查询 | |
RA | 1位 | 请求时为0,此字段在回包时使用,表示此ns是否支持递归 | |
z | 3位 | 一般为0,是保留字段 | |
RCODE | 4位 | 返回码 | |
0 | 无差错 | ||
1 | 报文格式差错(Format error)服务器不能理解的请求报文 | ||
2 | 服务器失败(Server failure)因为服务器的原因导致没办法处理的请求 | ||
3 | 名字错误(Name error) 只有对授权域名解析服务器有意义,指出解析的域名不存在 | ||
4 | 没有实现(Not Implemented)域名服务器不支持的查询类型 | ||
5 | 拒绝(Refused)服务器由于设置的策略据局给出应答 | ||
6 - 15 | 保留值 |
Question Session
0~15 | 16~31 |
NAME (不定长) 以fm.qq.com为例:[2, 102, 109, 2, 113, 113, 3, 99, 111, 109, 0]第一个字节填充第一段的长度,后面跟上第一段的每个字母的byte数据,最后以0结尾。 | |
TYPE 表示要查询什么样的记录,响应报文就返回什么类型的记录;常见的记录类型有: 1 ARecord ipv4 28 AAAARecord ipv6 5 CNameRecord | CLASS 一般为1,表示互联网类型,即IN |
Answer/Authority/Additional Session
0~15 | 16~31 |
NAME (不定长) | |
TYPE | CLASS |
TTL 生存时间 | |
DATA LENGTH | RESOURCE DATA (不定长) |
ECS
ECS(EDNS-Client-Subnet)是DNS服务支持的新协议。该协议会在DNS请求包中附加请求域名解析的用户IP地址。这样,DNS服务器就可以根据该地址返回用户更容易访问的服务器IP地址。该技术广泛应用于CDN应用中。Nmap的dns-client-subnet-scan脚本利用该协议,通过提交不同的IP地址,获取指定域名所有的IP地址。
HTTPDNS
HTTPDNS 利用 HTTP 协议与 DNS 服务器交互,代替了传统的基于 UDP 协议的 DNS 交互,绕开了运营商的 Local DNS,有效防止了域名劫持,提高域名解析效率。另外,由于 DNS 服务器端获取的是真实客户端 IP 而非 Local DNS 的 IP,能够精确定位客户端地理位置、运营商信息,从而有效改进调度精确性。
运营商DNS劫持
- 运营商Local DNS记录劫持:运营商Local DNS直在本地区域配置域名的解析记录。当用户查询时直接返回响应解析结果,不再执行后续的迭代查询操作。
- 运营商DNS forward查询:运营商Local DNS配置的非type hint到根DNS服务器查询,而配置的为forward到其他运营商的DNS Server,相当于配置了代理方式查询,用户获取的IP记录为智能解析后其他运营商的覆盖IP地址。
- 运营商NAT劫持:当Local DNS到qq.com域DNS服务器查询时,被NAT劫持为其他运营商出口,导致qq.com域DNS Server智能解析时,识别为其他运营商,并返回其他运营商的覆盖IP地址
socket常用方法
IPv4与IPv6对比
头部对比
- 地址格式不一样;
- 头部结构不一样;
- 4使用子网掩码,6使用地址前缀;
- IPv6 用邻居请求和邻居公告替代ARP;
- ……