网络基础概述

news2024/11/29 10:52:52

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标识,更好管理。此外,这样讲网络和操作系统直接的概念区分的更明确,明明就是两个方向的知识,何必用相同的名字进行区分呢?这样不易混淆。

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

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

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

相关文章

地球板块运动vr交互模拟体验教学提高学生的学习兴趣

海陆变迁是地球演化史上非常重要的一个过程,它不仅影响着地球的气候、地貌、生物多样性等方面,还对人类文明的演化产生了深远的影响。为了帮助学生更加深入地了解海陆变迁的过程和机制,很多高校教育机构开始采用虚拟现实技术进行教学探究。 V…

Go语言进阶与依赖管理-学习笔记

1 语言进阶 1.1 Goroutine 线程:内核态,栈MB级别 协程:用户态,轻量级线程,栈KB级 1.2 CSP 提倡通信实现共享内存 1.3 Channel 创建方法 make(chan 元素类型,缓冲区大小) 无缓冲通道&#x…

【Storm】【二】安装

1 准备 1.1 准备linux服务器 本文搭建的是3节点的集群,需要3台linux服务器,我这里使用的是centos7版本的linux虚拟机,虚拟机网络配置如下: 主节点: master 192.168.92.90 从节点: slave1 192.168.92.…

Git 教程

目录1.简介:2.安装Git3.Git 如何工作状态区域4.使用Git5.Git配置5.1 创建仓库 - repository5.2 配置5.2.1 --global5.2.2 检查配置6. 查看工作区的文件状态6.1什么是工作区6.2 如果显示乱码的解决方式7.在工作区添加单个文件8. 添加工作区文件到暂存区9. 创建版本10…

Docker启动RabbitMQ,实现生产者与消费者

目录 一、Docker拉取镜像并启动RabbitMQ 二、Hello World (一)依赖导入 (二)消息生产者 (三)消息消费者 三、实现轮训分发消息 (一)抽取工具类 (二)启…

网络安全——数链路层据安全协议

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.数据链路层安全协议简介 1.数据链路安全性 二.局域网数据链路层协议 1.…

git应用笔记(三)

在新增虚拟机linux的基础上,做git的下载与提交 1、初始化自己的用户名和邮箱。 git config --global user.name “输入你的用户名” git config --global user.email “输入你的邮箱” 2、将本地公钥及配置如图1复制粘贴到虚拟机当前用户.ssh\目录下 4929a0205f43…

面渣逆袭:分布式十二问,万字图文详解

大家好,我是老三,不管今年金三银四如何,面渣逆袭系列继续,这期我们来看看分布式。 分布式理论 1. 说说CAP原则? CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性…

硬件学习 软件Cadence day07 PCB 底板电路图布线

1.根据原理图的元器件, 选择在 PCB 芯片制作的元器件 (allegro中原理图和pcb中元件的交互) 1.首先完成下列操作 可以尝试先关闭再打开, 等下操作的时候就好 发现新增的发光物体!! 2.完成操作 ,…

Web3中文|香港拟允许比特币交易,瞄准“全球web3中心”

香港再次成为全球加密行业关注的焦点。在美国SEC对于加密货币交易所Kraken、BUSD发行商Paxos以及BA的重磅打击对比下,香港从去年开始持续拥抱Web3的姿态,让投资者开始押注香港。2023年2月20日,香港证监会宣布,就适用于虚拟资产交易…

Linux:基于libevent读写管道代码

基于libevent读写管道代码&#xff1a; 读端&#xff1a; #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <event2/event.h> #include…

gdb的简单练习

题目来自《ctf安全竞赛入门》1.用vim写代码vim gdb.c#include "stdio.h" #include "stdlib.h" void main() {int i 100;int j 101;if (i j){printf("bingooooooooo.");system("/bin/sh");}elseprintf("error............&quo…

Python 算法交易实验48 表字段设计

说明 虽然说的是表&#xff0c;实际上用的是Mongo集合 基于ADBS(APIFunc DataBase Service)可以构造一个供后续研究、生产长时间使用的数据基础&#xff0c;这个基础包括了&#xff1a; 1 队列服务。通过队列&#xff0c;数据可以通过API实现零担和批量两种模式的快速存储。2 …

ideal创建maven项目

前置工作本机安装mavenIdea 设置使用本机maven 工具Settings--->Maven开始创建maven项目创建maven项目&#xff0c;勾选通过模板创建&#xff0c;选择 maven-archetype-webapp 模板GroupId: 公司名倒序ArtifactId: 项目名设置本地maven仓库配置项目文件显示名&#xff0c;和…

外卖点餐小程序开发

前言 餐饮行业是一个传统的行业。根据当前发展现状,网络信息时代的全面普及,餐饮行业也在发生着变化,单就点餐这一方面,利用手机点单正在逐步进入人们的生活。传统的点餐方式,不仅会耗费大量的人力、时间,有时候还会出错。小程序系统伴随智能手机为我们提供了新的方向。 手机…

如何使用码匠连接 MySQL

目录 在码匠中集成 MySQL 在码匠中使用 MySQL 关于码匠 目前码匠已经实现了与 MySQL 数据源的连接&#xff0c;支持书写 SQL 语句&#xff0c;也支持通过图形化界面对数据进行增、删、改、查&#xff0c; 同时还支持将数据绑定至各种组件&#xff0c;并通过简单的代码实现数据…

Collecting package metadata (current_repodata.json): failed

一、问题描述 安装anaconda之后&#xff0c;想创建环境&#xff0c;用了下面这段代码&#xff1a; conda create -n pytorch python3.7 conda创建环境报错了&#xff0c;报了如下这一堆&#xff1a; Collecting package metadata (current_repodata.json): failedUnavailab…

echart中x轴数据过多时展示不全

项目中遇到需要展示一些柱状图&#xff0c;之前做相关功能时&#xff0c;横坐标x轴一直用的是时间&#xff0c;所以没有注意到这个问题。 如下图所示&#xff1a; 当x轴显示的是”人名“这种类型的值的时候&#xff0c;这种显示情况就有问题了&#xff0c;这样就不会知道&…

python学习笔记之例题篇NO.3

获得用户输入的一个整数N&#xff0c;输出N中所出现不同数字的和。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬ s list(set(list(input())))# ① r…

全局组件和局部组件

全局组件第一种定义方法&#xff1a;A、创建自己的组件&#xff1a;Loading.vueB、在main.js文件中引入组件并注册import Vue from vue import App from ./App.vue import * as filters from ./filterimport quanjuzujian from ./components/quanjuzujian.vueVue.component(qua…