高频面经汇总:https://blog.csdn.net/qq_40262372/article/details/116075528

五、计算机网络

5.1  OSI与TCP/IP各层的结构与功能,都有哪些协议?

其中表示层和会话层都会归结到应用层,从下到下的层级解释:

5.1.1 应用层

应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的应用进程间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,比如域名系统DNS,万维网的HTTP协议,邮件系统的SMTP协议。我们把应用层交互的数据称为报文

5.1.2运输层

运输层的主要任务就是负责向两台主机进程之间的通信提供通用数据传输服务。应用进程利用该服务传送应用层报文。“通用”是指并不是针对某一个特定的网络应用,而是多种应用可以使用同一个运输服务。由于一台主机可以同时运行多个线程,因为运输层有复用和分用的功能。复用:多个应用进程可以同时使用下面运输层的服务;分用;运输层把收到的信息分别交付上面应用层中的相应进程。

主要协议:TCP,UDP

5.1.3网络层

在计算机网络中进行通信的两个计算机之前会有很多个数据链路,所以网络层的任务就是选择合适的网间路由交换结点,确保数据及时传输 。在发送数据的时候,网络层会把运输层的报文段或用户数据封装成组或包进行传送。由于网络层使用IP协议,因此分组也叫IP数据报,简称数据报。

网络层协议是无连接的网际协议和许多路由选择协议,因此互联网的网络层也叫网际层或IP层。

  疑问:有了运输层为什么还要网络层?

应用之间的通信与设备之间的通信是两件事。 应用的通信是怎么将应用数据合适、安全的到达目的地。 设备的通信是一个封包到了一个路由器怎么传递到另外一个设备去,解决的是更具体的一个问题。

5.1.4数据链路层

数据链路层是因为两台主机之间传输数据的时候,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。数据链路层就会把网络层的IP数据报封装成,在两个节点间的链路上传送帧。

在接受数据的时候,控制信息使接收端知道从哪个比特开始读取,哪个比特读取完毕。这样,数据链路层在收一个一个帧后,就可从中提出数据部分,上交给网络层。还可以利用控制信息进行差错检验。

5.1.5物理层

在物理层上所传送的数据单位是比特。

物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。透明传送就是说,传输的过程中,我的比特流是不变的,相当于实际电路是不存在的。

5.2  TCP三次握手和四次挥手

5.2.1 三次握手

TCP是运输层的协议,所以该协议为了保证运输的准确性。然后进行三次握手。

SYN(确认发送到接收):同步序列编号,是TCP/IP建立连接时使用的握手信息。

ACK(确认接收到发送):确认字符,表示发来的数据已经确认无误。

既然是传输的TCP报文,那么我们来看看TCP报文长什么样子!

第一次客户端发送:客户机发起连接请求,将SYN(同步序列编号)位设置为1,同时客户端选择了一个初始序列号x,并存在TCP报文段的序号中。

第二次服务端发送:服务端接收到该报文后,会为其分配TCP缓存和变量(这使得TCP容易受到SYN洪泛攻击的拒绝服务攻击),服务端会返回一个报文到客户端,其中SYN标志号为1,ack置1,确认号设置为x+1。然后并选一个自己的初始序列号y,放置到序号字段中。

第三次客户端发送:客户端收到服务端发来的报文后,客户端也要给该链接分配缓存和变量,然后再次发送一个确认报文给服务端,其中SYN置0,ack置1,将确认号设置为y+1,另外该报文段是可以携带数据:

5.2.1.1 为什么是三次握手

三次握手的目的是建立可靠的通信信道,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

5.2.1.2 为什么要传回SYN

接收端传回发送端所发送的SYN是为了告诉发送端,我接收到的信号信息确实就是你所发送的信号。

5.2.1.3 传SYN,为什么还要传ACK

双方通信无误必须是两者互相发送信息都无误。传了SYN,证明发送端发到接收方的通道没有问题,但是接收端到发送端的通道还需要ACK信号来进行验证。

5.2.1.4 第三次握手失败后,怎么办

如果第三次失败,过了超时计时器,服务端会重新发第二次的报文,要求客户端重传第三次报文,默认是5次,如果默认次数到了,还没有的话。服务端就关闭连接。

5.2.1.5知道SYN攻击吗?如何防范?

SYN洪泛攻击就是利用第一次握手报文,服务器会为客户端请求分配缓存,那么黑客就可以利用假的ip疯狂去建立TCP连接,服务器会不断缓存,把服务器的连接资源消耗完。

服务器有SYN Cookie进行有效防御。当第一次报文来的时候,不给缓存,然后把第二次报文发给你客户端,客户端返回第三次报文的时候,检查无误,才建立具有套接字的全开的连接。但是有个缺点,第三次握手失败后,因为没有缓存,所以会重新三次握手。

5.2.2 四次挥手

第一次发报文:客户端发起连接释放的请求,设置FIN为1,序号会随机算出u;发送完毕后,客户端进入FIN-WAIT-1状态。

第二次发送报文:服务端接收到FIN报文后,会返回一个ACK报文,将ACK设置1,确认号为u+1;表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。发送完毕后,服务端会进入CLOSE-WAIT状态,客户端接受到这个确认包之后,进入FIN-WAIT-2状态,等待服务器端关闭连接

第三次报文:服务端准备好进行关闭时,想客户端发送一个结束连接请求,FIN置为1;发送完毕后,服务端进入LAST-ACK状态,等待来自客户端的最后一个ACK;

第四次报文:客户端收到第三次报文,知道服务器已经准备好关闭,客户端发送一个确认包,并进入TIME-WAIT状态,等待可能出现的要求重传的ACK报文;服务端收到这个确认包后,关闭连接,进入CLOSE状态;

客户端等待了某个固定时间之后(2倍最大段周期),没有收到服务器的ACK,认为服务端已经正常关闭,于是自己也关闭连接,进入CLOSE状态。

5.2.2.1 四次挥手重要的是TIME-WAIT状态,为什么需要这个状态呢?

要确保服务器是否收到了我们的ACK报文,如果没有收到的话,服务器会重新发FIN报文给客户端,那么客户端再次收到FIN报文之后,就知道之前的ACK报文丢失了,就会再次发送ACK报文。

5.2.2.2为什么握手只要三次,挥手要四次

关键在于中间两步。

当客户端发了第一次报文的时候,服务端先告诉客户端你那边的关闭请求我收到了。但是我这边还有一些资源,你等等我。 然后当服务端传完资源后,在发一个FIN报文,说我这边有可以关闭了。所以这里会多一次服务端准备好关闭的流程。

5.2.2.3 为什么TIME_WAIT状态需要经过2MSL才能转换到CLOSE状态

2MSL是一个发送和一个回复所需要的最大时间。

5.3 TCP和UDP协议的区别

简化

5.4  TCP协议如何保证可靠传输

1.应用数据被分割成TCP认为最适合发送的数据块

2.TCP给发送的每一个包编号,接收方对数据包进行排序,把有序数据传送给应用层。

3.校验和:这是端到端的校验和,目的是检验数据在传输过程中的任何变化。如果变化,就不接受

4.TCP的接收端会丢弃重复的数据

5.流量控制:TCP连接的每一方都有固定的缓冲空间,TCP的接收端值允许发送端发送接收端能够接纳的数据。

6.拥塞控制:当网络拥塞时,减少数据的发送。

7.ARQ协议:每发完一个分组就停止发送,等待对方确认。收到确认后再发下一个分组。

8.超时重传:TCP发出一个段,会启动一个定时器,没有及时收到一个确认,会重新发。

5.5  ARQ协议

自动重传请求是OSI模型中数据链路层和传输层的错误纠正协议之一。他通过使用确认超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送一段时间之内没有收到确认帧,它通常会重新发送。

5.6 滑动窗口和流量控制

TCP利用滑动窗口实现流量控制流量控制是为了控制发送方发送速率,保证接收方来得及接受。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为0,则发送方不能发送数据。

5.7 拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。

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

TCP的拥塞控制采用了四种算法,慢开始、拥塞避免、快重传、快恢复。

慢开始:先从小到大逐渐增大发送窗口

拥塞避免:拥塞窗口慢慢变大

快重传和快恢复:他能够快速恢复丢失的数据包,服务端发给客户端报文的时候,是不对的,然后这边客户端有了FRR,就会让他重复确认,如果受到了三个重复确认,他会假定数据段丢失,直接重传这些丢失的,就不需要等待计时器过时。

5.8 在浏览器输入url地址->显示主页的过程

简单来说这几步:

1.DNS解析(域名解析)

2.TCP连接

3.发送HTTP请求

4.服务器处理请求并返回HTTP报文

5.浏览器解析渲染页面

6.连接结束

5.9 状态码

5.10 各种协议与HTTP协议之间的关系

5.11 HTTP长连接,短连接

在HTTP/1.0中默认使用短连接。客户端和服务器每一次Http操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源,每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,TCP连接不会关闭,客户端再次访问服务器的时候,会继续使用已经建立好的连接,但是也不是永久保持,有一个保持时间。

5.12 HTTP是不保存状态的协议,如何保存用户状态?

HTTP是一种不保存状态,即无状态协议。也就是说HTTP协议自身不对请求和响应之间的通信状态进行保存。

Session机制的存在就是为了解决这个问题,Session的主要作用就是通过服务端记录用户的状态。经典的场景是购物车,当你要添加商品到购物车的时候,系统不知道是那个用户擦欧洲哦的,因为HTTP协议是无状态的。服务端给特定的用户创建特定的Session之后就可以表示这个用户并且跟踪这个用户。

保存Session的方法很多,最常用的就是内存和数据库(内存是redis保存)

如果Cookie禁用了,可以通过URL重写把SessionID附加到URL路径的后面。

5.13 Cookie的作用是什么?和Session有什么区别?

Cookie和Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。

Cookie一般通过客户端用来保存用户信息:

1.我们在Cookie中保存已经登录过得到用户信息,下次访问网页的时候页面可以自动帮你登录一些基本信息。

2.还可以用作保持登录,下次在访问的时候不需要重新登录。因为用户登陆的时候我们存放了一个Token在Cookie中,下次登陆的时候只需要根据Token值来查找用户即可(为了安全考虑,是被重写了的)

Session的主要作用就是通过服务端记录用户的状态:

1.经典例子就是购物车,当你要添加商品到购物车,系统不知道那个用户操作的,因为HTTP协议是无状态的。服务端给特定的用户创建完Session后就可以标识用户并跟踪这个用户了。

5.14 HTTP各代版本增加的功能

5.14.1 HTTP/0.9

采用的纯文本,只是验证Web服务的可用性

5.14.2 HTTP/1.0

1.增加了HEAD、POST等新方法

2.增加了响应状态码,标记可能的错误原因

3.引入了协议版本号概念

4.引入了HTTP Header的概念,让HTTP处理请求和响应更加灵活

5.传输的数据不再仅限于文本

5.14.3 HTTP/1.1

1.增加了PUT、DELETE等新的方法;

2.增加了缓存管理和控制;

3.明确了连接管理,允许持久连接;

4.允许响应数据分块,利于传输大文件;

5.强制要求Host头,让互联网主机托管成为了可能。

5.14.4 HTTP/2

1.二进制协议,不再是纯文本

2.可发起多个请求,废弃了1.1里的管道

3.使用专用的算法压缩头部,减少数据传输量

4.允许服务器主动向客户端推送数据

5.增强了安全性,要求加密通信

5.14.4 HTTP/3

HTTP/2对前面性能已经增加了很多了,但是有一个局限在于:TCP。

因为2中采用了多路复用的TCP,采用一个TCP去传输多个资源,如果其中一个资源丢了,那么整个资源都需要重新传,这样一来,可能性能还没有1.x的好。因为1.x是每个资源一个TCP,所以丢那个就直接重传那个即可。

3 出来就是解决这个问题,3 使用UDP的QUIC协议。

QUIC协议有三个新功能:

①多路复用:但是基于UDP的,就算其中有一个资源丢包,也不需要把全部资源重传,只需要单独传被丢失的那个包。

②加密认证的报文:因为TCP协议头部没有任何加密和认证,所以在传输过程中容易被中间网络设备篡改,注入和窃听。QUIC将所有报文头、报文Body都经过加密,只要对QUIC报文有任何修改,接收端都能及时发现。

③向前纠错:传输的每个数据包都包含了其他数据包的数据,如果其中一个丢包了,可以从其他包的冗余数据直接组装而无需重传。但是出现丢了多个包,也只有重传。

5.15 URI和URL的区别是:

URI(Uniform Resource Identified)是统一资源标志符,可以唯一表示一个资源。

URL(Uniform Resource Location)是统一资源定位符,可以提供该资源的路径。它是一种URI,即URL可以用来标识一个资源,而且还指明了如何定位这个资源。

5.16 HTTP和HTTPS的区别

1.端口:

HTTP的默认端口是80,HTTPS的默认端口是443。

2.安全性和资源消耗:

HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,所有传输的内容都经过加密,加密采用对称加密,但对称加密是的密匙用服务器方的证书进行了非对称加密。所以说,HTTP安全性没有HTTPS高,但是HTTPS比HTTP消耗更多服务器资源。

对称加密:密匙只有一个,加密解密为同一个密码,加解密的速度快。算法有DES、AES等。

非对称加密:密匙成对出现(公钥无法推知私钥,根据私钥无法推知公钥),加密解密使用不同密匙(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,非对称加密算法RSA

JAVA高频面试题:

https://blog.csdn.net/qq_40262372/article/details/112556249

B站视频讲解如何三个月学习JAVA拿到实习Offer:

https://www.bilibili.com/video/BV1dV411t71K

如果想要在学习的道路上和更多的小伙伴们交流讨论

请加Q群:725936761

欢迎每一位小伙伴的加入

我们一起朝着目标加油!冲锋陷阵!

想要了解更多请关注微信公众号:万小猿  

回复“计算机网络”即可获取原文PDF文件

                 

面试必掌握之计算机网络相关推荐

  1. 10 道大厂面试必考的计算机网络问题-陶辉 极客时间

    大厂中更多会考察你的长板. 在大厂中要学会求助 1.TCP的三次握手机制,为什么要三次? 为什么需要握手? 需要同步序列号,当然也有MSS(最大报文段长度),滑动窗口. 为什么是3次? 正常想法应该是 ...

  2. 计算机网络八股文-面试必问

    搬运–面试必问计算机网络 原博客链接:https://www.nowcoder.com 每次面试问网络都还可以,整理了点资料,应付普通的问题没什么问题了. 除了字节的网络太为难人,其他公司都说回答的很 ...

  3. 面试必会系列 - 5.2 详解OSI模型与七层协议,网络TCP/IP基础,三次握手、四次挥手等

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  4. 面试必考的网络协议相关题目应该如何回答

    转载自  面试必考的网络协议相关题目应该如何回答 最近,正处于校招季.很多小伙伴已经拿到了如愿以偿的Offer,有些小伙伴还在努力着. 平常,也会有一些粉丝会在公众号留言,或者在微信上问我一些面试题. ...

  5. 【BATJ面试必会】JAVA面试到底需要掌握什么?【下】

    [BATJ面试必会]JAVA面试到底需要掌握什么?[下] 非对称加密,对称加密 对称加密(Symmetric Cryptography),又称私钥加密 对称加密是最快速.最简单的一种加密方式,加密(e ...

  6. 数据结构面试题(史上最全面试题,精心整理100家互联网企业,面试必过)

    最全面试题,精心整理100家互联网企业面经,祝你面试成功.面试必过(2023优化版)已发布在个人微信公众号[面向Offer学编程],优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结, ...

  7. 计算机考研复试面试常问问题 计算机网络篇(上)

    计算机考研复试面试常问问题 计算机网络篇(上) 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更 ...

  8. Linux 面试题(史上最全面试题,精心整理100家互联网企业,面试必过)

    最全面试题,精心整理100家互联网企业面经,祝你面试成功.面试必过(2023优化版)已发布在个人微信公众号[面向Offer学编程],优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结, ...

  9. MongoDB面试题(史上最全面试题,精心整理100家互联网企业,面试必过)

    最全面试题,精心整理100家互联网企业面经,祝你面试成功.面试必过(2023优化版)已发布在个人微信公众号[面向Offer学编程],优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结, ...

  10. Spring、Spring MVC、Spring boot、Spring Cloud面试题(史上最全面试题,精心整理100家互联网企业,面试必过)

    最全面试题,精心整理100家互联网企业面经,祝你面试成功.面试必过(2023优化版)已发布在个人微信公众号[面向Offer学编程],优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结, ...

最新文章

  1. 文档型数据库列一般都是弱项
  2. (Java集合框架)Map集合
  3. 真正意义的Anchor-Free,FCOS目标检测算法了解一下
  4. mysql win10 5.5_win10上MySql5.5版本升级到5.7
  5. Err CLSU-00104: additional error information: need ha priv
  6. 80×86汇编常用指令
  7. MySQL数据库 : 基本语句
  8. 如何用C#+WinRAR 实现压缩 分类:
  9. 解密360黑幕:离职奇虎360老员工的告白
  10. ios计算机错误,用iTunes更新IOS14失败,显示发生未知错误(4000)的简单解决办法!...
  11. mac版caj阅读器怎么删除标注_CAJViewer for mac-caj阅读器Mac版下载 V1.5-PC6苹果网
  12. android连接雷电模拟器,android studio连接雷电模拟器 【AS 模拟器】
  13. - **体感试衣镜等功能代码工程分享**
  14. 信捷服务器Z相信号,信捷plc标记与中断处理小知识
  15. 软件架构设计系列总结—写在前面
  16. 老毛桃重启计算机没反应,老毛桃怎么用
  17. Nreal MR眼镜开发入门教程
  18. cadence SPB17.4 - allegro - 手工放置过孔
  19. Oracle版本升级后引出的catalog连接问题
  20. Power BI-销售业绩分析展示

热门文章

  1. 无线AP与无线路由器都有些什么区别?(二)
  2. 天梯赛L2-10:排座位
  3. dns遭到劫持_关于网站pr劫持的问题,PR劫持是如何实现的呢?
  4. keil 函数最多可以传几个参数_Keil C51中如何让一个函数返回多个值?我把数组指针传入函数中,但发现编译后DATA区会随...
  5. 两台服务器安装redis集群_高性能分布式存储服务Minio安装配置入门
  6. 大数斐波那契数列(nyoj655)光棍的yy
  7. dedecms设置端口号_织梦程序使用宝塔面板端口修改方法
  8. 【洛谷P3366】最小生成树(kruskal模版题+prim链式加边)
  9. mysql where 中能否使用update_mysql – 可以在WHERE中执行UPDATE子句吗?
  10. AI 最新突破集锦 AI的瓶颈和进展 AI控制核聚变 AI预测蛋白质3D结构 Alpha Fold2 AI证明数学公式 自动驾驶 AI替代的硬件