**作者主页: **作者主页****
** 本篇博客专栏:Linux**
** 创作时间 :2024年12月6日**
一、网络的发展
网络的发展有下面几个阶段:
1、独立模式:
2、网络互联:
多台计算机连接在一起, 完成数据共享;
这时候当某个业务需要共同协同完成共享数据的时候,可以将其中的数据放到服务器中集中管理,各个计算机就可以通过这个服务器来获得需要的数据。
3、局域网
这个时候我们可以利用局域网和路由器将这片区域内的计算机相互联系在一起,可以相互通信的计算机数量变多。
什么是交换机呢?就是一种用于完成局域网内数据转发工作的设备。
所谓数据转发:就是在局域网内将数据从一台电脑传输到另一个电脑上
路由器这个东西大家相对来说比较熟悉,它的作用是啥呢?它的作用是将不同的局域网连接起来,其主要完成数据的路由转发功能
路由转发:路由转发就是在局域网之间路由器根据路由信息,将数据包从一个局域网转发到另一个局域网
4、广域网
广域网的作用就是将远隔千里的计算机都连接起来。
多个局域网通过路由器连接起来,然后构成了一个广域网。广域网其实就是一个巨大的局域网
- 所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如, 我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网
二、协议
1、协议的概念:
- 协议是一种约定,它是经过多方沟通协商所创建出来的一种解决方案,达成一种共识
- 双方想要进行通信,就要通过实现约定好的协议来进行沟通
- 从语言的角度来看,协议就是双方都认识的一种结构化类型,双方的OS可以通过同一种协议(结构体)进行通信
例如:两方之间对暗号,事先约定了0代表收到,1代表吃饭等,这个约定是两方都知道的。
规定好协议有什么好处呢?
- 统一标准,通信双方可以通过协议将对方识别出来
- 提高通信的效率和可靠性
计算机之间想要传递各种不同的信息,就需要约定好双方的数据格式
2、协议分层
- 整个网络协议栈被划分为了层状结构的一个个小模块,具体到实际有OSI七层参考模型和TCP/IP五层参考模型
- 协议栈是分层的,每层通信双方都是有协议的,同层之间互相可以认识对方的协议
- 协议其实本质上也是软件,在设计上为了更好的进行模块化,解耦合,也是被设计为了层状结构,将层与层之间进行解耦,更好的方便了协议的可维护性和可扩展性
- 分层最大的好处其实就是在于封装,在分层的情况下,将某层的协议进行修改或者替换后,通信双方不会受到影响
- 纯软件的网络协议分为四层,每一层都能解决一种因为通信距离变长所产生的问题
- 应用层:解决如何使用送达的数据
- 传输层:解决保文在传输过程中出现错误、数据丢失的问题
- 网络层:解决在转发中,如何进行路径选择,目标主机定位
- 数据链路层:解决如何将数据交给下一个主机
3、OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了 7 层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
- 但是, 它既复杂又不实用; 所以我们按照 TCP/IP 四层模型来讲解
4、TCP/IP五层模型
TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇 .
TCP/IP 通讯协议采用了 5 层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线 LAN 等标准. 交换机(Switch)工作在数据链路层.
- 网络层: 负责地址管理和路由选择. 例如在 IP 协议中, 通过 IP 地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.
- 可以看出OS贯穿整个网络协议栈,协议栈是网络标准组织定义的,所有的OS(Windows.Linux和MacOs等)都是支持的。数据通信的本质就是
两个协议栈之间进行通信
。
总结:
- 应用层解决的是传输数据的目的,根据特定的通信目的,进行数据分析与处理,达到某种业务性的目的
- 传输层和网络层处理数据传输遇到的问题,保证数据的可靠性
- 数据链路层和物理层负责数据真正传输的过程,完成以太网和局域网的通信
- 下三层处理的是通信细节,应用层处理的是业务细节
一般而言,对于一台主机,他的操作系统内核实现了从传输层到物理层之间的内容,对于一台路由器,他实现了从网络层到物理层,对于一台交换机,它实现的从数据链路层到物理层,对于集线器而言,他只实现了物理层。
三、网络传输基本流程
局域网通信协议:
局域网内的主机是通过路由器和交换机连接在一起的,局域网内的两台主机通信本质就是两个协议栈之间在进行通信,下面是两台主机通过TCP/IP协议进行文件传输的过程:
1、数据的封装和分用:
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame),应用层叫做请求和响应
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),也就是报头,称为封装(Encapsulation).
- 报头信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
问题:每一协议层的数据包是什么?
答案:****数据包=报头+有效载荷
**问题:数据如何封装? **
答案:当应用层想将一段数据交给另一个主机时,TCP / IP 软件方面的 4 层协议从上至下要分别对该数据包进行封装。
- 将数据交给应用层,应用层会为该数据添加上对应的应用层协议的报头信息,然后将数据交给传输层。
- 传输层收到数据后,传输层会为该数据添加上对应的传输层协议的报头信息,然后将数据交给网路层。
- 网络层收到数据后,网络层会为该数据添加上对应的网络层协议的报头信息,然后将数据交给链路层。
- 链路层收到数据后,链路层会为该数据添加上对应的链路层协议的报头信息,到此数据封装完毕。
- 最后就可以通过局域网将封装好的数据发送给对端主机。
问题:协议的共性是什么?
几乎所有的协议都要解决这两个问题:
- 如何将数据包中的包头和有效载荷分开的问题,这个叫做解包
- 自底向上,要确认自己的有效载荷交付给上层那个协议,这个过程叫做分用
- 报头:本质也是一种数据,报头一般是通过位段实现的,协议栈的每一层都有一个对应的位段来表示当前这一层的报头
- 有效载荷:数据包中,除了当前新增的报头以外的数据叫做有效载荷
问题:数据包如何分用?
当对端主机收到一段数据包之后,需要经过TCP/IP的四层协议,对该包进行解包和应用
- 链路层收到数据后,将数据包中关于链路层协议的报头信息分离出来,然后将剩下的数据交给网络层。
- 网络层收到数据后,将数据包中关于网络层协议的报头信息分离出来,然后将剩下的数据交给传输层。
- 传输层收到数据后,将数据包中关于传输层协议的报头信息分离出来,然后将剩下的数据交给应用层。
- 应用层收到数据后,将数据包中关于应用层协议的报头信息分离出来,到此数据的解包分用彻底完成。
问题:如何分离报头与有效载荷?
要将数据包中的报头取出来,就要知道报头和有效载荷之间的界限在哪里
又因为报头在数据包的最前端,所以只要知道报头的大小就可以知道这个界限了
有两种获取报头大小的方式:
- 定长报头:包头的大小是固定的,发送方和接收方都能知道包头的大小,这是一种约定,如数据报
- 自描述字段:报头当中提供一个用来表示报头长度的字段,如报文长度
2、碰撞:
问题:什么是碰撞?
局域网中,如果出现同时多台主机发送数据时,某个主机发送的数据和其他主机发送的数据之间互相干扰,这种情况称为数据碰撞
问题:如何判断发送的数据是否发生了碰撞?
因为我们是采用广播的方式将数据发送到局域网中,所以一个主机也能够收到自己发送多个数据,比如A主机发送了一个数据,再次收到这个数据之后将这个数据和之前的数据进行对比,如果此时收到的数据和之前不一样,就说明发生了数据碰撞。
问题:发生了碰撞后该如何处理?
当A主机发现自己发送的数据发生了碰撞,可以等过一段时间再次发送这个数据,从系统的角度看,局域网就是临界资源,碰撞的检测和避免,本质上就是在互斥访问
问题:主机如何判断数据是否是发送给自己的?
- 发送出去的数据包会带有源 MAC 和目的 MAC 地址,其中源 MAC 地址表示的是发送数据的主机,目的 MAC 地址就不用说了。
- 主机在收到数据包后,会对比该数据包中的目的 MAC 地址和自己的 MAC 地址,如果不一致则该数据就不是发给自己的。
局域网通信原理总结:
- 局域网中,有多台主机直接通信,有可能会发生数据碰撞,这样就会影响其它主机间的通信,所以一个局域网可以看作是一个碰撞域。
- 碰撞后的数据就是垃圾数据量,局域网中的所有主机都可以收到发出去的数据,包括发数据的主机本身也是如此。
- 该主机会将收到的数据和此前发出去的数据进行对比,如果不同,代表此前发出去的数据发生了碰撞,这就是碰撞检测
- 数据发生碰撞后,发送方不会立即将数据进行重写发送,而是等一段数据,在重新发生,这就是碰撞避免算法,也是碰撞避免的一种机制
- 所以说,局域网的数据通信时在一个碰撞域中不断地碰撞,然后进行碰撞检测,碰撞避免。
- 局域网通信的本质就是基于碰撞域、碰撞检测和碰见避免实现通信,局域网内主机越多,碰撞几率越多,交换机在局域网中的作用就是划分碰撞域,解决碰撞问题,降低碰撞几率
3、跨网络通信:
- 跨网络通信就是分别处于不同局域网的两台主机之间进行通信。
- 根据前面的知识我们可以知道,两个局域网之间是通过路由器进行通信的。
- 所以这两台主机进行通信要经过至少一台路由器,更多的时候是多台路由器。
- 下面是跨网段的两台主机的文件传输,中间会经过很多台路由器。
下面的过程只经过一台路由器:
问题:路由器如何知道数据应该转发到哪一个局域网?
- 路由器会通过 IP 地址来确定数据的转发方向。
- 互联网中的每一台主机都有一个唯一的 IP 地址,而在数据自定向下进行封装时,在网络层封装的报头中会包含两个字段,分别是 源 IP 地址和目的 IP 地址。
- 网络中有很多的路由器,数据在每经过一个路由器时,路由器都会分析这个数据的上一站从哪来,然后根据这个数据包中得目的 IP 地址,选择这个数据下一站该到哪去最终才能走到目的地,这个一直会变的地址就是 MAC 地址。
- 数据包在路由器中不断调整mac帧协议报头,也就是,数据包的源mac地址和目的mac地址是在不断变化的,但是源IP和目的IP是不变的。可以看到的是IP层往上的数据报头信息是不变的,变的是IP层往下的协议报头信息
- IP 地址的意义就在于路径选择,只要有了目标,途中的路由器就能够为数据包指定越来越靠近目的 IP 地址的下一站路由器。
- 通过IP地址虚拟化了底层协议的差异,这样就不需要关心底层使用的是那种通信协议,只要有源IP地址和目的IP地址就可以将数据转发出去
四、网络中的地址管理
1、IP地址
IP 协议有两个版本 , IPv4 和 IPv6. 我们整个的课程 , 凡是提到 IP 协议 , 没有特殊说明的 ,
默认都是指 IPv4
- IP 地址处在 IP 协议中,用来标识网络中唯一的一台主机。
- 对于 IPV4 来说,IP 地址是一个 4 字节,32 位比特的整数。
- 对于 IPV6 来说,IP 地址是一个 16 字节,128 位比特的整数。
- 通常会使用 “点分十进制” 的字符串来标识 IP 地址。
- 例如 192.168.0.1 ; 用点
- 分割的每一个数字表示一个字节 , 范围是 0 - 255;
- IP地址可以由人手动静态分配,也可以让路由器来动态分配
Linux 中查看自己的 IP 地址
- 输入
ifconfig
指令查看当前主机的配置信息,其中 inet 对应的就是当前主机的 IP 地址。
windows中查看自己ip地址
- 在命令行中,输入ipconfig指令
Linux 中查看自己的 MAC 地址
- 输入
ifconfig
指令查看当前主机的配置信息,其中 ether 对应的就是当前主机的 MAC 地址。
最后:
十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:
1.一个冷知识:
屏蔽力是一个人最顶级的能力,任何消耗你的人和事,多看一眼都是你的不对。
2.你不用变得很外向,内向挺好的,但需要你发言的时候,一定要勇敢。
正所谓:君子可内敛不可懦弱,面不公可起而论之。
3.成年人的世界,只筛选,不教育。
4.自律不是6点起床,7点准时学习,而是不管别人怎么说怎么看,你也会坚持去做,绝不打乱自己的节奏,是一种自我的恒心。
5.你开始炫耀自己,往往都是灾难的开始,就像老子在《道德经》里写到:光而不耀,静水流深。
最后如果觉得我写的还不错,请不要忘记点赞✌,收藏✌,加关注✌哦(。・ω・。)
愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚菜鸟逐渐成为大佬。加油,为自己点赞!
版权归原作者 二进制掌控者 所有, 如有侵权,请联系我们删除。