1、简述 OSI 七层协议。 应用层,表示层,会话层, 传输层,网络层,数据链路层,物理层 应用层:用户感知 数据链路层:定义了电信号的分组方式。存在以太网协议。 以太网协议规定接入的internet的设备必须具备网卡,发送端和接收端的地址指的是网卡的地址。 网络层:存在ip协议:规定网络地址的协议。其定义的地址为ip地址,广泛采用 ipv4地址。网络地址由32位2进制组成。存在arp协议,将目标主机的ip地址转换为mac地址 。 传输层:建立端口到端口的通信。0-65535为端口范围。0-1023为系统占用端口。 存在tcp协议,udp协议。 2、什么是C/S和B/S架构? c/s:客户端与服务器之间的架构,需要在客户端上安装应用。 特点是交互性强,响应速度快。但是需要针对不同的操作系统开发不同的软件, 加上产品更新快,程序迭代很频繁。 b/s:浏览器与服务器之间的架构 特点:分布性强,维护方便,开发简单,共享性强,拥有成本低。但是会涉及到浏览器与服务器的大量交互,通信开销大,且 涉及到数据安全性问题,数据传输速度慢等问题。 3、简述 三次握手、四次挥手的流程。 三次握手: 第一次,客户端请求建立连接,SYN=1,发送的数据包序号为seq=x 第二次,服务端回复消息ACK=1,代表拿到了请求数据,同时也去请求建立连接,SYN=1,发送的数据包编号为seq = y 第三次,客户端回复消息ACK=1,发送的数据包编号为seq= x+1 四次挥手: 第一次,客户端请求断开连接,FIN=1,发送的数据包为seq=u 第二次,服务端接收到了请求,回复ACK=1,发送的数据包编号为seq= v 第三次,服务端也需要请求断开连接,FIN=1,发送的数据包编号为seq=w 第四次,客户端接收到了请求,回复ACK=1,发送的数据包为seq=u+1 4、什么是arp协议? arp是地址解析协议的缩写。所谓地址解析,就是在主机发送帧前将目标的ip地址转换为目标的mac地址的过程。即通过目标设备的ip地址,查询目标设备的mac地址,以保证通信的顺利完成。 5、TCP和UDP的区别? 1)、tcp是面向连接的,传输数据前需要建立连接;udp在传输数据前不需要建立连接 2)、tcp传输数据虽然会出现粘包,但是不会出现数据丢失,可以说数据是安全的;udp是尽可能的保证数据可靠交付 3)、tcp面向字节流udp面向报文,没有拥塞控制,因此在实时应用里使用很多,例如视频通话 4)、每一条tcp连接只能是点对点的,udp支持一对多,多对多的情况。 7、为何基于tcp协议的通信比基于udp协议的通信更可靠? tcp在发送数据时,发送端先把数据发送到自己的缓存里,然后协议控制将缓存里的数据发送到对端,对端返回一个ack=1,发送端清理自己的缓存,对端返回一个ack=0,则重新发送数据,所以tcp是可靠的。 而udp在发送 数据时,对端是不会返回确认信息的,因此不可靠。 8、什么是socket?简述基于tcp协议的套接字通信流程。 socket是在应用层和传输层之间的一个抽象层,他把tcp/ip复杂的操作抽象为几个简单的接口供应用层调用,来实现进程在网络中通信。 服务端:创建socket,绑定端口,,监听端口号,接收客户端的请求,, 读取字节,发送字节,关闭通道; 客户端:创建socket,连接指定计算机的端口,写入读取数据,关闭通道。 9、什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象? 粘包指的是;我们在创建一个tcp的socket时,会在内核创建一个发送缓冲区和一个接收缓冲区。当 发送的字节数太长,就会拆分为多个tcp数据包发送出去,如果连续发送的字节数太短,就会在缓冲区等待,等待缓冲区差不多满了,或者等待时机 再发过去。正因为存在这样的缓冲机制,在接收端,如果等到缓冲区满了才开始 接收数据,可能已经存在好几个tcp数据,或者接收方来不及接收缓冲区的包,此时就会造成粘包问题。 原因:接收方不知道消息之间的界限,不知道一次提取多少字节的数据照造成的。tcp协议自身为了提高传输效率,发送方往往会收集导致到足够多的数据后才发送一个tcp段。若连续发送的数据很少,tcp会根据优化算法把这些数据合成一个tcp段后一次发送过去,这样接收方就收到了粘包数据。 出现的情况: 情况一:发送端等到缓冲区满才发送出去,造成粘包,连续发送,数据量 每次很小; 情况二:接收端来不及接收缓冲区的包,接收时造成多个包一起接收。或者说一次接收的数据过小,下次还得从缓冲区里拿上次遗留的数据。 解决粘包的方法: 对于定长的包,需要去给定固定的长度;利用struct模块去实现 对于不定长的包,可以在包结束的位置给定符号明确边界。 11、什么是防火墙以及作用? 作为一种计算机网络的安全防护系统。 作用:对流经它的网络进行扫描,可以过滤掉一些攻击。 可以禁止特定端口的流出通信,禁止来自特殊站点 的访问。 21、路由器和交换机的区别? 路由器可以给局域网自动分配ip与虚拟拨号 交换机只是用来分配网络数据的 路由器在网络层 根据ip地址寻址 路由器可以处理TCP/IP协议 交换机不可以,在中继层,根据mac地址寻址 路由器可以把一个ip分配给多个主机使用,对外只表现一个ip 交换机可以把多个主机连接起来,对外各有各的ip 路由器可以提供防火墙,交换机不提供这个功能 22、什么是域名解析? 将域名转换为ip地 24、生产者消费者模型应用场景及优势? 分析: 1)、处理数据比较耗时,线程独占,生产数据不需要即使的反馈。 之所以是线程独占,是因为线程排队不在队列中,其顺序是不可知的,牵扯到严格顺序时就会存在问题,例如写入日志。 2)、在并发编程中使用消费者生产者模式可以解决绝大部分并发问题,该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。 场景:基于生产者消费者模型区实现 需要处理任务时间较长的场景,上传文件并处理,用户把文件上传到系统后,系统把文件丢到队列里,(立刻返回告诉用户上传成功,???1) 消费者去队列里取出文件处理。比如(调用一个远程接口查询数据,???2) 如果远程服务接口查询时需要几十秒的时间,那么它可以提供一个申请查询的接口,(这个接口把要申请查询任务放数据库中,???3) 然后该接口立刻返回。然后服务器端用线程轮询并获取申请任务进行处理,处理完之后发消息给调用方,让调用方再来调用另外一个接口拿数据。 前提:整个逻辑可以实现吗? 问题1:如果说,用户在看到上传成功字样后,马上就想看起上传的文件,怎么办?还是说在给定的需求里,就不允许用户立刻去查看上传的文件。又或者说,能否把这些文件直接放到浏览器自身的缓存里先满足一下客户的迫不及待的需求? 解决:倾向于放到浏览器里缓存一下 如果数据没有保存成功,那么就给他挂起,下一次继续 问题2:调用远程接口是一个什么概念?可以这样理解吗:给另外一个服务器的后端程序发送请求,查到了结果,其立刻返回一个结果。如果说像文中提到的,时间耗时很长,这个远程接口将这个查询任务放到异步队列里去,当其拿到了查询结果,再去给之前调用它的接口发请求,告知其结果,这样也就不需要问题3了。 解答:主要是因为保存所需要的时间较长,不过还是建议在异步队列里去实现查询。 问题3:若必须使用到这种情况,去轮询查看结果。但是我不明白的是,申请任务可以放到数据库里?数据库不应该只是读写的作用吗,还带有这种逻辑执行的功能? 解答:数据库有储存过程,函数,所以存在任务的执行。 实现解耦,二者之间不需要直接通讯,通过阻塞队列去进行通讯,相当于一个缓冲区。 25、什么是cdn? 用来缩短时延的技术。内容分发网络。 就是采用很多的缓存服务器,布放在用户相对反问集中的地区或网络中。 用户访问时,利用一种全局负载技术,将用户的访问请求交给距离近的服务器上,类似于京东的本地仓库。 26、LVS是什么及作用? 是一个linux的虚拟服务器。我国的一个博士的开源项目。已经成为linux内核的一部分。主要用于多服务器的负载均衡。 27、Nginx是什么及作用? 是一个高性能的http和反向代理服务器。特点是占用内存少,并发能力强。 1)、用来实现反向代理,将请求交给代理服务器,去获取内网的数据,再返回给之前请求的客户端。 2)、实现负载均衡,在高并发的情况下,将数据流量分摊到多个服务器上执行,减轻每台服务器的压力。集群共同完成工作任务。 3)、实现动静分离,把动态请求和静态请求分离开。根据配置对不同的请求做不同的转发。这是动静分离的基础。 28、keepalived是什么及作用? 保持存活,应该是在网络里保持高可用的一种软件。 29、haproxy是什么以及作用? 同样是提供高可用、负载均衡的应用代理软件。 30、什么是负载均衡? 在高并发的情况下,将数据流量分摊到多个服务器上执行,减轻每台服务器的压力。由集群共同完成工作任务。 31、什么是rpc及应用场景? 一种远程过程调用协议。