计算机网络面试题

1. TCP建⽴连接的过程。

三次握⼿:
1. 第⼀次握⼿(客户端发送syn包到服务器端):客户端发送syn包到服务器端,进⼊syn_send状态,等待服务器端的确认;
2. 第⼆次握⼿(服务器返回syn+ack包给客户端):服务器端收到客户端的syn包,发送syn+ack包给客户端,进⼊syn_recv状态;
3. 第三次握⼿(客服端返回ack包给服务端):客户端收到服务器端的syn+ack包,发送个ack包到服务器端,⾄此,客户端与服务器端进⼊established状态;
4. 握⼿过程中传送的包不包含任何数据,连接建⽴后才会开始传送数据,理想状态下,TCP连接⼀旦建⽴,在通信双⽅的任何⼀⽅主动关闭连接前,TCP连接都会⼀直保持下去。

2. TCP断开连接的过程。

四次挥⼿:
1. 第⼀次挥⼿⼿:主动关闭⽅发送fin包到被动关闭⽅,告诉被动关闭⽅我不会再给你发送数据了;
2. 第⼆次挥⼿⼿:被动关闭⽅收到syn包,发送ack给对⽅,确认序号为收到序号+1;
3. 第三⼿:被动关闭⽅也也发送fin包给主动关闭⽅,告诉对⽅我也不会给你发送数据了;
4. 第四次挥⼿:主动关闭⽅收到syn包,发送ack给对⽅,⾄此,完成四次挥⼿

3. 浏览器发⽣302跳转背后的逻辑?

浏览器在原请求地址的响应的Location域找到要跳转的URI执⾏跳转。
浏览器输⼊URL后发⽣了什么
1.DNS域名解析;
2.建⽴TCP连接;
3.发送HTTP请求;
4.服务器处理请求;
5.返回响应结果;
6.关闭TCP连接;
7.浏览器解析HTML;
8.浏览器布局渲染;

4. HTTP协议的交互流程。 HTTP和HTTPS的差异, SSL的交互流程?

a. Http协议
1、建⽴TCP连接;
2、发送HTTP请求;
3、服务器处理请求;
4、返回响应结果;
5、关闭TCP连接;
b. http三次握⼿:

i. 第⼀次握⼿:客户端发送syn包(syn=j)到服务器,并进⼊SYN_SEND状态,等待服务器确认;
ii. 第⼆次握⼿:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时⾃⼰也发送⼀个SYN包(syn=k),即SYN+ACK包,此时服务器进⼊SYN_RECV状态;
iii. 第三次握⼿:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进⼊ESTABLISHED状态,完成三次握⼿。
c. HTTPS协议
HTTPS协议就是基于SSL的HTTP协议
HTTPS使⽤与HTTP不同的端⼝(HTTPS80 , HTTPSS443)
提供了身份验证与加密通信⽅法,被⼴泛⽤于互联⽹上安全敏感的通信。

1、客户端请求SSL连接,并将⾃⼰⽀持的加密规则发给⽹站。
2、服务器端将⾃⼰的身份信息以证书形式发回给客户端。证书⾥⾯包含了⽹站地址,加密公钥,以及证书的颁发机构。
3、获得证书后,客户要做以下⼯作
  • 验证证书合法性
  • 如果证书受信任,客户端会⽣成⼀串随机数的密码,并⽤证书提供的公钥进⾏加密。
  • 将加密好的随机数发给服务器。
4、获得到客户端发的加密了的随机数之后,服务器⽤⾃⼰的私钥进⾏解密,得到这个随机数,把这个随机数作为对称加密的密钥。(利⽤⾮对称加密传输对称加密的密钥)
5、之后服务器与客户之间就可以⽤随机数对各⾃的信息进⾏加密,解密。注意的是:证书是⼀个公钥,这个公钥是进⾏加密⽤的。⽽私钥是进⾏解密⽤的。公钥任何都知道,私钥只有⾃⼰知道。这是⾮对称加密。⽽对称加密就是钥匙只有⼀把,我们都知道。之所以⽤到对称加密,是因为对称加密的速度更快。⽽⾮对称加密的可靠性更⾼。
客户端请求--服务端发送证书(公钥)--客户端验证证书,并⽣成随机数,通过公钥加密后发送给服务端--服务端⽤私钥解密出随机数--对称加密传输数据。
d. HTTP与HTTPS的区别
1、HTTPS协议需要申请证书。
2、HTTP是明⽂传输;HTTPS使⽤的是具有安全性的SSL加密传输协议
3、HTTP端⼝是80;HTTPS端⼝号是443
4、HTTP连接简单⽆状态;HTTPS由SSL+HTTP协议构件的可进⾏加密传输、身份验证的⽹络协议。

5. Rest和Http什么关系?⼤家都说Rest很轻置,你对Rest⻛格如何理解?

a. Http是⼀种协议,Rest是⼀种软件架构⻛格。
b. URL定位资源,⽤HTTP动词(GET,POST,DELETE,DETC)描述操作。
c. GET表示查询、POST表示新建、PUT表示更新、DELETE表示删除等。
  • GET /api/v1/user 获取⽤户列表
  • GET /api/v1/user/1 获取ID为1的⽤户
  • POST /api/v1/user 新建⽤户
  • PUT /api/v1/user/1 更新ID为1的⽤户信息
  • DELETE /api/v1/user/1 删除ID为1的⽤户
1、概念:REST(英⽂:Representational State Transfer,简称REST,表现层状态转化),指的是⼀组架构约束条件和原则。满⾜这些约束条件和原则的应⽤程序或设计就是 RESTful。
2、⼀种软件架构⻛格,设计⻛格⽽不是标准,只是提供了⼀组设计原则和约束条件。它主要⽤于客户端和服务器交互类的软件。基于这个⻛格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
3、Restful架构:
(1)每⼀个URI代表⼀种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词(GET⽤来获取资源,POST⽤来新建资源(也可以⽤于更新资源),PUT⽤来更新资源,DELETE⽤来删除资源。),对服务器端资源进⾏操作,实现"表现层状态转化”。

6. TCP的滑动窗⼝协议有什么⽤?讲讲原理。

滑动窗⼝协议是传输层进⾏流控的⼀种措施,接收⽅通过通告发送⽅⾃⼰的窗⼝⼤⼩,从⽽控制发送⽅的发送速度,从⽽达到防⽌发送⽅发送速度过快⽽导致来不及接受。

7. HTTP协议都有哪些⽅法?

1. GET 请求获取由Request-URI所标识的资源。
2. POST 在Request-URI所标识的资源后附加新的数据。
3. HEAD 请求获取由Request-URI所标识的资源的响应消息报头。
4. OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。
5. PUT 请求服务器存储⼀个资源,并⽤Request-URI作为其标识。
6. DELETE 请求服务器删除由Request-URI所标识的资源。
7. TRACE 请求服务器回送收到的请求信息,主要⽤语测试或诊断。

8. 交换机与路由器的区别?

1、⼯作层次不同
  • 最初的交换机⼯作在OSI模型中的数据链路层,⼯作原理简单
  • 路由器⼯作在OSI模型中的⽹络层,得更多协议信息,做更智能的转发决策
2、数据转发所依据的对象不同
  • 交换机是利⽤物理地址(MAC地址),确定转发的⽬的地址。(MAC固化硬件,⼀般不可更改)
  • 路由器是利⽤IP地址,确定转发的⽬的地址。(IP通常为⽹关或系统⾃动分配的)
3、是否可以分割⼴播域
  • 传统的交换机可以分割冲突域,不能分割⼴播域,⽽路由器可以分割⼴播域
  • 由交换机连接的⽹段仍然属于同⼀⼴播域,⼴播数据报会在交换机连接的所有⽹段上传播,某些情况导致通信拥೿和安全漏洞。连接到路由器上的⽹段被分配成不同的⼴播域,所以,⼴播数据不穿过路由器
虽然三层交换机可以分割⼴播域,但是⼦⼴播域之间不能通信,还是需要路由器
4、路由器提供了防⽕墙的服务
路由器仅仅转发特定地址的数据包,不传送不⽀持路由协议的数据包,不传送未知⽬标⽹络数据包,从⽽可以防⽌⼴播⻛暴
5、表
⼆层交换机上存在MAC表,三层交换机上存在路由表、MAC表、ARP表,路由器上存在路由表和ARP表。
总之,交换机在具体的城域⽹中扮演着VLAN透传的⻆⾊,就是桥。路由器的每⼀个端⼝都是⼀个独⽴的⼴播域和冲突域,⽽交换机是只有⼀个⼴播域和端⼝数量的冲突域。

9. Socket⽹络通信、NIO流以及多线程处理技术,Netty、Mina?

1、socket⽹络通信:
NIO流以及多线程处理技术:
  • BIO:阻塞式,线程池初始时创建⼀定量线程,超过则等待;
  • NIO:⾮阻塞式,不同的线程⼲专业的事情,提⾼系统吞吐量;
  • NIO+异步处理:让少量的线程做⼤量的事情;
2、Mina:Apache Mina是⼀个能够帮助⽤户开发⾼性能和⾼伸缩性⽹络应⽤程序的框架。它通过Java nio技术基于TCP/IP和UDP/IP协议提供了抽象的、事件驱动的、异步的API。采⽤⾮阻塞⽅式的异步传输,⽀持批量传输数据。mina框架简单⾼效,完成了底层的线程管理,内置编码器能够满⾜⼤多数⽤户的需求,省去了消息编码和解码的⼯作。
3、Netty:本质是JBoss开发的⼀个jar包,⽬的是开发⾼性能、⾼可靠性的⽹络服务和客户端服务;提供异步⾮阻塞的、事件驱动的⽹络应⽤程序的NIO框架和⼯具;处理socket;通过Future-Listener机制,⽤户可以⽅便的主动获取或者通过通知机制获得IO操作结果。

10. http协议(报⽂结构,断点续传,多线程下载,什么是⻓连接)

a. 概念:
i. HTTP协议是Hyper Text Transfer Protocol(超⽂本传输协议)的缩写,是⽤于从万维⽹(WWW:World Wide Web )服务器传输超⽂本到本地浏览器的传送协议。
ii. HTTP是⼀个基于TCP/IP通信协议来传递数据(HTML ⽂件, 图⽚⽂件, 查询结果等)。
iii. HTTP是⼀个属于应⽤层的⾯向对象的协议,由于其简捷、快速的⽅式,适⽤于分布式超媒体信息系统。它于1990年提出,经过⼏年的使⽤与发展,得到不断地完善和扩展。⽬前在WWW中使⽤的是HTTP/1.0的第六版,HTTP/1.1的规范化⼯作正在进⾏之中,⽽且HTTP-NG(Next Generation of HTTP)的建议已经提出。
iv. HTTP协议⼯作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
b. 主要特点:
1、简单快速:客户向服务器请求服务时,只需传送请求⽅法和路径。请求⽅法常⽤的有GET、HEAD、POST。每种⽅法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模⼩,因⽽通信速度很快。
2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
3.⽆连接:⽆连接的含义是限制每次连接只处理⼀个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采⽤这种⽅式可以节省传输时间。
4.⽆状态:HTTP协议是⽆状态协议。⽆状态是指协议对于事务处理没有记忆能⼒。缺少状态意味着如果后续处理需要前⾯的信息,则它必须重传,这样可能导致每次连接传送的数据量增⼤。另⼀⽅⾯,在服务器不需要先前信息时它的应答就较快。
5、⽀持B/S及C/S模式。

11. get与post区别

1. 表单的method如果为get,那么所有的参数信息都会显示在浏览器的地址栏,当我们使⽤浏览器地址栏输⼊⽹址的⽅式来发送请求时,那么该请求⼀定是get⽅式
2. 对于get⽅式,底层是将所有参数附加在请求资源的后⾯⼀起传递的,对于post⽅式,底层是将所有参数附加在请求参数的最后⼀⾏的下⼀⾏的下⼀⾏
Get请求的数据是被附在url之后(HTTP协议头中),POST请求数据则放置在HTTP包的包体head中;
3. 对于get,post⽅式,servlet不同处理:doGet(),doPost();4、浏览器处理:重复访问使⽤GET⽅法请求的⻚⾯,浏览器会使⽤缓存处理后续请求。使⽤POST⽅法的form提交时,浏览器基于POST将产⽣永久改变的假设,将让⽤户进⾏提交确认。

12. Nginx性能调优:

1、增加同时打开⽂件数open files数量;
2、处理⼤量静态⽂件的磁盘I/O时(此时worker进程是单线程的),增加CPU核⼼数Worker Processes数量,提⾼计算能⼒;
3、如果⽹站流量很⾼,则可以提升worker进程连接数Worker Connections(默认1024);
4、控制keep alive在10s-20s之间,减少连接的时间开销;
5、合理设置open file cache时间提⾼处理效率;
6、提⾼⽹路带宽;
7、开启压缩传输数据gzip,设置压缩级别gzip_comp_level为1-2,再⾼效果不明显并且浪费CPU了;
8、扩展机器数量。

13. rpc和http的区别,使⽤场景:

区别:
传输协议
  • RPC,可以基于TCP协议,也可以基于HTTP协议
  • HTTP,基于HTTP协议
传输效率
  • RPC,使⽤⾃定义的TCP协议,可以让请求报⽂体积更⼩,或者使⽤HTTP2协议,也可以很好的减少报⽂的体积,提⾼传输效率
  • HTTP,如果是基于HTTP1.1的协议,请求中会包含很多⽆⽤的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为⼀个RPC来使⽤的,这时标准RPC框架更多的是服务治理
性能消耗,主要在于序列化和反序列化的耗时
  • RPC,可以基于thrift实现⾼效的⼆进制传输
  • HTTP,⼤部分是通过json来实现的,字节⼤⼩和序列化耗时都⽐thrift要更消耗性能
负载均衡
  • RPC,基本都⾃带了负载均衡策略
  • HTTP,需要配置Nginx,HAProxy来实现
服务治理(下游服务新增,重启,下线时如何不影响上游调⽤者)
  • RPC,能做到⾃动通知,不影响上游
  • HTTP,需要事先通知,修改Nginx/HAProxy配置
总结:RPC主要⽤于公司内部的服务调⽤,性能消耗低,传输效率⾼,服务治理⽅便。HTTP主要⽤于对外的异构环境,浏览器接⼝调⽤,APP接⼝调⽤,第三⽅接⼝调⽤等。

#计算机网络知识点总结##计算机网络面试#
全部评论
大全分享剩下的考自己加油
点赞 回复
分享
发布于 2022-08-28 12:54 河南

相关推荐

#软件开发2024笔面经#两个mentor先英文自我介绍然后开始英文问项目细节记不太清了,靠本能反应英文回答的,记不太清当时怎么回答的了在项目里担任了什么角色,表是怎么设计的,安全框架是怎么实现的评论表是怎么设计的,评论的评论,也就是对评论的评论是怎么存储的,对于评论上的深度很深有没有什么优化处理,也就是有很多回复,有没有动态加载安全框架怎么实现,角色怎么划分的,怎么给用户分配角色,一个新来的领导怎么给他分配角色怎么存储图片的有没有把项目部署到云服务器上对于上传违规的图片有没有什么处理大概是这些,记不太清了,大概半个小时吧,没看时间,然后mentor说差不多了,不为难我了,开始用中文问了解消息队列吗,我说我大概知道它要实现的功能,消费者生产者模型什么的,没用过然后给了一个场景,说有不同数据源,对于不同的数据源有不同的应对或处理方式,你会用什么方式或什么设计模式来设计处理。对设计模型知道的不多,说了个策略模式,应对不同的数据源使用不同的策略。然后说如果现在设置了新的消息分配方案,怎么能让它马上生效,降低消息误分配处理的概率,我不懂,硬答了个重启服务器。面试官说ok,那你怎么保存这些要处理的消息,存在数据库或本地。讲一下SpringBoot,有什么特点(IOC,AOP,自动配置,注解,各种工具之类到的)你用过哪些工具(swagger,mybatis什么的)讲一下bean加载singleton的范围是什么循环依赖了解吗开始问数据库,给了个场景,现在有一个客户表,有姓,名和城市三个字段,有很多人,怎么提高查找数据的效率,比如要找有多少和我名字一样的人开始是问怎么建,我就说相对来说名的重复的概率比较低,首先根据名来建索引,名相同再找其他的后面理清问题了,就是分库分表,根据不同的姓或不同的城市分库分表,多个表同时查询提高效率Mybatis怎么防止sql注入到的,说之前有看过,但没仔细了解,记得是用#{}来防止的,具体怎么做不知道MyBatis怎么保证更新或者删除的数据是正确的,不了解,我觉得应该是在接口处进行数据校验,检验正确再让MyBatis执行分享下公司旁边的环境吧,旁边就是新天地和k11
点赞 评论 收藏
转发
15 132 评论
分享
牛客网
牛客企业服务