Netty面试题1

news2024/10/7 4:29:00

计算机网络模型

OSI采用了分层的结构化技术,共分七层, 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

Open System
Interconnect 简称OSI,是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。

OSI模型比较复杂且学术化,所以我们实际使用的TCP/IP模型,共分4层, 链路层、网络层、传输层、应用层

两个模型之间的对应关系如图所示:

  1. 物理层:物理层是OSI模型的第一层,它定义了在网络上传输比特流的方式。物理层的主要任务是将数字数据转换为模拟信号,以便在网络上进行传输。
  2. 数据链路层:数据链路层是OSI模型的第二层,它定义了如何在网络上传输数据包。数据链路层的主要任务是将数据分成帧(Frame),并在物理层上传输。
  3. 网络层:网络层是OSI模型的第三层,它定义了如何在不同的网络之间传输数据。网络层的主要任务是路由(Routing),即确定最佳的路径将数据从源节点传输到目标节点。
  4. 传输层:传输层是OSI模型的第四层,它定义了数据传输的端到端可靠性和流量控制。传输层的主要任务是将数据分成数据段(Segment),并在网络上进行传输。
  5. 会话层:会话层是OSI模型的第五层,它定义了如何在通信双方之间建立、管理和终止会话(Session)。会话层的主要任务是管理会话层协议(例如,连接建立和断开、同步和恢复等)。
  6. 表示层:表示层是OSI模型的第六层,它定义了如何将数据表示为应用程序可以处理的格式。表示层的主要任务是将数据进行编码、解码和加密。
  7. 应用层:应用层是OSI模型的第七层,它定义了不同应用程序之间的交互方式。应用层的主要任务是提供各种服务,例如文件传输、电子邮件和远程登录等。

各协议的解释

  1. TCP:传输控制协议(TCP)是一种面向连接的协议,它在发送数据之前先建立一个连接。TCP确保数据在网络上正确地传输,确保数据的可靠性和完整性,它还能够控制数据的流量和拥塞。TCP是应用广泛的协议之一,用于电子邮件、网页浏览和文件传输等应用中。
  2. UDP:用户数据报协议(UDP)是一种无连接的协议,它不需要在发送数据之前建立连接。UDP不保证数据的可靠性或完整性,但它更快速、更简单,适用于对数据传输延迟较为敏感的应用程序。UDP常用于音视频传输、在线游戏等实时性较高的应用中。

总的来说,TCP适用于那些需要确保数据可靠性和完整性的应用,而UDP适用于那些需要快速数据传输和实时性的应用。

  1. IP:Internet Protocol (IP)是一种协议,用于在计算机网络上传输数据包。它是一种无连接协议,意味着在发送数据之前不会建立连接。IP协议负责数据的传输和路由,以确保数据正确地从源主机传输到目标主机。
  2. ICMP:Internet控制消息协议(ICMP)是一种协议,用于在IP网络上传输控制消息。它通常用于诊断网络问题,如测试主机是否可达、测量网络延迟和带宽等。
  3. RIP:路由信息协议(RIP)是一种用于动态路由的协议。它通过广播路由信息来使网络中的路由器了解网络拓扑结构,并计算出最佳路由。RIP通常用于小型网络。
  4. OSPF:开放最短路径优先(OSPF)是一种基于链路状态的路由协议,用于大型企业网络中的动态路由。它使用Dijkstra算法来计算最短路径,并通过交换链路状态信息来建立拓扑图。
  5. BGP:边界网关协议(BGP)是一种用于互联网中的路由协议。它是一种路径向量协议,用于在AS之间选择最佳路径。BGP的主要作用是确保互联网上的路由器能够相互通信,并在网络出现问题时快速恢复。
  6. IGMP:Internet组管理协议(IGMP)是一种协议,用于在多播网络中管理组成员。它允许主机加入或离开多播组,并在网络中通知路由器有多少主机加入或离开多播组。
  7. SLIP:串行线路互联协议(SLIP)是一种早期的协议,用于在串行线路上传输IP数据包。它已被PPP所取代,因为SLIP具有固定的IP地址、缺乏安全性和完整性检查等问题。
  8. CSLIP:压缩串行线路互联协议(CSLIP)是一种改进的SLIP协议,它使用压缩技术减少了IP数据包在串行线路上的传输负载,提高了传输速度。
  9. PPP:点对点协议(PPP)是一种面向连接的协议,用于在两个计算机之间传输数据。它支持多种协议,如IP、IPX、NetBIOS等,并提供身份验证、加密和压缩等功能。
  10. ARP:地址解析协议(ARP)是一种协议,用于将IP地址映射到MAC地址。ARP通过广播消息来查找目标MAC地址,并在ARP缓存中保存映射关系,以提高网络效率。
  11. RARP:反向地址解析协议(RARP)是一种协议,用于将MAC地址映射到IP地址。RARP通过广播消息来查找目标IP地址,并在RARP服务器中保存映射关系,以提供动态IP地址分配。
  12. MTU:最大传输单元(MTU)是指在一个网络通信链路上最大允许的数据包大小。MTU取决于链路类型,如以太网、无线网络等,通常是固定的。如果数据包的大小超过MTU,则需要进行分片和重新组装。

总的来说,SLIP和CSLIP已经过时,PPP是常用的点对点协议,ARP和RARP用于地址映射,MTU则决定了一个网络通信链路上最大允许的数据包大小。

  1. ISO 2110:这可能是指ISO 2110标准,它定义了一种通用的网络协议体系结构。该标准定义了七层协议栈(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),每层都有特定的功能和协议。
  2. IEEE 802:这是一个系列的协议,由IEEE(电气和电子工程师协会)定义。该系列包括多个标准,如IEEE 802.3(以太网)、IEEE 802.11(Wi-Fi)和IEEE 802.15(蓝牙)等。每个标准定义了特定类型的网络,包括局域网、无线局域网和个人区域网络等。
  3. IEEE 802.2:这是IEEE 802系列中的一个子协议,也称为逻辑链路控制(LLC)协议。该协议定义了一种标准化的数据链路层协议,为高层协议提供了一个统一的接口。它在IEEE 802网络中广泛使用,包括以太网、令牌环网和无线局域网等。

总的来说,ISO 2110定义了一种通用的协议体系结构,IEEE 802系列定义了各种类型的网络标准,IEEE 802.2是IEEE 802系列中的一个子协议,为高层协议提供了一个统一的接口。

说一下TCP三次握手,为什么需要三次,不是四次或两次?

TCP 提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好两端之间的准备工作。

所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。

image.png

为什么TCP握手需要三次?

TCP是可靠的传输控制协议,而三次握手是保证数据可靠传输又能提高传输效率的最小次数。

为了实现可靠数据传输, TCP协议的通信双方,都必须维护一个序列号, 以标识发送出去的数据包中,哪些是已经被对方收到的。

举例说明:发送方在发送数据包(假设大小为 10 byte)时, 同时送上一个序号( 假设为 500),那么接收方收到这个数据包以后, 就可以回复一个确认号(510 = 500 + 10) 告诉发送方 “我已经收到了你的数据包, 你可以发送下一个数据包, 序号从 511 开始” 。

三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤。

如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。

至于为什么不是四次,很明显,三次握手后,通信的双方都已经知道了对方序列号起始值,也确认了对方知道自己序列号起始值,第四次握手已经毫无必要了。

TCP的三次握手的漏洞-SYN洪泛攻击

但是在TCP三次握手中是有一个缺陷的,就是如果我们利用三次握手的缺陷进行攻击。这个攻击就是SYN洪泛攻击。三次握手中有一个第二次握手,服务端向客户端应答请求,应答请求是需要客户端IP的,攻击者就伪造这个IP,往服务器端狂发送第一次握手的内容,当然第一次握手中的客户端IP地址是伪造的,从而服务端忙于进行第二次握手但是第二次握手当然没有结果,所以导致服务器端被拖累,死机。

image.png

当然我们的生活中也有可能有这种例子,一个家境一般的IT男去表白他的女神被拒绝了,理由是他家里没矿,IT男为了报复,采用了洪泛攻击,他请了很多人伪装成有钱人去表白那位追求矿的女神,让女生每次想交往时发现表白的人不见了同时还联系不上了。

面对这种攻击,有以下的解决方案,最好的方案是防火墙。

无效连接监视释放

这种方法不停监视所有的连接,包括三次握手的,还有握手一次的,反正是所有的,当达到一定(与)阈值时拆除这些连接,从而释放系统资源。这种方法对于所有的连接一视同仁,不管是正常的还是攻击的,所以这种方式不推荐。

延缓TCB分配方法

一般的做完第一次握手之后,服务器就需要为该请求分配一个TCB(连接控制资源),通常这个资源需要200多个字节。延迟TCB的分配,当正常连接建立起来后再分配TCB则可以有效地减轻服务器资源的消耗。

使用防火墙

防火墙在确认了连接的有效性后,才向内部的服务器(Listener)发起SYN请求,

说一说TCP四次挥手,为什么是四次?

四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。

由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当甲方完成数据发送任务后,发送一个FIN给乙方来终止这一方向的连接,乙方收到一个FIN只是意味着不会再收到甲方数据了,但是乙方依然可以给甲方发送数据,直到这乙方也发送了FIN给甲方。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。

image.png

为什么TCP的挥手需要四次?

TCP是全双工的连接,必须两端同时关闭连接,连接才算真正关闭。

如果一方已经准备关闭写,但是它还可以读另一方发送的数据。发送给FIN结束报文给对方,对方收到后,回复ACK报文。当这方也已经写完了准备关闭,发送FIN报文,对方回复ACK。两端都关闭,TCP连接正常关闭。

说一说你对IO的理解,什么是BIO,BIO阻塞在哪里?

见流程图

BIO阻塞是发生在操作系统上

说一说你对NIO的理解,NIO的优势点?

见流程图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/841493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Clash 意外退出后 chrome / google 谷歌 浏览器无法连接互联网

解决方案: 以管理员模式打开命令行,输入:netsh winsock reset ,然后重启电脑 如果还不行的话, 在 chromevs中选中 设置>隐私和安全>安全>使用安全 dns> 使用您当前的服务提供商 即可

docker solr-8.11.2安装部署

历史背景 现在solr官网仅能够下载到最新版本的安装包。并且支持docker。现在就用docker来部署一下 1、准备工作 docker环境部署(这个自己百度一下哈,很简单两个命令就能解决) yum -y install yum-utils yum -y install docker-ce 安装命令…

【Spring Boot】(二)Spring Boot 配置文件的探索之旅

文章目录 前言一、配置文件的作用二、配置文件的格式2.1 Spring Boot 配置文件格式2.2 properties 和 yml 的区别 三、properties 配置文件3.1 properties 基本语法3.2 配置文件的读取3.3 properties 优缺点分析 四、yml 配置文件说明4.1 yml 基本语法4.2 yml 使用案例4.3 yml …

《硅基物语.我是灵魂画手》一本书讲透AI绘画,AIC松鼠活动第六期

《硅基物语我是灵魂画手》 当AI遇上绘画,会打开怎样的奇妙世界? 用ChatGPTMidjourney西出人类的灵魂与梦想 用StableDiffusionD-ID画出青春绚丽的渴望 激活每个人隐藏的绘画天赋 人人都能成为顶尖绘画大师 如果你问我对于 AI绘画的态度,我会告诉你…

中信银行与华为联合编制:《2023金融数据可信流通技术白皮书》

导读 中信银行与华为技术有限公司联合编制的《金融数据可信流通技术白皮书》,从技术、业务、管理、法律等维度探讨了金融业数据流通的现状、问题、机遇和挑战,并提出了一套金融业数据流通的技术解决方案。该方案基于华为OceanStor存储,结合…

枫叶时代:打造中国特色的传统文化IP

近年来,取材于传统文化的影视作品在文化产业市场受到前所未有的关注。作为一种兼具辨识度、影响力和流量变现能力的文化符号,影视IP既是文化产业的一个重要环节,也是国家文化软实力的直接体现。优秀的影视IP可以超越文字、语言、民族的障碍&a…

-bash: ./startup.sh: Permission denied解决

今天在Linux上启动Tomcat,结果弹出:-bash: ./startup.sh: Permission denied 的提示。 这是因为用户没有权限,而导致无法执行。用命令chmod 修改一下bin目录下的.sh权限就可以了。 在Tomcat的bin目录下 ,输入命令行 :c…

使用Python + Flask搭建web服务

示例脚本 from flask import Flask# 获取一个实例对象 app Flask(__name__)# 1、注册 app.route(/reg, methods[get]) def reg():return {code: 200,msg: reg ok!}# 2、登录 app.route(/login, methods[get]) def login():return login ok!if __name__ __main__:…

Springboot+Easyexcel将数据写入模板文件并导出Excel

SpringbootEasyexcel将数据写入模板文件并导出Excel 一、导入依赖二、根据excel表头创建对应的实体类Pojo三、Controller类接收请求四、Service层获取待写入数据五、效果展示六、总结 一、导入依赖 <!--操作excel工具包--> <dependency><groupId>com.alibab…

DevOps在项目管理中的魔法:简化与深化

什么是DevOps&#xff1f; 定义与核心思想 DevOps, 这个名词&#xff0c;在技术领域中饱受瞩目。但它到底是什么&#xff1f;首先&#xff0c;DevOps并不仅仅是一个技术或者工具&#xff0c;它首先是一种文化&#xff0c;一种思想。DevOps是Development&#xff08;开发&#…

SQL 数据科学:了解和利用联接

推荐&#xff1a;使用 NSDT场景编辑器助你快速搭建可编辑的3D应用场景 什么是 SQL 中的连接&#xff1f; SQL 联接允许您基于公共列合并来自多个数据库表的数据。这样&#xff0c;您就可以将信息合并在一起&#xff0c;并在相关数据集之间创建有意义的连接。 SQL 中的连接类型…

macOS下Django环境搭建-docker运行Django

1. macOS升级pip /Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip 2. 卸载Python3.9.5版本 $ sudo rm -rf /usr/local/bin/python3 $ sudo rm -rf /usr/local/bin/pip3 $ sudo rm -rf /Library/Frameworks/Python.framework 3. 安装P…

【Linux操作系统】Vim:提升你的编辑效率

Vim是一款功能强大的文本编辑器&#xff0c;它具有高度可定制性和灵活性&#xff0c;可以帮助程序员和文本编辑者提高编辑效率。本文将介绍Vim的基本使用方法、常用功能和一些实用技巧。 文章目录 1. Vim的基本使用方法&#xff1a;2. 常用功能&#xff1a;2.1 文件操作&#…

Linux发行版分类与安装选择分析

1、引言 我们经常接触Linux&#xff0c;但是很多初学者往往面对众多的发行版不知所措。Ubuntu、CnetOS、Fedora等等。Linux众多的发行版让人眼花缭乱&#xff0c;本篇就来梳理一下目前Linux发行版的状况&#xff0c;让大家了解一个整体情况&#xff0c;理清不同版本的关系。 …

安全杂记 - 复现nodejs沙箱绕过

目录 一. 配置环境1.下载nodejs2.nodejs配置3.报错解决方法 二. nodej沙箱绕过1. vm模块2.使用this或引用类型来进行沙箱绕过 一. 配置环境 1.下载nodejs 官网&#xff1a;https://nodejs.org/en2.nodejs配置 安装nodejs的msi文件&#xff0c;默认配置一直下一步即可&#x…

【linux源码学习】【实验篇】使用bochs运行linux0.11系统(搭建一个自己的工作站)

目录 背景资源获取bochs环境搭建windowsbochs环境搭建linux声明 背景 最近看赵炯老师的《linux内核完全注释》&#xff0c;然后在最后一个习题里面看到使用bochs跑一下0.11的内核代码&#xff0c;本来觉得很难&#xff0c;但是如果做过一遍就会发现其实很简单&#xff0c;这个…

ld加上-static -lc参数报错`ld: cannot find -lc`处理方法

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810&#xff0c;uname -r看到内核版本是3.10.0-957.el7.x86_64&#xff0c;as --version看到as的版本是2.27-34.base.el7&#xff0c;ld --version看到ld的版本是2.27-34.base.el7。 absCallWithStart.s里边…

Crescent QuickPak Crack

Crescent QuickPak Crack Crescent QuickPak是一个32位ActiveX组件的综合集合&#xff0c;用于使用Visual Basic开发应用程序&#xff0c;这将减少开发时间并提高生产力。Crescent QuickPak包含Internet功能&#xff0c;用于打开、读取和解析IIS日志文件&#xff0c;将日志文件…

Spring Boot如何整合mybatis

文章目录 1. 相关配置和代码2. 整合原理2.1 springboot自动配置2.2 MybatisAutoConfiguration2.3 debug过程2.3.1 AutoConfiguredMapperScannerRegistrar2.3.2 MapperScannerConfigurer2.3.4 创建MapperFactoryBean2.3.5 创建MybatisAutoConfiguration2.3.6 创建sqlSessionFact…

无涯教程-Perl - if...elsif...else语句函数

if 语句后可以跟可选的 elsif ... else 语句&#xff0c;这对于使用单个if ... elsif语句测试各种条件非常有用。 if...elsif...else - 语法 Perl编程语言中的 if ... elsif...else语句的语法是- if(boolean_expression 1) {# Executes when the boolean expression 1 is tr…