计算机网络

1、谈一谈对OSI七层模型和TCP/IP四层模型的理解?

为了增强计算机网络的通用性和兼容性,因此计算机网络都被设计成层次结构。

(1)OSI七层模型

  • 应用层
  • 表示层
  • 会话层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

(2)TCP/IP四层模型

TCP/IP则是四层的结构,相当于是对OSI模型的简化。

  • 应用层
  • 传输层
  • 网络层
  • 数据链路层

2.谈谈TCP协议的3次握手过程?

  • 第一次握手:客户端给服务器端发送一个SYN同步数据包,表示连接请求。此时控制位SYN=1,ACK=0
  • 第二次握手:服务器端收到客户端的连接请求,发送一个确认数据包,表示同意连接。此时控制位SYN=1,ACK=1
  • 第三次握手:客户端收到服务器端的同意连接包,发送ACK=1的确认包给服务器端。此时控制位SYN=0,ACK=1。 连接成功,可以发送数据了。

3.TCP协议为什么要3次握手?2次,4次不行吗?

  • 三次握手是为了避免重复连接
  • 二次握手无法完成初始化seq序列号的值
  • 四次握手可以,但是浪费资源

4.谈谈TCP协议的四次挥手过程?

  • **第一次挥手:**客户端向服务器端发送一个释放连接请求数据包。控制位FIN=1,ACK=0。此时,客户端表示没有数据要发送给服务器端了,但还能接收服务器端发送的数据。
  • **第二次挥手:**服务器端收到客户端的释放连接请求,发送一个确认包ACK给客户端,表示服务器端确认收到释放连接通知,但仍有数据在传输,服务器端仍可给客户端传输数据,客户端可以收到,但是不可以发送。此时控制位FIN=0,ACK=1.。
  • **第三次挥手:**服务器端向客户端没有数据可以传输了,便给客户端发送一个断开连接数据包,此时控制位FIN=1,ACK=1。这个时候服务器端也不可以给客户端传输消息了。
  • **第四次挥手:**客户端收到服务器端的断联数据包,发送一个确认包ACK=1。此时客户端与服务器端彻底断开连接。

5.什么是流量控制?

  • 简单来讲:流量控制就是为了控制发送方的发送速率,确保接收方能来得及接收。
  • TCP使用滑动窗口来实现流量控制。(令牌桶也可以)

6.什么是滑动窗口?

滑动窗口是TCP协议中用于控制发送和接收数据速率的一种机制。它允许发送方在无需等待每个数据段确认的情况下,继续发送多个数据段,从而提高了传输效率。

接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

这个过程中,接收方向发送方通告一个窗口大小,表示当前接收方还剩余多少空间可以用来接收新的数据。发送方依据此窗口大小决定发送多少数据,这样就可以避免因发送速度过快,导致接收方来不及处理而造成的数据丢失或拥塞。


TCP滑动窗口分为发送窗口和接收窗口:

  • **发送窗口:**是发送方维护的窗口,代表能发但没确认的数据范围,会随接收方确认向前滑动。

  • **接收窗口:**是接收方维护的窗口,代表能接收但没处理的数据范围,大小由接收方缓冲区决定,通过 TCP 报文段窗口大小字段告知发送方。接收方读取内容后通知发送方,窗口向前滑动,还能通过改变窗口大小控制发送方速率来实现流量控制。

7.什么是拥塞控制?

拥塞控制是一种机制,发送方通过维护拥塞窗口(cwnd)变量来控制同时发送数据包的数量,以此调节网络拥塞的可能性。

TCP 主要用四个算法进行拥塞控制:

  • 慢开始:cwnd 从 1 开始,收到确认后就加倍,慢慢增大。
  • 拥塞避免:设置慢开始门限(ssthresh),当 cwnd≥ssthresh 时,每个轮次 cwnd 只加 1,减缓增长速度。
  • 拥塞发生
    • 超时重传情况:表示网络拥塞严重,ssthresh 设为 cwnd 的一半,cwnd 设为 1,开始慢启动。
    • 快速重传情况:表示拥塞不太严重,cwnd 设为当前一半,ssthresh = cwnd,开始快恢复。
  • 快恢复:和快重传一起用,cwnd 在原有值基础上加 3,然后开始执行拥塞避免。

8.TCP和UDP有什么区别?

  • **面向连接:**TCP协议需要建立连接,仅支持一对一通信;UDP协议无需建立连接,支持一对一、一对多、多对一和多对多的交互通信。
  • **可靠传输:**TCP协议通过确认应答、连接管理、流量控制、拥塞控制来确保可靠性传输;UDP不保证可靠性传输。
  • **性能效率:**TCP协议传输效率慢,需要较多的资源开销。UDP协议传输效率快,需要较少的资源开销。
  • **首部格式:**TCP协议的首部需要20-60个字节,UDP协议需要8个字节。

| TCP | 面向连接 | 可靠传输 | 首部开销20-60字节 | 传输效率慢 | 资源开销大 |

UDP 不面向连接 不可靠传输 首部开销8个字节 传输效率快 资源开销小
[TCP和UDP区别]

9.TCP如何保证传输过程的可靠性?

  • **校验和:**发送方在发送数据之前计算校验和,接收方收到数据后同样计算,如果不一致,那么传输有误。
  • **确认应答,序列号:**TCP进行传输时数据都进行了编号,每次接收方通过首部ACK字段进行确认序列号。
  • **超时重传:**如果发送方发送数据一段时间后没有收到ACK确认,那么就重发数据。
  • **连接管理:**三次握手和四次挥手的过程。
  • **流量控制:**TCP协议报头包含16位的窗口大小,接收方会在返回ACK时,同时把窗口值传递回发送方,发送方根据报文中窗口的大小控制发送速率。
  • **拥塞控制:**通过慢开始、拥塞避免、快重传、快恢复等四个算法来进行拥塞控制,降低整个网络的拥塞程度,避免网络中发送的数据包数量过多,造成数据包阻塞延迟丢失

10.Session和Cookie有什么区别?

保存位置

  • Cookie 保存在客户端浏览器本地,是文件形式,受浏览器限制,一般不超过 3kb。
  • Session 保存在服务器端内存,是以对象形式存在。

数据内容

  • Cookie 不能保存特殊内容(如中文、特殊符号)。
  • Session 可以保存任意内容。

存储周期

  • Cookie 的存储周期由 Max Age 属性设定,可长期保存。
  • Session 依赖 JSESSIONID 这个 Cookie,其 Max Age 默认 -1,关闭浏览器窗口,该 Cookie 失效,对应的 Session 也跟着失效。

11.浏览器请求一个网址的过程?(输入网址到网页显示整个过程)

(1)首先,应用层会创建一个http请求报文;
(2)通过DNS服务器把http请求报文中的域名解析成IP地址;
(3)然后通过socket调用操作系统的协议栈,进行传输层的执行;
(4)传输层添加TCP头部,网络层添加IP头部,数据链路层添加以太网协议头部;
(5)数据经过路由器、交换机转发,最终达到目标服务器;
(6)目标服务器同样解析数据,最终拿到http请求报文,按照对应的程序的逻辑进行处理后,生成一个http响应报文;

12.谈谈对HTTP协议的理解

HTTP是一个属于应用层的协议,基于浏览器-服务端架构工作。浏览器作为HTTP客户端通过URL向HTTP服务端(即WEB服务器)发送请求,Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP 以 TCP协议作为传输层层协议,默认端口为80。

通信过程主要如下:

  • 服务器在 80 端口等待客户的请求。
  • 浏览器发起到服务器的 TCP连接(创建套接字 Socket)。
  • 服务器接收来自浏览器的 TCP 连接。
  • 浏览器(HTTP 客户端)与 Web 服务器(HTTP 服务器)交换 HTTP 消息。
  • 关闭 TCP连接。

13.谈谈HTTP协议的GET和POST有什么区别?

GET和POST是HTTP请求的两种请求方法,本质上都是通过TCP连接进行通信;

  • GET用于获取数据,POST用于提交数据;
  • GET使用URL传递请求参数,POST使用Request Boby提交数据;
  • GET和POST的请求报文格式不同
  • POST方法请求报文第一行是这样的 POST /uri HTTP/1.1 \r\n
  • GET方法请求报文第一行是这样的 GET /uri HTTP/1.1 \r\n
  • GET是幂等且可缓存,POST非幂等且不可缓存

14.谈谈HTTP协议有哪些请求方式?各自有什么特点?

  • GET 获取资源:GET方法用于使用给定的URI从给定服务器中查询获取信息或数据。
  • HEAD 获取响应消息报头:HEAD 和 GET方法类似,但是不返回响应报文内容主体部分,仅传输响应报头部分。
  • POST 提交数据增加资源:POST方法用于将数据发送到服务器以创建或更新资源。使用post方法,如果两个请求相同,后一个请求不会会把第一个请求覆盖掉,所以post用于增加资源。
  • PUT 修改资源:PUT方法用来修改资源。使用put方法,如果两个请求相同,后一个请求会把第一个请求覆盖掉,所以put用于修改资源。
  • DELETE 删除资源:DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。
  • OPTIONS 查询支持的方法:查询指定的 URL 能够支持的方法。会返回 Allow: GET, POST, HEAD, OPTIONS 这样的内容

15.谈谈HTTPS的工作原理?

  • 用户通过浏览器请求 https 网站,服务器收到请求后,挑选浏览器支持的加密和 hash 算法,同时把包含颁发机构、网址、公钥、有效期等内容的数字证书发给浏览器。
  • 浏览器校验证书,有问题就提示警告,没问题就生成随机秘钥 X,用证书中的公钥加密后发给服务器。
  • 服务器用私钥解密得到 X,再用 X 加密网页内容并返回给浏览器,浏览器用 X 和约定算法解密得到网页内容

16.常见的HTTP状态码?

1xx(信息性状态码)

1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际工作中使用场景比较少

2xx(成功状态码)

**「200 OK」**最常见的成功状态码,表示一切正常。

「204 No Content」 常见的成功状态码,与 200 OK 基本相同,但响应报文没有 body 数据。

**「206 Partial Content」**是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。

3xx(重定向状态码)

「301 Moved Permanently」 表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。

「302 Found」 表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。

4xx(客户端错误状态码)

**「400 Bad Request」**表示客户端请求的报文有错误。

**「403 Forbidden」**表示服务器禁止访问资源,并不是客户端的请求出错。

「404 Not Found」 表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。

**「405 Not Allowed」**表示服务器不支持客户端采用的请求方式。5XX 服务器错误

5xx(服务器错误状态码)

「500 Internal Server Error」 服务器发生了内部错误。

「501 Not Implemented」表示客户端请求的功能还不支持,类似"即将开业,敬请期待"的意思。

**「502 Bad Gateway」**通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。

「503 Service Unavailable」 表示服务器当前很忙,暂时无法响应服务器,类似"网络服务正忙,请稍后重试"的意思。

相关推荐
希忘auto19 小时前
详解Redis的常用命令
redis·1024程序员节
yaosheng_VALVE1 天前
探究全金属硬密封蝶阀的奥秘-耀圣控制
运维·eclipse·自动化·pyqt·1024程序员节
dami_king1 天前
SSH特性|组成|SSH是什么?
运维·ssh·1024程序员节
一个通信老学姐6 天前
专业125+总分400+南京理工大学818考研经验南理工电子信息与通信工程,真题,大纲,参考书。
考研·信息与通信·信号处理·1024程序员节
sheng12345678rui6 天前
mfc140.dll文件缺失的修复方法分享,全面分析mfc140.dll的几种解决方法
游戏·电脑·dll文件·dll修复工具·1024程序员节
huipeng9267 天前
第十章 类和对象(二)
java·开发语言·学习·1024程序员节
earthzhang20217 天前
《深入浅出HTTPS》读书笔记(19):密钥
开发语言·网络协议·算法·https·1024程序员节
爱吃生蚝的于勒8 天前
计算机基础 原码反码补码问题
经验分享·笔记·计算机网络·其他·1024程序员节
earthzhang20218 天前
《深入浅出HTTPS》读书笔记(20):口令和PEB算法
开发语言·网络协议·算法·https·1024程序员节
一个通信老学姐9 天前
专业140+总分410+浙江大学842信号系统与数字电路考研经验浙大电子信息与通信工程,真题,大纲,参考书。
考研·信息与通信·信号处理·1024程序员节