网络通信面试题详细解答
- 网络通信协议概念
- 面试题总结
- 网络协议
- 1.TCP与UDP的区别
- 2. 什么是HTTP,它与上面的两种有啥关系
- 3. 能不能讲讲HTTP请求与响应的组成与相应的状态码
- 4. HTTP的通讯原理是什么?(三次握手四次挥手原理)
- 5. HTTP和HTTPS有什么区别?
- 6. HTTPS的原理以及加密流程
- 7. 简述浏览器通过 WSGI 请求动态资源的过程
- 8. 说说WSGI / uwsgi/ uWSGI 这三个的区别
- 进程通信
- 1. 多进程和多线程
- 2. 进程间通信方式与优缺点
- 3. 线程间通信方式
- 4. 什么是io多路复用
- Restful
- 1. 讲讲restful规范
- 2. django restframework的相关组件有哪些
- 未完待续
网络通信协议概念
网络通信协议,为连接不同操作系统和不同硬件体系结构的互联网络引提供通信支持,是一种网络通用语言。它把网络从逻辑上分为了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 | 解释 |
---|---|---|
200 | OK | 请求成功接收并处理,一般响应中都会有 body |
201 | Created | 请求已完成,并导致了一个或者多个资源被创建,最常用在 POST 创建资源的时候 |
202 | Accepted | 请求已经接收并开始处理,但是处理还没有完成。一般用在异步处理的情况,响应 body 中应该告诉客户端去哪里查看任务的状态 |
204 | No Content | 请求已经处理完成,但是没有信息要返回,经常用在 PUT 更新资源的时候(客户端提供资源的所有属性,因此不需要服务端返回)。如果有重要的 metadata,可以放到头部返回 |
301 | Moved Permanently | 请求的资源已经永久性地移动到另外一个地方,后续所有的请求都应该直接访问新地址。服务端会把新地址写在 Location 头部字段,方便客户端使用。允许客户端把 POST 请求修改为 GET。 |
304 | Not Modified | 请求的资源和之前的版本一样,没有发生改变。用来缓存资源,和条件性请求(conditional request)一起出现 |
307 | Temporary Redirect | 目标资源暂时性地移动到新的地址,客户端需要去新地址进行操作,但是不能修改请求的方法。 |
308 | Permanent Redirect | 和 301 类似,除了客户端不能修改原请求的方法 |
400 | Bad Request | 客户端发送的请求有错误(请求语法错误,body 数据格式有误,body 缺少必须的字段等),导致服务端无法处理 |
401 | Unauthorized | 请求的资源需要认证,客户端没有提供认证信息或者认证信息不正确 |
403 | Forbidden | 服务器端接收到并理解客户端的请求,但是客户端的权限不足。比如,普通用户想操作只有管理员才有权限的资源。 |
404 | Not Found | 客户端要访问的资源不存在,链接失效或者客户端伪造 URL 的时候回遇到这个情况 |
405 | Method Not Allowed | 服务端接收到了请求,而且要访问的资源也存在,但是不支持对应的方法。服务端必须返回 Allow 头部,告诉客户端哪些方法是允许的 |
415 | Unsupported Media Type | 服务端不支持客户端请求的资源格式,一般是因为客户端在 Content-Type 或者 Content-Encoding 中申明了希望的返回格式,但是服务端没有实现。比如,客户端希望收到 xml返回,但是服务端支持 Json |
429 | Too Many Requests | 客户端在规定的时间里发送了太多请求,在进行限流的时候会用到 |
500 | Internal Server Error | 服务器内部错误,导致无法完成请求的内容 |
503 | Service 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 请求动态资源的过程
- 发送 http 请求动态资源给 web 服务器
- web 服务器收到请求后通过 WSGI 调用一个属性给应用程序框架
- 应用程序框架通过引用 WSGI 调用 web 服务器的方法,设置返回的状态和头信息。
- 调用后返回,此时 web 服务器保存了刚刚设置的信息
- 应用程序框架查询数据库,生成动态页面的 body 的信息
- 把生成的 body 信息返回给 web 服务器
- 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 这三个概念的区分。
WSGI是一种通信协议。
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多路复用适用如下场合:
- 当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。
- 当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。
- 如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。
- 如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用。
- 如果一个服务器要处理多个服务或多个协议,一般要使用I/O复用。
与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。
Restful
1. 讲讲restful规范
RESTful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
REST是Representational State Transfer的缩写,是Roy Thomas Fielding在他2000年的博士论文中提出的。其提出的设计概念和准则为:
网络上的所有事物都可以抽象为资源
每个资源都应该有唯一的标识(identifier),对资源的操作不会改变标识
所有的操作都是无状态的
使用标准方法(GET、POST、PUT、PATCH、DELETE)操作资源
2. django restframework的相关组件有哪些
这个在我之前博客中有写到,有六篇,但其实远不止,我记得drf本身就有10个组件,加上或多或少的扩展,应该有十几个,然而我后来没有研究了,希望以后还有机会研究。
未完待续
参考与推荐:
[1]. socket编程
网络通信面试题详细解答相关推荐
- 2021年 第13届 全国大学生数学竞赛 初赛(非数学类)试题详细解答
[2020年第12届全国大学生数学竞赛--资源分享 ][1~11届省赛决赛考题及题解(数学类.非数学类).推荐学习网址.复习备考书籍推荐] 2019年 第11届 全国大学生数学竞赛 初赛(非数学类)试 ...
- 「 最新大厂常考架构技术面试题 + 详细解答」
很多没有收到offer的朋友一直在 后台问我,怎么梳理面试要考的知识点.这里必须要和大家再强调一下要准备的7大方面!总结起来包括:JAVA编程语言+数据结构和算法题+计网+操作系统+设计模式+数据库+ ...
- 金九银十专供 | 175 道 Go 工程师必考面试题 + 详细解答
随着云计算时代的到来,Go 的应用越来越广泛,已然成为首选编程语言,而且,薪资也水涨船高. 以字节跳动为例,Go 语言是字节跳动内部使用最多的编程语言.为啥?因为字节跳动更看重效率,上手简单,学习难度 ...
- 网易java笔试题_网易笔试题详细解答(Java)
对于下面公式不显示的问题,可以看这个链接 显示效果更好. 题目一 题目描述 小易觉得高数课太无聊了,决定睡觉.不过他对课上的一些内容挺感兴趣,所以希望老师讲到有趣的地方的时候叫醒他一下.你知道了小易对 ...
- 2019年 第11届 全国大学生数学竞赛 初赛(非数学类)试题详细解答
[2020年第12届全国大学生数学竞赛--资源分享 ][1~11届省赛.决赛考题及题解(数学类.非数学类).推荐学习网址.复习备考书籍推荐]https://blog.csdn.net/weixin_4 ...
- 2020年 第12届 全国大学生数学竞赛 初赛(非数学类)试题详细解答
微信公众号:考研竞赛数学
- 网易校招java笔试题_网易笔试题详细解答(Java)
对于下面公式不显示的问题,可以看这个链接 显示效果更好. 题目一 题目描述 小易觉得高数课太无聊了,决定睡觉.不过他对课上的一些内容挺感兴趣,所以希望老师讲到有趣的地方的时候叫醒他一下.你知道了小易对 ...
- 【机试题】2014大疆嵌入式笔试题(附超详细解答,下篇)
上一篇主要是对<2014大疆嵌入式笔试题>的前一部分进行了解答,本文主要是对接下来的几道题进行解答.想要参考上一篇的点击链接:[机试题]2014大疆嵌入式笔试题(附超详细解答,上篇). 嵌 ...
- 交换机二三层协议及其详细解答
交换机二三层协议及其详细解答 概述 二层协议 三层协议 以太网协议 示例代码 CSMA/CD协议 示例代码 IP协议 示例代码 概述 交换机是网络设备的一种,主要用于连接多个网络设备,以实现网络通信和 ...
最新文章
- 提升网络安全 十大策略全面巩固企业内网
- 用Leangoo看板工具策划一场活动,看板示例
- 面试官:不会看 Explain执行计划,简历敢写 SQL 优化?
- Swift字典Dictionary快速文档
- 七天入门linux,一个Linux新手的七天
- mysql在centos下用命令批量导入报错_Variable ‘character_set_client‘ can‘t be set to the value of ‘---linux工作笔记042
- [集训队作业2018]喂鸽子
- 中国伸缩式起重机行业市场供需与战略研究报告
- 数据库系统(PostgreSQL)
- PO模式实现Appium脚本封装
- VT虚拟化驱动入门教程
- 南京航空航天大学矩阵论答案
- 实在憋不住了,出来透透气。
- 2010年安防企业与事件盘点
- Redis 集群规范(MOVED错误码及ASK错误码)
- Python修改论文的字体及其大小
- SpringBoot脚手架搭建及运用
- 加权合并规则与路径压缩
- 强大的MySQL 官方压测神器,简单、易用
- 【hash表】hash表平均查找长度(ASL)