【计算机网络】常见面试题集锦(全)

目录

  • 前言
  • 1. 网络架构
  • 2. http请求过程步骤
  • 3. TCP和UDP
  • 4. 三次握手与四次握手
  • 5. 什么是TCP粘包/拆包
  • 6. get和post的区别
  • 7. 在浏览器中输入url地址后显示主页的过程
  • 8. HTTPS和HTTP的区别
  • 9. TCP 协议如何保证可靠传输
  • 10. session和cookie
  • 11. 对称加密和非对称加密
  • 12. HTTPS采用的加密方式
  • 13. 封包和拆包
  • 14. 常见协议的科普
  • 15. 文件上传漏洞是,如何防范
  • 16. 常见的HTTP状态码
  • 17. 一台机器能够使用的端口号上限是多少
  • 18. rpc和http的区别
  • 其他问题

前言

计算机网络架构层面在宏观上来说
一般都是常考以下几种比如网络架构、通信握手的逻辑等

1. 网络架构

七层架构:

  1. 物理层:主要定义物理设备标准,主要作用是传输比特流(模数转换与数模转换)。这一层的数据叫做比特。
  2. 数据链路层:主要将从物理层接收的数据进行 MAC 地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。
  3. 网络层:接收到的数据进行 IP 地址(例 192.168.0.1)的封装与解封装。这一层的数据叫做数据包。
  4. 传输层:定义了一些传输数据的协议和端口号(WWW 端口 80 等),从下层接收的数据进行分段进行传输,到达目的地址后在进行重组。这一层数据叫做段。
  5. 会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。
  6. 表示层:对接收的数据进行解释、加密与解密、压缩与解压缩等(计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等))
  7. 应用层:一些终端应用

网络七层模型是一个标准,而非实现
网络四层模型由七层模型简化合并而来

四层架构:

TCP/IP 由四个层次组成:网络接口层、网络层、传输层、应用层。

【计算机网络】常见面试题集锦(全)_第1张图片

  1. 网络接口层:使用某种协议与网络相连

  2. 网络层:使主机可以把分组发往任何网络,并使分组独立地传向目标。这些分组可能经由不同的网络,到达的顺序和发送的顺序也
    可能不同。

  3. 传输层:源端和目的端机器上的对等实体可以进行会话。端到端的协议:传输控制协议(TCP)和用户数据报协议(UDP)。

  4. 应用层:包含所有的高层协议

2. http请求过程步骤

  1. 建立起客户机和服务器连接。
  2. 建立连接后,客户机发送一个请求给服务器。
  3. 服务器收到请求给予响应信息。
  4. 客户端浏览器将返回的内容解析并呈现,断开连接

3. TCP和UDP

TCP慢但是可靠
UDP快但是不可靠
TCP首部开销20字节;UDP的首部开销小,只有8个字节
TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

  • UDP是无连接的;不保证可靠;面向报文的;支持一对一、一对多、多对一和多对多的交互通信;
  • TCP是面向连接的;每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一);提供可靠交付的服务。传送的数据,无差错、不丢失、不重复、并且按序到达;
    TCP提供全双工通信。

比如:
客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可
主DNS上复制内容,一般超过512字节,用TCP传输

4. 三次握手与四次握手

TCP 在传输之前会进行三次沟通,称为“三次握手”
传完数据断开的时候要进行四次沟通,称为“四次挥手”

TCP 三次握手
【计算机网络】常见面试题集锦(全)_第2张图片

第一次握手:主机 A 发送位码为 syn=1,随机产生 seq number=1234567 的数据包到服务器,主机 B 由 SYN=1 知道,A 要求建立联机;

第二次握手:主机 B 收到请求后要确认联机信息,向 A 发 送 ack number=( 主 机 A 的seq+1),syn=1,ack=1,随机产生 seq=7654321 的包

第三次握手:主机 A 收到后检查 ack number 是否正确,即第一次发送的 seq number+1,以及位码ack 是否为 1,若正确,主机 A 会再发送 ack number=(主机 B 的 seq+1),ack=1,主机 B 收到后确认seq 值与 ack=1 则连接建立成功

为什么要传回 SYN

接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了

传了 SYN,为啥还要传 ACK

双⽅通信⽆误必须是两者互相发送信息都⽆误。传了 SYN,证明发送⽅到接收⽅的通道没有问题,但是接收⽅到发送⽅的通道还需要 ACK 信号来进⾏验证

TCP 四次握手
断开⼀个 TCP 连接则需要“四次挥⼿”:

1) 关闭客户端到服务器的连接:首先客户端 A 发送一个 FIN,用来关闭客户到服务器的数据传送,然后等待服务器的确认。其中终止标志位 FIN=1,序列号 seq=u

2) 服务器收到这个 FIN,它发回一个 ACK,确认号 ack 为收到的序号加 1。

3) 关闭服务器到客户端的连接:也是发送一个 FIN 给客户端。

4) 客户段收到 FIN 后,并发回一个 ACK 报文确认,并将确认序号 seq 设置为收到序号加 1。

首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭

5. 什么是TCP粘包/拆包

一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发
送,这个就是TCP的拆包和粘包问题

或者用这种解释也差不多:当发送包同时发送两个数据包时,接收包只收到了一个数据包,其中包含了两个数据包的信息,这种现象为粘包。当发送包同时发送两个数据包时,接收方也收到了两个数据包。但是这两个数据包,一个是不完整的,一个是多出来一块,这种现象为拆包。

主要的原因是:

  • 要发送的数据包大于TCP发送缓存区剩余大小,就会发生拆包
  • 要发送的数据包大于最大报文长度,就会发生拆包
  • 要发送的数据包小于TCP发送方缓冲区剩余大小,就会发生粘包
  • 接收方的应用未及时读取接收缓存区剩余大小,会发生粘包

可以通过设置该方法加以解决

  • 设置消息定长
  • 设置消息边界
  • 使用其它复杂的协议,如RTMP协议等

6. get和post的区别

详情可看我这篇文章
HTTP协议中 GET 和 POST的区别(全)

简单的说:

  1. 数据集:get是获取数据,post是修改数据
  2. 相对安全性:对于用户来说,如果发生url的劫持,get把请求的数据放在url上, 以?分割URL和传输数据,参数之间以&相连,所以get不太安全。而post把数据放在HTTP的包体内(requrest body)。对于服务器来说,post比get要安全一点。之所以区分安全与不安全,安全的 HTTP 方法不会改变服务器状态,也就是说它只是可读的。GET 方法是安全的,而 POST 却不是,因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变
  3. 发送数据包个数:GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
  4. 幂等:本质区别是:GET是幂等的,而POST不是幂等的(幂等性是指一次和多次请求某一个资源应该具有同样的副作用。简单来说意味着对同一URL的多个请求应该返回同样的结果)。所以get不能用于增删改,特别是在网络不好的隧道中会尝试重试
  5. 缓存:get是可以缓存的,而post是不可以缓存的。

7. 在浏览器中输入url地址后显示主页的过程

  • 根据域名,进行DNS域名解析;
  • 拿到解析的IP地址,建立TCP连接;
  • 向IP地址,发送HTTP请求;
  • 服务器处理请求;
  • 返回响应结果;
  • 关闭TCP连接;
  • 浏览器解析HTML;
  • 浏览器布局渲染;

8. HTTPS和HTTP的区别

  • HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全, HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

HTTPS 使用了隧道进行通信。通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防
伪装)和完整性保护(防篡改)

这也就导致了http的缺点有:

  1. 使用明文进行通信,内容可能会被窃听;
  2. 不验证通信方的身份,通信方的身份有可能遭遇伪装;
  3. 无法证明报文的完整性,报文有可能遭篡改

9. TCP 协议如何保证可靠传输

  • 确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就会重传。
  • 数据校验:TCP报文头有校验和,用于校验报文是否损坏。
  • 数据合理分片和排序:tcp会按最大传输单元(MTU)合理分片,接收方会缓存未按序到达的数据,重新排序后交给应用层。而UDP:IP数据报大于1500字节,大于MTU。这个时候发送方的IP层就需要分片,把数据报分成若干片,每一片都小于MTU。而接收方IP层则需要进行数据报的重组。由于UDP的特性,某一片数据丢失时,接收方便无法重组数据报,导致丢弃整个UDP数据报。
  • 流量控制:当接收方来不及处理发送方的数据,能通过滑动窗口,提示发送方降低发送的速率,防止包丢失。
  • 拥塞控制:当网络拥塞时,通过拥塞窗口,减少数据的发送,防止包丢失

10. session和cookie

用户信息通过 Cookie 存储在用户浏览器中,也可以利用 Session 存储在服务器端,存储在服务器端的信息更加安全

一个 cookie 可以认为是一个「变量」,形如 name=value,存储在浏览器;一个
session 可以理解为一种数据结构,多数情况是「映射」(键值对),存储在服务器上。

  • session原理:
    session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把session 的 id 发送给客户端,客户端再存储到浏览器中。这样客户端每次访问服务器时,都会带着sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了

具体的区别是:
Cookie和Session都是客户端与服务器之间保持状态的解决方案

  1. 存储的位置不同,cookie:存放在客户端,session:存放在服务端。Session存储的数据比较安全
  2. 存储的数据类型不同
    两者都是key-value的结构,但针对value的类型是有差异的
    cookie:value只能是字符串类型,session:value是Object类型
  3. 存储的数据大小限制不同
    cookie:大小受浏览器的限制,很多是是4K的大小, session:理论上受当前内存的限制,
  4. 生命周期的控制
    cookie的生命周期当浏览器关闭的时候,就消亡了
    (1)cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,cookie生命周期结束,
    (2)session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问session,那么session生命周期被销毁

实际上大多数的应用都是用Cookie来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在Cookie里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。如果客户端的浏览器禁用了Cookie,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如sid=xxxxx这样的参数,服务端据此来识别用户,这样就可以帮用户完成诸如用户名等信息自动填入的操作了

Session 的主要作⽤就是通过服务端记录⽤户的状态。 典型的场景是购物⻋,当你要添加商品到购物⻋的时候,系统不知道是哪个⽤户操作的,因为 HTTP 协议是⽆状态的。服务端给特定的⽤户创建特定的 Session 之后就可以标识这个⽤户并且跟踪这个⽤户了。

Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。相对来说 Session 安全性更⾼。如果使⽤ Cookie 的⼀些敏感信息不要写⼊ Cookie 中,最好能将 Cookie 信息加密然后使⽤到的时候再去服务器端解密。

具体大致的流程是:

  1. ⽤户向服务器发送⽤户名和密码⽤于登陆系统。
  2. 服务器验证通过后,服务器为⽤户创建⼀个 Session,并将 Session信息存储 起来。
  3. 服务器向⽤户返回⼀个 SessionID,写⼊⽤户的 Cookie。
  4. 当⽤户保持登录状态时,Cookie 将与每个后续请求⼀起被发送出去。
  5. 服务器可以将存储在 Cookie 上的 Session ID 与存储在内存中或者数据库中的 Session 信息进⾏比较,以验证⽤户的身份,返回给⽤户客户端响应信息的时候会附带⽤户当前的状态。

11. 对称加密和非对称加密

  • 对称密钥加密(Symmetric-Key Encryption),加密和解密使用同一密钥
    优点:运算速度快
    缺点:无法安全地将密钥传输给通信方

  • 非对称密钥加密,又称公开密钥加密(Public-Key Encryption),加密和解密使用不同的密钥。
    公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密
    优点:可以更安全地将公开密钥传输给通信发送方;
    缺点:运算速度慢。

12. HTTPS采用的加密方式

HTTPS 采用混合的加密机制,使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使
用对称密钥加密进行通信来保证通信过程的效率

13. 封包和拆包

基于TCP的概念。因为TCP是无边界的流传输

  • 封包:封包就是在发送数据报的时候为每个TCP数据包加上一个包头,将数据报分为包头和包体两个部分。包头是一个固定长度的结构体,里面包含该数据包的总长度。
  • 拆包:接收方在接收到报文后提取包头中的长度信息进行截取。

14. 常见协议的科普

数据链路层协议:

协议 名称 作用
ARP 地址解析协议 根据IP地址获取物理地址
RARP 反向地址转换协议 根据物理地址获取IP地址
PPP 点对点协议 主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案

网络层协议:

协议 名称 作用
IP 网际协议 IP协议不但定义了数据传输时的基本单元和格式,还定义了数据报的递交方法和路由选择
ICMP Internet控制报文协议 ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况,也能确保连线的准确性,是ping和traceroute的工作协议
RIP 路由信息协议 使用“跳数”(即metric)来衡量到达目标地址的路由距离
IGMP Internet组 管理协议 用于实现组播、广播等通信

应用层协议:

协议 名称 默认端口 底层协议
HTTP 超文本传输协议 80 TCP
HTTPS 超文本传输安全协议 443 TCP
Telnet 远程登录服务的标准协议 23 TCP
FTP 文件传输协议 20传输和21连接 TCP
TFTP 简单文件传输协议 21 UDP
SMTP 简单邮件传输协议(发送用) 25 TCP
POP 邮局协议(接收用) 110 TCP
DNS 域名解析服务 53 服务器间进行域传输的时候用TCP,客户端查询DNS服务器时用 UDP

15. 文件上传漏洞是,如何防范

文件上传漏洞,指的是用户上传一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能

文件上传的目录设置为不可执行。
1)判断文件类型。在判断文件类型的时候,可以结合使用MIME Type,后缀检查等方式。因为对于上
传文件,不能简单地通过后缀名称来判断文件的类型,因为攻击者可以将可执行文件的后缀名称改为图
片或其他后缀类型,诱导用户执行
2)限制上传文件的大小。
3)单独设置文件服务器的域名

16. 常见的HTTP状态码

状态码 类别 含义
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出

更加详细的状态码可以通过阅读我这篇文章
里面有主要的状态码
RestTemplate的超全讲解(全)

17. 一台机器能够使用的端口号上限是多少

65536
因为TCP的报文头部中源端口号和目的端口号的长度是16位,也就是可以表示216=65536个不同
端口号,因此TCP可供识别的端口号最多只有65536个。但是由于0到1023是知名服务端口,所以实际上还要少1024个端口号

18. rpc和http的区别

rpc是本地调用一个远程函数
http是通过rul发送获取数据

rpc一般用在服务内部的相互调用,而http则用于和用户交互

区别点 rpc http
传输协议 tcp、http http
性能消耗 thrift高效的二进制传输 json格式,比thrift更消耗
负载均衡 基本自带 需配置nginx以及HAProxy来实现

其他问题

详情可看我之前的文章

【计算机网络】TCP为什么是三次握手,而不是两次或者四次的解析
【计算机网络】网络模型及协议
【计算机网络】HTTP1.0、HTTP1.1 和 HTTP2.0的详细分析

你可能感兴趣的:(八股文,udp,tcp/ip,面试)