꧁ 大家好,我是 兔7 ,一位努力学习C++的博主~ ꧂
☙ 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步❧
🚀 如有不懂,可以随时向我提问,我会全力讲解~💬
🔥 如果感觉博主的文章还不错的话,希望大家关注、点赞、收藏三连支持一下博主哦~!👀
🔥 你们的支持是我创作的动力!⛅
🧸 我相信现在的努力的艰辛,都是为以后的美好最好的见证!⭐
🧸 人的心态决定姿态!⭐
🚀 本文章CSDN首发!✍
目录
此博客为博主以后复习的资料,所以大家放心学习,总结的很全面,每段代码都给大家发了出来,大家如果有疑问可以尝试去调试。
大家一定要认真看图,图里的文字都是精华,好多的细节都在图中展示、写出来了,所以大家一定要仔细哦~
感谢大家对我的支持,感谢大家的喜欢, 兔7 祝大家在学习的路上一路顺利,生活的路上顺心顺意~!
在体系结构中,网络在什么位置:
接下来看一个主机:
接下看看看网络协议栈:
上面就是关于网络的整体架构。
独立模式: 计算机之间相互独立;
网络互联: 多台计算机连接在一起, 完成数据共享。
局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起
广域网WAN: 将远隔千里的计算机都连在一起
所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如, 我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网.
协议:本质是一种约定。
这里的协议是计算机与计算机之间的协议,那么这种约定肯定可以用计算机语言表达出来,才能让计算机识别内容。
既然是用计算机语言表达出来的,那么约定本身一定要能够通过某种数据表示出来,通信双方也要能认识。
计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式.
- 计算机生产厂商有很多;
- 计算机操作系统,也有很多;
- 计算机网络硬件设备,还是有很多;
- 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是网络协议;
关于通信,同层协议可以认为自己在和对方层直接进行通信,从而达到简化对于网络协议栈的理解。
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
- 把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机。
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
- 但是, 它既复杂又不实用,所以我们按照TCP/IP四层模型来讲解。
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求:
- 物理层: 负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤,现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
- 数据链路层: 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准. 交换机(Switch)工作在数据链路层。
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
集线器:信号在传播过程中,信号会越来越弱,集线器的作用就是将信号加强。
以太网:我们现在大多数使用的局域网都是以太网,以太网是采用碰撞检测的方案实现局域网通信的。所以以太网是比较常见的局域网通信规范。
数据是从应用层开始,推着协议栈向下走,也就是说几乎任何数据通信的时候,都会自顶向下贯穿协议栈来完成发送,而任何具体一台主机想要收数据那么就要自底向上来贯穿协议栈的读取。
接下来就分析TCP/IP通讯的过程及其细节:
上面说的是两个局域网之间的通信过程,也就是主机A和主机B在各自的协议栈中进行数据流动。
那么再局域网通信的路上呢?
局域网(以太网)通信,本质是所有的主机在底层其实都收到了任何数据,只不过经过筛选提交上来了,发给自身的数据。
- 局域网中,网络本身的特性要求一个时刻只能由一个机器进行发送数据。
- 如果网络中的数据发生了碰撞,当前主机是可以检测到的。
- 所有的主机都要进行"碰撞避免"算法。
那么A发送给B,B怎么知道是要发送给B的呢?
通过提取前几位,看到目的MAC,如果不是自己的MAC地址,那么就丢弃,如果是的话就接收,这种从源到目的的过程就是A发送给B。
所以:
- 上面发送的过程就是进行碰撞的过程
- 局域网发送的消息所有人都能收到,只不过经过MAC地址做对比,所有主机在最底层(可以理解成在数据链路层)将数据丢弃掉了。上面的传输层、网络层....都不知道曾经有这个事情。
那么经过上面的讲解,我们有什么方法可以黑掉局域网呢?
当然这里不是给所有的主机注入木马什么的,所谓的黑掉就是我们在上网的时候不是要将数据交给路由器,那么其实我们只要在局域网里塞垃圾数据就好了,那么在局域网中的人要想在局域网中发数据,他发送数据,我们就碰撞它就好了,它立马就会执行碰撞检测、碰撞避免,那么此时它就不跑数据了,那么我们一直发一直发,这个局域网就瘫痪了。
其实这里我们自己发垃圾数据也是发数据,既然是发数据也有可能进行碰撞检测、碰撞避免,其实市面上是有绕过碰撞检测、碰撞避免的工具的,这样我们的软件就可以一直发送而不进行碰撞检测、碰撞避免了。
接下来看一下 Linux 下的接口:
我们在这里用的MAC地址可能不是真正意义上的MAC地址,可能就是腾讯或者阿里云模拟出来的MAC地址。
- 路由器至少能够横跨两个局域网,当然如果就想用路由器还不想连外网,那么路由器的功能便没有体现出来。
- 对于每个网络,都认为路由器是它们的局域网上的一台主机。
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装 (Encapsulation)。
- 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理。
下图为数据封装的过程:
下图为数据分用的过程:
IP协议有两个版本,IPv4和IPv6。我们整个的课程,凡是提到IP协议,没有特殊说明的,默认都是指IPv4
- IP地址是在IP协议中,用来标识网络中不同主机的地址。
- 对于IPv4来说,IP地址是一个4字节,32位的整数。
- 我们通常也使用 "点分十进制" 的字符串表示IP地址,例如 192.168.0.1 。用点分割的每一个数字表示一个 字节,范围是 0 - 255。
- MAC地址用来识别数据链路层中相连的节点。
- 长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了,不能修改。mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突。也有些网卡支持用户配置mac地址。
这个在上面大概也说了一下,先了解一下,等下面的博客来讲解。
如上就是 网络整体框架介绍 的所有知识,如果大家喜欢看此文章并且有收获,可以支持下 兔7 ,给 兔7 三连加关注,你的关注是对我最大的鼓励,也是我的创作动力~!
再次感谢大家观看,感谢大家支持!