网络——入门基础

news2024/11/23 4:25:22

目录

协议    

网络协议

OSI七层模型

网络传输基本流程

网络传输流程图

局域网通信

数据包的封装和解包

广域网通信

网络地址管理

IP地址

MAC地址


协议

        关于什么是局域网,什么是广域网,我这里就不过多赘述了,我们直接来谈一下什么是协议。

        “协议”其实就是一种约定,双方想要通信就需要做某种约定,通过这种约定来完成某种特定事情。比如小时候和同学做的约定,敲一下门要做什么,敲两下要做什么。

        网络协议就是通信计算机双方必须共同遵守的约定,所以用计算机语言将这种约定表达出来,双方计算机才能识别约定的相关内容。但是计算机之间的传输媒介是光信号和电信号,可能有的通过频率或者强弱来表示0或1这样的信息,有的可能通过不同的策略,因为计算机只认识0和1,所以各个做硬件的厂商也要共同遵守某种约定,让不同的计算机识别的信息是一样的。

        那么操作系统要不要进行协议管理呢,那就又是先描述再组织。协议本质上就是一个软件,那么软件是可以“分层”的,什么是分层呢?曾经我们写过的各种类,在类外中我们叫做使用这个类中的方法,在类中就是方法的实现,使用和实现就是两层;面向对象的多态,实现多态就要有继承体系,每个继承体系就可以叫做一层软件层。


网络协议

        所以协议在设计的时候也是要分层的。

        两个人在打电话的时候,你并没有直接跟对面的人说话,而是把你的声音交给了手机,你的手机把声音交给了对方的手机,对方才能在手机中听到你的声音。

        为什么要分层呢?原因就是以后的通信场景变得很复杂了,我们将功能解耦,更便于维护,某一层出了问题只需要解决某一层,其他层不会受到影响。

        这些都是分层的好处,为了让网络通信也变的更好,也对网路协议进行了分层。


OSI七层模型

        我们通信的复杂程度主要和通信的距离是正相关的,从通信的方面来说:

  • 如果两个人的通信距离过远,会有没收到的情况,这就叫做丢包
  • 在发送的时候,如何找到对方主机的位置,这就是定位问题
  • 通信距离远的时候,我们的信息不可能直接发给对方,需要通过多个路由器帮我们跳转,那怎么保证下一个路由器是正确的
  • 不管是发送还是接收信息,都是通过信号的频率或强弱来识别的,也要有硬件的支持

        再从我们应用的方面来说:

  • 为了实现通信,我的数据一定是经过一些处理才发给对方的,对方收到了也是要经过处理才能看得懂,那如何处理数据也是一个问题。

        为了解决上面的这些问题,就有了网络协议的层状结构,这些问题对应的层分别是:传输层、网络层、数据链路层、物理层、应用层。

        我们也把左边的网络协议层也叫做TCP/IP协议。

        未来我们也是使用传输层提供的系统调用接口进行网络编程。

物理层:
        负责光电信号的传递,他决定了最大传输速率、传输距离等。

数据链路层:

        负责设备之间的数据帧的传送和识别,例如网卡驱动,交换机就工作在数据链路层。数据链路层和物理层就负责数据的发送过程。

网络层:
        负责地址的管理和路由的选择,路由器工作在网络层。

传输层:
        负责两台主机的数据传输,确保数据的可靠发送。比如传输过程中可能会出现丢包问题。

应用层:
        负责应用程序之间的沟通,应用层需要根据通信的目的,对数据进行分析与处理,达到某种业务性的目的。

        这一层一层的结构也叫做网络协议栈,网络协议栈的下三层主要的完成就是信息传输,而应用层完成的就是数据分析和业务处理。

        但其实最开始提出的协议层并不是TCP/IP协议,而是OSI七层模型。

  • OSI(Open System Interconnection,开放系统互联)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
  • 把网络从逻辑上分为了7层,每一层都有相关、相对应的物理设备,比如路由器工作在网络层,交换机工作在数据链路层。
  • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。
  • 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
  • 但是, 它既复杂又不实用,所以我们都是使用TCP/IP四层或五层模型,物理层也不会考虑太多。


网络传输基本流程

网络传输流程图

局域网通信

同一个局域网下的两台主机的通信流程就是这样的:

        这幅图举个例子就很好理解了,你住在一栋楼的10楼,你现在要给另一栋也住在10楼的小伙伴送个东西,那你一定要一层一层的下楼,然后跑到他的楼下,再一层一层的上楼,这样你才能把东西送给他,他也不会管你是怎么来的。

        所以局域网中的两台主机是可以直接通信的。那我们接下来就要再说一下网络的概念:

  • 每层都有自己的协议定制方案。
  • 每层协议都要有自己的协议报头
  • 从上到下交付数据的时候要添加报头
  • 从下到上拿到数据的时候要去掉报头

        再来举个例子说一下什么是报头,我们买东西的时候一定是在网上给卖家说我要买这个,经过一系列的操作,卖家要被快递交给物流,物流拿到东西之后一定要给这个快递贴上快递的信息,再经过一系列操作到了楼下的快递站,我们从快递站拿到这个快递,拆开就能用了。这个快递中的物品就好比是数据,这个快递信息就好比是协议报头,通过这个报头就可以送到我楼下的快递站,我拿到了快递再拆开去掉协议报头就拿到了里面的数据。

数据包的封装和解包

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在数据链路层叫做帧(frame)
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(报头),称为封装
  • 首部信息中包含了一些类似于首部有多长,有效载荷有多长,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再将报头和有效载荷分离,根据首部中的 "上层协议 字段" 将数据交给对应的上层协议处理,这叫做解包

        这次就不是快递了,比如我们给同学发微信:

        通过对数据一层一层的封装,送到另一台主机后再一层一层的解包,所以两台主机在每一层都以为自己在和另一台主机的相同层在逻辑上直接通信,所以不可能把以太网帧直接发给网络层或者其它层。

        在同一个局域网中。除了当前正在通信的主机A和主机F还有其他主机,那怎么只有主机F收到了呢?

        实际主机A发数据给主机F的时候,其他主机也都收到了该数据,只不过除了主机F以外,其他主机识别到该数据并不是发给自己的,此时其他主机就把收到的数据丢弃了

        如果主机A不仅在和主机F通信,还和别的主机也在通信,但是同一个局域网中使用的都是同一个通信信道,每个主机发出的数据就可能会相互干扰

        每个局域网也可以看做一个碰撞域,如果某个主机发送出去的数据与其他主机发送的数据之间产生了干扰,这两台主机在该碰撞域中就发生了碰撞

        那么如何判断发生了碰撞呢?当一个主机将数据发送到局域网,它自己也可以收到这个数据,收到后与之前发送的数据进行比较,如果不同就说明发生了碰撞。

        想要处理碰撞其实很简单,当一个主机发送出去的数据产生了碰撞,那么该主机可以选择等一段时间后,再重新发送该数据。但是计算机处理的速度很快,所以发生的概率不是很大。

广域网通信

        上面说了局域网通信,那我们再来说一下广域网通信,前面我们提到过,我要给很远的一台主机发送信息,要先遵守应用层的协议,通过传输层稳定的把数据发送过去,通过网络层确定是那一台主机,通过数据链路层和物理层发送和接收信号。

        局域网之间都是通过路由器连接起来的,一个路由器至少能够横跨两个局域网。这些被路由器连接的局域网都认为该路由器就是本局域网内的一台主机,所以路由器可以和这些局域网内的任意一台主机进行直接通信。

        主机A使用自己的MAC地址封装报头,到了路由器时解包向上交付,路由器看到IP地址后就知道要转发到哪一个主机下。所以在使用TCP/IP协议时,IP及其向上的协议看到的报文都是一样的,只有数据链路层的MAC会变成不同的,这里只有一个路由器,但事实上是会有很多路由器才能跳转到对应的主机的。


网络地址管理

IP地址

  • IP地址是在IP协议中标识网络中不同主机的地址。
  • 对于IPv4来说,IP地址是一个4字节,32位的整数。
  • 我们通常也使用“点分十进制”的字符串表示IP地址,例如192.168.16.1,用点分割的每一个数字表示一个字节,范围是0-255。

        需要注意的是,IP协议有两个版本,分别是IPv4和IPv6。IPv4用32个比特位来标识IP地址,而IPv6用128个比特位来标识IP地址。

MAC地址

  • MAC地址用来识别数据链路层中相连的节点。
  • 长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示(例如:00:16:3e:03:92:10)。
  • 在网卡出厂时就确定了,不能修改。MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突,也有些网卡支持用户配置MAC地址)。

        那我们再来重新看一下广域网通信。

        如果我在北京,我要给上海的朋友发消息,所以我在北京的主机的IP地址就叫做源IP,上海的朋友的主机的IP地址就叫做目的IP,比如这个信息要先传给当前地区的路由器,这条信息封装了MAC地址,这就是源MAC地址,通过自己家里的路由器放到当前地区的路由器,这就是下一站的MAC地址

        从消息发出到收到消息,源IP和目的IP都是不会变的,他要给下一站提供方向,会变化的就是MAC地址,通过当前地区的路由器就知道下一个路由器在哪里,继续封装MAC地址,这样一步步把消息传递过去。

        上述的源IP和目的IP、源MAC和下一站MAC都分别保存在对应层的报头中。

        在Linux中查看自己的MAC地址就要使用ifconfig命令。

这个ether就有以太的意思。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1532042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

复旦发布层次性奖励学习框架,增强大模型人类偏好对齐

在人工智能领域,强化学习(Reinforcement Learning, RL)一直是实现智能体自主学习的关键技术之一。通过与环境的交互,智能体能够自我优化其行为策略,以获得更多的奖励。然而,当涉及到复杂的人类偏好时&#…

codeforces 1600分

文章目录 1.[G. Special Permutation](https://codeforces.com/problemset/problem/1352/G)2.[D. Constructing the Array](https://codeforces.com/problemset/problem/1353/D)3.[C2. k-LCM (hard version)](https://codeforces.com/problemset/problem/1497/C2)4.[C. Circle …

【ollama】linux、window系统更改模型存放位置,全网首发2024!

首先是window系统 so easy 直接进入系统环境变量添加就行 其次是linux系统 全靠自己试出来的,去Ollama官网找半天文档不知道在哪,而且linux也没有说:【 https://github.com/ollama/ollama/blob/main/docs/README.md https://github.com/o…

CSS Module

CSS Module的作用:将CSS样式作用域限制在特定的组件范围内,以避免全局样式污染和命名冲突。 Vue中如何实现样式模块…

一款博客网站源码

一款博客网站源码 源码软件库 为大家内置了主题 清爽又强大真正的永久可用的一条源码,该版本为整合版本,内置了Joe主题,搭建后直接启用即可~ 安装环境要求: PHP 7.2 以上 MySQL, PostgreSQL, SQLite 任意一种数据库支持&#xff…

BUUCTF-WEB1

[ACTF2020 新生赛]Exec1 1.打开靶机 是一个ping命令 2.利用管道符“|” ping一下本地主机并查看ls ping 127.0.0.1 | ls 可以看到回显的内容是一个文件 127.0.0.1 | cat index.php #查看主机下index.php 127.0.0.1 | ls / #查看主机根目录下的文件 看的一个flag文件 …

专升本 C语言 万字考点笔记全国通用

前言 全章内容多次校验整理,可以放心食用;如果发现内容有不严谨的地方,请随时私信张三xy 形而上学者谓之道,形而下学者谓之器 目录 前言 常考概念 一、C语言的基础知识 第一节、对C语言的基础认识 第二节、C语言程序生命周期 第三节、标识符 第四节、进制的转…

帆软笔记整理

一:表格值自定义显示 1、日期型格式化:FORMAT($$$,"MM月dd日") 或者: 2、普通值自定义显示:if($$$SW_1,丝网一号机,if($$$SW_2,丝网二号机,丝网三号机)) 或者: 二:从数据集中再次筛选&#…

Wireshare捕获接口中没有本地连接

1. 查看npf服务是否启动 服务名无效,需要安转WinPcap 2. 勾选Npcap Packet Driver (NPCAP) 3. 重新启动Wireshark 重新启动Wireshark后,本地连接有了

吴恩达机器学习-可选实验室:简单神经网络(Simple Neural Network)

在这个实验室中,我们将使用Tensorflow构建一个小型神经网络 import numpy as np import matplotlib.pyplot as plt plt.style.use(./deeplearning.mplstyle) import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.laye…

C++:继承:面向对象编程的重要特性

(❁◡❁)(●◡●)╰(*▽*)╯(*/ω\*)(^///^)(❁◡❁)(❁◡❁)(●◡●)╰(*▽*)╯(*/ω\*)(❁◡❁)(●’◡’●)╰(▽)╯(/ω\)(///) C:继承:面向对象编程的重要特性 前言**继承**1.继承的概念及定义1.1继承的概念1.2继…

联合和枚举

联合体类型的声明 联合体(Union)是一种特殊的数据类型,它允许在同一内存位置存储不同类型的数据。与结构体不同的是,联合体的所有成员共享同一块内存空间,因此联合体的大小取决于它最大的成员的大小。 所以联合体也叫…

vue学习笔记27-组件生命周期⭐

每个vue组件实例在创建时都需要经历一系列初始化步骤,比如设置好数据侦听,编译模板,挂载实列到DOM,以及在数据改变时更新DOM。在此过程中,它也会运行称为生命周期钩子的函数,让开发者有机会在特定阶段运行自…

金融知识分享系列之:KD指标

金融知识分享系列之:KD指标 一、KD指标二、KD指标计算三、KD指标原理四、KD指标应用 一、KD指标 KD信号提供入场的工具 名称:随机震荡指标参数:(9,3,3)组成:K线,D线,20轴&#xff0…

因时夹爪urdf文件改写为xacro并搭配aubo_i5机械臂

因时夹爪urdf文件改写为xacro并搭配aubo_i5机械臂 一、因时夹爪内容二、改写为xacro模式三、aubo i5搭配因时夹爪 一、因时夹爪内容 因时夹爪型号&#xff1a;EG2-4C 夹爪的urdf文件内容&#xff1a; <robotname"jawasm1"><linkname"base_link"…

PyCharm中设置代码模版

前言 新创建一个.py文件后&#xff0c;我们总需要在开头写一些必要的代码&#xff0c;有什么方法能够一劳永逸&#xff0c;让这些代码自动生成呢&#xff1f; 有&#xff0c;它就是代码模版。 设置代码模版 这里先说说如何设置它。 步骤&#xff1a;首先打开PyCharm&#xff0…

内核移植——开发板的软件抽象(struct machine_desc)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 内核支持什么架构、支持哪款cpu&#xff0c;这是如何确定的&#xff1f;主要是通过机器码来确定的。 内核中定义了一份机器码&#xff0c;uboot也会给内核传递一个机器码。 在内核启动的汇编阶段&…

PowerShell 一键更改远程桌面端口

前言 提高工作效率,安全性和规范化,最终实现一键更改Windows 远程桌面端口 前提条件 开启wmi,配置网卡,参考 一键更改远程桌面端口自动化脚本 默认端口3389变更后的端口3390win+r mstsc YOU_ip常规更改的连接方式win+r mstsc YOU_ip:3390需要恢复到原来的端口3390更改成3…

wireshark抓tcp包使用指南

本博文源于笔者不断探索加上去网络总结获得的经验&#xff0c;撰写wireshark如何抓tcp包 文章目录 1、打开wireshark2、选择网络源3、搜索ip地址与tcp条件4、看灰色的条纹 1、打开wireshark 2、选择网络源 选择自己当前的ip地址适用于的网络源&#xff0c;比如这里选择“以太…

.net使用excel的cells对象没有value方法——学习.net的Excel工作表问题

$exception {"Public member Value on type Range not found."} System.MissingMemberException 代码准备运行问题解决1. 下载别的版本的.net框架2. 安装3. 运行 代码 Imports Excel Microsoft.office.Interop.Excel Public Class Form1Private Sub Button1_Click(…