如何做logo模板下载网站,自己的网站打不开,做网站主机几个配件,做网站的公司应该做收录嘛网络发展史
独立模式
在最开始计算机被发明出来#xff0c;但网络还未普及的情况下#xff0c;每个计算机之间都是相互独立的#xff1a; 假设现在有一份数据需要处理#xff0c;然后这份数据的处理又分给三个人分别处理。假设小松处理进行第一部分的处理#xff0c;当小…网络发展史
独立模式
在最开始计算机被发明出来但网络还未普及的情况下每个计算机之间都是相互独立的 假设现在有一份数据需要处理然后这份数据的处理又分给三个人分别处理。假设小松处理进行第一部分的处理当小松处理完后就需要将数据交给小竹。但是小竹处理数据的计算机是另一台此时又没有网络所以小松就需要通过硬件的方式将数据拷贝到一个硬件例如软盘中 通过这类硬件将数据从一台计算机拷贝到另一台计算机。这种数据交换的方式无疑是非常麻烦耗时的。 网络互联 随着时代的发展越来越需要计算机之间互相通信共享软件和数据即以多个计算机协同工作来完成 业务就有了网络互连。 网络互连将多台计算机连接在一起完成数据共享。 数据共享本质是 网络数据传输 即计算机之间通过网络来传输数据也称为 网络通信 。 根据网络互连的规模不同可以划分为局域网和广域网。 局域网LAN 局域网即 Local Area Network简称LAN。 Local 即标识了局域网是本地局部组建的一种私有网络 局域网内的主机之间能方便的进行网络通信又称为内网局域网和局域网之间在没有连接的情况下 是无法通信的。 广域网WAN 广域网即 Wide Area Network 简称 WAN 。 通过路由器将多个局域网连接起来在物理上组成很大范围的网络就形成了广域网。广域网内部的 局域网都属于其子网。 如果有北、中、南等分公司甚至海外分公司把这些分公司以专线方式连接起来即称为 “ 广域 网 ” 。 如果属于全球化的公共型广域网则称为互联网又称公网外网属于广域网的一个子集。 有时在不严格的环境下说的广域网其实是指互联网。 所谓 局域网 和 广域网 只是一个相对的概念。比如我们有 天朝特色 的广域网也可以看做 一个比较大的局域网。 局域网我们可以看成在同一个路由器内运行的主机集合。这些主机在这个路由器中可以不通过路由器直接交换数据。而广域网则可以看成是多个不同的局域网集合需要通过路由器来实现数据交换。 总的来讲局域网和广域网都可以看做是一个相关概念广域网可以看成一个比较大的局域网。 网络通信基础
IP地址 IP 地址主要用于标识网络主机、其他网络设备如路由器的网络地址。简单说 IP 地址用于定位主机 的网络地址 。 就像我们发送快递一样需要知道对方的收货地址快递员才能将包裹送到目的地。 特殊 IP 127.* 的 IP 地址用于本机环回 (loop back) 测试通常是 127.0.0.1 本机环回主要用于本机到本机的网络通信系统内部为了性能不会走网络的方式传输对于开 发网络通信的程序即网络编程而言常见的开发方式都是本机到本机的网络通信 IPv4的ip地址是用4字节的无符号整数表示的一共可以表示出2^32即42亿左右的ip地址。但是根据2022年的数据当今世界的网民已经有接近50亿人了假设人手一台网络设备ip地址就已经不够用了更不用说当今推行的物联网时代越来越多的物品可以联网这也就导致继续采用IPv4协议的话ip地址已经严重不足了。当然有人可能会问既然ip地址已经严重不足了那为什么当前的网络使用却没有什么问题呢这其实就涉及到IPv4的公网ip、私网ip等问题。在这里大家只用知道IPv4所能提供的ip地址已经无法满足未来的网络发展需求即可。
IPv6的ip地址是采用16位的无符号整数来表示的根据指数爆炸的概念我们可以知道IPv6所能表示的ip地址数量就远远超过IPv4。但是当今时代主要使用的ip协议是IPv4的版本。一个原因是网络发展的时间太久了大家已经使用了数十年的IPv4了所以现今存在的大部分网络设备都是采用的IPv4。另一个重要原因就是IPv6无法兼容IPv4。因此如果想将I已经存在的全部网络设备从Pv4切换为IPv6其需要付出非常巨大的代价大家普遍无法接受。还有一个原因就是IPv6的发展时间并不长所以稳定性还存在问题比不上IPv4。因此现存的大部分网络设备都是采用的IPv4。
但是IPv4提供的ip地址数量逐渐无法满足需求的现象也是客观存在的所以现在越来越多的新出现的网络设备都开始使用IPv6了而一些比较老的网络设备也在尝试从IPv4切换到IPv6。可以预见的是在不远的将来IPv6将替代IPv4成为ip协议中的主流版本。 端口号 概念 在网络通信中 IP 地址用于标识主机网络地址端口号可以标识主机中发送数据、接收数据的进程。简 单说 端口号用于定位主机中的进程 。 类似发送快递时不光需要指定收货地址 IP 地址还需要指定收货人端口号。 格式 端口号是 0~65535 范围的数字在网络通信中进程可以通过绑定一个端口号来发送及接收网络数 据。 注意事项 两个不同的进程不能绑定同一个端口号但一个进程可以绑定多个端口号。 了解 一个进程启动后系统会随机分配一个端口启动端口 程序代码中进行网络编程时需要绑定端口号收发数据的端口来发送、接收数据。 进程绑定一个端口号后 fork 一个子进程可以实现多个进程绑定一个端口号但不同的进程不能 绑定同一个端口号。 问题 有了 IP 地址和端口号可以定位到网络中唯一的一个进程但还存在一个问题网络通信是基于二进制 0/1 数据来传输如何告诉对方发送的数据是什么样的呢 网络通信传输的数据类型可能有多种图片视频文本等。同一个类型的数据格式可能也不同如 发送一个文本字符串 “ 你好 ” 如何标识发送的数据是文本类型及文本的编码格式呢 基于网络数据传输需要使用协议来规定双方的数据格式。 认识协议 概念 协议网络协议的简称网络协议是网络通信即网络数据传输 经过的所有网络设备 都必须共同遵从 的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定计算机之间才能相互通信交流。 通常由三要素组成 1. 语法即数据与控制信息的结构或格式 类似打电话时双方要使用同样的语言普通话 2. 语义即需要发出何种控制信息完成何种动作以及做出何种响应 语义主要用来说明通信双方应当怎么做。用于协调与差错处理的控制信息。 类似打电话时说话的内容。一方道你瞅啥另一方就得有对应的响应瞅你咋的 3. 时序即事件实现顺序的详细说明。 时序定义了何时进行通信先讲什么后讲什么讲话的速度等。比如是采用同步传输还是 异步传输。 女生和男生的通话总是由男生主动发起通话而总是在男生恋恋不舍的时候由女生要求 结束通话。 协议protocol最终体现为在网络上传输的数据包的格式。 协议作用 为什么需要协议 就好比见网友彼此协商胸口插支玫瑰花见面这就是一种提前的约定规则也可以称之为协议。 计算机之间的传输媒介是光信号和电信号。通过 频率 和 强弱 来表示 0 和 1 这样的信息。要想传递 各种不同的信息就需要约定好双方的数据格式。 计算机生产厂商有很多 计算机操作系统也有很多 计算机网络硬件设备还是有很多 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信 ? 就需要有人站出来约定一个共 同的标准大家都来遵守这就是 网络协议 知名协议的默认端口 系统端口号范围为 0 ~ 65535 其中 0 ~ 1023 为 知名端口号 这些端口预留给服务端程序绑定广泛使 用的应用层协议如 22 端口预留给 SSH 服务器绑定 SSH 协议 21 端口预留给 FTP 服务器绑定 FTP 协议 23 端口预留给 Telnet 服务器绑定 Telnet 协议 80 端口预留给 HTTP 服务器绑定 HTTP 协议 443 端口预留给 HTTPS 服务器绑定 HTTPS 协议 需要补充的是 以上只是说明 0 ~ 1023 范围的知名端口号用于绑定知名协议但某个服务器也可以使用其他 1024 ~ 65535 范围内的端口来绑定知名协议。 餐厅的 VIP 包房是给会员使用但会员也可以不坐包房坐其他普通座位。 五元组 在 TCP/IP 协议中用五元组来标识一个网络通信 1. 源 IP 标识源主机 2. 源端口号标识源主机中该次通信发送数据的进程 3. 目的 IP 标识目的主机 4. 目的端口号标识目的主机中该次通信接收数据的进程 5. 协议号标识发送进程和接收进程双方约定的数据格式 协议分层 对于网络协议来说往往分成几个层次进行定义. 什么是协议分层 协议分层类似于打电话时定义不同的层次的协议 在这一过程中其实就存在两层协议。 第一层就是双方沟通时所用的语言协议我们在这里用汉语沟通就可以看成是汉语协议。通过这个协议双方就能明白对方所要表达的意思。 第二层就是电话机协议。你和你朋友的电话之间要传输数据为了让这两个电话能正确识别传输过来的信息并进行处理就需要有一层电话机协议以让双方能够正确解析传过来的数据。 因此协议分层实际上就是指在不同主机之间进行传输时会将具有很强关联性的内容放在同一层每一层都有一份单独的协议。 分层的作用 协议分层实际上就是指在不同主机之间进行传输时会将具有很强关联性的内容放在同一层每一层都有一份单独的协议。 为什么需要网络协议的分层 分层最大的好处类似于面向接口编程定义好两层间的接口规范让双方遵循这个规范来对接。 通过协议分层在我们对某一层进行修改的时候就不会影响到其他层且能实现不同的功能在一定程度上达到 解耦。 在代码中类似于定义好一个接口一方为接口的实现类提供方提供服务一方为接口的使用类 使用方使用服务 对于使用方来说并不关心提供方是如何实现的只需要使用接口即可 对于提供方来说利用封装的特性隐藏了实现的细节只需要开放接口即可。 例如在上图中如果我们想用汉语通过无线电沟通就可以将通信设备层的协议修改为无线电协议而如果我们想用英语通过电话沟通则只需要将语言层的协议修改为英语协议。这样不仅实现了解耦还降低了修改成本。 所以分层好处一个是“解耦”一层中出现了问题不会影响其他层能在不影响其他层的情况下更快速的定位错误另一个是“封装”。在调整时调整对应层中封装的内容即可。 在上面的例子中仅仅分了两层。但在实际中网络通信是非常复杂的需要分为更多的层次。 在过去大家可能以为在整个网络中都只使用同一个协议这个认知其实是错误的。在网络中是进行了分层的每一层都有一份对应的协议。 分层 在上文中说了协议分层带来的好处就包括两方面一个是“解耦”一个是“封装”。总的来讲其实就是实现了软件层面的“低耦合”。 而设计分层的依据之一就是功能比较集中耦合度比较高的模块。这些模块缠绕在一起几乎无法分开。即具有“高内聚”特性的模块集合。 另一个依据就是每一层都需要解决特定的问题。那这些问题是什么呢在这里举一个旅游的例子来方便大家理解。 假设我们现在在上海想去云南旅游。要实现这个目标我们首先要考虑的第一个问题就是我们如何从上海到达云南是开车去还是跟旅游团还是步行要从上海到达云南需要经过一个又一个城市并不是说我们嘴巴动一下就可以直接从上海瞬移到云南这之间是需要有方法和路径的。同样的在网络中要将一台主机的数据传给另一个主机首先需要解决的问题就是“如何将数据从一台主机传递给另一台主机”。 当我们决定好怎么去云南后就要面临第二个问题了。整个中国这么大交通路线众多但我们在前往云南的时候怎么确定我们的路线呢这就要求我们在旅游的过程中要有判断和选择路线的方法或是看导航或是询问路人。同样的在网络中一台主机加入的局域网或广域网中存在大量的主机和路由器所以当一份数据在网络中传输时这份数据要有路径选择的能力选择前往目标主机的路径。 尽管我们在旅游的过程中可以依靠导航和询问路人的方法来选择路线但是也可能出现导航出问题、或者路人记错路了的情况导致我们选择的路线出现问题。此时我们就会可能原路返回或跟着这条路线去找其他的路。这就是我们在旅游的过程中要有对路线的容错和纠错能力。在网络中数据传输时也可能选择错误的路线此时就要求数据有容错纠错的能力比如让主机重新发一份。 解决了上面的三个问题后我们终于可以顺利到达云南了。但是到达云南是我们此行的目的吗并不是我们的目的是到云南玩而到达云南则只是实现玩这一目标的手段。因此当一份数据被从一台主机传达到另一台主机的时候就要求接收数据的这台主机有利用这份数据解决应用方面的问题的能力。 总结起来在网络通信中一共需要解决一下四个问题 1如何将数据从一台主机传输到另一台主机 2如何让数据传输的过程中拥有路径选择能力 3当数据传输出现问题时如何让数据有容错或纠错的能力 4当数据成功传输到另一台主机中时这台主机如何利用这份数据解决应用方面的问题 在这4个问题中前3个问题都是为了实现成功传输数据的手段最后一个问题则是为了解决数据应用的问题.
OSI七层模型
概念 上文中也说了协议需要有一个可以话事的人来制定。所以在国际中为了有一个能让大家都遵守的规定就有了“OSI七层模型”。 OSIOpen System Interconnection 开放系统互连七层网络模型称为“开放式系统互连参考模型”是一个逻辑上的定义和规范。 OSI七层模型把网络从逻辑上分为了7层每一层都有相关、相对应的物理设备。比如路由器交换机。OSI七层模型是一种框架性的设计方法其最主要的功能就是帮助不同类型的主机实现数据传输。 它最大的优点就是将“服务”、“接口”和“协议”这三个概念明确的区分开来通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。 模型形式 在OSI七层模型它认为在网络传输中一共会遇到7个问题所以它将这些问题划分为七层。在实际中的网络中也确实会遇到这7个问题但是在实际的工程中我们并不会将这七层全部实现。 在OSI的七层模型中第一层物理层是要解决硬件电路的问题即比特流与电子信号的转换。 第二层数据链路层其实就是解决我们上面提出的四个问题中的第一问题“如何将数据从一台主机传输到另一台主机”。 第三层网络层主要做的就是地址管理与路由选择。在数据传输中存在大量的路由器和主机它所要做的就是保证数据有“路径选择的能力”即解决上面的第二个问题。 第四层传输层就是用于判断数据在主机之间传输过程中是否丢失当数据出现问题时如何解决。为数据提供容错纠错能力即解决上面的第三个问题。 最后的会话表示和应用三层就是在解决上面的第四个问题。虽然这三层在逻辑上并没有问题但是在工程实践中发现无法针对这三层提供一个放之四海而皆准的标准。由于这个原因在实际中便将这最后三层拍成了一层。而如何解决这三层的问题便交由了用户即程序员根据特定场景来自行实现。但是在实际编写代码的过程中其实就是要实现这三层的内容只是从模型上将这三层拍成了一层。 所以虽然OSI七层模型在逻辑上没有问题但在实际中并不会采用OSI七层模型而是采用TCP/IP五层或四层模型. TCP/IP五层或四层模型 TCP/IP 通讯协议采用了 5 层的层级结构每一层都呼叫它的下一层所提供的网络来完成自己的需求。 物理层 负责光 / 电信号的传递方式。比如现在以太网通用的网线 ( 双绞 线 ) 、早期以太网采用的的同 轴电缆 ( 现在主要用于有线电视 ) 、光纤现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理 层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器 Hub 工作在物理层。 数据链路层 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步 ( 就是说从网线上 检测到什么信号算作新帧的开始) 、冲突检测 ( 如果检测到冲突就自动重发 ) 、数据差错校验等工作。 有以太网、令牌环网无线LAN 等标准。交换机 Switch 工作在数据链路层。 ( 如何将数据从一台主机传输到另一台主机) 网络层 负责地址管理和路由选择。例如在 IP 协议中通过 IP 地址来标识一台主机并通过路由表 的方式规划出两台主机之间的数据传输的线路路由。路由器 Router 工作在网路层。 ( 如何让数据传输的过程中拥有路径选择能力 ) 传输层 负责两台主机之间的数据传输。如传输控制协议 (TCP) 能够确保数据可靠的从源主机发 送到目标主机。 ( 当数据传输出现问题时如何让数据有容错或纠错的能力) 应用层 负责应用程序间沟通如简单电子邮件传输 SMTP 、文件传输协议 FTP 、网络远程访问协议Telnet 等。我们的网络编程主要就是针对应用层。 ( 当数据成功传输到另一台主机中时这台主机如何利用这份数据解决应用方面的问题 ) 在这五层里面除了物理层外的其他四层就分别对应了上文中所说的网络传输中会遇到的4个问题。 网络传输基本流程
协议报头
在上文中说过了网络中是进行了分层的每一层都有自己的协议。而每一个协议的最终表现就是协议都要有报头。这个协议报头大家可能不是很了解这里举一个例子。
假设今天我们从网上买了一个水杯商家通过顺丰快递给我们发货。当水杯到的时候我们去拿快递时拿到的不仅仅有水杯还有一个快递盒子和一张贴在上面的快递单。但是我们从网上买的东西仅仅是水杯并没有买快递盒子和快递单。这也就说明在我们网上购物时商家发货过来的东西并不仅仅是我们买的物品还会多一部分。而这多出来的东西其实就叫做“报头”。更准确来讲这里的“快递单”才是“报头”。 但是顺丰快递是如何确保他们的快递员可以看懂快递单上的内容的呢其实就是通过“格式”来实现的。例如快递单的左边是收货人的信息右边是发货人的信息通过这些规定就可以让全国各地的每一个快递员都认识这个快递单上的内容。如果没有这些规定就可能有人发货的时候就在快递单上写个张三然后下面带一串数字。快递员看了怎么知道这些信息到底是收货人的还是发货人的信息呢所以协议通常是通过协议报头来进行表达的。
虽然在这个例子中只有快递站这个传输层但如果在快递站之下又进行了外包例如顺丰把快递外包给韵达那么在韵达这一层也会一份快递单。即在网络传输中每一份数据最终在被发送或者在不同的协议层中时都要有自己的报头。
注意虽然在现实中收快递时我们会接触和看到快递单即快递站的协议报头但这是现实中为了图方便省事和验货而导致的。在网络中上层是看不到下层的协议报头的。即用户层是看不到快递站的协议报头的。
每一个协议的最终表现就是协议都要有报头——报头在网络通信过程中起到关键作用使得源和目的主机能够理解数据包的内容、目的地以及如何处理这些数据。
协议报头有如下三个特点 1协议每一层都有而每一个协议的最终表现就是就是“协议都要有协议报头” 2协议通常是通过协议报头来表达的 3每一份数据在被发送到在不同的协议层中都要有自己的报头 数据包封装和分用
不同的协议层对数据包有不同的称谓在传输层叫做“数据段”segment在网络层叫做“数据报”datagram在链路层叫做“数据帧”frame。
封装 引用层的数据通过协议栈发到网络上时每层协议都要加上一个数据首部即报头header称为封装Encapsulation。 首部信息中包含了一些类似于首部有多长载荷payload有多长上层协议是什么等信息。
数据封装成帧后就发送到传输介质上到达目标主机后每层协议再剥掉相应的首部根据首部中的“上层协议字段”将数据交给对应的上层协议处理。
分用 当数据被从一台主机传输到另一台主机后这份数据就需要被对应协议层读走报头然后将数据向上传输。而数据向上传输的过程就是分用。虽然在上文中的协议分层中每层协议层都是一一对应的但是在实际上每层协议层可能有多个上次协议层。 局域网通信
局域网其实就可以看成是在同一台路由器下运行的主机组成的网络。在同一个局域网中的主机是可以直接通信。即可以不通过路由器完成数据的传输。 在同一个局域网中的主机可以看成是用网线连接起来的。假设现在有如下一个由七台主机组成的局域网 假设此时mac1向mac7发送一条“你好”的信息此时在这个局域网中的所有主机其实都看到了这条信息。但是由于mac1在发送信息时指定了向mac7发送所以虽然其它几台主机都看到了这条消息但是它们通过对比mac地址(MAC地址是网络设备的物理地址它是唯一的可以帮助网络设备进行自我定位。在同一个局域网LAN中MAC地址可以用来唯一标识网络中的每一个设备)发现并不是向自己发送的于是什么都不做。而mac7对比mac地址后发现是向自己发送的于是接收这条消息。 通过上面的内容就可以知道局域网的数据是如何正确传输到目标主机了。但是这两台主机在通信时是如何通信的呢首要要知道因为协议分层的缘故所以两台主机在通信时势必要经过多层协议。 假设我们现在作为用户向另一个人发送了一条“你好”的消息。这条消息首先会进入应用层而应用层有自己的协议所以此时就要添加应用层的协议报头。添加完成后再这这份数据向下传输到传输层传输层也有自己的协议所以也要添加自己的协议报头依次往下每经过一层都要添加对应层的协议报头 当数据在传输时这份数据应该被叫做“报文”。最外层的协议报头被称为“报头”而报头后面的内容即后面的协议报头和要发送的信息被总称为“有效载荷”。即报文 报头 有效载荷 当数据到达数据链路层后这份数据就会通过以太网传输到另一台主机。当数据从一台主机被传输到另一台主机上时并不是直接传输到应用层而是传输到它的最底层数据链路层。此时该主机的数据链路层会拿走最外层的协议报头然后将剩下的数据向上传输到网络层。网络层再拿走最外层的协议报头继续将剩下的数据向上传输直到传输到应用层后应用层拿走最后一个协议报头进行解析最后将“你好”这条数据反馈给用户 在这个传输过程中用户A的数据向下传输添加协议报头的过程就被叫做“封装”而用户B中拿走协议报头进行解析过程就被叫做“解包”。而将数据向上传输的过程叫做“分用”
通过上面的图我们可以发现在同一层中它们所拿到的数据都是一样的。所以在网路协议中我们可以认为同层协议在直接通信也可以理解成是向下交付的。
在有了上面的认知后大家可能就会有如下2个问题。 1如何判断报头和有效载荷 2如何判断自己的有效载荷要交给上层的哪个协议。 这两个问题是每一层协议都需要面对的问题都需要解决这两个问题。 其中一种解决方案就是规定前多少字节为报头。假设规定传过来的前20个字节为报头当上层接收到传过来的100字节数据它就会去先读取前20个字节拿到报头而后面的80字节就是有效载荷。而这份报头里面的前n个字节中的数据就包含了这份数据要向上层的哪一个协议传输。通过这种方式就解决了如何获取协议报头和如何知道这份数据应该向上层的哪一个协议传输。 广域网通信
广域网通信和局域网通信的方式是差不多的唯一的区别就是在广域网中使用了路由器来完成数据包的转发换句话说路由器中一定存在两个或以上的网络接口来实现不同局域网的数据转发。 假设现在有以上两个不同局域网的主机要通信左边的主机向右边的主机发送了一条“你好”的消息这条消息同样会按照协议分层逐层往下传递并在每层协议中获取协议报头 当到达数据链路层时这份数据就需要通过路由器转发到另一个局域网中的主机。此时这份数据首先会传输到路由器中的驱动程序即数据链路层然后再这里进行解包解包出的数据传递到路由器内然后路由器再将其传到另一个驱动程序内并封装一层协议报头再传到目标主机的数据链路层。即将数据传到路由器和将数据从路由器转发到另一台主机的过程中还要经历一次解包和封装 如果大家观察仔细点就会发现在上面的图中左侧主机所处的是以太网而右侧主机所处的是令牌环网。虽然它们所处局域网的标准不同但是却可以没有阻碍的进行通信这其实就是协议分层带来的优势即“屏蔽底层网络差异”。通过在路由器中进行解包和封装的过程就在无形中将以太网的标准替换为了令牌环网的标准实现了双方的通信。
补充