【计算机网络】网络基础(上)
文章目录
- 1. 网络发展
- 认识协议
- 2.网络协议初识
- 协议分层
- OSI七层模型 | TCP/IP
- 网络传输基本流程
- 情况1:同一个局域网(子网)
- 数据在两台通信机器中如何流转
- 协议报头的理解
- 局域网通信原理(故事版本)
- 一般原理
- 数据碰撞
- 结论
- 情况2:跨一个路由器的两个子网
- IP地址与MAC地址的关系
- 网络通信的理解
1. 网络发展
计算工作是不可能一个科学家搞出来的,注定是一群科学家协同工作,
给每一个科学家配上电脑,那么科学家之间的电脑也是协同工作的
人只要用计算机,计算机就必须要协同
古代打仗,每个士兵都有自己的武器(刀、枪、剑等),但士兵之间不是互相孤立的,而是互相协同的刀与枪配合、枪与剑配合

各个计算机之间是独立的
将小松计算后的数据拷贝到软盘中 交给小竹
将小竹计算后的数据拷贝到软盘中 交给小梅
但是人参与的工作,效率会非常低

所以为了提高效率,将所有的机器简单连接起来
这样就可以在自己的电脑上看见所有人的数据
认识协议
协议是一种约定
在之前打电话要花钱,接电话是不需要花钱的
假设你的手机里只有 20 30块话费,因为花费很少所以避免自己打电话
所以你在向家里打电话时
若响一声就挂掉,说明给家里报平安
若响两声才挂掉,说明你没钱了,该打钱了
若响三声才挂掉,说明是其他特殊事情
将约定做好,相隔几百里,通过曾经约定好的事情 快速形成共识 做出约定的动作,被称为协议
协议本质是为了提高协同效率

两台计算机是人的意志的表达,因为引进网络,就注定计算机之间的距离比较久,
所以两台计算机在技术层面上用特定的方式来做好 双方通信时候的协议约定
2.网络协议初识

网络通信时,会有那些需求要解决,要有那些问题会产生,为什么会产生问题?
1. 长距离传送时,信号会衰减,所以数据有可能异常(数据丢失)
要发送的机器是在远端的,网络上的机器有很多
如何能够将机器数据发送后准确找到网络当中其中一台机器
2.定位一台主机的问题
因为网络太长了,所以要经历中间节点
就会导致
3. 怎么进行数据转发以及路径选择的问题
只有定位一台主机,才能开始传输数据,以及路径选择
如:明确自己要考研,才会好好学习
所以在设计时,将不同的功能模块设计成为不同的模块
可以将解决方案 设计为层状结构(每一层解决相同的问题,层与层之间没有直接关联)
协议分层

假设你和你的朋友,分别在两个不同的楼内,你使用你宿舍的台式机给你朋友宿舍的台式机打电话
在打电话这个过程中,你认为你和你的朋友在进行直接通信
实际上是 你把话说给了你的台式机,通过电话协议,将信息传递给另一个台式机,此时你朋友的台式机把收到的数据进行协议解析,把声音播放到你朋友的耳边
所以分为语言层和通信设备层,在逻辑上认为都在和对方层进行通信
层和层之间通过接口的方式来进行互相调用底层的功能
但底层如何实现的,上层并不关心
如:你打电话时,并不关心电话采用的频率是多少

对通信设备层替换
在用手机通信的过程中
虽然底层全部替换掉了,但是上层依旧两个人使用汉语来通信

对语言层替换
在用台式机通信的过程中
两个人把语言从汉语变成了英语,台式机并不会管那么多,台式机依旧是把一个人的数据传给另一个台式机
软件分层后,每一层只关注自己同层的功能,只使用下一层的接口,任何一层出现问题,都不会直接影响另一层
减少后期开发者的成本
OSI七层模型 | TCP/IP
OSI (Open System Interconnection) 开放系统互连
七层网络模型称为开放式系统互联参考模型,
是一个逻辑上的定义和规范

分为七层
自底向上为:物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
实际上工程实现时会压缩为 物理层 数据链路层 网络层 传输层 应用层 (会话层 表示层 应用层 看作为应用层)
而一般在研究网络协议栈时,重点谈软件,物理层是有关于网络通信硬件的,所以物理层不考虑
采用的网络协议栈为 TCP/IP五层(或四层)模型,TCP/IP脱胎于OSI七层模型,将会话层 表示层 应用层 看作为应用层
五层:物理层 数据链路层 网络层 传输层 应用层
四层: 数据链路层 网络层 传输层 应用层
物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆
(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决
定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测
到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
(如:有个小朋友,能够说出简单的字段,将信息传给他的爸爸或妈妈
数据链路层的标准是不一样的,因为数据链路层的具体实现是在网卡驱动实现的
最常见的标准是 以太网)
网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规
划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
红框为主机的内网私有IP地址
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标
主机.
可靠的把A数据送到B
如:你的老师夸你,数学有考100分的能力,但并不说明你一定能考100,大概率考100,也有可能考99
所以就需要可靠的传输数据
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问
协议(Telnet)等. 我们的网络编程主要就是针对应用层
网络传输基本流程

情况1:同一个局域网(子网)
同一个局域网的两台机器,可以直接通信
如:假设有一天网比较卡,同一个寝室的室友想要打游戏,所以就打CS构建局域网房间,就可以通过进入房间从而一起玩游戏
两个主机通信的本质是 两个主机的操作系统与网络协议栈在通信
数据在两台通信机器中如何流转

同层的每一层都是一种协议,每层都要有自己的协议
协议的表现形式:协议报头体现出来的
协议报头的理解
网购:在网店里面买了一个键盘,付款后进行卖家发货,收货后并不仅仅是键盘,收到的是一个包裹,
包裹上有一张纸,有姓名,地点,发货的邮政编码等
你要的就是键盘,实际上给你的除了键盘还多了一张纸
这张纸对于你并不是必须的,但对于快递员是必须的,多出来的这张纸称为报头
报头是工作在快递员那层的,在你看来你把报头去掉了
键盘本身也是包装起来的,键盘要附上使用说明书,使用说明书就会告诉你键盘是什么种类的,键盘如何使用等
说明书也可以作为报头
在物流体系中,不仅仅在物流商品,快递单+商品,才是物流的主体
当想要发 在吗,相当于商品,这个商品想要在网络中正常被转发,工作在不同层级,每一层都必须有对应的协议(表现形式为报头)
每一层协议都要有各自的协议报头,加上有效载荷
如:收到一个包裹,包裹上面的纸称为报头,包裹里的东西称之为有效载荷

当要发送消息时,并不是将消息直接发送给对方,先添加自己应用层的报头,然后将报头与有效载荷交付给下一层
在下一层时,将上一层的报头和有效载荷 整体看作是 该层的有效载荷 ,再次添加报头
所有的数据一定先被硬件收到,因为冯诺依曼体系规定,对于发送方来讲,叫做输出
输入时,一定是主机的硬件先收到,就决定了自底向上收到的

收到后,将要将自己的报头与自己的有效载荷分离
分离后,将有效载荷交 给上一层
如:收到快递后,将包裹拆掉,将里面的东西拿出来

将报头从上到下贯穿,称为封装
将报头自底向上进行交付,称之为解包加分用
解包:将报头和有效载荷分离
分用:将有效载荷交付给上层
协议要支持两个基本功能:
1.报头必须要能和有效载荷分离
2.报头必须支持,将有效载荷交付给上层,被称为数据报分用(分发给上层去用)
局域网通信原理(故事版本)
一般原理
每一个同学都有自己的名字,老师大声在教室询问,张三为什么布置的作业没有写,教室内的所有的同学都听到了,
听到后先分析数据,数据包的报头是张三,有效载荷是作业为什么没做
先将报头与有效载荷分离,报头是张三,每个人都知道自己不是张三,所以每个人在数据链路层将消息丢弃了
有一名同学在数据链路层对比时,发现他就是张三
当张三回答老师说,老师,作业已经做完了
张三给老师发数据包,在座的其他同学都能听见
报头为 老师, 有效载荷为 作业已经做完了
此时其他同学在数据链路层将消息丢弃了,老师在数据链路层对比时,发现这名同学就是叫他的
将有效载荷 作业已经做完了,向上交付给老师
在这个过程中,张三认为和老师直接通信,老师也认为和张三直接通信,完成一次信息的交互
这种通信原理就被称为 以太网的局域网的通信原理
数据碰撞
在教室内,当上课时,有一个同学一直在说话,扰乱课堂秩序,一般这个时候老师会让这位同学出去
因为这位同学说话时,会干扰老师或者其他同学说话,导致其他人听不清楚
这种情况被称为局域网发生数据碰撞
结论
局域网中,任何时刻,只允许一个人在向局域网发送消息
任何人要通信,需要有唯一的一个标识符,对于机器也是如此,对于计算机,每台计算机都配有网卡
网卡在出厂的时候,就在网卡内部写入网卡的sn号(俗称MAC地址,全球唯一)
(标识符:在教室里,每个人都有唯一的名字)
情况2:跨一个路由器的两个子网

路由器:
1.网络层
2.链路层
3.物理层
路由器也是一台主机,路由器要能跨网络转发,
路由器至少要联两个子网,至少要有两个网络接口
在教室内,约定好手里拿水杯的人才能说话
令牌环的作用 即 拿水杯时才能说话,说完了,将水杯交给下一个人,下一个人再说
本质是 保证任何时刻 只有一个人说话
路由器要将数据从左侧主机转给右侧主机
要求路由器和左侧主机处于同一子网,也和右侧主机处于同一子网

所以一个数据包可以从左侧主机交付到路由器主机
也可以从路由器主机交付到右侧主机

以太网和令牌环中存在更多的主机
当要发送消息时,并不是将消息直接发送给对方,先添加自己应用层的报头,然后将报头与有效载荷交付给下一层
当数据达到数据链路层时, 凭什么把数据报交给路由器R,而不交给其他主机?
所以要面临选择主机的问题,而选择主机之前要先标识主机(使用IP地址标识公网中主机的唯一性)
IP地址是IPV4,对应4字节的整数
如:192.168.X.Y
一般IP地址的取值范围是 【0.0.0.0 , 255.255.255.255】
192.168.X.Y一般是以字符串风格展现出来的,被叫做字符串风格的点分十进制方案的IP地址(给人看的)
每一个主机的网络层都有一个路由表
路由表作用:当用户发送你好时,还要知道给谁发
假设要发给B的IP地址,结合IP地址和路由表,判定当前数据转发给B
A在那一个子网中自己是知道的,而B在那个子网中是不知道的,只知道B的IP地址
所以A查路由表要有一种能力,虽然并不清楚数据要去的IP地址是谁,主机能决定数据报一定不是发给自己以太网的其他主机的
如:你是计算机专业的学生,有自己的学号,来了一个你不认识的同学,但是你可以通过它的学号判定它是不是计算专业的
若前面学号相同则是,否则就不是

IP报头中涵盖一个目的IP称为IPB
将数据线将给路由器R,在向下交付给自己的数据链路层,添加以太网自己的报头
每一个主机都要有自己的MAC地址
在以太网环境下目的MAC 称为 MR(后面会解释)
IP地址与MAC地址的关系
西游记中,唐僧西天取经,会在这一路上经历好多城池,比如其中一个城池,车迟国
当唐僧到达城池的时候,国王就会问,和尚从哪里来,到哪里去
唐僧就会说,从东土大唐而来,自西天取经而去
国王又问,上一站从哪里来,下一站去哪里
唐僧回答,上一站从黑风岭逃出来的,下一站去女儿国
此时唐僧身上有两套地址,一套地址是从东土大唐要到西天取经,叫做源IP和目的IP
另一套地址是上一站从黑风岭来,下一站去女儿国,叫做原MAC地址与目的MAC地址
询问国王的过程就是 查路由表的过程
IP地址作用是为报文定制最终目标,路上根据该地址进行路径选择
MAC地址作用是根据路径选择的结果,来选择下一跳主机
填MR的原因:
上一层查路由表时发现 ,要去路由器R,所以MR表示路由器的MAC地址
将数据链路层的报文 设为M
路由器工作在网络层,因为只有IP有路由表以及IP地址,所以报文在路由器中要做一次向上交付
路由器经过路由,发现目的IP为IPB,正好为路由器向下连接的IP地址
所以路由器会将对应的报文向下交付
此时的报文会将报头的MAC地址由MR替换成MB 即主机B的MAC地址
由原来的下一跳路由器变为下一跳主机B

将报文进行向上交付,将有效载荷 与报头分离
同层协议就认为自己在向对方直接发数据
而对于数据链路层来说,可能不一样
网络通信的理解
学校有五层的教学楼,以及三层的保安室
在学校中有很多条的路和岔路口
假设你是你们班的班长,你们班的考试成绩出来了,你们班的班主任把你叫到教学楼A的五楼,给了你一个档案袋
让你把它交给教学楼B的五层的教学组长
因为路在一楼,所以你必须得先下楼
学校规定每个楼的第三层都必须呆一个保安大爷
所以你在下楼时,下到三楼就问保安大爷路该怎么走
大爷说不是很清楚,告诉你保安室2怎么走,让你去保安室2去问问那里面的保安大爷
来到保安室2后,爬上三楼,问里面的保安大爷,教学楼B怎么走
此时保安大爷告诉你怎么走才能到教学楼B
但是你并不能直接到教学楼B,因为路在一楼,所以你必须得先下楼
来到教学楼B后,爬上三楼再次询问这里的大爷 是否为B栋,大爷说是
所以你才继续上到五楼,找到教导主任
在网络通信时,网络通信的所有报文最终都必须在网线上跑,
就决定了所有的报文至少要交给每一个主机最底层的物理层或数据链路层
若为上层协议就必须得自顶向下交付,而到了目标主机要自底向上交付
相关文章:

【计算机网络】网络基础(上)
文章目录 1. 网络发展认识协议 2.网络协议初识协议分层OSI七层模型 | TCP/IP网络传输基本流程情况1:同一个局域网(子网)数据在两台通信机器中如何流转协议报头的理解局域网通信原理(故事版本)一般原理数据碰撞结论 情况2:跨一个路由器的两个子网IP地址与…...

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验四 蜂鸣器
目录 前言 一、原理图及知识点介绍 1.1、蜂鸣器原理图: 二、代码分析 前言 第一个实验:51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验一 点亮第一个LED_ManGo CHEN的博客-CSDN博客 第二个实验:51单片机(普中HC6800-EM…...

无向图-已知根节点求高度
深搜板子题,无向图,加边加两个,dfs输入两个参数变量,一个是当前深搜节点,另一个是父节点(避免重复搜索父节点),恢复现场 ///首先完成数组模拟邻接表#include<iostream> #incl…...
RIP动态路由协议 (已过时,逐渐退出舞台)
RIP 路由更新:RIP1/2 每30秒钟广播(255.255.255.255)/组播 (224.0.0.9)一次超时:180秒未收到更新,即标记为不可用(跳数16),240秒收不到,即从路由表中删除 ;跳…...
C++ operator关键字的使用(重载运算符、仿函数、类型转换操作符)
目录 定义operator重载运算符operator重载函数调用运算符operator类型转换操作符 定义 C11 中,operator 是一个关键字,用于重载运算符。通过重载运算符,您可以定义自定义类型的对象在使用内置运算符时的行为。 operator重载用法一般可以分为…...

深度学习笔记-暂退法(Drop out)
背景 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预…...

使用自适应去噪在线顺序极限学习机预测飞机发动机剩余使用寿命(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
实验5-7 使用函数求1到10的阶乘和 (10 分)
实验5-7 使用函数求1到10的阶乘和 (10 分) 本题要求实现一个计算非负整数阶乘的简单函数,使得可以利用该函数,计算1!2!⋯10!的值。 函数接口定义: double fact( int n ); 其中n是用户传入的参数,其值不超过…...

kafka部署
1.kafka安装部署 1.1 kafaka下载 https://archive.apache.org/dist/kafka/2.4.0/kafka_2.12-2.4.0.tgz Binary downloads是指预编译的软件包,可供直接下载和安装,无需手动编译。在计算机领域中,二进制下载通常指预构建的软件分发包,可以直接安装在系统上并使用 "2.…...

Spring Security6入门及自定义登录
一、前言 Spring Security已经更新到了6.x,通过本专栏记录以下Spring Security6学习过程,当然大家可参考Spring Security5专栏对比学习 Spring Security5专栏地址:security5 Spring Security是spring家族产品中的一个安全框架,核心功能包括…...

开放式蓝牙耳机哪个品牌好用?盘点几款很不错的开放式耳机
相比传统入耳式耳机,开放式耳机因其不入耳不伤耳的开放设计,不仅带来了舒适的佩戴体验,还创造了一种与周围环境互动的全新方式,户外运动过程时也无需担心发生事故,安全性更高。我整理了几款比较好用的开放式耳机给大…...

WebGL: 几个入门小例子
本文罗列几个WebGL入门例子,用于帮助WebGL学习。 一、概述 WebGL (Web Graphics Library)是一组基于Open ES、在Web内渲染3D图形的Javascript APIs。 Ref. from Khronos Group: WebGL WebGL™ is a cross-platform, royalty-free open web standard for a low-lev…...
PAT(Advanced Level)刷题指南 —— 第一弹
一、1001 A+B Format 1. 问题重述 给两个整数,输出这两个数的加和的结果,每三位用逗号分隔。 2. Sample Input -1000000 93. Sample Output -999,9914. 题解 思路:直接将两个整数相加,判断是否为负,是负数则直接输出负号并转为正数;然后将正数转为字符串,按规则每…...
【BASH】回顾与知识点梳理(九)
【BASH】回顾与知识点梳理 九 九. 扩展正则表达式(延伸正规表示法)9.1 egrep命令语法匹配指定模式的行(用法和grep相同)忽略大小写匹配(用法和grep相同)反向匹配(用法和grep相同)显示行号(用法和grep相同)递归搜索目录(用法和grep相同)匹配整词(用法和grep相同)统计匹配行数(用…...

Android 版本 对应的 API版本
Android 14(开发者预览版) 如需详细了解平台变更,请参阅 Android 14 文档。 Android 13(API 级别 33) 如需详细了解平台变更,请参阅 Android 13 文档。 Android 12(API 级别 31、32…...
Django 异常信息 E302 expected 2 blank lines, found 1
在Django中,PEP 8风格指南建议在任何类定义之前都应该有两个空白行,包括视图(views)。错误信息"E302 expected 2 blank lines, found 1"表示在类定义之前只有一个空白行,而Django希望有两个空白行。 要修复…...

2019年09月《全国青少年软件编程等级考试》Python一级真题解析
一、单选题 第1题 关于Python的编程环境,下列的哪个表述是正确的? A:Python的编程环境是图形化的; B:Python只有一种编程环境ipython; C:Python自带的编程环境是IDLE; D&#…...
mybatis如何防止SQL注入
阅读正文: mybatis是如何防止SQL注入的 1、首先看一下下面两个sql语句的区别: <select id"selectByNameAndPassword" parameterType"java.util.Map" resultMap"BaseResultMap"> select id, usernam…...

DoIP学习笔记系列:(三)用CAPL脚本过“安全认证”,$27服务实现
文章目录 1. 如何调用接口通过安全认证?如何新建CAPL工程,在此不再赘述,本章主要分享一下如何在CAPL中调用DoIP接口、diag接口进行DoIP和诊断的测试。 注意:CANoe工具本身的使用没什么难的,所谓会者不难难者不会,各位小伙伴有疑问要多问,多交流,往往难事都只是一层窗户…...

【Linux】多路转接 -- select函数
文章目录 1. 认识select函数2. select函数原型3. socket就绪条件4. select工作流程5. select服务器6. select的优缺点 首先我们要了解一下,什么是多路转接? 多路转接也叫多路复用,是一种用于管理多个IO通道的技术。它能实现同时监听和处理多个…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...