《Netty 4核心原理与手写RPC框架实战_谭勇德》从面试题总结(第1篇)

本文是作者从面试题角度出发,将《Netty 4核心原理与手写RPC框架实战_谭勇德》这本书的内容进行总结并且结合自己的面试经验进行分析,方便急于应付面试的同学直接获得这方面的知识。

TCP的建立连接的过程是怎样的?

TCP的传输包括3个阶段:建立连接、数据传输和释放连接。其中主要问的是建立TCP连接的三次握手。

三次握手分析:

1. 第一次握手:客户端发送,服务端收到了,此时服务端就知道,客户端的发送能力和自己的接收能力是正常的。

2. 第二次握手:服务端发送,客户端收到了,此时客户端就知道,客户端的发送能力和接收能力是正常的,服务端的发送和接收能力也是正常的。但是服务端不知道自己的发送能力是否正常。所以需要第三次握手。

3. 第三次握手:客户端发送,服务端收到了。这一次的目的是最终确认服务端对自己的发送能力和客户端的接收能力。

因此我们也知道了三次握手不能减少为两次握手的原因了,其实就是进行一次最终确认,让服务端知道自己的发送能力和客户端的接收能力。如果是建立连接失败,第三次握手也能让服务端及时关闭连接资源,不会一直卡在那里空耗资源。


一次HTTP请求的网络通信过程是怎样的?

下面我们分析一下当我们在浏览器输入一个网址后,一次完整的网络请求是怎样实现的?

1. 首先假设我们设置了本地IP:192.168.1.101,子网掩码:255.255.255.0,网关:192.168.1.1,DNS地址:8.8.8.8。

2. 浏览器输入:www.baidu.com

3. 基于UDP协议访问DNS域名服务器获取具体的远程IP地址,假设是183.232.231.174,找到后一般会缓存在本地,下次就直接从缓存获取。

4. 向目标IP发起HTTP请求,请求包括HTTP请求头和请求体。

5. 将HTTP请求包装成新的TCP包,如果超过TCP包限制会拆为多个包。发送方采用随机端口,百度则默认80端口,将这些端口信息放入TCP包头。

6. 将TCP包和包头继续包装成新的IP包,同样如果超过阈值会拆分多个包,并且将双方的IP写入IP包头。

7. 将IP包和包头继续包装成新的以太网包,同样如果超过阈值会拆分多个包,并且将双方的MAC地址写入以太网包头。

  1. 以太网包和包头经过多个网关的转发,最终百度服务器接收到请求后,会层层拆包,最终还原为HTTP包,解析该HTTP请求、处理业务后返回响应。

9. 响应也是一个HTTP请求,会经历一样的过程:HTTP包 -> TCP包 -> IP包 -> 以太网包,最终返回浏览器解析后展示。

HTTP请求最终的包装结果如下:

HTTP包.png

零拷贝的原理是什么?

首先看一下磁盘IO和网络IO的交互过程:

IO拷贝.png

这里可以看到IO交互一般都是两个步骤:

1. 等待网络数据到达网卡,然后将数据读取到内核缓冲区。如果是从磁盘读取文件数据,那么就是由磁盘控制器读取数据到内核缓冲区。

2. 从内核缓冲区复制数据,然后拷贝到用户空间。

因此零拷贝的意思就是应用程序直接在内核空间操作IO数据,不需要将数据拷贝到用户空间再处理,减少了一次数据拷贝的过程。

Netty对于零拷贝的实现就是通过DirectBuffer,直接使用堆外内存进行数据读写,不需要将网络字节二次拷贝到用户空间。


Java BIO、NIO、AIO的原理和区别是什么?同步、异步、阻塞、非阻塞和多路复用这些概念又是怎么理解?

完整的文章请从下面链接下载:

链接:
https://xbp.pub/i/Jd8ba9569d2ik

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.三次握手和四次挥手 答:建立连接的过程是利用客户服务器模式,假设主机A为客户端,主机B为服务器端。 (1)TC...
    超级工程师进阶之路阅读 604评论 0 3
  • 四、数据结构和算法 1、求一串数字序列中的连续子串最大和,比如arr=1 -2 3 -1 2,连续子串最大和就是3...
    XDgbh阅读 440评论 0 1
  • 包含的重点内容:JAVA基础JVM 知识开源框架知识操作系统多线程TCP 与 HTTP架构设计与分布式算法数据库知...
    消失er阅读 4,564评论 1 10
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 8,142评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 7,517评论 0 2

友情链接更多精彩内容