当前位置: 首页 > news >正文

网络基础概述

1.计算机网络背景

​ 计算机刚刚发展的时候,是没有网络的,每一台计算机都是相互独立的。后来,人们有了多人协作的需求,人们就想办法把多台计算机用“线”连接起来,实现数据共享。后来,连接到一起的电脑越来越多,就逐渐衍生出局域网,城域网,广域网这样的概念。所谓的局域网,广域网只是一个相对的概念,我们不用区分的过于清楚。你只需要知道连接在一起的计算机比较少就是局域网,连接在一起的电脑比较多就属于广域网。广域网可以看成最大的局域网。通常,一个局域网内,只有交换机,通过交换机数据共享。而广域网,在此基础上还需要很多很多的路由器来实现数据传输。

image-20230215133242349

2.认识网络前的知识储备

​ 为了助于我们更好的学习网络,我们先来回忆一下计算机体系结构。当今的计算机绝大多数都是冯诺依曼体系结构,相比大家对此并不陌生

image-20230215133706029

我们常说,输入设备将数据传给内存,然后内存将数据传给CPU,CPU对数据进行处理将结果传给内存,内存再将处理结果传给输出设备。那么我现在问,怎么传的的数据呢,总不能你说传就能传吧,其实呢,这些硬件之间也是通过线来连接起来的。其中,CPU与内存之间进行数据传输的线叫做“系统总线”,而外设与内存之间进行数据传输的线叫做IO总线。(虽然我这样说的并不是很准确,但是我们只需要知道各个硬件之间用线连接起来之后就可以进行数据交互,至于为什么连上线就能数据交互我们并不关心)同理,当我们把多台计算机用线连接起来之后,就可以实现多台计算机数据交互了。

3.什么是协议?

​ 所谓协议,其实就是一种约定,或者说是一种规则。其实我们在现实生活中有很多这样的规则。比如我们在过马路看到红绿灯的时候,红灯停下,绿灯通行,黄灯等一等。这是国家的交通管理部门制定的规则,我们每个公民都遵守规则,才能保证交通井然有序。同样的网络传输,自然也需要有相应的网络协议,并且每个网民都遵守协议,才能保证数据在网络中正确高效的传输。

4.网络协议分层

​ 70年代以来,国外一些主要计算机生产厂家先后推出了各自的网络体系结构,但它们都属于专用的。为使不同计算机厂家的计算机能够互相通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系结构标准。国际标准化组织ISO 于1981年正式推荐了一个网络系统结构----七层参考模型,叫做开放系统互连模型(Open System Interconnection,OSI)。由于这个标准模型的建立,使得各种计算机网络向它靠拢,大大推动了网络通信的发展。OSI参考模型将网络协议分为以下七层。

image-20230220124003653

但是在实际使用的时候发现,很难将最上面三层区分的特别清楚,于是上面三层就被简化为一层,统称为应用层。我们现在所说的TCP/IP四层(或五层)网络协议就是这么来的。我们学习也是按这四层(或五层)协议来学习。

image-20230220124537335

  • 协议分层的原因/好处有哪些呢?
    1. 降低通信协议的复杂性,每层各自完成一定的任务,功能相对独立(高内聚低耦合),这样实现起来更容易
    2. 将网络的通信过程划分为小一些、简单一些的部件,因此有助于各个部件的开发、设计和故障排除
    3. 在通信过程中,每一层都认为和对端的同一层直接通信,不用管下层具体怎样将信息传输的。

5.TCP/IP协议

TCP/IP协议不是一个协议,而是一组协议,包括了很多协议。TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.

  • 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问 协议(Telnet)等. 我们的网络编程主要就是针对应用层.
  • 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
  • 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
  • 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
  • 物理层: 负责光/电信号的传递方式. 比如以前以太网通用的网线(双绞线)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.

本文只是对TCP/IP协议总体介绍,后面在对每一层进行深入学习。

下面我们将之前学的计算机体系层状结构和网络协议放到一起看看

image-20230222133017795

通过观察我们可以发现,一台主机想和另一台主机通信肯定要借助硬件,而应用层是不能直接驱动硬件的,而是必须经过操作系统。用户在应用层通过使用操作系统提供给用户的系统调用接口,告诉操作系统想和另一台主机通信,而操作系统在告诉网卡驱动,驱动再告诉网卡,通过网卡将信息发到互联网。由此可见,两台主机通信一定是自上而下的发送信息,自下而上的接收信息。就好比张三住在五楼,李四也住在五楼(不是同一栋楼),王五帮助他们两个传话,王五肯定是从五层收到张三的消息,再下到一层,走到马路上,然后走到李四那栋楼,再从一楼上到五楼,把消息传给李四。

  • 那么从计算机的视角是如何看待协议呢?

    ​ 举个例子,你在网上买了一部手机,你下单之后,你就只需要等快递了。商家会收到订单,然后商家会把手机交给快递员,然后呢商家也什么也不用管了。快递员收到包裹之后呢,会给手机打包起来,并且贴上快递单,这个快递单上一定包含了从哪来,到哪里去,上一站是哪,下一站是哪,并且呢包裹每走一站,上一站下一站的地址一定会改变。当快递小哥把包裹交给你之后,你会把包裹拆开,拿到里面的手机。虽然你只想买一部手机,但是你收到的绝不仅仅是一部手机,而一定包含了其他东西(快递包装箱,快递单)。以上过程可以简化为:打包–转发–解包。

    ​ 两台主机通信的过程,同样也有类似的过程。请看下图。

    image-20230222141119756

    讲到这里,想必刚刚学习网络的同学会有这样的疑惑。为什么处于同一个局域网的两台主机能够通信呢?

    • 举个例子,老师和同学们在一间教室里上课,老师叫张三:张三你站起来回答问题。老师说的这句话,所有的同学都听到了,但是只有张三站起来了,因为老师是在叫他的名字。其他同学之所以没有站起来,是因为没有叫他们的名字。同样的,一个局域网,就好比一间教室,一台主机发消息,局域网内的所有主机都是可以收到的,但是,每一台主机都有他们自己的“名字”,发消息的人呢,也会带上接收方的“名字”,指明消息是发给谁的。所有的主机收到消息的时候,都会将自己的“名字”和消息中接收方的“名字”做对比,如果不是在叫自己,就会自动忽略消息内容。再回到教室的例子,比如此时是下课期间,教室里比较吵闹,老师叫张三,但是张三坐的比较靠后没有听到,那么老师可能就会过一会重新叫张三一次。而在局域网中,也是有可能多台主机同时在发消息,这些消息可能发生“碰撞”,导致有些消息没有被正确的发送给接收方。此时,就会使用碰撞检测算法,(应该就是过一定时间重发一次,大概是这样)。

    上面我们介绍了同一局域网内的主机通信,那么互联网中不同局域网的两台主机又是如何通信的呢?请看下图。

    image-20230222144306020

    其中路由器,屏蔽了底层硬件的差异,使得不同数据链路层的协议的主机也能正常通信。

6.IP地址和MAC地址

我们要将信息从一台主机发送到另一台主机,一定要用到这几个地址:起始地址,最终地址,上一站地址,下一站地址。

IP地址:在公网上一台主机的唯一标识,对应“起始地址,最终地址”。

MAC地址:用来在局域网中标识一台主机的唯一性。对应“上一站地址,下一站地址”。

如果把IP比作你的身份证号,MAC地址就是你的学号。

7.主机通信的本质

通过以上的学习,我们可以说,两台主机的通信,其实就是两台主机中的某两个进程之间的通信。我们可以通过IP在公网上找到目的主机,可是这还不够,我们需要和目的主机的具体某一个进程进行通信。如何确定和哪一个进程通信呢?或许有的同学想到了进程PID,从技术的角度上来说,我们确实可以通过PID确定和哪个进程通信,但是,这样不好,既然有了身份证号,为什么学习还要给同学们生成学号呢,身份证号也可以在一个学校内唯一标识一名学生呀。在网络通信的时候,标识具体某一进程,使用的是端口号(port),而IP+port就可以标识全网唯一一个进程。我认为这样做有以下两种好处:首先不是所有的进程都需要进行网络通信,把需要网络通信的进程用port标识,更好管理。此外,这样讲网络和操作系统直接的概念区分的更明确,明明就是两个方向的知识,何必用相同的名字进行区分呢?这样不易混淆。

感谢大家的阅读,期待您的关注与支持,下面我会继续更新网络的知识,尽量使用最浅显易懂的道理帮您学好网络的知识!

相关文章:

网络基础概述

1.计算机网络背景 ​ 计算机刚刚发展的时候,是没有网络的,每一台计算机都是相互独立的。后来,人们有了多人协作的需求,人们就想办法把多台计算机用“线”连接起来,实现数据共享。后来,连接到一起的电脑越来…...

微搭使用笔记(四) 通过循环展示组件+json配置生成表单及数据获取

背景及整体思路 上篇文章我们通过微搭提供的数据模型完成了问卷表单页面的创建和数据采集,相对来说除了数据模型配置略显复杂外其他的倒还算方便。 本文我们通过for循环加上json文件配置的方式实现一个通用表单页面,如果更换了表单只需要替换掉json配置…...

做测试5年,靠业务熟悉吃老本,技术短板暴露,30岁被无情辞退...

朋友跟我诉苦,最近他被公司无情辞退了。测试几年,月薪10k,如今已经30了,接下来不知道该怎么办,让我帮他想想办法... 几年下来,也算是公司的骨干成员,不说有功,但一定无过。公司业务…...

Linux系统安装MySQL8.0版本详细教程【亲测有效】

首先官网下载安装包:https://downloads.mysql.com/archives/community/ 一、上传到安装服务器 二、解压 tar -xvf mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz三、移动位置并重新命名 mv mysql-8.0.31-linux-glibc2.12-x86_64 /usr/local/mysql四、创建mysql用户…...

[论文阅读笔记19]SiamMOT: Siamese Multi-Object Tracking

这是CVPR2021的一篇文章, 是利用SOT的一些思想来进行MOT的运动估计. 文章地址: 文章 代码地址: 代码 0. 摘要 本文提出了一个孪生(Siamese)式的MOT网络, 该网络用来估计帧间目标的运动. 为了探究运动估计对多目标跟踪的影响, 本文提出了两种运动建模方式: 显式和隐式. 本文在…...

unix高级编程-fork和execve

fork和vfork vfork是老的实现方法又很多问题 vfork #include <sys/types.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <signal.h> #include <errno.h> #include <sys/stat.…...

Vue3+Ts+Vite开发插件并发布到npm

依赖版本信息如下&#xff1a; "vue": "^3.2.45""typescript": "~4.7.4""vite": "^4.0.0""less": "^4.1.3""terser": "^5.16.4"npm: 8.1.0node: 16.13.0 目标&#xf…...

CAN TP层函数介绍

如果想使用CAN TP层函数,首先需要在网络节点或测试节点配置页面的Componets组件一栏添加osek_tp.dll文件。路径为:C:\Program Files\Vector CANoe 15\Exec32 至于节点的CAPL程序内需不需要引用这个dll文件,无所谓,可写可不写。但是如果是其他dll,必须在CAPL程序中引用。为…...

Spring架构篇--2.5 远程通信基础Select 源码篇--window--Select.open()

前言&#xff1a;在Socket通信中使用Select 来对NIO 进行实现&#xff0c;那么它们的实现方式是怎样的呢&#xff0c;本文从 Selector.open() 进行第一步的分析&#xff1b; Selector.open() &#xff1a; Selector 类&#xff1a; public static Selector open() throws IOEx…...

WEB静态交互展示【数据mock】

文章目录背景需求分析实现过程1.爬取原有项目数据2.将数据引入项目3.打包收工后记背景 接到公司一个【离谱】的需求&#xff0c;要求把已有的项目做一个演示版本&#xff08;静态文件版本&#xff09;&#xff1b;本人觉得前端、后端搞个容器包&#xff0c;一个演示版本不就有…...

(4)C#传智:分支Switch与循环While(第四天)

一、异常捕获 定义&#xff1a;语法无错&#xff0c;程序因某些原因出现的错误&#xff0c;而不能正常运行。 用try-catch进行捕获。哪行代码可能出现异常&#xff0c;你就踹它一脚。 try { 可能会出现异常的代码; ---- …...

Stable-Baselines 3 部分源代码解读 2 on_policy_algorithm.py

Stable-Baselines 3 部分源代码解读 ./common/on_policy_algorithm.py 前言 阅读PPO相关的源码&#xff0c;了解一下标准库是如何建立PPO算法以及各种tricks的&#xff0c;以便于自己的复现。 在Pycharm里面一直跳转&#xff0c;可以看到PPO类是最终继承于基类&#xff0c;也…...

15. Qt中OPenGL的参数传递问题

1. 说明 在OPenGL中&#xff0c;需要使用GLSL语言来编写着色器的函数&#xff0c;在顶点着色器和片段着色器之间需要参数值的传递&#xff0c;且在CPU中的数据也需要传递到顶点着色器中进行使用。本文简单介绍几种参数传递的方式&#xff1a; &#xff08;本文内容仅个人理解&…...

注意,这本2区SCI期刊最快18天录用,还差一步录用只因犯了这个错

发表案例分享&#xff1a; 2区医学综合类SCI&#xff0c;仅18天录用&#xff0c;录用后28天见刊 2023.02.10 | 见刊 2023.01.13 | Accepted 2023.01.11 | 提交返修稿 2022.12.26 | 提交论文至期刊部系统 录用截图来源&#xff1a;期刊部投稿系统 见刊截图来源&#xff1a…...

Could not find resource jdbc.properties问题的解决

以如下开头的内容&#xff1a; Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in SQL Mapper Configuration 出现以上问题是没有在src/main/resources下创建jdbc.prop…...

【面试题】==与equals区别、Hashcode作用、hashcode相同equals()也一定为true吗?泛型特点与好处

文章目录1. 和 equals 的区别是什么&#xff1f;2.Hashcode的作用3. 两个对象的hashCode() 相同&#xff0c; 那么equals()也一定为 true吗&#xff1f;4.泛型常用特点5.使用泛型的好处&#xff1f;1. 和 equals 的区别是什么&#xff1f; “” 对于基本类型和引用类型 的作…...

Flex布局中的flex属性

1.flex-grow&#xff0c;flex-shrink&#xff0c;flex-basis取值含义 flex-grow&#xff1a; 延申性描述。在满足“延申条件”时&#xff0c;flex容器中的项目会按照设置的flex-grow值的比例来延申&#xff0c;占满容器剩余空间。 取值情况&#xff1a; 取负值无效。取0值表示不…...

SpringBoot + Ant Design Pro Vue实现动态路由和菜单的前后端分离框架

Ant Design Pro Vue默认路由和菜单配置是采用中心化的方式&#xff0c;在 router.config.js统一配置和管理&#xff0c;同时也提供了动态获取路由和菜单的解决方案&#xff0c;并将在2.0.3版本中提供&#xff0c;因到目前为止&#xff0c;官方发布的版本为2.0.2&#xff0c;所以…...

robotframework自动化测试环境搭建

环境说明 win10 python版本&#xff1a;3.8.3rc1 安装清单 安装配置 selenium安装 首先检查pip命令是否安装&#xff1a; C:\Users\name>pipUsage:pip <command> [options]Commands:install Install packages.download Do…...

尚硅谷《Redis7》(小白篇)

尚硅谷《Redis7 》&#xff08;小白篇&#xff09; 02 redis 是什么 官方网站&#xff1a; https://redis.io/ 作者 Git Hub https://github.com/antirez 03 04 05 能做什么 06 去哪下 Download https://redis.io/download/ redis中文文档 https://www.redis.com.cn/docu…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...