月黑雁飞高,计网全知道——精选二十七道计网面试题目
计算机网络知识
前文已更新了Java面试知识,欢迎关注公众号【Java冢狐】来获取
1、HTTP
HTTP是一种:超文本传输协议
- 超文本:不关是文本,还可以是图片、音频、视频甚至点击。
- 传输:把超文本解析成二进制数据包,由传输载体负责把二进制数据包由计算机终端传输到另一个终端的过程。
- 协议:计算机之间通信中需要遵守的一定的规则。
所以HTTP就是在计算机世界里专门在两点之间传输文字、图片、音频、视频的超文本数据的约定和规范
1.1 HTTP相关的协议
TCP/IP
TCP/IP称为协议簇,其中不仅有TCP协议和IP协议,还是一系列网络通信协议的统称。
- TCP:传输控制协议,可靠能保证数据不丢失
- IP:解决通信双方的寻址问题。
DNS
域名系统,作为将域名和IP地址相互映射的一个分布式数据库。
URI/URL
- URI:统一资源标识符,使用它能唯一地标记互联网上的资源
- URL:统一资源定位符,即网址,是URI的一个子集
URI不仅包含URL还包含URN(统一资源名称)
1.2 HTTP协议版本
http 0.9
- 只有一个GET命令,服务器只能回应HTML格式的字符串
http 1.0
- 引入了POST和http数据头部
- 每个TCP请求只能发送一个请求,发送数据完毕后,连接就关闭
- 头信息是ASCII码,后面数据可为任何形式,服务器回应时会告诉客户端,数据是什么格式,即Content-Type字段的作用
http 1.1
- 新增方法PUT、PATCH、OPTIONS、DELETE
- 引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用。
- 同一个TCP连接中,所有数据通信都是依次进行,容易造成队头阻塞
http 2.0
- 头信息和数据体都是二进制,称为头信息帧和数据帧
- 复用TCP连接,在同一连接中,客户端和浏览器都可以同时发送多个请求或者回应,且不用按照顺序一一对应,避免了“队头堵塞”,此时双向的实时通信称为多工
- 引入头信息压缩机制;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表生成一个索引号,不发送同样字段只发送索引号,提高速度。
- 允许服务器未经请求、主动向客户端发送资源,即服务器推送
http1.0和http1.1的区别
- 长连接:http1.1支持长连接和请求的流水线处理
- 缓存处理:http1.1引入更多缓存控制策略
- 带宽优化和网络连接使用
- 错误通知的管理
- Host头处理
1.3 HTTP的几种请求方法用途
- GET:发送一个请求来获取服务器上的某一些资源
- POST:向URL指定的资源提交数据或附加新的数据,没有指定资源在服务器的位置
- PUT:可以向服务器提交数据,并指定了资源在服务器的位置
- HEAD:请求页面的首部
- DELETE:删除服务器上的东西
- OPTIONS:用于获取当前URL所支持的方法,请求成功后会在Allow的头包含类似GET、POST等信息
- TARCE:用于激发一个远程的应用层的请求消息回路
- CONNECT:把请求连接转到TCP/TP通道
GET和POST的区别
- get在浏览器回退时是无害的,而post会再次提交请求
- get请求参数会被完整保留在浏览器历史记录中,而post不会
- get中传递的参数由长度限制,而post没有
- get传递信息明文附在URl后,post请求在HTTP body中
- get是幂等的,post不是
- get从服务器获取资源,post有可能改变服务器的资源
HTTP协议的主要特点
- 简单快速
- 灵活可扩展
- 无连接、无状态
- 支持客户-服务器模式
HTTP缺点
- 无状态
- 明文传输
- 队头阻塞
1.4 HTTP报文的组成部分
1.4.1 请求报文
请求行
- 请求方法
- 请求URL
- HTTP协议以及版本
请求头
- 一堆键值对
空行
- 表明后面的内容是请求体
请求体
- 请求数据
1.4.2 响应报文
状态行
- HTTP协议和版本
- 状态码
- 状态描述
响应头
空行
响应体
2、HTTPS
HTTP协议是承载与TCP协议上的,在HTTP和TCP之间添加一个安全协议,SSL或者TSL,就是HTTPS
2.1 Https和Http对比
传输方式
- http传输方式:明文传输、网站或相关服务与用户之间的数据交互无加密,容易被监听,篡改
- https传输方式:在HTTP加入了SSL层,用户数据传输加密
SSL:安全套接字协议
身份认证
- http:无身份认证,用户无法通过http辨认出网站的真实身份
- https:经过CA多重认证,包含域名管理权限认证等
成本
- http:无任何使用成本,所有网站默认都是http模式
- https:需要成本,需要申请SSL整数来实现https
连接端口
- http:80
- https:443
2.2 工作原理
- 用户通过浏览器请求https网站,服务器收到请求,选择浏览器支持的加密和hash算法,同时返回数字证书给浏览器,包含颁发机构、网址、公钥、证书有效期等信息。
- 浏览器对证书的内容进行校验,如果有问题,则会有一个提示警告。否则,就生成一个随机数X,同时使用证书中的公钥进行加密,并且发送给服务器。
- 服务器收到之后,使用私钥解密,得到随机数X,然后使用X对网页内容进行加密,返回给浏览器
- 浏览器则使用X和之前约定的加密算法进行解密,得到最终的网页内容
3、从浏览器输入url到显示页面的步骤
- 输入地址
- 浏览器查找域名的IP地址,这里包括DNS具体的查找过程,包括浏览器缓存——系统缓存——路由器缓存
- 浏览器向WEB服务器发送一个HTTP请求
- 服务器的永久重定向响应
- 浏览器跟踪重定向地址
- 服务器处理请求
- 服务器返回一个HTTP请求
- 浏览器显示HTML
- 浏览器发送请求获取嵌入在HTML中的资源
- 浏览器发送异步请求。
IP地址和MAC地址的区别
- IP地址是:互联网协议地址。是IP协议提供的一种统一的地址格式,它为互联网上每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异
- MAC地址:又称为物理地址、硬件地址,用来定义网络设备的位置。
4、三次握手与四次挥手
三次握手:SYN、ACK
- 建立连接时,客户端发送SYN(同步序列编号)包到服务器,并进入SYN_SENT状态,等待服务器确认。
- 服务器收到SYN包,必须确认客户的SYN包,同时自己特发送一个SYN+ACK包,此时服务器进入SYN_RECV状态
- 客户端接收服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
第三次握手:防止失效的连接请求报文段被服务器端接收,从而导致错误
四次挥手(因为全双工)
- 主动关闭的一方,发送一个FIN传送数据,用来告诉对方,不会再给你主动发送数据了。此时主动关闭的一方还可以接受数据
- 被动关闭放收到FIN包,发送ACK给对方,确认序号,
- 被动关闭放 发送一个FIN给关闭方,说不会再给你发送数据了
- 主动关闭方收到FIN、发送给ACK,用来确认序号
time_wait
作用
- 为了保证客户端发送的最后一个ack报文段能够到达服务器
- 2msl的时间足以让本次连接产生的报文段从网络中小时,这样下一次新的连接中肯定不会出现旧连接的报文段了,防止数据混淆
时间
- time-wait的持续时间为2*msl
- MSL:报文最大生存时间
SYN
- 字节流排序,表明前后关系
- 随机产生:防止误接收过时 TCP报文段
5、web性能优化技术
减少客户端忘了延迟和优化页面渲染性能来提升web性能
- DNS查询优化
- 客户端缓存
- 优化TCP连接
- 避免重定向
- 网络边缘的缓存
- 条件缓存
- 压缩和代码极简化
- 图片优化
6、网站性能优化
- 内容方面:减少HTTP请求(合并文件、CSS精灵)减少DNS查询(DNS缓存,将资源分布到合适的数量的主机名)、减少DOM元素的数量
- Cookie方面,减少其大小
- css方面,将样式表放到页面顶部;不使用css表达式;压缩css,css从外部引入
- 优化代码以及图片
7、Http状态码以及含义
1XX 为信息状态码
- 100 为继续,表示确认,成功返回具体参数信息
2XX 成功
- 200 正常返回信息
- 201表示请求成功并且服务器创建了新的资源
- 202 表示服务器已接收请求但尚未处理
3XX 重定向
- 301 永久重定向
- 302 临时性重定向
- 303 临时重定向,且总是使用GET请求新的URl
- 304 自从上次请求后,请求的页面未修改过
4XX 客户端错误
- 404 未找到
- 401 请求未授权
- 403 禁止访问
5XX 服务器错误
- 500 常见的服务器错误
- 503 服务器暂时无法处理请求,可能是过载或维护
8、cookies、sessionStorage和localStorage的区别(向下兼容,重新整理查询)
cookie是网站用来标识用户身份而存储在用户本地终端上的数据
cookie的数据始终在同源的http请求中携带,即使是不需要的情况,所以其会在浏览器和服务器中间来回传递
sessionStorage和localStorage不会自动把数据发送给服务器,仅仅在本地保存
存储大小
- cookie的数据大小不能超过4K,sessionStorage和localStorage可以达到5M或更多
有限期时间
- localStorage存储持久数据,浏览器关闭后数据不会丢失,除非主动删除
- sessionStorage数据在当前浏览器窗口关闭后自动删除
- 设置过cookie过期时间之前都有效,就算关闭窗口或者浏览器关闭
9、多域名存储网络资源的好处
- CDN缓存更加方便
- 突破浏览器并发限制
- 节约cookie带宽
- 节约主域名的连接数,优化页面响应速度
- 防止不必要的安全问题
10、五层协议
- 物理层:
- 数据链路层:
- 网络层:
- 运输层:
- 应用层:
11、OSI模型(七层)
- 物理层:实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质的物理设备的差异。(中继器)
- 数据链路层:将网络层传过来的IP数据报组装成帧。(网桥)
- 网络层:选择合适的网间路由和交换节点,确保数据及时传送。(路由器、IP协议)
- 运输层:负责向两台主机进程之间的通信提供通用的数据传输服务。如TCP、UDP
- 会话层:通信管理、负责奖励和断开通信连接
- 表示层:设备固有数据格式和网络标准数据格式的转换
- 应用层:通过应用进程间的交互来完成特定网络应用。如DNS、HTTP、SMTP。我们把应用层交互的数据单元称为报文。
12、TCP/IP模型
- 链路层:
- 网络层:
- 运输层:
- 应用层:
13、UDP
- UDP面向报文的协议,不会对报文进行任何拆分和拼接操作,头部只有8字节
- 是无连接的、不可靠的、没有拥塞控制、会出现丢包
- 速度快、需要资源少
14、TCP
- 是面向连接的协议、头部20字节
- 全双工,双向传输
- 基于字节流、不限制数据大小,打包成报文段,保证有序接收、重复报文自动丢弃
- 有拥塞控制,用来处理双方处理能力的不匹配
- 拥有可靠的传输服务,保证可达,丢包时通过重发机制实现可靠性
- 传输效率慢、需要资源多
- Sequence number 序号保证TCP传输的报文是有序的
- Window Size 表示窗口大小,还能接受多少字节的数据
- Acknowledgement Number 表示上一个序号的数据以及接受到,接收端希望接受的下一个字节编号是多少
14.1 标识符
- ACK=1 表示确认号字段有效
- SYN=1 ACK=0 表示当前报文段是一个连接请求报文
- SYN=1 ACK=1 表示当前报文段是一个统一建立连接的应答报文
- FIN=1 表示此报文段是一个释放连接的请求报文
- URG 紧急值有效
- RST 重置连接
- PSH 接收方应该尽快将这个报文交给应用层
SYN超时怎么办:
- 需要慢慢重试,阶梯型重试
为什么要有TIME_WAIT
- 主动关闭形成,等待2MSL(保温最常生存时间),主要防止最后一个ACK丢失
CLOSE_WAIT
- 被动关闭形成
- 服务器收到客户端发送的FIN则按照TCP实现发送ACK因此进入close_wait状态等待服务器执行close关闭
14.2 TCP拥塞控制
控制方式
- 滑动窗口机制
- 慢启动机制
- 拥塞避免机制
- 快速重传与恢复
14.3 如何保证可靠传输
- 应用数据被分割成TCP认为最适合发送的数据快
- 确认应答、序列号:TCP每个包进行编号,保证有序
- 校验和:保证数据正确,保证在传输过程中无变化
- TCP丢弃重复数据
- 流量控制:每一方都有固定大小的缓冲区(滑动窗口)
- 拥塞控制:网络阻塞时,减少数据传输
- ARQ协议:发送一组后停止发送等待对面确认。
- 超时重传
- **连接管理:**三次握手,四次挥手
ARQ协议
自动重传请求(ARQ),通过确认和超时两个机制,在不可靠服务的基础上实现可靠的信息传输。
15、安全问题CSRF和XSS
15.1 CSRF:跨站请求伪造
CSRF攻击:攻击者盗用了你的身份,以你的明细发送恶意请求
CSRF原理:登录受信任的网站A,在本地生成cookie,在不登出A的情况下,访问危险网站B
CSRF防御方式
- Token验证(使用最多)
- 服务器发送给客户端一个token
- 客户端提交的表单中带有这个token
- 如果这个token不合法,那么服务器就拒绝这个请求
- 隐藏令牌
- 把token隐藏在http的head头中
- Referer验证
- Referer指的是页面请求来源,只接受本站的请求,服务器才做响应,如果不是就拦截
15.2 XSS:跨域脚本攻击
xss是一种发生在web前端的漏洞,恶意攻击者王web页面里插入恶意的script代码,在浏览器中运行scrip代码。达到恶意攻击用户的目的。
xss攻击:需要向web页面注入恶意代码、这些恶意代码被浏览器成功执行
xss攻击方式
- 反射型:发送请求时,xss代码出现在url中,作为输入提交到服务器端,服务器端解析后相应,XSS代码随着相应一起传给浏览器,最后在浏览器解析执行XSS代码。
- 存储型:提交的代码会存储在服务器端(数据库、内存、文件系统)下次请求目标页面时不用再提交xss代码
15.3 两者的区别
- CSRF需要先登录,获取COOKIE,然后利用网站本身的漏洞去请求网站的api
- XSS不需要登录,直接向网站注入JS代码,篡改网站的内容
16、cookie
- 经过加密
- 用来保存用户身份
- 保存在用户本地终端
- 保存的是字符串且单个cookie的大小不超过4kb
- 可设置任意时间有效
- 安全性不能完全保证
- 来回传输需要实时携带
cookie的作用就是解决如何记录客户端的用户信息,太多会对带宽造成浪费
16.1 cookie原理
浏览器第一次请求服务器,服务器响应请求中携带cookie,给浏览器,后续浏览器再携带cookie给服务器,服务器根据cookie判断用户,也可以修改cookie的内容
17、token
token作为客户端的一个令牌,在第一个登陆的时候获取到,以后就不需要频繁访问数据库,查询用户密码。
解决的问题:
- Token完全由应用管理,所以它可以避开同源策略
- Token可以避免CSRF攻击
- Token可以是无状态的,可以在多个服务器间贡献
tocken的优点
- 无状态,可扩展
- 安全性
- 多平台跨域
- 基于标准
18、Session
- 存放在服务器端,记录用户的状态。保存的是对象大小无限制
- 失效时间段
- 记录服务端和客户端会话状态的机制
- 保存太多浪费服务器资源
Session是否过期与浏览器是否关闭无关,
19、URI、URL
URL统一资源定位符,URI,统一资源标识符。URI用来区分网络上的不同资源
URI包含了URN和URL
20、三大交换方式:
- 电话交换:建立专用的物理链路,始终占用;简单粗暴,资源利用率不高,
- 报文交换:就是把整个报文完整的发送到链路中,在某个节点存储下来之后再发送到下一个节点。
- 分组交换:将一个长报文先分割为若干个较短的分组,然后把这些分组(携带源、目的地址和编号信息)逐个地发送出去。
21、时延
时延=发送时延+传播时延+处理时延+排队时延。
- 发送时延(传输时延):从开始发送数据帧,到数据帧发送完毕所需的全部时间。
- 传播时延:发送端开始发送数据到接收端收到数据所需要的全部时间。(电磁波在信通中的时间)
22、WEB页面请求过程:
- 向DNS服务器发送DNS查询报文来解析域名。
- 开始进行HTTP会话,需要先建立TCP连接。
- 在运输层的传输过程中,HTTP报文被封装进TCP中。HTTP请求报文使用端口号80,因为服务器监听的是80端口。连接建立以后,服务器会随机分配一个端口号给特定的客户端,以后的TCO传输都是使用这个端口号。
- 在网络层的传输过程中,TCP报文段会被封装进IP分组中,IP分组经过路由选择,最后到底目的地。
- 在链路层,IP分组会被封装进MAC帧中,IP地址解析成MAC地址需要使用ARP。
- 客户端发送HTTP请求报文,请求获取页面。
- 服务器发送HTTP相应的报文,客户端从而获取该页面。
- 浏览器得到页面内容以后,解析并渲染,向用户展示页面。
23、滑动窗口与拥塞控制
23.1滑动窗口
滑动窗口是用来进行流量控制的,也就是接收方告诉发送方,我还能接收多少数据
如果接收方回复的窗口一直是0怎么办,TCP有一个ZWP技术会发送一个ZWP包给接收方,来判断这个接收方到底行不行
23.2拥塞控制
加拥塞控制是因为TCP不仅仅就管两端之间的情况,还需要知晓一下整体的网络情况。
为了避免因为网络问题造成的无脑重传。就需要拥塞控制
23.2.1 拥塞控制步骤
- 慢启动,探探路
- 拥塞避免,感觉差不多了就减速
- 快重传、快恢复:拥塞发生快速重传
24、DNS解析过程
浏览器缓存
- 首先会去浏览器缓存中查找是否有对应的IP地址
系统缓存
- 检测用户计算机系统Hosts文件DNS缓存是否有对用的IP
路由器缓存
- 进入路由器缓存中检查
以上三步均为客服端的DNS缓存
ISP(互联网服务提供商)DNS缓存
- 电信移动联通等
根域名服务器
- 进入根服务器进行查询。全球13台根服务器,一个主根服务器,12个辅根域名器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;
顶级域名服务器
- 顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;
主域名服务器
- 主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录;
保存结果到缓存中
25、负载均衡实现方式
- DNS:最简单的负载均衡的方式,一般用于实现地理级别的负载均衡。但是扩展性差,控制权在域名服务商
- HTTP重定向:通过修改HTTP响应头的Location达到负载均衡的目的
- 反向代理:作用于应用层的模式,七层负载均衡常见的如Nginx,性能好,部署简单,成本低,容易扩展
- IP:作用于网络层和传输层的模式,称作四层负载均衡
26、TCP和HTTP
首先HTTP是基于TCP的,客户端往服务端发送一个HTTP请求时第一步就要建立与服务器的TCP连接,从HTTP1.1后允许持久连接,也就是一次TCP连接发送多次的HTTP请求。
- HTTP是一个应用层协议
27、域名解析过程
- 浏览器缓存
- 系统缓存
- 路由器缓存
- DNS缓存
- 根域名服务器
- 顶级域名服务器
- 主域名服务器
- 保存结果到缓存
最后
- 如果觉得看完有收获,希望能给我点个赞,这将会是我更新的最大动力,感谢各位的支持
- 欢迎各位关注我的公众号【java冢狐】,专注于java和计算机基础知识,保证让你看完有所收获,不信你打我
- 如果看完有不同的意见或者建议,欢迎多多评论一起交流。感谢各位的支持以及厚爱。
月黑雁飞高,计网全知道——精选二十七道计网面试题目相关推荐
- SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室
SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室 一.概述 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. WebSocket 是 HTML5 ...
- 月黑雁飞高,计网全知道——精选23道计网面试题目
文章目录 计算机网络知识 1.HTTP 1.1 HTTP相关的协议 TCP/IP DNS URI/URL 1.2 HTTP协议版本 1.3 HTTP的几种请求方法用途 1.4 HTTP报文的组成部分 ...
- mysql检索面试题目_MySQL面试题目二十七道整理
一.简单查找--查找学生 1. 查询姓"猴"的学生名单 Select * from student Where 姓名 like "猴%": 2. 查询姓名中最后 ...
- 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍
游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云 邮箱: happylifemxy@163.com 期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...
- spring配置文件_SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件...
SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件 一.概述 Spring Boot允许多种配置来源,官网是这样说的: Spring Boot使用一种非常特殊的Property ...
- 论文解读二十七:文本行识别模型的再思考
摘要:本文研究了两个解码器(CTC[1]和 Transformer[2])和三个编码器模块(双向LSTM[3].Self-Attention[4]和GRCL[5]),通过大量实验在广泛使用的场景和手写 ...
- (转载)Android项目实战(二十七):数据交互(信息编辑)填写总结
Android项目实战(二十七):数据交互(信息编辑)填写总结 前言: 项目中必定用到的数据填写需求.比如修改用户名的文字编辑对话框,修改生日的日期选择对话框等等.现总结一下,方便以后使用. 注: 先 ...
- 计算机网络 - 练习(一百二十七)
计算机网络 练习(一百二十七) ATM 适配层的功能是 ( ). A. 比特定时 B. 信元校验 C. 分割和合并用户数据 D. 信元头的组装和拆分 ------------------------- ...
- 用计算机专业起情侣网名,带对方名字的情侣网名最新精选
情侣网名是当今QQ网名中最为火爆的网名之一,QQ情侣网名就是网络中2人相互定位的暧昧称呼.QQ情侣网名受到了90后甚至00后情侣的青睐.今天小编在这给大家整理了带对方名字的情侣网名大全,接下来随着小编 ...
最新文章
- 漫谈BCH Token方案
- Ping一下Github,确认本地DNS无法解析方法
- auto make System.map to C header file
- Python引用模块和查找模块路径
- comsol移动网格_将动网格模型迁移到 5.3a
- Visual.Assist.X.V10.7.1949的汉化破解补丁
- SharePoint关于publish page, WiKi page, Web part page区别
- java中的Static、final、Static final各种用法
- 蓝桥杯 第七届 JAVA B组 凑算式
- Vue.directive使用注意
- 数据结构与算法c语言版胡明课后答案,算法设计与分析(第2版) 王红梅 胡明 习题答案...
- 概率论——负二项随机变量
- 目标检测(Object Detection)—— M2Det
- 如何获取微信服务号用户的openID
- Kali Linux上最佳安全测试工具
- linux中rpm -q命令,Linux中的RPM
- postman(一)常用的Tests方法
- 面试经历---广州YY(欢聚时代)
- K线技术指标实现—同花顺多空趋势点
- 手机数据安全成为315晚会重灾区
热门文章
- AI for everyone 笔记
- iOS - App Extension 整体总结
- 力扣 字符串 常用函数总结 cnt [ ch-‘a‘ ]++ 位运算 string转int ,char 转int
- 大环境不好,找工作太难?三面阿里,幸好做足了准备,已拿offer
- 少一份责任,多一份轻松
- 小米手机强制获取权限问题(小菜转行测试员,测试雷军、马化腾、马云以及无名小辈和国外朋友之间的关系)---辣鸡
- JSP开发之JSP连接数据库简单实例
- TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT最大存储容量
- spark完全分布式部署
- 泛微OA-年份浏览框增加年份值