面试必掌握之计算机网络

高频面经汇总: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文件

                 

  • 12
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值