【Java网络编程】计算机网络基础概念

就目前而言,多数网络编程的系列的文章都在围绕着计算机网络体系进行阐述,但其中太多理论概念,对于大部分开发者而言,用途甚微。因此,在本系列中则会以实际开发者的工作为核心,从Java程序员的角度出发,详细解读Java的网络编程核心内容。

一、计算机网络的“前世今生”与基础概念

   先来看看维基百科对于 计算机网络 这个名词的解释:

计算机网络是指将位于不同地理位置,但具有独立功能的多台设备,通过通信设备和线路连接起来,在网络操作系统,网络管理软件、网络通信协议的协调管理下,实现资源共享和信息传递的计算机系统。

简单来说,计算机网络就是用于满足不同机器之间通信、共享的一种系统。

其实一开始计算机网络是用于军事化目的的,因美国军方需要一种多节点的通信技术,确保在其一部分节点被摧毁后,也能够确保通信依旧正常,因此组建了一个部门ARPA并在1966年完成了ARPANET(阿帕网)项目,该项目也是最早的计算机网络之一。
当然,后续随着科技不断进步,各种网络相关的技术百家争鸣,出现了各式各样的网络技术,但同时也带来了很大的局限性,例如:不同的计算机网络之间并不能相互通信、不同操作系统之间无法通信、覆盖范围及其有限等。因此,ARPA需要一种技术将不同的计算机局域网互联,最终ARPA组织创建了一个新的项目被称为internetwork因特网,也被称为“互联网”。

   在internetwork项目的研发过程中,1974年,Robert E. Kahn以及Vinton G. Cerf两位教授正式提出了新的传输协议:TCP/IP协议,用于满足不同计算机网络之间的互联通信,ARPA1982年接受TCP/IP选定为Internet主要的计算机通信系统,作为因特网通信的“基石”。

1.1、计算机网络的组成

从组成上而言,计算机网络主要由主机、协议、传输介质以及软件四部分组成。

  • 主机:可以是手机、电脑、服务器、电子手表等任意计算机硬件。
  • 协议:各类定义归法的网络通信协议,如TCP/IP、IPX/SPX、AppleTalk等。
  • 传输介质:传输数据的通道,可以是实体铜线、电缆、光纤,也可以是无形的电磁波空间介质。
  • 软件:涵盖所有联网的应用,如QQ、微信、支付宝、淘宝、京东等各类软件。

1.2、计算机网络的功能组成

计算机网络体系主要提供的两个核心功能就在于:

  • 资源共享:资源子网实现。
  • 数据通信:通信子网实现。

资源子网以及通信子网也对应着OSI中的上三层和下三层。

   不过如果学习过计算机网络课程的小伙伴应该都知道,其实计算机网络是一个复杂而庞大的系统,由软件、驱动、硬件、线路等多部门共同组成,但对于这些理论性内容不再阐述,有兴趣的可以自行了解。

1.3、网络分层与OSI七层模型的由来

   计算机网络是个非常复杂的系统,由于最初各个计算机网络体系结构不同,导致双方网络之间无法互通,因此,20世纪90年代,ISO国际标准化推出了OSI模型打算制定计算机网络体系标准。

简单来说就类似于国内的普通话,因为不同省份的方言不同,导致不同地方的人交流起来并不方便,因此定义了“普通话”这一标准,所有人都遵循该标准进行交流沟通。

   但由ISO组织制定的OSI网络七层模型结构并没有得到广泛应用,实际中应用最广泛的是TCP/IP体系结构。换句话说,OSI七层模型只是理论上官方制定的国际标准,而TCP/IP体系结构才是事实上的国际标准。

PS:国际标准化组织提出的OSI模型未得到广泛应用的原因:
①制定时太过理想化,未考虑实际的应用场景。
②拆分过于精细化,实现起来过于复杂,运行效率并不高。
OSI体系的制定周期过长,导致按其标准生产的设备无法及时投入市场抢占份额。
OSI体系因为分层过多,设计也不合理,有些相同的功能在多个层次重复出现。

   但因为TCP/IP体系中的最后一层没有制定规范的标准,所以对于学习计算机网络完善体系时会缺失一部分,所以又提出了一种折中方案,也就是综合OSI以及TCP/IP两个体系的优缺点,提出了一种五层结构的原理体系,因此在接触计算机网络体系时,通常都会存在三种分层结构:

  • 法定标准体系:OSI七层结构。
  • 实际应用体系:TCP/IP四层结构。
  • 原理教学体系:五层结构。

二、OSI七层网络模型与TCP/IP协议簇

   计算机网络体系采用的是分层结构,每个层次之间互不干扰,上层不需要关心下层的具体实现,下层只需要为上层提供服务即可。

ISO组织定义的国际标准OSI模型中,是七层网络模型。
在实际应用最广泛的TCP/IP模型中,是四层网络模型。
当然,在计算机网络教学中,也提出了五层网络模型。

但无论多少层网络模型,其实本质上都是在叙述相同的内容,只不过拆分的精细度不同而已,三种网络模型对应如下:

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

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

相关文章

测试自动化流程设计思路

a) 背景介绍 基于当前互联网敏捷开发的现状,手工人力测试已不足以满足当前快速的版本迭代;以下将介绍一种可实现的自动化设计与使用。 b) 当前版本迭代流程 研发同学从代码库master分支拉出新代码进行研发工作得开发开发完成之后提交到代码库测试同学介入…

ES入门十一:正排索引和倒排索引

索引本质上就是一种加快检索数据的存储结构,就像书本的目录一下。 为了更好的理解正排索引和倒排索引,我们借由一个 **唐诗宋词比赛,**这个比赛一共有两个项目: 给定诗词名称,背诵整首给诗词中几个词语,让…

构建第一个ArkTS用的资源分类与访问

应用开发过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。 应用资源:借助资源文件能力,开发者在应用中自定义资源,自行管理这些资源在不同的设备或配置中的表…

男生穿什么裤子显腿长?男生显腿长裤子分享

现在市面上出现很多劣质而且不耐洗不耐穿的裤子,不但穿着体验感差,而且还可能会对皮肤有影响。为此作为一名穿搭博主,我专门做了这篇关于男生裤子的测评,希望大家能够通过一下的科普知识,对选择裤子有更详细的了解。 什…

Gradle概述、语法说明

Gradle是一种开源的自动化构建工具,它使用Groovy编程语言和Kotlin编程语言来编写构建脚本。Gradle结合了Apache Maven的依赖管理和Apache Ant的灵活性和控制。它是Android的官方构建工具,并且被许多Java项目用于构建、测试、发布和其他任务。 Gradle的核…

Rust 实现线程安全的 Lock Free 计数器

完整代码:https://github.com/chiehw/hello_rust/blob/main/crates/counter/src/lib.rs 定义 Trait Trait 可以看作是一种能力的抽象,和接口有点类似。Trait 还能作为泛型约束条件,作为参数的限制条件。 pub trait AtomicCounter: Send S…

Linux 特殊文件属性命令chattr和lsattr

特殊文件属性命令 chattr 和 lsattr chattr 和 lsattr 是有关数据安全的命令: 1)chattr作用及语法 a.命令作用: 给 文件或目录 加锁,不让别人修改和删除 b.命令语法: chattr 选项 文件 c.选项属性&#xff1a…

CDN加速原理那些事

名词解释 CNAME记录(CNAME record) CNAME即别名( Canonical Name );可以用来把一个域名解析到另一个域名,当 DNS 系统在查询 CNAME 左面的名称的时候,都会转向 CNAME 右面的名称再进行查询,一直追踪到最后…

初探 Spring Boot 源码:揭秘其高效魔法

Spring Boot 作为当今 Java 世界中最受欢迎的框架之一,以其简化配置和快速部署的能力赢得了开发者的广泛赞誉。但是,你是否曾经好奇过,是什么让 Spring Boot 如此高效和强大?本文将带你深入 Spring Boot 的源码,揭示其…

js str字符串和arr数组互相转换

js str字符串和arr数组互相转换 字符串转为数组 1、split()方法 返回的是原字符串的数组 var str "hello"; var arr str.split(""); console.log(arr); //输出["h", "e", "l", "l", "o"]2、Ar…

创建型模式--4.抽象工厂模式【弗兰奇一家】

1. 奔向大海 在海贼世界中,位于水之都的弗兰奇一家是由铁人弗兰奇所领导的以拆船为职业的家族,当然了他们的逆向工程做的也很好,会拆船必然会造船。船是海贼们出海所必备的海上交通工具,它由很多的零件组成,从宏观上看…

算法:完全背包问题dp

文章目录 一、完全背包问题的特征二、定义状态三、状态转移四、降维优化五、参考例题5.1、Acwing:3.完全背包问题5.2、Acwing:900. 整数划分 一、完全背包问题的特征 完全背包问题是动态规划中的一种经典问题,它的主要特征可以总结如下&…

LeetCode热题Hot100 - 删除链表的倒数第N个结点

一刷~ 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 思路: 用两个指针,第一个指针先往前走n步(注意起始点不是head),然后第二个指针和第一个指针一起移动,当第一…

[HackMyVM]靶场Flossy

难度:Medium kali:192.168.56.104 靶机:192.168.56.142 端口扫描 ┌──(root㉿kali2)-[~/Desktop] └─# nmap 192.168.56.142 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-01 21:01 CST Nmap scan report for 192.168.56.142 Host is up (0.00018s latency).…

浏览器的几种存储方式

浏览器的几种存储方式(图表形式) 存储方式特点应用场景示例有效期容量是否共享安全性Cookie存储少量数据,例如用户偏好、登录状态等用户认证、个性化设置登录状态、语言偏好会话或永久4KB同源中等Local Storage️永久存储数据,同…

从0开始搭建基于VUE的前端项目(四) Vue-Router的使用与配置

版本 vue-router 3.6.5 (https://v3.router.vuejs.org/zh/) 安装 安装要指定版本,默认安装的4版本的 npm install vue-router3.6.5代码实现 在src目录下创建router目录 router/index.js import Vue from vue import Router from vue-routerVue.use(Router)con…

Nginx入门 -- 解析Nginx中的基本概念:Keepalive

引言: Nginx是一款流行的开源Web服务器软件,被广泛用于构建高性能的Web服务器和反向代理。在Nginx中,Keepalive是一个基本概念,它在网络连接中起到重要的作用。本文将深入探讨Keepalive的工作原理和在Nginx中的应用。 1.Keepaliv…

A5 STM32_HAL库函数 之 CAN通用驱动程序所有函数的介绍及使用

A5 STM32_HAL库函数 之 CAN通用驱动程序所有函数的介绍及使用 1 CAN通用驱动程序所有函数预览1.1 HAL_CAN_Init1.2 HAL_CAN_ConfigFilter1.3 HAL_CAN_DeInit1.4 HAL_CAN_MspInit1.5 HAL_CAN_MspDeInit1.6 HAL_CAN_Transmit1.7 HAL_CAN_Transmit_IT1.8 HAL_CAN_Receive1.9 HAL_C…

fssh挂载远程服务器目录

fssh挂载远程服务器目录 1、服务器自动登录 1.1 生成SSH 密钥对 ssh-keygen -t rsa这个命令会生成一个私钥(默认保存在 ~/.ssh/id_rsa)和一个公钥(默认保存在 ~/.ssh/id_rsa.pub)。 你可以通过 -f 参数指定一个不同的文件名和路径来保存这些密钥。 会要求输入名称和密码…

聊聊Linux内核中内存模型

介绍 在Linux中二进制的程序从磁盘加载到内存,运行起来后用户态是使用pid来唯一标识进程,对于内核都是以task_struct表示。二进制程序中的数据段、代码段、堆都能提现在task_struct中。每一个进程都有自己的虚拟地址空间,虚拟地址空间包含几…