网络通信面试题详细解答

网络通信协议概念

网络通信协议,为连接不同操作系统和不同硬件体系结构的互联网络引提供通信支持,是一种网络通用语言。它把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机。

在这里插入图片描述
上图链接: 计算机网络中的七层模型

面试题总结


网络协议


1.TCP与UDP的区别

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

7、UDP传输速度快、操作简单、要求系统资源较少,由于通讯不需要连接,可以实现广播发送;UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,也不重复发送,不可靠。

8、TCP是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次挥手。那么它的优点在于数据传递时,有确认、窗口、重传、阻塞等控制机制,能保证数据正确性,较为可靠。缺点是相比于UDP速度会慢,要求资源也比较多。

9、还有用内部结构的图来说明区别的,但我仅仅应付面试,背出前面四点以上差不多

2. 什么是HTTP,它与上面的两种有啥关系

HTTP全称是HyperText Transfer Protocol,即:超文本传输协议,从1990年开始就在WWW上广泛应用,是现今在WWW上应用最多的协议, Http是应用层协议,当你上网浏览网页的时候,浏览器和Web服务器之间就会通过HTTP在Internet上进行数据的发送和接收。Http是一个基于请求/响应模式的、无状态的协议。即我们通常所说的Request/Response。

TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议。
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。

3. 能不能讲讲HTTP请求与响应的组成与相应的状态码

这个之前有写过: HTTP请求与响应组成与正则解析总结

状态码LABEL解释
200OK请求成功接收并处理,一般响应中都会有 body
201Created请求已完成,并导致了一个或者多个资源被创建,最常用在 POST 创建资源的时候
202Accepted请求已经接收并开始处理,但是处理还没有完成。一般用在异步处理的情况,响应 body 中应该告诉客户端去哪里查看任务的状态
204No Content请求已经处理完成,但是没有信息要返回,经常用在 PUT 更新资源的时候(客户端提供资源的所有属性,因此不需要服务端返回)。如果有重要的 metadata,可以放到头部返回
301Moved Permanently请求的资源已经永久性地移动到另外一个地方,后续所有的请求都应该直接访问新地址。服务端会把新地址写在 Location 头部字段,方便客户端使用。允许客户端把 POST 请求修改为 GET。
304Not Modified请求的资源和之前的版本一样,没有发生改变。用来缓存资源,和条件性请求(conditional request)一起出现
307Temporary Redirect目标资源暂时性地移动到新的地址,客户端需要去新地址进行操作,但是不能修改请求的方法。
308Permanent Redirect和 301 类似,除了客户端不能修改原请求的方法
400Bad Request客户端发送的请求有错误(请求语法错误,body 数据格式有误,body 缺少必须的字段等),导致服务端无法处理
401Unauthorized请求的资源需要认证,客户端没有提供认证信息或者认证信息不正确
403Forbidden服务器端接收到并理解客户端的请求,但是客户端的权限不足。比如,普通用户想操作只有管理员才有权限的资源。
404Not Found客户端要访问的资源不存在,链接失效或者客户端伪造 URL 的时候回遇到这个情况
405Method Not Allowed服务端接收到了请求,而且要访问的资源也存在,但是不支持对应的方法。服务端必须返回 Allow 头部,告诉客户端哪些方法是允许的
415Unsupported Media Type服务端不支持客户端请求的资源格式,一般是因为客户端在 Content-Type 或者 Content-Encoding 中申明了希望的返回格式,但是服务端没有实现。比如,客户端希望收到 xml返回,但是服务端支持 Json
429Too Many Requests客户端在规定的时间里发送了太多请求,在进行限流的时候会用到
500Internal Server Error服务器内部错误,导致无法完成请求的内容
503Service Unavailable服务器因为负载过高或者维护,暂时无法提供服务。服务器端应该返回 Retry-After 头部,告诉客户端过一段时间再来重试

4. HTTP的通讯原理是什么?(三次握手四次挥手原理)

找了三篇很到位的回答,这个题目算是重点中的重点,我就不说已经吃过两次亏了,最好是把原理全部背出来而不仅仅是步骤,否则真的哭都没地方。。

TCP的三次握手与四次挥手(详解+动图)

TCP三次握手和四次挥手过程

关于三次握手和四次挥手,面试官想听到怎样的回答?

5. HTTP和HTTPS有什么区别?

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。


更多区别与解释看此链接: http 和 https 有何区别?如何灵活使用?

6. HTTPS的原理以及加密流程

这个问题是和上面HTTP的问题一起抛出来的,那既然都问了前者,不知道这个有啥意义,可能面试官的意思是更倾向于后者,然后我找到了一个知乎上一个话题:

用 HTTP 数据加密和 HTTPS 有什么区别?

以及加密后的三次握手与四次挥手:

7. 简述浏览器通过 WSGI 请求动态资源的过程

  1. 发送 http 请求动态资源给 web 服务器
  2. web 服务器收到请求后通过 WSGI 调用一个属性给应用程序框架
  3. 应用程序框架通过引用 WSGI 调用 web 服务器的方法,设置返回的状态和头信息。
  4. 调用后返回,此时 web 服务器保存了刚刚设置的信息
  5. 应用程序框架查询数据库,生成动态页面的 body 的信息
  6. 把生成的 body 信息返回给 web 服务器
  7. web 服务器吧数据返回给浏览器

8. 说说WSGI / uwsgi/ uWSGI 这三个的区别

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

要注意 WSGI / uwsgi/ uWSGI 这三个概念的区分。

  1. WSGI是一种通信协议。

  2. uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。


进程通信


1. 多进程和多线程

对比维度多进程多线程总结
数据共享、同步数据是分开的:共享复杂,需要用IPC;同步简单多线程共享进程数据:共享简单;同步复杂各有优势
内存、CPU占用内存多,切换复杂,CPU利用率低占用内存少,切换简单,CPU利用率高线程占优
创建销毁、切换创建销毁、切换复杂,速度慢创建销毁、切换简单,速度快线程占优
编程调试编程简单,调试简单编程复杂,调试复杂进程占优
可靠性进程间不会相互影响一个线程挂掉将导致整个进程挂掉进程占优
分布式适应于多核、多机分布 ;如果一台机器不够,扩展到多台机器比较简单适应于多核分布进程占优

2. 进程间通信方式与优缺点

1)管道
管道分为有名管道和无名管道
无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系一般指的是父子关系。无明管道一般用于两个不同进程之间的通信。当一个进程创建了一个管道,并调用fork创建自己的一个子进程后,父进程关闭读管道端,子进程关闭写管道端,这样提供了两个进程之间数据流动的一种方式。
有名管道也是一种半双工的通信方式,但是它允许无亲缘关系进程间的通信。

无名管道:优点:简单方便;缺点:1)局限于单向通信2)只能创建在它的进程以及其有亲缘关系的进程之间;3)缓冲区有限;
有名管道:优点:可以实现任意关系的进程间的通信;缺点:1)长期存于系统中,使用不当容易出错;2)缓冲区有限
2)信号量
信号量是一个计数器,可以用来控制多个线程对共享资源的访问.,它不是用于交换大批数据,而用于多线程之间的同步.它常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源.因此,主要作为进程间以及同一个进程内不同线程之间的同步手段.
优点:可以同步进程;缺点:信号量有限

3)信号
信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生.

4)消息队列
消息队列是消息的链表,存放在内核中并由消息队列标识符标识.消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点.消息队列是UNIX下不同进程之间可实现共享资源的一种机制,UNIX允许不同进程将格式化的数据流以消息队列形式发送给任意进程.对消息队列具有操作权限的进程都可以使用msget完成对消息队列的操作控制.通过使用消息类型,进程可以按任何顺序读信息,或为消息安排优先级顺序.

优点:可以实现任意进程间的通信,并通过系统调用函数来实现消息发送和接收之间的同步,无需考虑同步问题,方便;缺点:信息的复制需要额外消耗CPU的时间,不适宜于信息量大或操作频繁的场合

5)共享内存
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问.共享内存是最快的IPC(进程间通信)方式,它是针对其它进程间通信方式运行效率低而专门设计的.它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步与通信.

优点:无须复制,快捷,信息量大;缺点:1)通信是通过将共无法实现享空间缓冲区直接附加到进程的虚拟地址空间中来实现的,因此进程间的读写操作的同步问题;2)利用内存缓冲区直接交换信息,内存的实体存在于计算机中,只能同一个计算机系统中的诸多进程共享,不方便网络通信

6)套接字:可用于不同及其间的进程通信
优点:1)传输数据为字节级,传输数据可自定义,数据量小效率高;2)传输数据时间短,性能高;3) 适合于客户端和服务器端之间信息实时交互;4) 可以加密,数据安全性强
缺点:1) 需对传输的数据进行解析,转化成应用级的数据。

3. 线程间通信方式

与上一个问题都是来自同一篇博文,只不过这个问题我没遇到过,博文为: 进程线程面试题总结

4. 什么是io多路复用

IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:

  1. 当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。
  2. 当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。
  3. 如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。
  4. 如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用。
  5. 如果一个服务器要处理多个服务或多个协议,一般要使用I/O复用。

与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。

Restful

1. 讲讲restful规范

RESTful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。

REST是Representational State Transfer的缩写,是Roy Thomas Fielding在他2000年的博士论文中提出的。其提出的设计概念和准则为:

  1. 网络上的所有事物都可以抽象为资源

  2. 每个资源都应该有唯一的标识(identifier),对资源的操作不会改变标识

  3. 所有的操作都是无状态的

  4. 使用标准方法(GET、POST、PUT、PATCH、DELETE)操作资源

2. django restframework的相关组件有哪些

这个在我之前博客中有写到,有六篇,但其实远不止,我记得drf本身就有10个组件,加上或多或少的扩展,应该有十几个,然而我后来没有研究了,希望以后还有机会研究。

未完待续


参考与推荐:

[1]. socket编程

  • 10
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
OpenStack是一个开源云计算平台,由多个关键组件组成。其中一些主要组件包括: 1. Nova:用于管理虚拟机的计算级别操作,以及执行其他计算任务的计算或管理程序级别操作。 2. Neutron:为虚拟机、计算和控制节点提供网络功能。 3. Keystone:为所有云用户和OpenStack云服务提供身份认证服务。 4. Horizon:提供图形用户界面,可用于管理各种日常操作任务。 5. Cinder:提供块存储功能,通常集成了Chef和ScaleIO来为计算和控制节点提供块存储服务。 6. Swift:提供对象存储功能,镜像通常存储在对象存储空间中,也可以与外部存储(如ScaleIO)集成。 7. Glance:提供镜像服务,用于上传和下载云镜像。 8. Heat:提供编排服务,可将虚拟机作为堆栈管理,并根据需要进行扩展或收缩。 9. Ceilometer:提供计量和监控功能。 控制节点上通常运行以下服务:认证服务(Keystone)、镜像服务(Glance)、Nova服务(包括Nova API、Nova Scheduler和Nova DB)、块存储和对象存储服务、Ceilometer服务以及MariaDB/MySQL和RabbitMQ服务。计算节点上通常运行Nova计算和网络服务(如OVS)。 至于OpenStack面试题,这是一个很广泛的话题,这里给出一些例子: Q: OpenStack的主要组件是什么? A: OpenStack的主要组件包括Nova、Neutron、Keystone、Horizon、Cinder、Swift、Glance、Heat和Ceilometer等。 Q: Nova的作用是什么? A: Nova用于在计算级别管理虚拟机,并在计算或管理程序级别执行其他计算任务。 Q: 如何使用命令行启动一个虚拟机? A: 可以使用命令"openstack server create"来启动一个虚拟机,需要指定虚拟机的名称、镜像、flavor等参数。 Q: Glance镜像的默认地址是什么? A: Glance镜像存储在控制节点的/var/lib/glance/images文件夹下。 Q: 什么是Neutron代理?如何显示所有Neutron代理? A: Neutron代理是计算节点或网络节点上进行配置更新的软件实体,通过Neutron服务和消息队列与中心Neutron服务通信。可以使用命令"openstack network agent list"来显示所有Neutron代理。 这些是OpenStack面试题的一些例子,具体的面试题会根据面试官的需求和职位要求而有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Openstack 经典面试问题和解答](https://blog.csdn.net/weixin_42425141/article/details/108727381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

submarineas

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

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

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

打赏作者

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

抵扣说明:

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

余额充值