一.基础知识

1.TCP和UDP的根本区别

● TCP面向连接,如打电话要先拨号建立连接;UDP是无连接的,即发送数据之前不需要建立连接。
● TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
● TCP通过校验和、重传控制、序号标识、滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
● UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高要求的通信或广播通信。

● 每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信。

● TCP对系统资源要求较多;UDP对系统资源要求较少。

2.TCP如何保证可靠传输

TCP对发送的每一个包都进行编号,接收方对数据包进行排序,把有序数据传给应用层。
● 校验和:TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。TCP的接收端会丢弃重复的数据。
● 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。(TCP利用滑动窗口实现流量控制。)
● 拥塞控制:当网络拥塞时,减少数据的发送。
● 停止等待协议:也是为了实现可靠传输,它的基本原理就是每发完一个分组就停止发送,等待对方确认。收到确认后再发下一个分组。
● 超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

3.Netty能解决什么问题

Netty是一款基于NIO开发的网络通信框架,相比于BIO,它的并发性能得到了很大提高。难能可贵的是,在保证快速和易用性的同时,并没有丧失可维护性和性能等优势。

阿里分布式服务框架Dubbo,默认使用Netty作为基础通信组件;还有RocketMQ,也是使用Netty作为通信的基础。

4.Netty有哪些主要组件,它们之间的关系

● Channel:作为Netty中进行网络操作的抽象类,包括基本的I/O操作,如bind()、connect()、read()、write()等。
● EventLoop:主要是配合Channel处理I/O操作,用来处理连接的生命周期中所发生的事情。
● ChannelFuture:Netty框架中所有的I/O操作都是异步的,因此需要ChannelFuture的addListener()注册一个ChannelFutureListener监听事件,当操作执行成功或者失败时,监听就会自动触发返回结果。
● ChannelHandler:充当所有处理入栈和出栈数据的逻辑容器。ChannelHandler主要用来处理各种事件,这里的事件很广泛,比如连接、数据接收、异常、数据转换等。

● ChannelPipeline:为ChannelHandler链提供了容器,当Channel创建时,就会被自动分配到它专属的ChannelPipeline,这个关联是永久性的。

 

二 高级特性

1.Netty比起同类框架的优势

● 使用简单:封装了NIO的很多细节,使用更简单。
● 功能强大:预置了多种编解码功能,支持多种主流协议。
● 定制能力强:可以通过ChannelHandler对通信框架进行灵活的扩展。
● 性能高:通过与其他业界主流的NIO框架对比,Netty的综合性能最优。

● 稳定:Netty修复了已经发现的所有NIO的Bug,让开发者可以专注于业务本身。
● 社区活跃:Netty是活跃的开源项目,版本迭代周期短,Bug修复速度快。

 

2.Netty的高性能都体现在哪里

● I/O线程模型:同步非阻塞,用最少的资源做更多的事。
● 内存零拷贝:尽量减少不必要的内存拷贝,实现更高效率的传输。
● 内存池设计:申请的内存可以重用,主要指直接内存。内部实现用一棵二叉查找树管理内存分配情况。
● 串行化处理读写:避免使用锁带来的性能开销。
● 高性能序列化协议:支持Protobuf等高性能序列化协议。


3 默认情况下Netty起多少线程,何时启动
Netty的线程数默认是CPU核数的两倍,Bind完之后启动。


4. Netty有几种发送消息的方式
Netty有两种发送消息的方式。
● 直接写入Channel,消息从ChannelPipeline中尾部开始传播。
●写入与ChannelHandler绑定的ChannelHandlerContext,消息从ChannelPipeline的下一个ChannelHandler中传播。

 

5. Netty支持哪些心跳类型设置
● readerIdleTime:为读超时时间(即测试端一定时间内未接收到被测试端消息)。
● writerIdleTime:为写超时时间(即测试端一定时间内向被测试端发送消息)。
● allIdleTime:所有类型的超时时间。


6. Netty和Tomcat的区别
● 作用不同:Tomcat是Servlet容器,可以视为Web服务器,而Netty是异步事件驱动的网络应用程序框架和工具,用于简化网络编程,例如TCP和UDP套接字服务器。

● 协议不同:Tomcat是基于HTTP的Web服务器,而Netty能通过编程自定义各种协议,因为Netty本身自己能编码/解码字节流,所以Netty可以实现HTTP服务器、FTP服务器、UDP服务器、RPC服务器、WebSocket服务器、Redis的Proxy服务器、MySQL的Proxy服务器等。

 

posted on 2020-05-23 02:31  Moonshoterr  阅读(359)  评论(0编辑  收藏  举报