网络世界探索之旅:初始网络
现如今生活中,可谓是人人离不开网络了。
那么对于网络这一个人人熟知的东西,小编今天就来分享下它的一些相关知识吧。
背景:
在网络诞生的时候,网络可是个“稀罕”玩意,在军事领域中。其实,网络诞生地也是在军事领域当中。
现代互联网的前身,可以追溯到二十世纪六十年代末,美国国防部高级研究计划局资助的一个项目,名为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,那么对于一些网络相关知识,小编先分享到这