NIO实现聊天室之:一切都要从网络编程的基础开始聊起!

简介: NIO实现聊天室之:一切都要从网络编程的基础开始聊起!

一、写在开头

大家好,Build哥回来啦!停更了大概2个月之久,之前有段时间去写小说去了,后来又因为公司活太多,牛马干的太投入,就拉下了博客的更新,国庆节期间,难得的闲下来,准备回归老本行啦。

大致的翻看了一下之前更新的内容,已经写到了Java的IO部分,作为网络传输的一大重点知识,IO至关重要,而为了更好的理解和使用IO,我们今天要延展的来聊一聊Java中的网络编程。其实,这句话说的不太严谨,网络编程并非Java独有,所有依赖Web端的程序语言,或者应用们都离不开网络编程。
二、网络编程的基础

ok,闲话少叙,咱们直入主题,来一起学习一下网络编程,在开始学习之前,我们应该了解一下我们日常生活中都离不开的互联网及周边产品(路由器,网址,手机,电脑)等。
2.1 计算机网络

电脑对于我们来说十分熟悉啦,在多台联网电脑之前,我们可以聊天,视频,邮件交流,也可以通过不同的媒介平台进行互通,所有在线的用户设备之间,像一张大网串联起来,互通有无,这就是计算机的网络!

image

如上图,是一张概括的网络拓扑简图,非常形象易懂的囊括了我们当下的互联网世界。其中,用户设备如手机,电脑这些用于访问网络资源,如看剧,刷新闻,而网络交换机则是让手机能上网的桥梁,用来连接局域网内的设备和路由器,而路由器呢,主要工作是实现不同网络之间的路由,可以联通互联网,而为了防止一些为经过授权的访问侵入设备,设备的网络中均设有一道防火墙,用于拦截未授权请求;而互联网呢,则是全球互通互相的一个信息资源网,服务器无需多谈,用于托管网络应用和数据的处理和存储站。

那么,看到这里我们有了这样一个疑问,全球不同国家和地区存在着不同的局域网,遵循着不同的网络协议,是怎么做到全球互通互联网的呢?伟大的先辈们早就考虑到这点啦,因此,最早制定规范的那帮人,就互联达成了全球性的协议规范,那就是TCP/IP协议,下面我们聊到协议时会说。
2.2 IP

对于IP来说,大家也很熟悉,我们在日常上网的过程中,所说的网址,其实主要就是这个IP(Internet Protocol),中文译作国际互联协议。它像一个身份证号一样,唯一的标识着网络中的一个接口,任何联入到互联网中的计算机都只要拥有一个IP地址。

目前IP分为IPv4和IPv6,因为v4版本采用32位地址,算起来越42亿个地址,目前已经用尽,所以推出了v6版本,采用128位地址,340万亿亿亿亿个地址,对,你没看错,2的128次方个地址就是这么多,这个数字是人类灭绝了都用不完的。

一个特殊的 IP 地址,称之为本机地址,它总是127.0.0.1

IPv4(如:101.302.88.22)
IPv6 (如:2001:0DA8:100A:0000:0000:1020:F2F3:1428)

image

我们通过ipconfig可以看到我们计算机的网络信息,我们的计算机除了本地的127.0.0.1之外,还有一个IP地址,如果多个网卡,还会有多个IP地址,那么不同计算机之前是如何通信的呢?

这里涉及“网络号”这个概念,网络号由IP和子网掩码计算得来,如果两个计算机之间的网络号相同,则说明两台计算机在同一个网络中,可以直接通信,如果不同,则不在同一个网络,需要通过路由器或者交换机进行间接通信,这就是网关。
2.3 域名

上面说网络上的地址多数指的是ip,很多人会奇怪,比如我们像登录百度时,输入的并非xxx.xxx.xxx.xxx格式的,而是www.baidu.com,而这段组合就是域名!我们通过域名解析服务器 DNS 负责把域名翻译成对应的 IP,客户端再根据 IP 地址访问服务器。

很明显,相比较一堆数字组合的IP地址来说,域名更容易被记住!我们通过nslookup命令,可以查看域名对应的ip地址。

image

当然,我们在上面说的本机ip地址 127.0.0.1 也有对应的本机域名:localhost

image
2.4 网络模型

对于多种设备公用互联网这件事,并非我们图1中几条线就可以搞定哒,其内部,底层设计十分复杂,为了能够在全球范围内达成一种公用的标准接口,很多组织都发布了 类似的标准规范,其中最著名,也是现在普遍认可的是--开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写:OSI;简称为OSI模型)是一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。

OSI模型分为七层,自下而上为 物理层(Physical Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表达层(Presentation Layer)、应用层(Application Layer)。

image

但在我们在互联网实际使用的是 TCP/IP 模型,并不是对应到 OSI 的 7 层模型,而是大致对应 OSI 的 5 层模型,也有人说是四层模型,这个看自己,无所谓,主要是要理解这个流程。

2.5 常用协议

在上图OSI模型中,我们可以看到在应用层、传输层、网络层、数据链路层都对应着很多的网络协议,我们可以将之统称位TCP/IP协议簇,我们接下来就简要的介绍一下其中几个重要的协议:[box.jm-huayu.com)
[box.netsoftok.com)
[box.hummerpower.com)
[box.dmsckj.com)
[box.lushun126.com)
[box.mengyimei.net)

IP协议(互联网协议):一种分组交换的协议,不保证可靠传输,负责将数据包从源主机路由到目标主机,是网络层的一个协议;
TCP协议(传输控制协议):TCP协议是建立在IP的基础上的,是传输层的协议。IP协议负责传输数据,而TCP协议可以在建立了安全连接的基础上,控制数据传输,保证可靠性,并且支持双向通信,像HTTP,HTTPS都是建立在TCP协议之上的。
UDP协议(数据报文协议):与TCP协议一样,都是传输层的协议,不同的是它是无连接协议,不保证可靠传输。在通信前不需要建立连接,因此它的传输效率比 TCP 高,而且 UDP 协议比 TCP 协议要简单得多。选择 UDP 协议时,传输的数据通常是能容忍丢失的,例如,一些语音视频通信的应用会选择 UDP 协议。

三、总结

今天就说这么多啦,主要介绍一下网络编程相关的基础知识,在后续的博文中针对网络编程所需要的内容,在进一步的整理与细化。

相关文章
|
24天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
16天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
20天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2577 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
18天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
3天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
2天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
163 2
|
20天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1576 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
22天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
977 14
|
4天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
221 2
|
17天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
734 9