当前位置: 首页 > article >正文

网络世界探索之旅:初始网络

现如今生活中,可谓是人人离不开网络了。

那么对于网络这一个人人熟知的东西,小编今天就来分享下它的一些相关知识吧。

背景:

在网络诞生的时候,网络可是个“稀罕”玩意,在军事领域中。其实,网络诞生地也是在军事领域当中。

现代互联网的前身,可以追溯到二十世纪六十年代末,美国国防部高级研究计划局资助的一个项目,名为ARPANET(阿帕网)。

而这个ARPANET的诞生,也是为了军事需求而诞生的。

在美苏冷战时期,美国军方对于传统集中性通信网络,发现满足不了在重大破坏性事件中保持持续通信了,所以急需一种去中心化、分布式的通信系统。

在1969年,ARPANET的第一个节点在加州大学洛杉矶分校建立,随后的斯坦福研究院,加州大学圣巴巴拉分校和犹他大也加入了网络。

这四个节点构成了最初的ARPANET。

后来,随着冷战结束。ARPANET的技术逐渐在科学界和研究机构中广泛使用,再次随着时间的推移,逐渐演变成今天的互联网,成为今天人人可以的互联网。

分享完背景,那么接着来分享下其他的吧。

计算机之间通过网络进行联络,即通过网络进行传输数据,此时可以称为网络通信。

随网络通信的不断发展,互联网的规模不断扩大。

那么由规模可以分出以下这几种类型:

1.个人区域网络(PAN)

范围:通常覆盖个人设备连接,范围在几米之内。

用途:比如手机、平板、笔记本、只能手表中的连接

技术:蓝牙、红外、USB等

2.局域网(LAN)

范围:覆盖一个小范围的网络,比如家庭、办公室、学校等,范围通常在几十米到几百米之间。

用途:用于连接局部区域内的设备,共享资源和互联网接入。

技术:以太网、WIFI等

3.城域网(MAN)

范围:覆盖到一个城市或大型园区,范围在几公里到几十公里。

用途:用于连接多个局域网,提供高速数据传输服务。

技术:光纤、微波、以太网

4.广域网(WAN)

范围:覆盖一个国家、地区甚至全球,范围从几百公里到无限延伸

用途:用于连接不同城市、国家或地区的网络,实现远距离通信。

技术:光纤、卫星、微波、MPLS(多标签交换)

5.全球互联网(Internet)

范围:覆盖全球,连接数亿计的设备

用途:提供全球范围内的信息共享,通信和服务。

技术:基于TCP/IP协议,结合各种底层网络技术(如光纤、卫星、无线通信)

值得注意的是,局域网中,组建网络的方式有很多种。

1.基于网线直连

2.基于集线器组建

3.基于交换机组建

4.基于交换机和路由器组建。

那么讲了这么多,对于,网络它是怎么传输的呢?
 

首先先来介绍一些相关名词:

1.IP地址

IP地址是描述一台电脑在互联网中所处的位置。

它是用一个32位整数表示的。

通过“点分十进制”这样的方式,来表示。

为什么通过点分十进制呢?这是为了方便人去阅读的。

那么值得一提的是,32位提供的范围就是2^32次方,大约为43亿。

对于当今网络设备量来说,是远远不够的,所以为了解决这个问题

引入了128位的整数去表示,它的范围,在理论上上基本是无限的,所以可以是满足未来更多设备的需求。

那么对于32位表示的地址格式,互联网中,称为IPV4

128位来表示的呢,互联网中,称为IPV6

2.端口号

区分当前主机上指定应用程序(进程)

这是因为,有了IP地址后,即使网络信息传输到主机后,该信息不知道传输到哪个应用。

所以就引入了端口号。

端口号同样也是一个整数,是一个2两个字节的整数(0->65535)

虽然看着数量挺多的,但是呢0->1023这些端口,都是有一些特定含义的,所以

后续编写代码呢,也是使用剩下的端口号进行使用。

3.协议

这个协议是网络协议的简称。

这个协议就是计算机网络中用于规范设备之间通信的规则和标准。

为什么需要协议呢?

这是因为,如若我们网络中,两个主机之间发送的数据,其解析数据的时候,它们解析的标准是各自独有的,那么此时的网络通信变得毫无意义是,就像是鸡同鸭讲。

所以为了双方发送的数据可以被互相理解。

所以需要一些协议进行规范,设定规则,这样子,双方计算机中发送的信息,才能被解析出来。

这个协议具体化的表现就在网络中数据包。

到这里,网络传输可以简单理解为,在基于网络协议的情况下,网络信息通过IP地址和端口号,

把信息以数据包方式传输到目标主机上。

那么问题又来了。

网络世界可谓是复杂多样,从而导致我们的协议是非常复杂,数量也是很多的。

如若将所有网络信息约定细节放到一个协议中,那么这个协议将会变得很繁重。

所以,就有了协议分层。

何为协议分层?

协议分层就是将网络通信过程分解为多个层次,每个层次负责特定的功能,并且通过定义清晰的接口与上下层交互。

那么当今互联网协议分层是怎么样的呢?

那么先介绍这个OSI的模型。

OSI

层级名称功能描述协议示例
7应用层提供用户接口和网络服务(如文件传输、电子邮件、网页浏览)。HTTP、FTP、SMTP、DNS
6

表示层

负责数据格式转换、加密和压缩。SSL/TLS、JPEG、MPEG
5会话层负责建立、管理和终止会话。RPC(远程过程调用)、NetBIOS
4传输层负责端到端的可靠数据传输(如流量控制、错误恢复)。TCP、UDP
3网络层负责数据包的路由和寻址(如IP地址)。IP(IPv4、IPv6)、ICMP、ARP
2数据链路层负责节点之间的可靠数据传输(如MAC地址)。Ethernet、PPP(点对点协议)
1物理层负责传输原始比特流(如电缆、光纤、无线电波)。Ethernet、Wi-Fi(IEEE 802.11)

那么接着介绍第二个模型:


TCP/IP模型

对于TCP/IP模型,它是一个五层模型,去掉了表示层和会话层

层级名称功能描述协议示例
5应用层提供用户接口和网络服务(如文件传输、电子邮件、网页浏览)。HTTP、FTP、SMTP、DNS
4传输层负责端到端的可靠数据传输(如流量控制、错误恢复)。TCP、UDP
3网络层负责数据包的路由和寻址(如IP地址)。IP(IPv4、IPv6)、ICMP、ARP
2数据链路层负责节点之间的可靠数据传输(如MAC地址)。Ethernet、PPP(点对点协议)
1物理层负责传输原始比特流(如电缆、光纤、无线电波)。Ethernet、Wi-Fi(IEEE 802.11)

对于当今互联网协议来说,使用广泛的是TCP/IP模型,而这个OSI模型呢,更多的是出现在教科书中,这是为什么呢?

这是因为,TCP/IP模型是早于OSI模型,在二十世纪七十年代,随着ARPANET的普及而去广泛使用了,OSI模型则是在二十世纪八十年代提出的。

在OSI提出之前,TCP/IP协议已经是 被广泛使用,还是一个较为成熟的协议了。

而且在真实的网络环境中,TCP/IP协议是更接近于真实的网络环境的。

值得一提的是,除了这个5层模型,其实还有一个四层模型,即去掉物理层。

这几个层中,应用层更多的是,应用程序去使用。

传输层和网络层呢,则是系统内核已经实现好了,只需调用提供的API即可

对于这个数据链路层和物理层来说,这是硬件设备出厂就自带了,更无需关心。

在Java编写代码中呢,我们更多的是和应用层和传输层打交道。

ok,对于协议分层,那就先分享到这里

接下来分享,网络通信中,数据怎么传输过去的,流程又是什么?

这里会设计到两个概念:封装和分用。

封装和分用

对于封装和分用又是什么呢?

封装:是指数据在发送方从上层协议传递到下层协议时,每一层都会在数据前面添加自己的头部信息(有时候会包括尾部信息),以便在接收方能够正确解析和处理数据

分用:是指数据在接收方下层协议传递到上层协议时,每一层会解析并移除头部信息,最终将原始数据传递到目标应用程序。

那么举个例子。

我们平时使用的微信聊天,

那么此时,我发送一个hello给到小编的女神,此时站在发送方的过程是怎么样的呢?

1.我在聊天输入框中输入hello的字符串,再点击发送。

微信这样的程序,就会把hello的内容从输入框读取到,并构造出一个“应用层数据包”。

此时构造数据包里内容会有什么呢?

数据包格式:发送者微信号;接收者微信号;发送时间;消息的正文\n

内容表示:12345;67890;2025-03-14 11:00;hello\n

这些内容,会被应用层进行序列化操作。

那么值得注意的的是,这些个数据格式,这里是举例的,真实的格式,是有微信团队开发成员所确定的。

2.此时,讲这些内容“打包”好后,微信会调用系统提供的API(传输层给应用层提供的API),

那么这些API会将这些内容(应用层数据包)作为参数传进来,嵌入到传输层的代码当中。

接着,传输层会把这些数据再次构造成一个传输层的数据包。

如何构造呢?

就是添加传输层协议在传输层数据包中。

在这个传输层协议,常用的主要有TCP、UDP

那么此时,我们假设是有的是UDP协议

那么数据包格式变成这样:

那么这里要值得一提的是,不同协议层,对于这些数据包有着不同称谓,传输层中叫做段

3.那么传输层做好工作后,接着到网络层了。

此时网络层也是接近底层了,所以此时呢,我们对于些个细节方面,系统提供的API也是完善好了,所以对于这些个调用过程,我们无需担心了,传输层会干它该干的活的。

在网络层呢,它也会把协议也会添加到数据包中

此时网络层的协议一般为IPV4

此时这一大段东西,在网络层叫做数据报。

4.网络层做好工作后,此时交给数据链路层了

此时数据链路层也会添加对应的协议和信息到之前的数据报中

我们平时使用最多的是,以太网协议

所以这里将会包装成:

此时这一段东西呢,在数据链路层中,称之为:帧

这里还有一个注意的是,帧是有头有尾的。

5.最后,链路层做好工作了,此时呢,物理层中的网卡,对于这些数据,进行传输,将这些数据转换成光信号、电信号、电磁波……

以上这是站在发送方视角,那么接下来站在接收方视角

接收方视角

1.物理层会接受到来自其他机器发送来的光电信号,此时呢,物理层会把这些光电信号转换层二进制字符串。

2.物理层转换的数据,交给数据链路层

数据链路层,拿到这个以太网数据包

拿出此处的报头和正文内容,分析报头内容,进行处理,然后决定这些正文内容是转发、是丢弃、还是自己保留。

3.网络层拿到了数据链路层解析好的数据后

此时网络层再次对此数据包进行解析,取出IP报头 和 正文内容。

此时再根据这个报头进行解析,是否是丢弃、转发、自身保留。

4.网络层把活干了之后,接下来到传输层了

传输也是同样的,取出UDP报头,分析

然后这里呢不再是转发什么的了,而是将最后剩下的正文内容分发给应用层协议了

注意,这里提取出的端口号会告诉正文内容转发到哪个应用

5.最后,轮到应用层干活了

此时应用层会得到网络层传输的正文内容,

此时,微信这个应用程序,对这些数据进行反序列化了。

那回过头来,序列化和反序列化是什么呢?

序列化:

是指将数据结构和对象转换为一种可以存储或传输的格式(通常为字节流/文本格式),以便在网络中传输或保存到文件中

示例:

class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

user = User("Alice", 25)

序列化:

{
    "name": "Alice",
    "age": 25
}

反序列化:

反序列化是指将序列化后的数据(字节流或文本)重新转换为数据结构或对象,以便程序能够使用。

示例:

{
    "name": "Alice",
    "age": 25
}
user = User("Alice", 25)

ok,那么对于一些网络相关知识,小编先分享到这


http://www.kler.cn/a/590234.html

相关文章:

  • KUKA机器人编程之signal的应用(包括创建组输入和组输出)
  • Day09 -实例:拿到加密密文进行解密
  • Tomcat新手登峰指南:从零到部署的原子化实践
  • repo init 错误 Permission denied (publickey)
  • 机器学习扫盲系列(2)- 深入浅出“反向传播”-1
  • 3.17学习总结 java数组
  • 18.使用读写包操作Excel文件:xlrd、xlwt 和 xlutils 包
  • 浅谈AI落地之-关于数据增广的思考
  • Tomcat线程池详解,为什么SpringBoot最大支持200并发?
  • 从零搭建微服务项目Pro(第6-1章——Spring Security+JWT实现用户鉴权访问与token刷新)
  • 【前端】入门基础(一)html标签
  • Git 面试问题,解决冲突
  • ‌RTSPtoWeb, 一个将rtsp转换成webrtc的开源项目
  • C++之list类及模拟实现
  • Redis 安装详细教程(小白版)
  • 《企业级 Webpack 5 优化实战:构建速度提升 400% 的完整方案》
  • VO和DO在前后端中的对应关系详解
  • 中间件漏洞之weblogic
  • Centos离线安装openssl-devel
  • C/C++蓝桥杯算法真题打卡(Day6)