舌战面试官-计网篇(一)

*为了不再被面试官吊打,我觉得系统的写一写面试相关的知识,同时也是捡起科班的底子,打好基础。希望这个系列能给各位同学,朋友们带来帮助,持续更新~

计算机网络体系相对复杂,如果展开来说众多的协议和配置实在让人头疼,不过纵观各大互联网公司面试,大多都是针对应用层和传输层,这样就让我们有机可乘了(狗头),废话不多说,上题!

一.OSI七层协议,五层协议,TCP/TP四层协议??简述下各层的作用和常用的协议

互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分层七层

在这里插入图片描述

OSI七层模型概念清楚,理论完整,但复杂不实用;
TCP/IP四层协议是把OSI模型
上三层:应用层,表示层,会话层封装为应用层,
下两层:数据链路层和物理层封装成网络接口层,
(七层模型中的网络层对应TCP/IP四层协议的应该是网际层);
至于五层协议则是折中的说法,再把网络接口层重新划分回物理层和数据链路层。

功能协议这一块我们简述五层协议就好了,较为全面也不难记住~

物理层:向传输介质承载物理信号的转换,实现物理信号的发送和接收;
数据链路层:建立逻辑上的数据链路,在数据链路上实现数据的点到点或点到多点的直接通信;
网络层: 根据数据中包含的网络层信息,实现数据从任何一个节点到另外一个节点的传输过程;
传输层:建立,维护和撤销一次端到端的数据传输过程
应用层:为用户软件提供丰富的系统端口

二.TCP和UDP的区别

经典八股文,一般我会通过联想二者应用场景的区别,再对应的进行拓展
TCP大多应用于文件传输场景
UDP大多用于实时应用,比如IP电话,线上视频会议
所以很容易联想到:

  1. TC是面向连接,UDP是无连接的

  2. TCP是可靠连接,通过TCP传输的数据无差错,不丢失,不重复且按序到达;UDP是尽最大努力交付,不保证可靠传输

  3. TCP面向字节流,即把数据当做一连串的字节流;UDP是面向报文的

  4. TCP是全双工可靠信道,只能是点到点的TCP连接;UDP是不可靠信道,支持一对多,一对一,多对多,多对一;

三.TCP通过什么来保证可靠传输?

答:流量控制,拥塞控制,自动重传和停止等待协议

停止等待协议?
意思是发送方每发送一个报文分组就停止发送,等待直到收到确认再发送下一组分组;如果发送方超过一段时间仍然没有收到确认,就会重传前面发送的分组报文段;如果接收方收到了重复的分组,就丢弃掉,但是也要发送对应的确认。

自动重传请求ARQ,连续ARQ协议
超时重传需要维护一个超时重传计时器,重传时间应该比平均的往返时间要长。这种自动重传方式叫做自动重传请求ARQ。
连续ARQ协议是说发送端维护一个发送窗口,在发送窗口内的数据可以连续发送,而不是收到确认才一个一个发送。接收端也采用累计确认,直到收到最后一个连续报文段才发送确认,表示数据已经全部到达,这样就大大提高了传输效率。

TCP通过什么来实现流量控制
TCP通过滑动窗口来实现流量控制;流量控制是控制发送方的发送速率,保证接收方来得及接收;
滑动窗口
因为TCP是全双工可靠信道,a给b发数据,a有发送缓冲区,b有接收缓冲区,而发送窗口是发送缓冲区的一部分;
发送缓冲区分为4个部分,抽象的从左往右分别是:

  • 已发送并收到确认数据的数据区
  • 已发送但未收到确认的数据区
  • 允许发送但未发送的数据区
  • 不允许发送的数据区

中间部分就构成了我们的滑动窗口;每次成功发送数据后,窗口就会在发送缓冲区顺序移动,把新的数据包含进滑动窗口;
流量控制
建立连接后,b会告诉a自己的接收窗口大小;并且每次回复确认数据包(ACK)也会告诉自己的接收窗口大小,这样a就会调整自己的发送数据窗口大小;如果b说自己接收缓冲区满了,那么a就会停止发送;
一旦接收缓冲区有空位,b就会通知a,a重新开始发送数据;但是如果b通知a打开发送窗口的这个消息丢失了,就会出现死锁(b在等a发送数据,a在等b通知打开发送窗口);所以还引入了一个持续定时器,a每个一段时间都会尝试发送数据,看看b有没有响应

讲讲拥塞控制和对应的算法?

在某段时间内,对网络资源的需求超过了该资源的最大可用部分,网络性能就要变坏,这种情况就叫做拥塞,直白的说就是网络数据量超过带宽,“堵车了”;

拥塞控制就是防止过多的数据注入到网络中;

为了进行拥塞控制,TCP发送方要维持一个拥塞窗口(cwnd)的状态变量。拥塞窗口的大小取决于网络的拥塞程度并且动态变化。发送方让自己的发送窗口取 拥塞窗口大小接收方接收窗口大小较小的一个。

拥塞控制采用了四种算法:慢开始和拥塞避免,快重传和快恢复

慢开始和拥塞控制
发送方维护了一个慢开始门限ssthresh状态变量
1.当cwnd<ssthresh时,使用慢开始算法
2.当cwnd>ssthresh时。使用拥塞避免算法
假设发送窗口足够大,也就是说拥塞窗口的大小决定了发送窗口的大小;一轮代表一次往返;
一开始cwnd的值设为1,使用慢开始算法,一次往返后把cwnd的值设为2,第二次往返后把cwnd的值设为4,也就是说每次往返都会cwnd的值加倍

直到cwnd达到慢开始门限ssthresh,改用拥塞避免算法,一次往返cwnd的值加一;如果某次往返中,返回的数据有丢失,并重传计时器超时,发送方就判断网络出现了拥塞。

然后把ssthresh设为当前拥塞状态下的cwnd值的一半,再重设cwnd为1,开始新的慢开始算法。

快重传和快恢复(对前面两种算法的优化)
有时网络中个别报文丢失,但是实际网络中并没有出现拥塞,这就导致:
1.发送方超时重传,错以为发生了网络拥塞
2.错误的把cwnd重设为1,ssthresh也小于实际拥塞状态下cwnd的一半,降低了发送效率。

快重传:就是让发送方尽快重传,而不是等超时重传计时器超时再重传。
要求
1.接收方收到数据要立即发送确认,不是在自己发送数据时才捎带确认
2.接收方收到了失序的数据报文段,也要发送自己已收到报文段的重复确认
3.发送方收到三次的重复确认时,就把对应报文段立即重传,而不是等超时重传计时器超时再重传。
在这里插入图片描述快恢复:发送方一旦收到三个重复确认,就知道只是丢失了个别报文段,就不启动慢开始算法,而是使用快恢复算法;
1.一种是发送方把慢开始门限值ssthresh和拥塞窗口cwnd调整成当前的一半,然后执行拥塞避免算法;
2.一种是直接将快恢复开始前的拥塞窗口cwnd值增大些(新的ssthresh+3);可以理解为这三个报文段不是堵塞在网络中,而是丢失了,所以网络空间增大,对应的拥塞窗口也可以增大些

暂时就写这么些,篇幅太长也会让人失去读下去的欲望,希望能对大家有所帮助,加油!!

一直做下去,事情会变得不同~

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值