《对线面试官》 高频计算机网络面试题_计算机网络 高频面试题(3)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

TCP/IP 四层从下往上依次是:网络接口层、网络层、传输层、应用层

这两个网络模型的特点:

  • 层与层之间相互独立又相互依靠
  • 上层依赖于下层,下层为上层提供服务

与 OSI 七层模型的映射关系如下:

在这里插入图片描述
PS:TCP/IP 四层是 OSI 七层的简化版

2、说说 TCP 与 UDP 的区别

UDP(用户数据报协议)TCP(传输控制协议)
是否面向连接无连接面向连接
是否可靠不可靠传输(没有流量控制和拥塞控制)可靠传输(使用流量控制和拥塞控制)
连接对象个数支持一对一、一对多、多对一、多对多交互通信只支持一对一通信
传输方式面向报文面向字节流
header 开销开销小,8个字节最小20字节,最大60字节
适用场景实时应用,可靠性需求不是很大的场景(视频会议、直播等)要求可靠传输的应用(文件传输)

总结:

  • TCP 是面向连接的协议,提供可靠服务;UDP 是无连接的,不可靠传输
  • UDP 常用于实时性要求高的场景,TCP 常用于可靠性要求高的场景

3、TCP 是如何实现数据的可靠性?

TCP提供可靠交付的服务,传输过程中采用许多方法保证在连接上提供可靠的传输服务

  • 校验和

这是 TCP 用来解决数据发生损坏的方案,检验数据是否损坏的方式就是数据校验

在数据传输过程中,将发送的数据段都当做一个16位的整数,将这些整数加起来,并且前面的进位不能丢弃,补在最后,然后取反,得到校验和

发送方:在发送数据之前计算校验和,并进行校验和的填充。接收方:收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方进行比较

若数据出错,则接收方会直接将数据丢弃,发送方在一段时间后,没有接收到ACK报文,就会在超时后,重传这个报文

  • 序列号

由于网络的限制,TCP 必须将较大的数据拆分成一个个较小的报文段,并封装成 TCP 报文段,逐个传输

但又由于网络传输的不确定性(比如所通过的路径不同,某个报文段丢失然后重传等),这些报文段完全有可能不是按照顺序到达。所以,为了在接收方能够完整的接收数据,并能按序将这些报文组合起来

TCP 提供了一个解决方案——为每一个 TCP 报文段分配一个序号,每个报文段的序号依次增加

这样接收方就可以根据序号,来确定接收到的报文段是整个数据中的哪一部分,以及是否接收到了所有的部分

但是我们需要注意的是——TCP是对字节进行编号,而不是对报文段进行编号

TCP 对需要发送的数据的每一个字节都赋予了一个编号,比如第一个字节为 0 号,第二个为 1 号,以此类推

而每一个报文段一般都不止封装一个字节的数据,所以在 TCP 报文段中,封装的是这个报文段的数据中第一个字节的序列号

举个例子:
比如说发送方要发送250字节的数据,假设初始序号从0开始,则这250个字节的序号分别是0-249。

再假设每一个报文段最多允许封装100个字节的数据,所以第一个报文段将封装第1到100个字节,这些字节的序号为0-99,所以第一个报文段会将0放入它首部中的序号部分;

而第二个报文段封装100-199号字节,所以它的序号为100;

而第三个报文段封装200-249号字节,所以它的序号为200。

以上就是TCP发送方对序号的处理方法

总结:

  • 为了解决数据接收的完整性,TCP 为每个报文段都赋予了一个序列号
  • TCP 报文段的序列号是根据这个报文段中的第一个字节的数据的序列号来赋予的
  • 确认应答

TCP 传输过程中,每次接收方接收到数据后,都会对发送方进行确认应答,也就是发送 ACK 报文

这个 ACK 报文中带有对应的确认序列号,告诉发送方,接收了哪些数据,下一次数据从哪里传

  • 超时重传

这个方法用来解决 TCP 数据丢失的问题

TCP 会维护一个计时器,并设置一个超时时间,当发送一个 TCP 报文段后,没有在超时时间内收到 ACK 报文,则发送方认为数据丢失,于是会重传丢失的报文段,直到认为接收方已接收

由于 TCP 使用的是流水线传输,同一时间内可能会有多个已经发送但没有接收到 ACK 的报文段,所以按理来说,TCP 将维护多个计时器,为每一个报文段绑定一个,但是这样做需要花费很大的开销,而且管理计时器也很复杂

所以实际上 TCP 只维护一个计时器,绑定的是当前最早被发送,但是还没有收到 ACK 报文的报文段

如果这个报文段超时,发送方将重传该报文段,并重启计时器;如果收到了这个报文段的 ACK 报文,同样重启计时器,此时绑定的就是新的报文段

总结:

TCP 的超时重传机制能够很好地解决网络中发生数据丢包的问题

  • 连接管理

指的是 TCP 三次握手、四次挥手的过程

4、 TCP 协议如何提高传输效率?

  • 滑动窗口

如果每一个发送的报文段,都要收到 ACK 应答之后才发送下一个报文段,会导致效率很低,因为大部分时间都用在了等待 ACK 应答上了

在这里插入图片描述
既然一发一收的效率比较低,那么我们可以一次发送多条数据,这样就能使等待时间大大减少,从而提高性能在这里插入图片描述
窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,上图窗口大小就是 3000 个字节(三个段)

发送前三个段的时候不需要任何的 ACK 应答,直接发送,收到第一个 ACK 应答之后,窗口向后移动,发送后三个段的数据

操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录那些数据还没有应答;只有确认应答过的数据才能在缓冲区中删除

窗口越大,网络吞吐量就越高;在建立连接的时候已经确认了窗口的大小,确认了发送数据大小的上限

  • 快重传

如果出现了数据丢失,就需要进行重传,一般分为两种情况:

  • 数据包已经抵达,ACK被丢了。这种情况下,部分ACK丢了并不影响,因为可以通过后续的ACK进行确认
  • 数据包直接丢了。发送端会连续收到多个相同的 ACK 确认,发送端立即将对应丢失的数据重传
  • 延迟应答

如果接收数据的主机⽴刻返回ACK应答, 这时候返回的窗⼝可能⽐较⼩

假设接收端缓冲区为 1M,一次收到了 500K 的数据,如果立即 ACK 应答,返回的窗口就是 500K

但实际上可能接收端处理的速度很快,10 ms 之内就把 500 K 的数据从缓冲区消费掉了,在这种情况下,接收端处理还远没有达到自己的极限

如果接收端稍微等⼀会再应答, ⽐如等待200ms再应答, 那么这个时候返回的窗⼝⼤⼩就是1M

延迟应答的两个限制:

  • 数量限制: 每个N个包就应答一次;
  • 时间限制: 超过最大的延迟时间就应答一次
  • 捎带应答

在延迟应答的基础上,很多情况下,客户端服务器在应用层也是一发一收的

这时候常常采用捎带应答的方式来提高效率,而ACK响应常常伴随着数据报文共同传输。如:三次握手在这里插入图片描述

5、你知道 TCP 如何处理拥塞吗?

网络拥塞是指到达通信网络中某一部分的分组数量过多,使得该部分网络来不及处理,导致这部分甚至整个网络性能下降,严重时甚至导致网络通信业务陷入停顿

拥塞控制处理网络拥塞现象的一种机制,有以下四个阶段:

  • 慢启动
  • 拥塞避免
  • 快速重传
  • 快速恢复

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值