目录
前言
网络相信大家在生活中没有一天没有不使用网络,大家再使用网络的同时有没有仔细的思考过网络到底是什么呢。今天小编带你看个透。
网络发展史
在1946年世界上第一台计算机诞生,当时的计算机可以称为是单机模式,主要服务于军事领域,
但是当时的计算机没有通信功能,就是两台或者多台计算机之间通信功能。
在上世纪60年代末至70年代初,美国军方为了将若干台计算机连接起来,就开发了ARPANET网络。ARPANET于1969年建成。是我们现在所使用Internet的前身。
后来随着计算机的商用,ARPANET也就无法满足人们的需求了,于是Internet就出现了,Internet的出现可以让全球的计算机都互联起来,构成一个可以覆盖全球的网络系统。
Internet的本质就是数据传输和资源共享。
网络组网方式
接下来我们就介绍网络通信的基础知识。
局域网
局域网 LAN
局域网是一个小型网络,在局域网中各个计算机不需要连接互联网也能进行数据传输和资源共享。
比如我们常见的CS,就是一个基于局域网的单机游戏。
局域网的组网方式
组网方式可以有很多种
早起最早的局域网的组网就是直接那一根网线把两台计算机连接起来。
但是这种方式局限性太多了。
后来有演化出了局域集线器的组网方式。
可以看出来能连接的计算机数量可以有很多。
还有基于交换机的组网方式。
还可以基于交换机路由器的组网方式。
广域网
通过很多个路由器把很多个局域网连接起来,就构成了一个广域网。
广域网内部的局域网可以称为是广域网的子网。
其实所谓的局域网、广域网甚至还有城域网都是一个比较相对的概念。比如我们的一个学校可以看成一个局域网,一个家庭网络也可以看成是一个局域网,甚至一个城市都可以看成一个局域网。
所有对局域网、广域网、城域网没有一定的划分
通信基础
我们知道Internet的核心就是为了数据通信和资源共享。
其实就是不同局域网中不同主机间的不同进程进行通信和资源的共享。
IP地址
IP地址就是用来在不同的主机之间进行通信的时候进行定位主机的。
每个能上网的设备都需要一个唯一的IP地址(不考虑NAT)。 比如我们发送出一个数据,那么这个数据中肯定有目标IP地址,用来标识我们给哪里发送信息,还有源IP地址,用来标识我们从哪里发出来的。
就像我们发快递的时候要填写收货人和寄货人。
IP地址是由32位比特位组成。共有4个字节,由于二进制都是01的比特位,不便于我们的记忆,于是就把IP变为点分十进制的格式了。
比如192.168.1.1 我们可以看出用点分割出来了每个字节的十进制数据。
端口号
IP地址可以表示网络中的主机,那么端口号就是用来标识主机中的进程,所谓进程,就是运行在主机上的应用程序。
这就好比IP地址就是用来标识我要把数据发送到哪里,端口号就是用来发送到那里之后,具体发送给目标主机的那个运行程序,是QQ还是微信。
每个主机上的程序都有一个在本主机上唯一的端口号,更多关于进程的详细讲解,可以看看这篇文章操作系统之进程_陌上 烟雨齐的博客-CSDN博客
端口号是0-65535这个范围的数字,进程可以通过绑定这其中的任意一个,来接收网络上发送的信息。
不同的两个进程,不能共有一个端口号,但是一个进程可以绑定多个端口。
MAC地址
IP地址是在网络层进行路径规划的,mac地址也叫物理地址。
可以认为是你的身份证号码,因为mac地址是刻录在你的网卡中的,在网卡出厂的时候就已经刻在上面了。
mac地址的长度为48为bit。
协议
约定好发送双发发送的数据具体是咋样的,格式是咋样的,接收方也得能认识发送方发送的信息。
所谓协议就是标准,可以理解为在网络中的计算机都要遵守某些约定好的规则,这些规则就是协议,比如IP协议,tcp协议......才能进行网络通信。
协议的三要素有 语法 语义 时序。
协议分层
协议通常是有很多的,为了能更好的区分这些协议,就引入了协议分层的概念。
OSI分层模型
开放式系统互联模型。
OSI模型:开放式系统互连,规定了很多网络标准,目的是为了各个厂商各个下系统之间的互联互通
注意:由于OSI模型设计复杂,编程很难实现,目前的数据封装都在使用TCP/IP模型来封装数据
TCP/IP分层模型
需要注意的是,每一层都需要他的下一层来提供服务。
分层相当于约定了层级和层级之间的关系,要求上层协议调用下层协议,下层协议给上层协议提供服务。不能跨层调用。
分层之后,上层协议就不需要关心下层协议的细节了,下层也无需关系上层的细节。
这样就有提高了我们在编程中的灵活度。方便对某一层的协议进行替换。
各层具体工作
- 应用层:所关注的就是具体的数据
- 传输层:关注数据起点和终点。
- 网络层:主要负责不同局域网之间的路径规划。
- 数据链路层:网络上相邻结点之间的传输,比如一根网线连接的两台交换机。
- 物理层:网络通信中的基础设施,比如网线,光纤等等。
- 这样就可以让程序猿能时刻关注一个问题了。
封装分用
协议分层之后,网络传输就变得方便起来。
比如:我们在微信聊天界面给朋友发送个你好,然后我点击发送,对方就马上接收到了,在我们的感官中,是非常快的,但是互联网中确实发生了一系列非常复杂的事情,接下来我们具体来看看到底发生了什么?
封装
所谓封装,就是把我们的数据进行一些包装。
还是上面的例子,我们在微信编辑个你好,然后点击发送。
此时我们的应用层就拿到了数据,这个数据就是你好,然后应用层就进行包装,变成数据包。
然后进行发送,此时数据包到了传输层。
在传输层拿到了应用层的数据之后,传输层有很多协议,最常用的有tcp、udp,此处由udp为例,udp在对应用层发送下来的数据在进行封装,此时udp在封装的时候,就会加上发送方的端口,还有接收方的端口。
然后进行发送,数据到了网络层。
在网络层中,网络层在给发送下来的数据包封装,在上述基础上加上源IP地址和目标IP地址。然后网络层把封装好的数据进发送。
发送到了数据链路层。
数据链路层在对数据进行封装,加上源mac地址,在加上目标mac地址。
然后把封装好的数据包进行发送到物理层。
物理层把上述进程层层封装的0101的数据包转为电信号/光信号进行传输。
分用
封装已经完成了,接下来我们来看看分用的过程。
物理层在收到数据之后,把电信号/光信号转为0101的二进制之后,就发给数据链路层了。
数据链路层在收到了,把之前封装的东西都去掉,同时还用做一些事情,完了之后,就把数据发给网络层了。
网络层在收到数据之后和数据链路层的操作一样,然后交给上层传输层。
传输层也是一样,直到数据到底应用层。
到应用层之后,微信就取出这个信息,通过解析,显示在接收方的显示器中。
我们可以看出发送放就是一直在层层封装,而接收方一直在层层分用,层层拆分。
总结
以上就是网络中一些基础的知识, 是网络通信和网络编程中一个非常重要的部分,希望通过上述的描述,可以对网络有个整体的认识。如果不妥,请多指教。