计算机网络八股文

基础篇

TCP/IP 网络模型有哪几层?

应用层:

  • 通过应用进程间的通信完成特定的网络应用
  • 应用层只需要专注于为用户提供应用功能
  • 应用层是工作在操作系统中的用户态
  • 常见协议:HTTPSMTP、FTP、Telnet、DNS等

传输层:

  • 传输层(Transport Layer)是为应用层提供网络支持的
  • 负责端到端的数据传输
  • 解决进程之间基于网络的通信问题,解决出现传输错误时,如何处理问题
  • 常见协议:TCPUDP

网络层:

  • 处理数据在网络中的传输
  • 解决如何标识各网络以及各网络中的各主机(网络和主机共同编制的问题,例如IP地址)问题
  • 解决路由器转发分组,路由选择问题
  • 常见协议:IPARP、ICMP

网络接口层:

  • 网络接口层主要为网络层提供「链路级别」传输的服务
  • 负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次
  • 使用 MAC 地址来标识网络上的设备

HTTP篇

HTTP是什么?

HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。
HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」

HTTP常见的状态码有哪些

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

GET 和 POST 有什么区别?

  • 参数:

    • 按照规范,GET请求的参数一般在URL中,POST兴趣的参数一般放在请求Body中(这不是绝对,只是规范来讲)
    • URL中的参数只支持ASCLL,对BODY没有限制
    • 浏览器会对 URL 的长度有限制,对BODY的没有限制
  • 安全性(对于传输的数据来说):
    POST的安全性与GET相比相对较高。规范情况下,GET的参数会暴露在URL上,而POST的参数则是在请求体中保存
    然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文,要想安全传输,就只有加密

  • 幂等性:

    • GET 方法就是安全且幂等的规范来讲,它是「只读」操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。所以,可以对 GET 请求的数据做缓存
    • POST 方法不是安全且幂等的规范来讲,POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。所以,浏览器一般不会缓存 POST 请求

HTTP1.0,1.1,2.0,3.0 的版本区别?

HTTP1.0

HTTP/1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
这种方式就好像我们打电话的时候,只能说一件事儿一样,说完之后就要挂断,想要说另外一件事儿的时候就要重新拨打电话。

HTTP/1.0中浏览器与服务器只保持短暂的连接,连接无法复用。也就是说每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。

我们知道TCP连接的建立需要三次握手,是很耗费时间的一个过程。所以,HTTP/1.0版本的性能比较差。

HTTP1.0 其实也可以强制开启长链接,例如接受Connection: keep-alive 这个字段,但是,这不是标准字段,不同实现的行为可能不一致,因此不是根本的解决办法。

HTTP1.1

HTTP/1.1 相比 HTTP/1.0 性能上的改进:

  • 使最主要的改进就是默认是持久连接。所谓的持久连接即TCP连接默认不关闭,可以被多个请求复用。
  • 引入了管道机制(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求。

HTTP2.0

HTTP/2 为了解决HTTP/1.1中仍然存在的效率问题,主要做了以下优化:

  • 头部压缩HTTP/2 会压缩头(Header)如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分。这就是所谓的 HPACK 算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
  • 二进制格式HTTP/2采用二进制格式而非文本格式。对计算机更友好,且节省了空间。增加了数据传输的效率
  • 并发传输:引出了 Stream 概念,多个 Stream 复用在一条 TCP 连接针对不同的 HTTP 请求用独一无二的 Stream ID 来区分,接收端可以通过 Stream ID 有序组装成 HTTP 消息,不同 Stream 的帧是可以乱序发送的,因此可以并发不同的 Stream ,也就是 HTTP/2 可以并行交错地发送请求和响应
  • 服务器推送:HTTP/2 还在一定程度上改善了传统的「请求 - 应答」工作模式,服务端不再是被动地响应,可以主动向客户端发送消息。比如,客户端通过 HTTP/1.1 请求从服务器那获取到了 HTML 文件,而 HTML 可能还需要依赖 CSS 来渲染页面,这时客户端还要再发起获取 CSS 文件的请求,需要两次消息往返,在 HTTP/2 中,客户端在访问 HTML 时,服务器可以直接主动推送 CSS 文件,减少了消息传递的次数。

HTTP3.0

在这里插入图片描述
在这里插入图片描述

HTTP 与 HTTPS的区别

在这里插入图片描述

HTTPS 解决了 HTTP 的哪些问题?

HTTP 由于是明文传输,所以安全上存在一些风险:

  • HTTPS通过信息加密,使用混合加密的方式实现信息的机密性,解决了窃听的风险
  • HTTPS通过校验机制,使用摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
  • HTTPS通过将服务器公钥放入到数字证书中,解决了冒充的风险

HTTPS 是如何建立连接的?其间交互了什么?

整体上是两个阶段:
一、TLS 的「握手阶段」:生成会话秘钥
二、数据传输阶段:使用会话秘钥,来对传输的数据进行加密(对称加密)

假设第一阶段使用的是RSA 算法。首先我先介绍一下RSA非对称加密,共有两个密钥:

  • 一个是公钥,这个是可以公开给所有人的;
  • 一个是私钥,这个必须由本人管理,不可泄露。

两个密钥可以双向加解密的,比如可以用公钥加密内容,然后用私钥解密也可以用私钥加密内容,公钥解密内容

  • 公钥加密,私钥解密。这个目的是为了保证内容传输的安全,因为被公钥加密的内容,其他人是无法解密的,只有持有私钥的人,才能解密出实际的内容;
  • 私钥加密,公钥解密。这个目的是为了保证消息不会被冒充,因为私钥是不可泄露的,如果公钥能正常解密出私钥加密的内容,就能证明这个消息是来源于持有私钥身份的人发送的

在这里插入图片描述

一、TLS 的「握手阶段」:生成会话秘钥

  1. 首先,由客户端向服务器发起加密通信请求,也就是 ClientHello 请求。
    在这里插入图片描述
  2. 服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello。

在这里插入图片描述
3. 客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性
如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:
在这里插入图片描述
4. 服务器收到客户端的第三个随机数(pre-master key)之后,通过协商的加密算法,计算出本次通信的「会话秘钥」
在这里插入图片描述
至此,整个 TLS 的握手阶段全部结束。

二、数据传输阶段:使用会话秘钥,来对传输的数据进行加密(对称加密)

接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用「会话秘钥」加密内容

HTTP和RPC的区别?

服务发现

在这里插入图片描述

底层连接形式

在这里插入图片描述

传输的内容

在这里插入图片描述
在这里插入图片描述

既然有 HTTP 协议,为什么还要有 WebSocket?

在这里插入图片描述

TCP篇

TCP 和 UDP 区别

在这里插入图片描述

TCP 和 UDP 应用场景

在这里插入图片描述

重传机制

在这里插入图片描述

超时重传

在这里插入图片描述
在这里插入图片描述
超时重传时间 RTO 的值应该略大于报文往返 RTT 的值
在这里插入图片描述

快速重传

在这里插入图片描述
在这里插入图片描述

SACK 方法

在这里插入图片描述

TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗?

  • HTTP 的 Keep-Alive 也叫 HTTP 长连接,该功能是由「应用程序」实现的,可以使得用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,减少了 HTTP 短连接带来的多次 TCP 连接建立和释放的开销

  • TCP 的 Keepalive 也叫 TCP 保活机制,该功能是由「内核」实现的,当客户端和服务端长达一定时间没有进行数据交互时,内核为了确保该连接是否还有效,就会发送探测报文,来检测对方是否还在线,然后来决定是否要关闭该连接

TCP 和 UDP 可以同时绑定相同的端口吗?

在这里插入图片描述

IP篇

ICMP

在这里插入图片描述

ICMP 功能都有啥?

在这里插入图片描述

ICMP 类型

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coderzpw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值