计算机网路常见面试题:

1、三次握手和四次挥手:

字段 含义
URG 紧急指针是否有效。为1,表示某一位需要被优先处理
ACK 确认号是否有效,一般置为1。
PSH 提示接收端应用程序立即从TCP缓冲区把数据读走。
RST 对方要求重新建立连接,复位。
SYN 请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1
FIN 希望断开连接。

四次挥手过程:

三次握手过程:

引申问题:

2、三次握手可以改为两次吗,为什么:

不可以;防止已经失效的请求连接报文又突然送到了,从而产生错误;
假定A向B发送一个连接请求,由于一些原因,导致A发出的连接请求在一个网络节点逗留了比较多的时间。此时A会将此连接请求作为无效处理 又重新向B发起了一次新的连接请求,B正常收到此连接请求后建立了连接,数据传输完成后释放了连接。如果此时A发出的第一次请求又到达了B,B会以为A又发起了一次连接请求,如果是两次握手:此时连接就建立了,B会一直等待A发送数据,从而白白浪费B的资源。 如果是三次握手:由于A没有发起连接请求,也就不会理会B的连接响应,B没有收到A的确认连接,就会关闭掉本次连接。

3、四次挥手的时候为什么要等待两个MSL:

MSL:任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

主动关闭方需要等待2MSL是为了,防止最后一次ACK没有被正确的传给被动方,被动关闭方会再次发送第三次的FIN信号。

4、为什么断开连接需要四次:

根据状态流程图,我们可以看出服务端响应断开连接的请求时,其ACK和FIN包并不是一起发送给客户端的,因为第一次由客户端->服务端的FIN信号表示的是客户端想要断开连接。服务端先给出ACK确认信号,表示已经收到FIN请求,TCP连接是全双工的连接,需要两方根据自身情况主动断开连接,所以当服务端(被动端)自己也可以结束的时候,再次发送FIN信号,所以需要挥手交互需要四次。

5、计算机网络分层:

  • 应用层:由用户自己规定,规定各个应用之间消息传递的形式等,包括各机互访协议,分布式数据库协议等。常见的应用层协议有HTTP协议和FTP等。

  • 表示层:在满足用户需求的基础上,尽可能的节省传输费用而设置的,比如传输压缩文件,jpeg或者加密文件等格式。

  • 会话层:用于建立和拆除会话。

  • 传输层:负责将来自会话层的消息传递给网络层,常见的传输层协议有TCP和UDP等协议。

  • 网络层:规定通信网内的路由选择等方式,建立用户间的信息报传输设施。常见的网络层协议有IP,ICMP以及ARP等协议。

  • 数据链路层:与建立数据传输链路相关。

  • 物理层:规定一些机电性能,也包括工作方式如双工、单工或半双工,建立通信的启动和终止等。

5、为什么要分层:

1)各层之间相互独立:高层是不需要知道底层的功能是采取硬件技术来实现的,它只需要知道通过与底层的接口就可以获得所需要的服务;

2)灵活性好:各层都可以采用最适当的技术来实现,例如某一层的实现技术发生了变化,用硬件代替了软件,只要这一层的功能与接口保持不变,实现技术的变化都并不会对其他各层以及整个系统的工作产生影响;

3)易于实现和标准化:由于采取了规范的层次结构去组织网络功能与协议,因此可以将计算机网络复杂的通信过程,划分为有序的连续动作与有序的交互过程,有利于将网络复杂的通信工作过程化解为一系列可以控制和实现的功能模块,使得复杂的计算机网络系统变得易于设计,实现和标准化

6、路由器的作用:

路由器Router)是一种计算机网络设备,提供了路由与转送两种重要机制,可以决定数据包从来源端到目的端所经过 的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转 送。路由工作在OSI模型的第三层——即网络层,例如网际协议。

路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。 路由器与交换器的差别,路由器是属于OSI第三层的产品,交换器是OSI第二层的产品(这里特指二层交换机)。

路由协议:

ARP的寻址必须是在同一个子网内,我们可以通过IP协议来确定是否是同一个子网。如果不是同一个子网,则通过网关将数据包多次转发到对应的子网中,完成这个路由协议的物理设备就是路由器。

7、交换机的作用:

交换机负责连接网络设备和终端设备;常用来构建局域网;

交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部 交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表 中。

交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张 ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不 能划分网络层广播,即广播域。

交换机被广泛应用于二层网络交换,俗称“二层交换机”。

交换机的种类有:二层交换机、三层交换机、四层交换机、七层交换机分别工作在OSI七层模型中的第二层、第三层、第四层盒第七层,并因此而得名。

8、IP协议和ARP协议:

IP协议制定了一套网络地址,也就是IP地址,根据IP协议能够区分两台主机是否同属一个网络(子网)。

根据IP地址获取MAC地址,将目标的IP地址在链路层进行包装,生成以太网数据包,在同一个子网内进行广播出去,各个主机拿到IP地址和自己的IP地址对比,若一样,则返回自己的MAC地址。注意,MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间。

9、TCP和UDP协议的区别?

TCP和UDP协议都是传输层常见的协议,它们的主要区别如下所示:

  • TCP协议进行数据通信之前需要三次握手建立连接,UDP协议不需要建立连接即可发送数据。
  • TCP有确认机制,丢包可以重发,保证数据的正确性;UDP不保证正确性,只是单纯的负责发送数据包。
  • TCP协议可能会对大数据包进行拆分,并且在接收方进行重组数据包操作;UDP协议是面向报文的,不会进行分片和重组,所以需要注意传输的报文大小。
  • 网络包中的TCP头部为20个字节;UDP头部只有8个字节。

10、超时重传机制:

超时重传机制主要是为了解决数据包在传输过程中丢失的问题。

TCP每发送一个报文段,就会为这个报文段开启一个定时器,如果定时器溢出时仍然没有收到接收端的应答报文,那么TCP就认为这个报文段在传输过程中丢失,然后重新发送这个报文段。这便是超时重传机制

举例:客户端请求发送”and hi”报文段时启动了定时器,然而在规定的时间内没有收到对端的回复,所以重新发送”and hi”报文段,并重启定时器(重启的定时器时间会增大)。

11、TCP的拥塞避免算法有哪些:

超时重传是为了解决数据丢失的问题,而数据丢失的原因很大程序上是由于传输路径拥塞导致的。

在正常的传输过程中,数据是从一个路由器跳到下一个路由器,每个路由器都有自己的缓冲区,新来的数据会存放在缓冲区中,与此同时路由器也在不断地将缓冲区中的数据发送给下一个路由器。但是如果某个路由器接收数据的速率大于发送数据的速率,就会导致缓冲区数据累积,最终填满缓冲区。此时如果再有数据到来,缓冲区已经无法容纳它们,只能将它们丢掉,造成数据丢失,这就是所谓的拥塞现象,本质就是传输路径上的节点不平衡。为了解决这一问题,就需要当出现拥塞现象时立即减少发送端发送的数据量,为路径上的某些节点提供清空缓冲区的时间,同时也避免了不必要的重传。

但是,发送端如何才能得知网络中发生了拥塞呢。因为由于硬件错误造成的数据丢失是很罕见的,所以发送端假定,如果出现了数据丢失,那么就可以认定发生了拥塞。

发送方维持一个叫做**拥塞窗口cwnd(congestion window)**的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口,另外考虑到接受方的接收能力,发送窗口应小于拥塞窗口。

拥塞避免算法主要有如下两种:

  • 慢启动+拥塞避免

慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。每次收到确认发送信号回传后,发送方就将拥塞窗口加倍,也就是乘法增长;为了避免无限制的窗口成倍增长,还需要设置一个慢开始的门限ssthresh状态变量,当cwnd<ssthresh时,使用慢开始算法,当cwnd>ssthresh时,改用拥塞避免算法;那么拥塞避免算法又是什么呢:拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口按线性规律缓慢增长。

无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认,虽然没有收到确认可能是其他原因的分组丢失,但是因为无法判定,所以都当做拥塞来处理),就把慢开始门限设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为1,执行慢开始算法。

  • 快重传+快恢复

快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。

快重传配合使用的还有快恢复算法,有以下两个要点:

  • 当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半。但是接下去并不执行慢开始算法
  • 考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。

12、TCP粘包:

TCP粘包是指一种发送方发送的数据包在接收方的缓冲区中粘成了一包,也就是出现了数据包首尾相接的现象。产生原因主要是发送方使用了Nagle算法,或者接收方的处理速度小于数据包的接收速度,导致接收缓冲区中消息堆积。可以通过关闭Nagle算法或者规定每个数据包的具体格式和长度,在接收方的应用层来进行判断;还有UDP是不会产生粘包现象的,因为数据包之间具有明确的消息保护边界。

13、PING,ICMP报文是什么:

PING (Packet Internet Groper),因特网包探索器,用于测试网络连通性的程序。

Ping发送一个ICMP(Internet Control Messages Protocol,因特网信报控制协议);回声请求消息给目的地并报告是否收到所希望的ICMPecho (ICMP回声应答)。

工作原理:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。

为了提高IP数据报交付成功机会,在网络层使用过了网际控制报文协议(ICMP)来允许主机或路由器报告差错和异常情况。ICMP报文作为IP层数据报的数据,加上数据报首部,组成IP数据报发出去。ICMP协议是IP层协议。

14、HTTP与HTTPS的区别:

  • HTTP是超文本传输协议,数据明文传输;HTTPS在HTTP的基础上加入了SSL协议,实现数据的加密传输;
  • HTTPS需要区申请证书,一般是收费的;
  • HTTP默认使用80端口,HTTPS默认使用443端口

HTTP协议:

HTTP是超文本传输协议,是一种无状态的协议,是常见的一种应用层协议。HTTP是一个通信规则,规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。

HTTP请求信息:HTTP请求头中可以看到当前请求支持的语言,压缩格式,编码格式以及何种类型的返回文件,Connection以及Cookie,Content-Type等信息。

HTTP返回信息:HTTP返回信息中包括响应协议,HTTP Code以及Content-Type,时间和Cookie等信息。

15、HTTP状态码:

  • 1xx(临时响应)
  • 2xx(成功)
  • 3xx(重定向):表示要完成请求需要进一步操作
  • 4xx(错误):表示请求可能出错,妨碍了服务器的处理
  • 5xx(服务器错误):表示服务器在尝试处理请求时发生内部错误

常见的HTTP状态码:

  • 200(成功)
  • 302 (重定向):请求重定向到指定网页
  • 304(未修改):自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容
  • 401(未授权):请求要求身份验证
  • 403(禁止):服务器拒绝请求(比如死循环了,一直访问)
  • 404(未找到):服务器找不到请求的网页
  • 405 (方法禁用):Post请求当成了Get请求直接访问
  • 500 (服务器内部错误):有bug导致程序嗝屁了
  • 502 (错误网关):服务器从上游接到了无效响应
  • 504 ( 网关超时):nginx请求超时,请求一直没有返回

16、SSL协议:

HTTPS协议在HTTP的基础上加入了SSL(安全套接字层)协议,SSL逐渐演变为了TLS协议,但是业界习惯仍然称其为SSL协议。

SSL协议在传输控制层的基础上建立了安全的连接,它作为一种通用可靠的安全解决方案,可与多种应用层协议结合使用,实现应用数据的安全传输。SSL协议分为记录协议,握手协议,警告协议和密码规范改变协议

记录协议:接收上层协议或下层协议的消息并进行一系列的处理,然后再将处理后的消息继续向下或向上传递。主要包括对消息进行加解密,压缩解压缩,分段或者重组等操作。

握手协议:建立在三次握手之后,为通信双方确立安全连接所需要的安全参数,通常也会在此阶段对通信双方身份的真实性进行验证。

警告协议:无论是在握手阶段还是在对应用层数据的传输阶段,都有可能出现差错。警告协议规定了在SSL协议工作过程中可能出现的差错、错误的严重等级以及相应的处理方式。

密码规范改变协议:在SSL握手刚开始的时候,加密参数还没确定,消息都是明文传送的。双方协商好加密参数之后,在发送握手结束消息之前,需要发送一个密码规范改变消息(Change Cipher Message)来通知对方随后的消息都使用刚刚协商好的加密算法和加密密钥进行加密。

17、HTTPS证书一定安全吗:

不一定,自签名的SSL证书不安全,自签名https证书因为不是由权威机构颁发,只要攻击者和用户或者网站服务器在同一网络下,那么攻击者就可以获取使用者的数据,获得用户信息。而且自签名证书还容易被伪造,

18、浏览器输入url之后,到网页响应的全过程:

  1. 导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下:

    • 浏览器缓存 :浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
    • 系统缓存 –:如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。
    • 路由器缓存 : 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
    • ISP DNS 缓存 :接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。
    • 递归搜索 :你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。
  2. 找到IP地址后,封装HTTP请求数据包,包括HTTP请求内容(主机名,请求方法,端口,协议,对象路径等信息),如果不是第一次访问,那么也可能包括存储在本机的cookie信息;
  3. 封装TCP数据包:将HTTP协议进一步封装成一个TCP数据包;
  4. 建立TCP连接:基于TCP的三次握手机制建立稳定可靠的数据连接;
  5. 客户端发送请求:建立连接后,客户端发送请求到服务器;
  6. 服务器响应:服务器在接收到请求之后,结合业务逻辑进行数据处理,然后向客户端返回响应的响应信息。响应信息包括状态行,版本协议号,响应状态码,响应正文等消息;
  7. 服务器端关闭TCP连接(如果有Connection:keep-alive就忽略这一步)

19、状态码详解:

状态码 说明 详情
100 继续 请求者应当继续提出请求。服务器已收到请求的一部分,正在等待其他部分
101 切换协议 请求者已要求服务器切换协议,服务器已确认并准备切换

成功响应

状态码 说明 详情
200 成功 服务器已成功处理了请求
201 已创建 请求成功并且服务器创建了新的资源
202 已接受 服务器已接受请求,但尚未处理
203 非授权信息 服务器已成功处理了请求,但返回的信息可能来自另一个源
204 无内容 服务器成功处理了请求,但没有返回任何内容
205 重置内容 服务器成功处理了请求,内容被重置
206 部分内容 服务器成功处理了部分请求

重定向

状态码 说明 详情
300 多种选择 针对请求,服务器可执行多种操作
301 永久移动 请求的网页已永久移动到新位置,即永久重定向
302 临时移动 请求的网页暂时跳转到其他页面,即暂时重定向
303 查看其他位置 如果原来的请求是POST,重定向目标文档应该通过GET提取
304 未修改 此次请求返回的页面未修改,继续使用上次的资源
305 使用代理 请求者应该使用代理访问该页面
307 临时重定向 请求的资源临时从其他位置响应

客户端错误

状态码 说明 详情
400 错误请求 服务器无法解析该请求
401 未授权 请求没有进行身份验证或验证未通过
403 禁止访问 服务器拒绝此请求
404 未找到 服务器找不到请求的页面
405 方法禁用 服务器禁用了请求中指定的方法
406 不接受 无法使用请求的内容响应请求的页面
407 需要代理授权 请求者需要使用代理授权
408 请求超时 服务器请求超时
409 冲突 服务器在完成请求时发生冲突
410 已删除 请求的资源已永久删除
411 需要有效长度 服务器不接受不含有效内容长度标头字段的请求
412 未满足前提条件 服务器未满足请求者在请求中设置的其中一个前提条件
413 请求实体过大 请求实体过大,超出服务器的处理能力
414 请求URL过长 请求网址过长,服务器无法处理
415 不支持类型 请求格式不被请求页面支持
416 请求范围不符 页面无法提供请求的范围
417 未满足期望值 服务器未满足期望请求标头字段的要求

服务器端错误

状态码 说明 详情
500 服务器内部错误 服务器遇到错误,无法完成请求
501 未实现 服务器不具备完成请求的功能
502 错误网关 服务器作为网关或代理,从上游服务器收到无效响应
503 服务不可用 服务器目前无法使用
504 网关超时 服务器作为网关或代理。但是没有及时从上游服务器收到请求
500 服务器内部错误 服务器遇到错误,无法完成请求
501 未实现 服务器不具备完成请求的功能
502 错误网关 服务器作为网关或代理,从上游服务器收到无效响应
503 服务不可用 服务器目前无法使用
504 网关超时 服务器作为网关或代理。但是没有及时从上游服务器收到请求
505 HTTP版本不支持 服务器不支持请求中所用的HTTP协议版本

后端面试(一)计算机网络相关相关推荐

  1. 面试题:460道Java后端面试高频题答案版「模块九:Spring」

    Spring 写在前面 相信对于 Spring 这个模块,只要是做过 Java 开发的同学都是不陌生的,或多或少都使用过 Spring 体系的框架.对于平时自己做点小项目会写配置文件可能就行了,但是对 ...

  2. 后端开发面试自我介绍_一定是最适合你的后端面试指南

    原标题:一定是最适合你的后端面试指南 本文转自公众号:Java面试通关手册 友情提示:阅读+独立思考的方式学习本文效果最佳.本文干货较多,如果大家觉得不错请转发给可能需要本文的朋友哦!最后,不要忘记给 ...

  3. 《Java 后端面试经》Java 基础篇

    <Java 后端面试经>专栏文章索引: <Java 后端面试经>Java 基础篇 <Java 后端面试经>Java EE 篇 <Java 后端面试经>数 ...

  4. 后端面试八股文骚套路之Java基础

    一年一度的秋招大戏又快拉开序幕了,近年来后端岗位越来越卷,毕业生的压力也越来越大.个人感觉目前各个大中厂校招面试不好的地方是,都在朝着背面试八股文的方向发展(曾经面试某二线厂,对着面试官纯背了 40 ...

  5. 三年半Java后端面试经历

    转载自  三年半Java后端面试经历 经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于开始重拾面试信心,再次出征. 鹅厂 面试职位:go后端开发工程师,接受从Java转语言 都知道 ...

  6. JAVA后端面试100 QA之第一篇

    转载自  JAVA后端面试100 Q&A之第一篇 1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是可重入锁 不同点 实现机制不同 ...

  7. 深圳店小秘Java后端面试

    深圳店小秘Java后端面试 1.笔试 1.JDK.JVM.JRE.JIT是什么? JDK:Java Development Kit.是Java开发工具包,提供Java编程语言内库. JVM:Java ...

  8. EETOP版主后端面试问题 每日一题

    转载地址:版主个人空间 转载的csdn地址:csdn地址 后端面试–每日一题(084) Design 4-bit asynchronous counter? how to set timing con ...

  9. 《Java 后端面试经》微服务篇

    <Java 后端面试经>专栏文章索引: <Java 后端面试经>Java 基础篇 <Java 后端面试经>Java EE 篇 <Java 后端面试经>数 ...

  10. 2017 后端面试经历分享

    2017 后端面试经历分享 0.背景 博主本人 2015 年毕业于郫县某 985 大学通信工程系,因为大学期间一直自己创业所以错过了大四秋招春招,毕业后又在北京继续创业一年,但在创业公司一直无法沉淀技 ...

最新文章

  1. android 之Fragment(轻量级的Activity)详解
  2. 数字货币交易所源码_(数字货币交易所科普)开发数字货币交易所应该注意哪些问题...
  3. c java python html_如何通俗地解释 C、C++、C#、Java、JavaScript、HTML、Python的用处
  4. 敏捷方法在测试计划中的应用
  5. Leetcode-204 Count Primes
  6. 收购YY直播,百度重返高位的关键布局
  7. android智能手机发展,2011 LG Android智能手机发展蓝图
  8. 学点PYTHON基础的东东--数据结构,算法,设计模式---观察者模式
  9. TexturePacker 图片打包工具讲解与使用并且批处理打多包以及资源加密
  10. 微信翻译助手小程序 day2 -翻译功能页
  11. inter uhd graphics630显卡驱动_极为全面的!从零开始的!小白都能看懂的!硬件科普#4 显卡选择篇...
  12. Matlab读取图像数据并写入TXT
  13. 检查服务器端口占用,服务器中如何检查端口是否开放
  14. 怎么理解——用户不是人
  15. Auto-encoder(自编码器)的原理及最新的技术应用(李宏毅视频课整理和总结)
  16. IDEA 官方最认可的神级框架!SpringBoot 已成气候!
  17. 意云丰盘点:那些令网赚者疯狂的时代
  18. 2021年新能源汽车行业造车新势力专题研究报告
  19. 2022春季中国餐厅周来了!集结16大城市600余家高端食府饕餮飨宴
  20. Python-模拟鼠标键盘动作

热门文章

  1. 【黑马程序员pink老师前端】HTML
  2. Scratch少儿编程与游戏:圣骑士之魔法森林
  3. 计算机临时保存信息,Windows临时文件夹是什么,Windows临时文件夹保存位置在哪里?...
  4. 什么是深浅拷贝?如何实现深浅拷贝
  5. 小心! Java三目运算符
  6. Spring Data Rest学习篇----@Projection
  7. 倒计时c#/unity
  8. android 带刻度的滑动条_Android实现自定义滑动刻度尺方法示例
  9. 你是否还记得自己的手机号在哪些网站上面注册过呢?
  10. Flink Interval Join Left Join