面试计算机网络八股文五问五答第二期

面试计算机网络八股文五问五答第二期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!

⭐点赞⭐收藏⭐不迷路!⭐

1.OSI七层协议?

2. TCP和UDP传输协议的区别?

  1. TCP是可靠的传输协议,你知道它怎么实现的一些拥塞控制,或者说对于数据发送量的合理限制?

TCP(传输控制协议)通过拥塞控制和流量控制来实现可靠的数据传输。其中,拥塞控制是TCP用来控制网络拥塞和避免网络超载的机制,而流量控制是用来控制数据发送方与接收方之间的数据流量的机制。

拥塞控制主要通过以下几个算法来实现:

  1. 慢启动(Slow Start):在建立连接时,TCP发送方初始将拥塞窗口设置为一个较小的值,然后每收到一个确认,拥塞窗口指数式增加,以适应网络的容量。
  2. 拥塞避免(Congestion Avoidance):一旦拥塞窗口达到一个阈值(拥塞窗口大小的一半),TCP发送方就采用线性增加的方式增加拥塞窗口,以更稳定地发送数据。
  3. 快速重传(Fast Retransmit):如果TCP发送方连续接受到3个重复的确认(ACK),即表明网络中有一段丢失的数据,TCP发送方将立即重传这些数据,而不必等待超时。
  4. 快速恢复(Fast Recovery):在进行快速重传后,TCP发送方将拥塞窗口减半,并且进入快速恢复状态。在此状态下,每收到一个确认,拥塞窗口仍然线性增加,但增加的速度较慢。

对于数据发送量的合理限制,TCP使用了流量控制机制来确保接收方能够跟上发送方的发送速度。流量控制通过使用滑动窗口(Sliding Window)来限制发送方的数据发送量,确保不会使接收方无法处理大量数据。

滑动窗口的大小由接收方动态调整。每次接收方收到一定数量的数据后,会向发送方发送一个确认,确认中包含了接收方的可用窗口大小。发送方根据接收方返回的可用窗口大小来动态调整发送的数据量,以保持发送方和接收方的数据传输速度的平衡。

通过拥塞控制和流量控制的机制,TCP能够根据网络的状况和接收方的处理能力来合理地限制数据发送量,同时保证网络的稳定和可靠性。

img

3. 拥塞控制、超时重传的具体原理?

拥塞控制:

拥塞控制的目的是避免网络中的拥塞,保证网络的稳定性。TCP使用拥塞窗口(Congestion Window)来控制发送方的数据发送速率。

慢启动:当TCP建立连接时,发送方将初始拥塞窗口设置为一个比较小的值(一般为一个报文段的大小),然后随着收到的确认报文的增加,指数级地增加拥塞窗口的大小。这样做的目的是保守地探测当前网络的容量,避免一开始就发送大量数据造成网络拥塞。

拥塞避免:一旦拥塞窗口达到一个阈值(拥塞窗口大小的一半),TCP发送方采用线性增加的方式增加拥塞窗口,以更稳定地发送数据。即拥塞窗口的增加速率由指数增长变成线性增长,减缓拥塞窗口增长的速度。

快速重传:当接收方收到的重复确认(ACK)达到一定数量时,表示发送的数据部分被丢失,TCP发送方会立即重传对应的丢失部分数据,而不必等待超时。

快速恢复:在进行快速重传后,TCP发送方将拥塞窗口减半,并进入快速恢复状态。在这个状态下,拥塞窗口仍然线性增加,但增加速度降低。

超时重传:

当数据发送后,TCP发送方会启动一个定时器,等待接收方发送确认报文。如果在定时器时间内没有收到确认,则认为数据丢失,TCP发送方会立即重传该数据。

超时时间的选择是有一定策略的,一般会根据网络环境动态调整。如果确认报文的返回时间很短,则认为网络较好,可以采用较短的超时时间。反之,若返回时间较长,则认为网络拥塞或延迟较高,需要设置较长的超时时间。

超时重传主要用于检测丢失的数据,并尽快重新发送以保证数据的可靠传输。但超时重传容易造成网络拥塞,因此拥塞控制机制与超时重传机制相互配合,对网络拥塞进行控制与避免。

4.Http 2.0 相比 1.0做了哪些更新?

  1. 二进制传输:HTTP/2.0 使用二进制格式来传输数据,而 HTTP/1.1 使用文本格式。二进制格式更加紧凑和高效,减少了传输的开销,使数据传输更快。
  2. 多路复用(Multiplexing):HTTP/2.0 允许多个请求和响应同时在单个连接上传输,而不需要像 HTTP/1.1 那样在多个连接上传输。这提高了性能,减少了延迟,特别对于加载网页中的多个资源文件非常有益。
  3. 头部压缩:HTTP/2.0 使用 HPACK 算法对 HTTP 头部进行压缩,减小了头部信息的传输开销。在 HTTP/1.1 中,每次请求和响应都会包含重复的头部信息,而 HTTP/2.0 可以显著减小这种冗余。
  4. 服务器推送(Server Push):HTTP/2.0 允许服务器主动向客户端推送资源,而不需要客户端显式请求。这有助于加速页面加载,减少了客户端发起请求的次数。
  5. 优化流量控制:HTTP/2.0 提供了更好的流量控制机制,允许客户端和服务器更好地管理数据流量,避免了拥塞。
  6. 安全性:虽然 HTTP/2.0 不要求使用加密,但现实中,几乎所有的 HTTP/2.0 连接都使用了加密,通常使用 TLS/SSL,以提高安全性和隐私。
  7. 适应性:HTTP/2.0 可以更好地适应不稳定的网络条件,如高延迟或丢包率高的情况,提供更好的性能。

5.TCP 有哪些字段?

传输控制协议(Transmission Control Protocol,TCP)是一种传输层协议。TCP使数据包从源到目的地的传输更加顺畅。它是一种面向连接的端到端协议。每个数据包由TCP包裹在一个报头中,该报头由10个强制字段共20个字节和一个0到40 字节的可选数据字段组成

​ 1.源端口号(Source Port):16bits,该字段标识发送方应用程序的端口号。

​ 2.目标端口号(Destination Port):16bits,该字段标识接收方应用程序的端口号。

​ 3.序列号(Sequence Number):32bits,在连接建立(三次握手)后,该字段包含一个32位随机初始序列号/起始数据位,随后增加传输的字节数。

​ 4.确认应答号(Acknowledgement Number):32bits,接收方使用这个32位参数来请求下一个TCP段。它是下一个预测的TCP段的序列号。

​ 5.报头长度(Header Length):4bits,该字段表示TCP报头的大小,但是是按比例缩小的版本。

​ 6.保留位(Reserved):6bits,该字段的位设置为零。这些位保留供以后使用。

​ 7.标志位(Flags bits):6bits,一组六个字段,每个字段长一位。TCP标志用于指示TCP会话期间的特定状态,可用于故障排除或控制特定连接的处理方式。每个标志位值为1,表示特定标志为”设置”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/211435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言_常见位操作

C语言_常见位操作 文章目录 C语言_常见位操作一、位操作函数二、代码示例 一、位操作函数 设置某位为1或者对某位清0、获取某位的值、对某位取反 /*对某位置1*/ unsigned Setbit(unsigned x,int n) {return x | 1 << n; }/*对某位清0*/ unsigned Resetbit(unsigned x,…

为什么要用向量检索

之前写过一篇文章&#xff0c;是我个人到目前阶段的认知&#xff0c;所做的判断。我个人是做万亿级数据的搜索优化工作的。一直在关注任何和搜索相关的内容。 下一代搜索引擎会什么&#xff1f;-CSDN博客 这篇文章再来讲讲为什么要使用向量搜索。 在阅读这篇文章之前呢&#xf…

【网络安全】网络设备可能面临哪些攻击?

网络设备通常是网络基础设施的核心&#xff0c;并控制着整个网络的通信和安全&#xff0c;同样面临着各种各样的攻击威胁。 对网络设备的攻击一旦成功&#xff0c;并进行暴力破坏&#xff0c;将会导致网络服务不可用&#xff0c;且可以对网络流量进行控制&#xff0c;利用被攻陷…

【JavaEE】线程池

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

springcloud分布式事务

文章目录 一.为什么引入分布式事务?二.理论基础1.CAP定理2.BASE理论 三.Seata1.微服务集成Seata2.XA模式(掌握)3.AT模式(重点)4.TCC模式(重点)5.Saga模式(了解) 四.四种模式对比五.Seata高可用 一.为什么引入分布式事务? 事务的ACID原则 在大型的微服务项目中,每一个微服务都…

案例课4——智齿客服

1.公司介绍 智齿科技&#xff0c;一体化客户联络中心解决方案提供商。提供基于「客户联络中心」场景的一体化解决方案&#xff0c;包括公域私域、营销服务、软件BPO的三维一体化。 智齿科技不断整合前沿的人工智能及大数据技术&#xff0c;已构建形成呼叫中心、机器人「在线语音…

Python中函数的递归调用

函数调用自己的编程方式被称为函数的递归调用。递归通常能够将一个大型的复杂问题的递归条件&#xff0c;一层一层的回溯到终止条件&#xff0c;然后再根据终止条件的运算结果&#xff0c;一层一层的递进运算到满足全部的递归条件。它能够使用少量程序描述出解题过程中的重复运…

主机访问Android模拟器网络服务方法

0x00 背景 因为公司的一个手机app的开发需求&#xff0c;要尝试链接手机开启的web服务。于是在Android Studio的Android模拟器上尝试连接&#xff0c;发现谷歌给模拟器做了网络限制&#xff0c;不能直接连接。当然这个限制似乎从很久以前就存在了。一直没有注意到。 0x01 And…

分销电商结算设计

概述 分销电商中涉及支付与结算&#xff1b;支付职责是收钱&#xff0c;结算则是出钱给各利益方&#xff1b; 结算核心围绕业务模式涉及哪些费用&#xff0c;以及这些费用什么时候通过什么出资渠道&#xff0c;由谁给到收方利益方&#xff1b; 结算要素组成费用项结算周期出…

区块链的可拓展性研究【03】扩容整理

为什么扩容&#xff1a;在layer1上&#xff0c;交易速度慢&#xff0c;燃料价格高 扩容的目的&#xff1a;在保证去中心化和安全性的前提下&#xff0c;提升交易速度&#xff0c;更快确定交易&#xff0c;提升交易吞吐量&#xff08;提升每秒交易量&#xff09; 目前方案有&…

详解进程管理(银行家算法、死锁详解)

处理机是计算机系统的核心资源。操作系统的功能之一就是处理机管理。随着计算机的迅速发展&#xff0c;处理机管理显得更为重要&#xff0c;这主要由于计算机的速度越来越快&#xff0c;处理机的充分利用有利于系统效率的大大提高&#xff1b;处理机管理是整个操作系统的重心所…

前后端联调神器《OpenAPI-Codegen》

在后端开发完接口之后&#xff0c;前端如果再去写一遍接口来联调的话&#xff0c;会很浪费时间&#xff0c;这个时候使用OpenAPI接口文档来生成Axios接口代码的话&#xff0c;会大大提高我们的开发效率。 Axios引入 Axios是一个基于Promise的HTTP客户端&#xff0c;用于浏览器…

Go压测工具

前言 在做Go的性能分析调研的时候也使用到了一些压测方面的工具&#xff0c;go本身也给我们提供了BenchMark性能测试用例&#xff0c;可以很好的去测试我们的单个程序性能&#xff0c;比如测试某个函数&#xff0c;另外还有第三方包go-wrk也可以帮助我们做http接口的性能压测&…

C# 任务并行类库Parallel调用示例

写在前面 Task Parallel Library 是微软.NET框架基础类库&#xff08;BCL&#xff09;中的一个&#xff0c;主要目的是为了简化并行编程&#xff0c;可以实现在不同的处理器上并行处理不同任务&#xff0c;以提升运行效率。Parallel常用的方法有For/ForEach/Invoke三个静态方法…

Element-UI定制化Tree 树形控件

1.复制 说明&#xff1a;复制Tree树形控件。 <script> export default {data() {return {data: [{label: 一级 1,children: [{label: 二级 1-1,children: [{label: 三级 1-1-1}]}]}, {label: 一级 2,children: [{label: 二级 2-1,children: [{label: 三级 2-1-1}]}, {l…

Linux:进程优先级与命令行参数

目录 1.进程优先级 1.1 基本概念 1.2 查看系统进程 1.3 修改进程优先级的命令 2.进程间切换 2.1 相关概念 2.2 Linux2.6内核进程调度队列&#xff08;了解即可&#xff09; 3.命令行参数 1.进程优先级 1.1 基本概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优…

【C++】在类外部定义成员函数时,不应该再次指定默认参数值

2023年12月10日&#xff0c;周日下午 错误的代码 #include<iostream>class A { public:void fun(int a10); };void A::fun(int a10) //<----在这里报错 {}int main() {} 正确的代码 代码目前有一个问题&#xff0c;主要是在类外部定义成员函数时&#xff0c;不应该…

解密QQ号——C语言

题目&#xff1a; 有一串已加密的数字“6 3 1 7 5 8 9 2 4”解密规则&#xff1a;首先将第1个数字删除&#xff0c;紧接着将第2个数字放到这串数字的末尾&#xff0c;再将第3个数字删除并将第4个数字放到这串数字的末尾&#xff0c;再将第5个数删除 代码实现&#xff1a; #inc…

利用Node.js和cpolar实现远程访问,无需公网IP和路由器设置的完美解决方案

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

ESP32网络编程-OTA方式升级固件(基于Web浏览器)

OTA方式升级固件(基于Web浏览器) 文章目录 OTA方式升级固件(基于Web浏览器)1、ESP32的OTA介绍2、OTA升级固件方式3、软件准备4、硬件准备5、代码实现6、一种优雅方式实现Web方式OTA升级6.1 基础OTA代码6.2 新固件库代码在前面的文章中,我们在Arduino IDE的网络端口中,实现…