1.网络的发展历程
独立模式
独立模式:计算机之间相互独立。 每个终端A、B、C各自持有客户端数据
网络互连
随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即可以多个计算机协调工作来完成业务,就有了网络互连。
网络互连:将多台计算机连接在一起,完成数据共享。数据共享的本质是网络数据传输,即计算机通过网络来传输数据,也称为网络通信。根据网络互连的规模不同,可以分为局域网和广域网。
局域网:多个设备连在同一个路由器下称为局域网。局域网主机之间能够方便的进行通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网组件网络的方式有很多:
(1)基于网络直连
(2)基于集线器组建
(3)基于交换机组建
交换机可以视为是对路由器的接口进行扩展
(4)基于交换机和路由器组建
路由器是进行组件局域网
广域网:很多个局域网组合到一起构成了一个更大的局域网就称为广域网。在qq音乐上听歌就是在广域网下进行的操作。
网络通信基础:网络进行互联的目的是进行网络通信,也是网络数据传输,更具体一点是网络主机中的不同进程间基于网络传输数据,那如何判断到底是从那台主机上将数据传输到那台主机呢?这就需要使用IP地址来标识
IP地址:主要是用来标识设备所在位置。同时一台主机上有很多程序,具体要交给哪个程序呢就需要端口号来识别了
端口号:端口号主要就是用于点位主机中的进程。直到IP和端口号我们可以找到网络中唯一的进程但是数据传输过来的时候我们如何进行解析呢?这里我们需要直到协议,协议会规定双方数据的格式从而识别你发的是文本还是图片。
2.认识协议
2.1概念
协议就是网络协议的简称,网络协议就是通信双方对于发送和接受数据格式的约定。我的数据怎么发你就怎么解析。当前我们之所以能够进行通信就是因为遵守了同一套协议。进行一次网络通信涉及到5个非常关键的信息,即五元组。
2.2五元组
在TCP、IP协议中用五元组来标识一个网络通信:
1.源IP:标识主机,数据是从哪个主机上来的
2.源端口:标识源主机中该次通信发松数据的进程,即数据是从哪个软件发来的
3.目的IP:标识目的主机
4.目的端口:标识主机中该次通信接收数据的进程,数据要发到哪里去
5.协议号:标识发送发送进程和接受进程双方约定的数据格式
2.3协议分层
网络通信非常复杂,如果我们设计一个协议完成网络通信中的方方面面势必会使这个协议非常复杂非常庞大,遇到这样的情况我们就需要协议分层。把一个大的协议分层若干个功能单一的协议。但是拆完之后又感觉多了,怎么办?把小的协议进行归类。为了议之间进行良好的交互就规定只有相邻之间可以进行交互,上层协议可以调用下层协议,下层协议可以给上层提供服务,不能夸层进行。协议分层带来的好处有哪些呢?首先上层协议不需要了解下层协议的细节即封装,分层之后可以灵活地替换其中某一层对于整体的工作影响最小即解偶。那真实的互联网具体是怎样分层的呢?这里就使用了OSI七层网络模型,
2.4 OSI七层网络模型
OSI七层网络模型比较复杂,实际具体的网络分层方式更简化只是使用七层模型设计中部分模型,TCP/IP五层模型来实现。接下来我们介绍一下TCP/IP五层模型
2.5五层模型
(1)应用层:数据发送过去之后如何使用解决什么问题。注重一个事务的使用过程,包裹拿到之后怎样使用。
(2)传输层:负责两台主机之间的数据传输,也是任意设备之间的通信,不考虑中间过程,只考虑起点和终点。比如在淘宝买衣服,卖家站在传输层角度,卖家只需要考虑包裹收货到货的地点,从哪里来到哪里去,把包裹交给快递小哥就好。物流公司则是要考虑包裹怎样一步一步到我的手里。
(3)网络层:两个任意设备之间如何通信,这两个设备之间可能隔着很多的交换机和路由器。考虑通讯的中间过程是怎样的。
(4)数据链路层:用来完成两个相邻的设备之间如何进行通信。什么是相邻设备:通过网线把电脑连到路由器和交换机上,电脑和路由器、交换机就是相邻设备。
(5)物理层:越接近底层越靠近硬件,物理层规定网络通信中的一些硬件设施符合要求。在我们上网时通常要网线、wifi、光纤。物理层的协议就是约定这些硬件设施要符合的要求怎样的。
网络层是基于数据链路层,数据链路层是基于物理层。
网络设备所在分层
主机:工作中涉及到物理层到应用层,通过应用程序满足网络通信的需求
路由器:工作过程涉及到,从物理层到网络层,组件局域网进行网络数据包的转发
交换机:工作过程涉及到从物理层到数据链路层,对路由器接口的扩展不需要考虑网的问题
3. 网络数据通信的基本流程
我们先来解析qq发送hello给对方。
1.首先应用程序获取用户输入构造一个应用层的数据包(数据包往往是结构化数据),构造应用层数据包时就要遵守应用层协议,这个协义往往是开发这个程序的程序员自己定义的。 假设这里的协议格式是:发送者的qq号、接受者的qq号、消息的时间、消息正文。数据包里数据就是有上述协议里指的属性,要想发送数据我们就需要把数据转化成字符串二进制比特流(序列化),接收数据的时候字符串、二进制比特流转化成结构化数据(反序列化)。网络传输的本质就是0101这样的数据,网络传输需要事的网线是电信号通过高低电平表示01,还有光纤则是光信号通过高低频光表示01,wifi是电磁波(光信号)通过高低频电磁波表示01.
按照约定格式我们可以假设传输的数据格式如下:1234567,7654321,2024-11.02,12.00,hello
2.应用程序调用传输层提供的接口API,把数据交给传输层(传输层构造的API我们可以叫做Socket api,api是下层协议给上层提供的),传输层拿到数据之后构造“传输层数据包”。传输层的协议主要是有两个TCP和UDP这里我们假设加的是TCP。于是传输层数据报如下所示:
TCP数据包 = TCP报头(header)+TCP(载荷),tcp报头是TCP功能相关的属性源端口、目的端口,载荷是应用层数据报
那为啥要加TCP,假设我们在淘宝买一件衣服,那卖家不是直接随意一团扔给快递小哥,而是打包好给快递小哥,有了包装之后就可以贴标签,快递下个就可以根据这个标签包含的关键信息送达目的地。TCP报头就是相当于快递单
3. 传输层构造好数据之后继续调用网络层的API,把传输层的数据包交给网络层,网络层继续进行处理,网络层最主要的协议IP协议,IP协议继续对上述数据包进行加工,加上IP报头。IP报头和上面的格式一样。IP数据包 = IP报头(包含源IP目的和目的IP)+IP载荷(整个传输层的数据包),这里的IP报头会记录当前传输层使用的是哪个协议,传输层报头中也会记录应用层使用哪个协议,数据链路层也会记录网络层使用哪个协议
4.IP协议继续调用数据链路层的API,把IP数据包交给数据链路层,数据链路层中的核心协议是以太网,以太网这个协议也会在网络数据包的基础上进一步加工。以太网数据帧 = 帧头+载荷+帧尾
谈到网络数据传输的基本数据单位时候,涉及到多个术语 。网络数据报/包/段/帧
5.以太网继续把这样的数据交给硬件设备(网卡),网卡会把上述二进制数据最终以光信号、电信号、电磁波信号传播出去了
这里不考虑传播出去的数据如何到达主机我们考虑收到之后的事情
信息接收
1.信息到达接收方的网卡,网卡把光电信号还原成二进制0101,之后把二进制数据交给上层数据链路层
物理层数据是咋来的和数据链路层是直接相关的,如果数据是通过网线和光纤来的那就是以太网的形式传到数据链路层,如果数据是通过wifi来的那么久会通过802.11协议来传到数据链路层
2.数据链路层按照以太网协议进行解析,把报头和报尾取出来,剩下的载荷往上传递给网络层
以太网的帧头中有专门的属性描述网络层使用哪个协议
3.网络层拿到这个数据之后按照IP协议的格式解析,再把载荷数据交给传输层
IP报头中也有专门的属性描述了使用哪个协议
4.传输层拿到数据之后也是类似按照TCP协议来解析取出载荷交给应用层
5.qq应用程序解析应用层数据,拿到关键信息,展示带界面上给出提示,
传输的中间过程中也是涉及到封装分用的,交换机只需要封装分用到数据链路层即可,主机的数据传输到交换机,交换机收到数据之后物理层解析再之后数据链路层解析(没有网络层)之后重新构造出新的以太网数据帧发给下一个设备,数据链路层中得到的以太网数据帧的帧头信息就足够支持交换机进行下一步工作。交换机的主要工作是在数据链路层进行二层转发。
主机的数据交给路由器,路由器收到之后物理层、数据链路层。网络层解析(没有传输层),重新构造出新的网络数据包(以太网数据帧),构造二进制数据进行转发。路由器是工作在网络层进行三层转发。