一、局域网与广域网
1.局域网(LAN)
局域网:即Local Area Network,简称LAN。Local即标识了局域⽹是本地,局部组建的⼀种私有⽹络。局域⽹内的主机之间能⽅便的进⾏⽹络通信,⼜称为内⽹;局域⽹和局域⽹之间在没有连接的情况下,是⽆法通信的。以下是实现局域网的几种方式:
(1)基于网线直接连接,如图1.1.1所示:
(2)基于集线器组建,如图1.1.2所示:
要注意的是,集线器是把一个网口扩展成多个,扩展出的网口之间会有冲突,所以同一时刻只有一条路能通,相比之下,交换机则是扩展出这些路线,各个网口之间互不影响。
(3)基于交换机组建,如图1.1.3所示:
(4)基于交换机和路由器组建,如图1.1.4所示:
2.广域网(WAN)
广域网:即Wide Area Network,简称WAN。通过路由器,将多个局域⽹连接起来,在物理上组成很⼤范围的⽹络,就形成了⼴域⽹。⼴域⽹内部的局域⽹都属于其⼦⽹。其大致的实现逻辑可参考图1.2所示的方式:
二、网络通信基础
1.IP地址
IP地址描述了一个设备在网络上的位置,在生活中,我们地址的地址例如:XXX省XXX市XXX区XXX小区这样来进行描述,在计算机中则是通过数字来进行描述地址(IP地址),IP地址是一个32位的二进制数,通常被分割成4个“8位二进制数”(也就是4个字节),为了方便表示,往往把IP地址表示成“点分十进制”的方式,使用3个.把四个字节分成四部分,每部分取值范围是0~255。例如:192.168.0.100。
2.端口号
IP地址描述了主机在网络中的位置,那么端口号则是描述一个主机上的哪个应用程序,有了IP地址可以确定主机,但是一个主机上可以存在很多个程序在使用网络,这时候当主机收到网络数据时就需要区分出这个网络数据是要交给哪个应用程序的,这就像发送快递时,我们不仅需要指定收货地址(IP地址),还需要指定收获人(端口号)。
每个程序在进行网络通信过程中都有一个端口号,这个端口号可以是用户手动指定,也可以系统自动分配,但是一个主机上程序之间的端口号不能冲突,这个端口号是一个0~65535的整数。
3.认识协议
在有了IP地址与端口号后,我们可以确定网络中唯一的主机的唯一程序(进程),但是还是存在一个问题,网络通信是基于二进制0/1数据来传输的,如何描述对方我们发送的数据是什么样的呢?
网络通信传输的数据类型有很多种:图片、音乐、视频、文本等,同一个类型数据格式也可能不同,这时候就需要协议来规定双方在网络传输过程中的数据格式了。
协议:⽹络协议的简称,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵 从的⼀组约定、规则。如怎么样建⽴连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能 相互通信交流。
例如市面上有很多不同形状的灯管,但是他们和灯座上的接口是一定能对应上的,这是因为所有生产灯管的厂商都统一遵循灯管与灯座之间的规格,所以可以确保任意灯管与灯座之间的搭配是可行的,这就是现实生活中协议的一种体现。
4.网络通信五元组
在TCP/IP协议中,⽤五元组来标识⼀个⽹络通信:
1. 源IP:标识源主机。
2. 源端⼝号:标识源主机中该次通信发送数据的进程。
3. ⽬的IP:标识⽬的主机。
4. ⽬的端⼝号:标识⽬的主机中该次通信接收数据的进程。
5. 协议号:标识发送进程和接收进程双⽅约定的数据格式。
三、协议分层
1.分层的好处
对于⽹络协议来说,往往分成⼏个层次进⾏定义。 分层的初心是为了让复杂的一个协议变成简单的多个协议,并且还附带了很多好处:
- 上层协议直接使用下层协议即可,不需要了解下层协议的细节;
例如这里我们打电话,我们只要会说汉语就可以,并不需要了解电话的工作原理。
- 某一层的协议进行替换之后,对于其他层没有什么影响。
例如下图,当我们语言协议发生变化,或者电话协议发生变化,并不会影响我们的使用
2.OSI七层模型
OSI:即Open System Interconnection,开放系统互连
- OSI 七层⽹络模型是⼀个逻辑上的定义和规范:把⽹络从逻辑上分为了7层。
- OSI 七层模型是⼀种框架性的设计⽅法,其最主要的功能使就是帮助不同类型的主机实现数据传 输;
OSI七层模型划分为以下七层:
OSI 七层模型既复杂⼜不实⽤:所以OSI七层模型没有落地实现。实际组建⽹络时,只是以OSI七层模型设计中的部分分层,也即是以下TCP/IP五层模型来实现。
3.TCP/IP五层模型
TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP通讯协议采⽤了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的⽹络来完成⾃⼰的需求。
- 应⽤层:负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远 程访问协议(Telnet)等。我们的⽹络编程主要就是针对应⽤层。
- 传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发 送到⽬标主机。
- ⽹络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表 的⽅式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)⼯作在⽹路层。
- 数据链路层:负责设备之间的数据帧的传送和识别。例如⽹卡设备的驱动、帧同步(就是说从⽹线上 检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作。 有以太⽹、令牌环⽹,⽆线LAN等标准。交换机(Switch)⼯作在数据链路层。
- 物理层:负责光/电信号的传递⽅式。⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同 轴电缆(现在主要⽤于有线电视)、光纤,现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理 层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等。集线器(Hub)⼯作在物理层。
4.网络设备所处分层
(1)主机
它的操作系统内核实现了从传输层到物理层的内容,也就是TCP/IP五层模型的下四层。
(2)路由器(传统)
它实现了从网络层到物理层,也就是TCP/IP五层模型的下三层。
(3)交换机(传统)
它实现了从数据链路层到物理层,也就是TCP/IP五层模型的下两层。
(4)集线器
它只实现了物理层。
当然,随着现在网络设备技术的不断发展,也出现了许多3层或4层的交换机,4层路由器,所以上述的说的网络设备都是传统意义上的交换机和路由器。
5.封装与分用
封装与分用是网络传输数据过程中最核心的流程,这里我们以QQ发送与接收信息的过程来模拟封装与分用的步骤。
(1)封装
①应用层(应用程序)
在应用层中所用到的应用层协议往往是实现这个程序的程序员自己定义的,例如QQ从消息输入框中获取到用户输入的hello就把这个字符串构造成一个应用层数据包,这样一个应用层数据包就是按照QQ这个程序自定义的应用层协议约定的格式来构造的。
应用程序会调用操作系统提供的api,把这个数据包交给传输层。
② 传输层
传输层把应用层传来的数据作为一个整体再根据传输层的协议构造成一个传输层数据包,传输层中涉及到的协议最主要的就是TCP协议与UDP协议,这里假定使用的是UDP协议进行通信,构造出来的数据包就是一个UDP数据包。
像上面添加报头的过程就叫做“封装”,其实就是字符串的拼接,只不过报头有一定的数据结构,这里的UDP报头虽然不能保护数据,但是可以起到“贴标签”的类似效果,对于UDP报头最主要的信息就是源端口和目的端口。
拼好的传输层数据包就可以交给下一层网络层继续进行封装了。(交给下层,指的是下层协议提供一组api,上层调用这个api(函数),并且把刚才构造好的数据通过参数传过去,下层协议就可以来处理这个数据了)。
③网络层
网络层涉及到的最核心的协议就是IP协议,网络层通过IP协议将刚才传输层的UDP数据包作为一个整体再拼上一个IP协议的报头,构造成一个IP数据包。
这里IP报头中最关键的信息就是源IP和目的IP了。
构造完IP数据包后,IP协议继续调用数据链路层的api,把数据再交给数据链路层的协议进行处理。
④数据链路层
数据链路层中涉及到的核心协议是以太网协议,数据链路层通过以太网协议将网络层传来的IP数据包作为整体加上一个帧头与帧尾构造成一个以太网数据帧。
封装结束后将以太网数据帧继续传给物理层。
⑤物理层
把上面传来的以太网数据帧,二进制结构(一串0 1 0 1这样的数据)转换成光信号(光纤,通过光的频谱进行编码)/电信号(网线,高低电平)/电磁波(无线wifi),然后进行发送。
经过上面的一系列操作,数据才算从A的电脑中发送出去了,这也就是封装的过程。
(2)分用
分用的过程可以理解为封装的逆过程,这里我们就不考虑信息在中间的传输过程了,默认信息已经发送到B的电脑中,开始模拟分用的过程。
①物理层
B的物理层收到了光信号/电信号/电磁波,就会把这些物理信号转换成数字信号(二进制的0 1 0 1数据),得到一个以太网数据帧,进一步的把得到的数据帧交给数据链路层进行处理。
②数据链路层
数据来到数据链路层后,接收方要与发送方使用一样的协议才能进行分用,然后按照以太网数据帧的格式进行解析取出其中的载荷再交给上层协议。
③网络层
按照IP协议的格式进行解析,取出其中载荷再交给上层协议。
④传输层
前面我们约定传输层用的UDP协议,所以这里我们按照UDP协议格式进行解析,取出载荷再交给上层协议。
⑤应用层
按照QQ应用程序内部的应用层协议格式来解析数据,QQ程序拿到这些信息后就会在窗口给你弹出提示并且把消息、消息的发送者、发生时间都显示到聊天窗口上。
到这分用的过程就演示完了,其实数据在传输过程中经过交换机/路由器时也会进行封装与分用,经过一个个交换机/路由器数据才会传到目的地。
四、基本术语介绍
在每层协议中封装出的数据其实都有自己的一个名词后缀,标准如下:
包(packet) IP数据包
段(segment) TCP数据段
报(datagram) UDP数据报
帧(frame) 以太网数据帧
五、结语
文章到此就要结束了,本篇文章主要介绍了计算机网络的基本概念与流程,可以让大家更直观的认识到计算机网络,如果你认为读了本篇文章您有所收获,希望给本篇文章点个赞,收藏走一波,后面我会继续与大家分享计算机网络的相关知识,关注博主不迷路~~~您的支持就是我创作最大的动力。