目录
1、网络发展史
1.1、独立模式
1.2、网络互连
1.2.1、局域网(LAN)
1.2.2、广域网(WAN)
1.2.3、广域网和局域网的区别
1.2.4、局域网组建网络的方式 (了解)
2、网络通信基础
2.1、IP地址
2.2、端口号
2.3、认识协议
2.4、协议分层
2.5、OSI七层网络模型
2.6、TCP/IP五层模型
2.7、封装和分用 (大体了解封装和分用的流程)
发送方(封装)
接收方(分用)
2.8、网络设备所在分层
2.9、五元组
这个时候的计算机之间是相互独立的,两个设备之间是无法进行交互的。
随着时代的发展,越来越需要计算机之间互相通信,共享然间和数据,即一多个计算机协同工作来完成业务,就有了网络互联。
网络互连:将多台计算机链接在一起,完成数据共享。数据共享的本质就是网络数据传输,即计算机之间通过网络来传输数据,也成为网络通信。
根据网络互连的规模不同,可以划分为局域网(LAN)和广域网(WAN)。
局域网,即Local Area Network,简称LAN。Local即标识了局域网是本地,局部组建的一种私有网络。局域网是指在某一区域内有多台计算机互联成的计算机组。一般是方圆几千米内。局域网是封闭型的,可以由一个房间中的两台电脑组成,也可以由如网吧中的上千台计算机组成。局域网内的主机之间能够方便的进行网络通信,又称为内网;多个局域网之间在没有链接的情况下,是无法通信的。
广域网,即Wide AreaNetwork,简称WAN。又称为广域网、外网、公网。广域网是指通过路由器,将多个局域网链接起来,在物理上组成很大范围的网络,就形成了广域网,广域网内部的局域网都属于其子网。
局域网(LAN)主要是指小范围内的计算机互联网络,其范围比广域网(WAN)要小很多。
广域网上的每一台电脑都有一个或者多个广域网IP地址,广域网IP地址一般要到ISP处交费之后才能申请到,广域网IP地址不能重复;局域网上的每一台电脑都有一个或者多个局域网IP地址,局域网IP地址是局域网内部分配的,不同局域网的IP地址可以重复,不会相互影响。
(1)基于网线直连
(2)基于集线器组件
(3)基于交换机组件
(4)基于交换机和路由器组建
集线器:集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离。集线器不进行碰撞检测,它的每个接口简单的手法比特,收到1就转发1,收到0就转发0.集线器不具备交换机所具有的MAC地址表,所以它法发送数据时都是没有针对性的,而是采用广播的方式发送。
交换机:从定义上来看,交换机是一个网络设备,能链接多台设备到计算机网络中,通过数据包交换的方式,将数据转发到目的地。从功能上看,交换机是用与链接多台设备,让其具备网络互通的条件。交换机上有很多端口,这些端口是通过MAC地址,也就是网卡的硬件地址来识别,从而达到数据交换的功能;交换机的工作原理很像理想化的交通,各个岔路口(交换机的端口)的车辆(数据)都有自己的专用车道,每辆车都有自己的目的地(MAC地址),所以主干道的交通不会堵塞(交换机的特点:无阻塞的交换数据)。
路由器:路由器是互联网的枢纽,是链接Internet中个局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送数据。
❓网络互联的目的是进行网络通信,也就是网络数据传输,跟具体一点,是网络主机中的不同进程间,基于网络传输数据。
❗那么,在组建的网络中,如何判断到底是从那台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。
概念:IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址,简单说,IP地址用于定位主机的网络地址。就像我们发快递一样,需要直到对方的收获地址,快递员才能将包裹送到目的地。
格式:IP地址是一个32为的二进制数,通常被分割为4个"8为二进制数"(也就是4个字节),如:01100100.00000100.00000101.00000110。通常使用"点分十进制"的方式来表示,即a.b.c.d的形式(a,b,c,d都是0~255之间的十进制整数)来表示,如:192.168.2.10.
❓IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,有那个进程来接收这个数据呢?
❗这个时候就需要我们来了解一下端口号了。
概念:在网络通信中,IP地址用来表示主机网络地址,端口号可以标识主机中发送数据,接收数据的进程。简单来说:端口号用于定位主机中的进程。类似发送快递时,不光需要只从收获地址(IP地址),还需要指定收获人(端口号)。
格式:端口号时0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
❗❗❗注意事项:
两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
一个进程启动后,系统会随机分配一个端口(启动端口)
程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送,接收数据。
进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定端口号,但是不同的进程不能绑定一个端口号。
❓上述了解了IP地址和端口号,网络通信通过IP确定主机的网络地址,端口号用来确定接收信息的进程(程序)。网络通信是基于二进制的0/1代码进行数据传输的。发送方如何告诉接收方信息是什么?是什么格式呢?对方在得到这些0/1代码之后需要按照什么格式对信息进行解析呢?
❗这个时候就需要使用协议来规定双方的数据格式。这就好比我们同别人进行交流的时候,两个人都使用汉语,那么在交流的过程中,两人可以立即知道对方的意思;但是一个人使用汉语一个人使用英语,这个时候,双发谁都不明白对方的意思,这样就无法进行交流了。
网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵守的一组约定、规则。例如怎样建立链接、怎样相互识别等。只有遵守这个约定,计算机之间才能相互通信。
✨网络协议的三要素:
1️⃣语法:及数据于控制信息的结构或格式;
- 就类似于打电话时,双方使用同样的语言:普通话
2️⃣语义:即需要发出何种控制信息,完成何种动作以及做出何种响应。
- 语义主要是用来说明通信双发应当怎样做,用于协调于差错处理的控制信息。
- 类似打电话时,说话内容。
3️⃣时序:即时间实现顺序的详细说明。
- 时许定义了何时进行通信,先将什么,后讲什么,讲话的速度等,比如是采用同步传输还是异步传输
在网络通信中,需要约定的协议是非常复杂的,因为我们的网络本身就是非常复杂的,网络上边链接的设备非常多,彼此之间的通信路径也就很复杂的,这样网络通信面临的环境也就很复杂,所以面对复杂的环境,就需要复杂的协议,但是协议太复杂也不是很好,这会让我们的学习、维护、使用的成本都很高,面对这样的问题,我们可以将复杂的协议拆分成多个小的简单的协议,这些拆分出来的小的协议,有些协议的作用或者定位是类似的,就可以对这些小协议,进行分类(只是进行了分组),同时针对这些不同的类别,进行分层(约定了层级之间的调用关系,要求上层协议调用下层协议,下层协议给上层协议提供支持,不能跨层调用。)
✨ 协议分层的好处:
- 分层之后就可以做到,层次之间,耦合程度比较低,上层协议不必了解下层的细节,下层也不必了解上层的细节。(就如同上述的图片一样,将协议分成了两层,将汉语协议替换成英语协议,不会影响到电话协议,不论使用什么语言,都能进行交流。)
- 方便对某一层的协议进行替换。(就如同上述的图片,将电话协议换成无线电协议,汉语协议没有发生变换,照样可以进行通话)
OSI七层模型包括了应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
由于OSI七层模型既复杂又不实用,所以OSI七层模型并没有在实际中被大量使用,实际组建网络的时候,只是以OSI七层模型设计中的部分分层,也就是下面的TCP/IP五层模型来实现的。
我们在很多资料上可能看到四层模型,这种表述是因为更多的关注软件层面的协议,物理层是纯硬件的,和程序员的关系不大。
- 应用层:和应用端的程序紧密相关,关注传输过来的数据到底是如何使用的。是用来进行直接显示,还是参与运算等等。
- 传输层:不考虑中间路径,只关注起点和终点。(这就好比我们在淘宝上买快递的时候,我们和卖家只关注起点和终点)
- 网络层:主要负责两个遥远的节点之间,进行路径的规划。选择出一个合适的路径(就好比你的快递从上海发往西安,上海到西安之间存在很多条路径,可以选择从上海直达西安,也可以选择从上海经过南京到达西安,也可以是从上海到达苏州再到徐州再到西安,中间存在很多条路都可以进行选择)
- 数据链路层:主要关注的是两个相邻结点之间的传输,就比如交换机和路由器之间是通过网线、光纤或者是无线的方式将两个网络设备链接在一起。(就好比快递公司在运输快递的时候,规划出的路径上两个相邻地点之间,到底是通过火车、卡车还是飞机运送这些快递)
- 物理层:网络通信的基础设施,网线、光纤,网络接口等,真实的硬件设备所遵守的硬件协议。
这样分层之后就像上述说的方便了学习和维护,降低了程序员的心智负担,在同一时刻只关注一个子问题。 传输层、网络层、数据链路层、物理层这四层只关注数据的传输,不关注数据是用来干什么的,应用层是关注数据是用来做什么的。而且关注数据传输的四层是操作系统内部已经分装好的,我们没有能力进行修改,我们进行的网络编程主要还是围绕应用层展开的。
我们了解过网络协议中每层的作用,那具体一条数据是怎样在网络中传输呢?
我们以qq发送一条消息为例,假设用户A给用户B发送了一个"早安",时间为2023-6-1 8:30:00,下面来模拟一下信息的发送过程。
1️⃣应用层将数据封装成数据报:qq应用程序在拿到A用户的数据后进行封装,封装成应用层数据报,这个操作本质上就是字符串拼接(将发送人的qq号,接收者的qq号,发送时间,发送内容放在数据包中进行拼接),当然数据报当中的每种信息为了区分可能会采用分隔符或者长度信息来进行界定。
我们这里只是 对这个qq的应用层数据包进行了假设,真实的qq应用层数据包是怎样组成的,那就只有qq的程序员知道了。
应用层调用传输层提供的API,将应用层数据报交给传输层。
2️⃣传输层:传输层拿到数据之后会在应用层封装的数据报的基础上再次进行封装,传输层有很多协议,最典型的是TCP和UDP协议,我们这里以UDP协议为例。UDP数据报由数据载荷和UDP数据报头组成。应用层的数据报,作为UDP数据报的数据部分(载荷)。UDP数据报头中存储的就是一些数据信息(例如源端口,目的端口等)。这里添加的UDP报头本质上还是字符串拼接。
举个例子来理解一下,当我们在淘宝上买了东西,卖家发货的时候,需要用包装袋,将商品包装起来,交给快递站,快递站在进行快递运输的时候,会在装一个袋子,袋子上贴一张标签,上边写这发货地,和收货地等等信息。这些做完之后,将这样的一个包裹作为一个整体就可以进行运输了。这个标签就相当于UDP报头。
UDP数据包封装好之后,传输层调用网络层的API,将传输层的数据包交给网络层。
3️⃣网络层:网络层拿到数据报之后,在传输层封装的数据报基础上再次进行封装,网络层最常见的协议,就是IP协议。网络层对得到的数据报添加上IP协议报头,IP数据报就由IP协议报头和数据载荷组成,UDP数据报就做IP数据报的数据部分(载荷)。
IP数据报封装好之后,数据链路层调用网络层API,将网络层的数据报交给数据链路层。
4️⃣数据链路层:数据链路层最典型的协议就是以太网协议,我们平时使用网络上网就遵守以太网协议,我们将其称为以太网,包括我们的网线也遵守以太网协议,所以也叫做以太网线,以太网协议在数据链路层和物理层都进行了一些规定。
数据链路层拿到UDP数据报之后,对该数据报再次进行封装,添加以太网帧头和帧尾。这里也是字符串的拼接。以太网帧头中包含了一些具体的属性,比较关键的属性是MAC地址,也叫做物理地址,也是描述一个主机,在网络上的位置。
❓这个时候很多老铁就有疑问了,MAC和IP不是重复了吗?
❗MAC的功能和IP很相似,但是当下将这两个地址分别作用于不同的用途。IP用来进行网络层的路径规划,MAC用来描述数据链路层,两个即将传输的相邻结点。就好比快递(数据)在运输(传输)的时候网络层对其进行了路径规划,比如从上海到西安,路径为上海->苏州->徐州->西安,这个时候数据传输的时候,数据从上海到苏州,那么源MAC就是上海,目的MAC就是苏州。到达苏州之后,源MAC就是苏州,目的MAC就是徐州。MAC地址随着数据在路径中的传输,会随时发生变化。
✨提示:理论上MAC地址是和网卡绑定的,全世界的每个网卡都会有一个自己的唯一的MAC地址。
最后数据链路层将数据向下传输给物理层。
5️⃣物理层:物理层拿到这些二进制代码之后,转换成光信号或者电信号或者电磁波信号,进行传输。
接收过程和发送过程刚好相反。
- 发送,从上到下,一次封装,新增报头;
- 接收,从下到上,一次分用,去掉报头。
忽略中间的转发过程,只考虑B用户的电脑收到这个消息的情况。
1️⃣物理层:网卡收到的是电信号/光信号/电磁波信号这样的信息,物理层会对这些信号进行解析,还原成0101这样的二进制序列。
如果电脑在接收数据的时候,使用的介质是以太网线,这个时候根据以太网协议,将这些数据转换成以太网数据帧。
这个时候物理层将这个数据帧交给数据链路层。
2️⃣数据链路层:当数据链路层拿到这个以太网数据帧数据之后,会根据以太网协议的格式将这个数据进行解析,把以太网帧头和帧尾去掉。取出中间的载荷,这个载荷就是IP数据报。
将解析完成的IP数据报传输给网络层。
3️⃣网络层:网络层拿到这个数据之后,根据IP协议对该数据报进行数据解析,也就是去掉IP报头,取出数据载荷,此时这个数据载荷就是UDP数据报,将UDP数据报传输给上层的传输层。
4️⃣传输层: 传输层拿到这个数据之后,根据UDP协议格式来进行数据解析,还是去掉报头,取出载荷,把数据交给应用层。
5️⃣应用层:由于每个要接收网络数据的程序都需要关联上一个端口号,所以可以借助端口号来区分具体的应用程序。
这个时候应用层拿到数据之后根据端口号,将这个数据交给QQ程序进行解析应用层数据报,取出下列字段,放到程序的界面中。
❓上述的下面的每一层怎样知道,将解析好的数据交给那一层呢?
- 数据链路层将数据传输给网络层的时候,以太网数据帧帧头中有一个消息类型,根据这个类型就知道了网络层是IP协议了。
- 将网络层数据交给传输层的时候IP数据报,报头中也有一个字段,标识当前传输层使用的UDP还是TCP协议。
上述只是简单描述了数据的封装和分用,在真实的网络环境中,数据的传输中间可能要经历很多结点,对数据进行多次的封装和分用。
- 对于一台主机,从应用层封装到物理层,具有五层转发能力。
- 对于一台交换机具有两层数据转发能力,从物理层到数据链路层。交换机在网络中进行数据传输的时候,先将得到的数据进行分用,分用到数据链路层,查看当前这个数据报的目的MAC是否正确,然后交换机对这个数据进行重新封装,封装完成之后,此时源MAC地址和目的MAC地址就发生了变化。
- 对于一台路由器,它实现了从网络层到物理层,具有三层转发能。路由器得到数据之后,会将数据从物理层分用到网络层,根据当前得到的目的IP进行下一阶段的寻路操作,当上一个IP规划的路径出现问题(网络环境发生改变,某个设备宕机),这个时候网络层IP会重新规划路线,再进行数据疯转。此时经过数据链路层的时候,也会调整MAC地址。IP规划传输路径的时候,并不是一次就规划好了,它是走一步看一步,根据当前的网络环境随时规划路线。
- 对于一台集线器,他只实现了物理层。
上述所说的交换机和路由器只是传统的(经典的)交换机和路由器,也就是说是出现在教科书和考试卷子上的交换机和路由器。真实世界的路由器和交换机,之间的界限越来越小了,路由器可以通过设定特殊模式,只进行二层转发,交换机也由高端的交换机,支持三层转发。甚至交换机和路由器还可以封装分用到传输层甚至应用层。
在TCP/IP协议中,用五元组标识一个网络通信:
- 源IP:标识源主机
- 目的IP:标识目的主机
- 源端口号:标识源主机中该次通信发送数据的进程。
- 目的端口号:标识目的主机中该次通信接收数据的进程
- 协议号:标识发送数据的进程和接收数据的进程双方约定的数据格式