一、网络的发展
1.独立模式: 计算机之间相互独立;
在早期计算机是孤立的单机系统,无法互相通信或共享资源。
由于缺乏互联性,早期的计算机系统无法实现有效的资源共享。只能依靠光驱和网盘经行将数据拷贝,线下将数据经行传输,每台计算机都需要独立处理自己的任务和数据,导致资源利用率较低。这促使了计算机网络的发展,以实现计算机之间的通信和协作。
2.网络互联,多台计算机连接在一起,实现数据共享
由于数据传输效率太低,于是当时的人们提出了将共享的数据由服务器统一管理起来,也就是说将共享的数据统一交给一个计算器管理储存,此时各个计算机就都能获取到这些共享的数据,所以各个业务在处理就能随时进行切换了。这是将计算机“用线”连接起来,这也就是网络的雏形。
3. 局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;
后来这样的网络雏形逐渐发展,连入这个网络中的机器变得越来越多,于是就出现了局域网的概念。
在局域网中有一种设备叫做交换机,交换机主要完成局域网内数据的转发工作,也就是在局域网内将数据从一台主机转发给另一台主机。各个局域网之间通过路由器连接起来,路由器主要完成数据的路由转发工作。
4.广域网WAN:将远隔千里的计算机都连在一起
各个局域网之间通过路由器相互连接在一起,便组成了一个更大的网络结构,我们将其称之为广域网。实际局域网和广域网是一种相对的概念,我们也可以将广域网看作一个比较大的局域网。
二、认识协议
我们经常听说什么TCP/IP、HTTP、SMTP,其实这些都是协议。
那么为什么要有协议呢?
1计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式。
2.1什么是协议
所谓协议其实就是在通信系统中用于规定数据交换和通信的规则和约定的一种规范或标准。它定义了在不同设备之间如何进行通信、数据格式、错误处理等方面的规则,以确保信息的准确传递和互操作性。
看到这里,对于什么是协议可能还是一知半解。在计算机网络和通信领域,协议通常涵盖以下几个方面:
数据格式: 协议规定了数据在传输中的格式,包括数据的结构、编码方式、数据帧的格式等。这确保了发送方和接收方能够正确地解释和处理交换的数据。
通信流程: 协议定义了通信的流程,包括建立连接、数据传输、连接终止等步骤。通信流程的规定使得通信设备能够按照一致的方式进行通信。
错误处理: 协议通常包含对错误和异常情况的处理规则,以确保在数据传输过程中出现问题时能够及时发现和处理,提高通信的可靠性。
安全性: 一些协议还包含用于保障通信安全性的规定,例如加密算法、认证机制等,以防止未经授权的访问和数据泄露。
网络拓扑和设备角色: 在网络中,协议规定了设备的角色和网络拓扑,例如哪些设备可以充当服务器,哪些设备可以充当客户端,以及网络的结构是星型、总线型还是其他。
从上面我们可以看出协议其实是多方面的,网络的传输其实是一个多层的结构不同的层自然有着不同的协议。
2.2协议分层
2.3协议由谁来定义
计算机生产厂商有很多;计算机操作系统, 也有很多;计算机网络硬件设备, 还是有很多; 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准,大家都来遵守, 这就是 网络协议;
而那个站出来的人一定是该领域当中的佼佼者,协议的定制通常由相关领域的专业组织、标准化机构、行业协会或国际组织负责。这确保了协议的制定是基于广泛的共识和专业知识,以满足特定领域的需求并促进设备和系统的互操作性。可以说每一套常见的通用协议都是有大智慧的。
2.4c语言的角度去看协议
我们都知道,操作系统的底层是使用c语言经行编写的,那么我们协议说白了不就是将一些不同类型的数据合并在一起后添加报头之类的东西发送给别的主机吗,那么在C语言中不就是两台主机都一个相同的结构体?协议不就是结构体该如何定义?当然协议还涉及到序列化和反序列化,以及数据的压缩、字段对齐等
三、OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
分层名称 | 功能 | ||
7 | 应用层 | 应用层为用户提供网络服务和应用程序接口,针对特定应用的协议 | |
6 | 表示层 | 设备格式转换,网络标准数据转换。处理数据的语法语义问题。 | |
5 | 会话层 | 通信管理、负责建立和断开通信连接(数据流动的逻辑通路)、管理传输层以下的分层 | |
4 | 传输层 | 管理两个节点之间的数据传输、负责可靠性传输(确保数据被可靠地传送到目标地址) | |
3 | 网络层 | 地址管理与路由选择 | |
2 | 数据链路层 | 互联设备之间传送和识别数据帧。处理物理层的错误。该层还负责流控制、错误检测和纠正,以确保可靠的数据传输。 | |
1 | 物理层 | 以0/1代表电压的高低以及灯光的闪灭、界定连接器和网线的规格 |
四、TCP/IP五层(或四层)模型
物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决 定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测 到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太 网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规 划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标 主机.应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问 协议(Telnet)等. 我们的网络编程主要就是针对应用层
而物理层我们考虑的比较少, 因此很多时候也可以称为 TCP/IP四层模型.
一般来说
对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;对于一台路由器, 它实现了从网络层到物理层;对于一台交换机, 它实现了从数据链路层到物理层;对于集线器, 它只实现了物理层;
4.1集线器
集线器(Hub)是一种传输数据的网络设备,用于在局域网中连接多台计算机或网络设备。它属于物理层设备,主要起到将多个设备连接在一起的作用。虽然集线器在过去曾经常用于网络,但随着技术的进步,它的使用逐渐被交换机所取代。以下是关于集线器的一些基本信息。
同时集线器信号放大,使型号传到更远,是物理层,使相隔千里的设备有了相连的可能性。为了让正确的路径识别,让主机有识别标志。
需要注意的是,集线器属于纯硬件网络底层设备,基本上不具有类似于交换机的“智能记忆”能力和“学习”能力,也不具备交换机所具有的MAC地址表,所以它发送数据时都是没有针对性的,而是采用广播方式发送,也就是说,当集线器要向某节点发送数据时,不是直接把数据发送到目的节点,而是把数据包发送到与集线器相连的所有节点。
五、网络传输基本流程
应用层:
- 发送端:应用层负责应用程序与网络的通信。数据由应用程序生成,并在应用层封装成应用层协议的数据包。
- 接收端:应用层接收到数据包后,将其解封装并交给相应的应用程序处理。
传输层:
- 发送端:数据包在应用层后被传递到传输层。传输层主要使用TCP或UDP协议。TCP提供可靠的、面向连接的传输,而UDP提供不可靠的、面向无连接的传输。
- 接收端:接收端的传输层接收数据包并将其交给上层应用层。
网络层:
- 发送端:数据包在传输层后,被传递到网络层。网络层主要使用IP协议,负责在网络中寻址和路由数据包,将数据包传输到目标主机。
- 接收端:接收端的网络层接收数据包,根据目标地址将其传递给数据链路层。
数据链路层:
- 发送端:数据包在网络层后,被传递到数据链路层。数据链路层通常使用以太网协议,将数据包封装成帧,并添加源和目标MAC地址。
- 接收端:接收端的数据链路层接收帧,进行解封装,然后将数据包传递到网络层。
物理层:
- 发送端:数据包在数据链路层后,被传递到物理层。物理层将数字数据转换为电信号,并通过物理介质(如电缆或光纤)传输到接收端。
- 接收端:接收端的物理层接收电信号,将其转换为数字数据,然后传递给数据链路层。
整个过程中,数据在每个层次上都会被封装和解封装,最终在接收端被还原成原始数据,传递给接收端的应用程序。这种分层的网络模型有助于实现模块化和可扩展的网络架构。
六、数据包封装和分用
- 不同协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
- 应用层数据通过协议栈发到网络上,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
- 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。
下图为数据封装的过程:
七、网络中的地址管理
前面我们提到集线器采用采用广播方式发送,那么他是如何将数据正确的发送到目标电脑上的呢。答案是他需要一个地址来进行路径规划,这个路径就是IP地址。
以太网(局域网)通信,其实就是当一个主机发出信息,然后将该信息发给局域网里面的所有的设备,然后根据MAC地址确定是发给谁的,是自己的就留下,不是自己的就废弃掉。
这个判断是在数据链接层就完成了。这个信号是用光纤传递的,他传递的是高低电频,如果短时间传大量的信息,就会让传的信息失效 ,解决可以加交换机(划分碰撞域)。
令牌环网---和以太网差不多,但是令牌网避免碰撞的原理是,只有拥有令牌数据的主机才能发消息。
7.1认识IP地址
IP地址是在IP协议中, 用来标识网络中不同主机的地址;对于IPv4来说, IP地址是一个4字节, 32位的整数;我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
7.2认识MAC地址
MAC地址用来识别数据链路层中相连的节点;长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).
7.3Ip VS Mac
Ip协议屏蔽了底层网络的差异化靠的就是工作在ip层的路由器,所以IP实现了全球的软件虚拟层,一切皆是ip报文。
Ip地址尤其是目的ip一般是不会改变的,协助路径选择,
而mac地址出局域网后源和目的都要改变,由路由器重新分配。