【计算机网络】网络基础

初识网络

  • 一、网络发展
  • 二、认识协议
  • 三、认识网络协议
    • 1. 协议分层
    • 2. OSI 七层模型
    • 3. TCP/IP五层模型
    • 4. OS和网络协议栈
  • 四、网络传输基本流程
    • 1. TCP/IP 协议通讯过程
    • 2. 以太网通信
      • (1)以太网通信原理
      • (2)数据碰撞
    • 3. 数据跨网络传输

一、网络发展

  • 独立模式

数据在每台计算机中呈现串行的方式传递,如下图:

在这里插入图片描述

  • 网络互联

多台计算机连接在一起,完成数据共享,如下图:

在这里插入图片描述

  • 局域网 LAN

计算机数量更多了,通过交换机和路由器连接在一起。如下图,路由器的左右侧都是一个局域网,两个局域网用路由器连接起来,构成局域网LAN;在局域网内部,对应的主机用交换机可以互相转化消息;跨局域网经过路由器+交换机进行数据转化。数据经过交换机发现不是本网络的,直接交给路由器,路由器再在对应的子网当中,找到对应的主机。

在这里插入图片描述

  • 广域网 LAN

将远隔千里的计算机都连在一起,如下图:

在这里插入图片描述

其实我们国家的广域网可以看作一个比较大的局域网。

二、认识协议

其实“协议”是一种约定。展开来说,计算机里因为数据经过长距离传输,所以“沟通”的成本会变得很高,例如信息传输的时候衰减是问题,还需要对该数据进行转化,所以经过长距离传输的时候,需要定一些协议的。

例如我们平时见到的摩斯密码、发电报,这种都是一种协议,说白了就是一种约定。也就是通过双方规定的方式,进行信息的沟通。所以通过协议,可以降低沟通信息的成本。

在这里插入图片描述

计算机之间的传输媒介是光信号和电信号,通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息,要想传递各种不同的信息,就需要约定好双方的数据格式。

  • (1)那么我们怎么保证数据能准确到达下一个设备呢?
  • (2)又如何定位主机问题呢,也就是怎么在当前子网通过路由器找到另一个子网的主机呢?
  • (3)又如何解决长距离传输数据丢失的问题呢?
  • (4)又如何处理发来的数据呢?

其实上面的四个问题中,前三个问题是技术问题,而最后一个问题是应用问题。正是有各种各样的问题,所以主机是对称的,也就是发送方有这样的问题,接收方也有这样的问题,所以在我们双方的机器上,在每一层我们都要尝试把每一层的问题解决,所以每一层都要有对应的协议!每层的协议都是各自解决各自当前层的问题。

像(1)问题,是由数据链路层的协议解决的问题;像(2)问题,就是由网络层,也就是IP协议解决的;问题(3)是由TCP协议解决的;问题(4)由类似HTTPS协议解决的。

我们日常在寄快递的时候,通常会有一张快递单号,上面写着的信息其实都是协议,通过双方定的协议,就可以顺利将快递送到另一方中。而这有效的快递单中的信息我们称为报头。那么我们在语言层,该如何描述这些报头信息呢?结构体!所以协议是双方的约定,最终它的表现形式就是结构体对象!

那么只要通信的两台主机,约定好协议就可以了吗?计算机生产厂商有很多;计算机操作系统,也有很多;计算机网络硬件设备,还是有很多。如何让这些不同厂商之间生产的计算机能够相互顺畅的通信呢?就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是网络协议

三、认识网络协议

1. 协议分层

我们上面所说的,网络传输过程中会存在各种各样的问题,而且在定义协议的时候问题也错综复杂,所以问题要一个个解决,所以我们把网络协议整体是分层的。

软件为什么要分层呢?相当于是一个很大的项目被分解成了一个个的子项目,最大的好处就是每一层之间的耦合度一定是降低了,也就是高内聚,低耦合;更重要的是可以降低维护成本。

为什么网络协议也是层状的呢?首先网络通信的时候软件项目的规模太大了,所以需要将模块和模块之间解构出来。其次,协议是要解决问题的,而我们的问题有很多,而问题刚好也是层状的,所以协议定义出来也是层状的。

例如我们在打电话的时候,真实的情况是我们人其实在和电话沟通;而在逻辑上,其实我们认为人和人之间在沟通,电话和电话之间在沟通。所以我们人和对方的人进行沟通,就有了语言层;电话和对方的电话进行沟通,就有了通信设备层。我们的人面临着和对方的人准确沟通的问题,电话也面临着和对方电话的沟通问题,所以我们双方都要能够在通信时,为了解决自身问题,结合自身的情况需要定制一些协议。所以当通信设备层出了问题,我们可以直接将通信设备层换成另一套设备,照样不影响上一层正常通话,这就是分层带来的好处。

2. OSI 七层模型

那么这个网络协议应该是怎么分层的呢?

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

这七层从底向上分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

3. TCP/IP五层模型

TCP/IP五层模型 中,将 OSI 七层模型中的会话层和表示层归为了应用层这一类,所以分为五层,而我们只学除了物理层的其它四层。

TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇。TCP/IP 通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

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

我们将上面的五层一般称为网络协议栈,由于网络层和传输层在整个网络协议栈中是最重要的,所以我们将这个网络协议栈称为 TCP/IP 协议栈。

4. OS和网络协议栈

网络协议栈和我们之前学的操作系统有什么关系呢?网络协议栈和操作系统的对应关系如下图:

在这里插入图片描述

如上图,数据链路层相当于是在各种软件驱动内部实现的。传输层和网络层是在操作系统内部的,所以是要在Linux内核中实现的,也就是内核中的模块。

我们平时获取一个信息,本质上就是用户通过网卡这样的外设,将数据请求,把远端发来的数据信息拉取到本地,本质就是用户在访问硬件。所以网络通信本质上也是在访问硬件!但是我们用户不能直接访问硬件,因为操作系统是硬件的管理者!所以对于用户来说,想要访问网卡,必须要贯穿操作系统,所以操作系统需要为我们提供系统调用!

更重要的是,不仅仅只有一个操作系统是这样子的!不同的操作系统内部实现由它们自己决定,但是不管是什么操作系统,往后实现网络部分的功能时,必须遵守上面的标准!要不然这个操作系统就没办法入网!所以不同的操作系统它的系统内部大部分都不一样,但是网络协议栈必须都是一样的!

四、网络传输基本流程

1. TCP/IP 协议通讯过程

两台计算机通过 TCP/IP 协议通讯的过程如下图所示:

在这里插入图片描述

在网络通信的时候,应用层是如何把数据发送给对端的呢?每一层都要解决每一层的问题,所以网络协议栈的层状结构中,每一层都有协议!

例如我们需要发送一个信息给对端,除了我们需要发送的信息之外,还需要添加每一层对应的协议信息,每一层对应的协议我们称为报头,报头和信息组合起来我们称为报文,只要对应层的报文发送给了对方,对方就能根据协议正确解析。如下图:

在这里插入图片描述

如上图,我们把每一层的报文中的报头去掉后,剩下的称为有效载荷。也就是 报文 = 报头 + 有效载荷。所以通信的过程,本质就是不断的封装和解包的过程!

所以,有以下两个结论:

  1. 几乎任何层的协议,都要提供一种能力,将报头和有效载荷分离的能力;
  2. 几乎任何层的协议,都要在报头中提供,决定将自己的有效载荷交付给上层的哪一个协议的能力,这就叫做报头的分用。

2. 以太网通信

(1)以太网通信原理

我们在一个局域网中会有非常多的主机,如果我们把A主机的数据发给B主机,而不是发给C主机,所以原则上每一台主机在局域网上都要有自己唯一的标识符。

在一个局域网中,我们想和某一台主机进行通信,在该局域网中的所有主机都会接收到我们所发的报文,并且对该报文进行解包分用,发现当报头信息不是自己主机时,就会将数据摒弃,只有我们想要通信的那台主机得到数据,进而和我们进行通信,这就是局域网通信,也就是以太网通信

实际上,我们每一台主机都有自己的 Mac地址,什么是 Mac地址呢?我们所使用的电脑上,都有网卡,每一张网卡在出厂时都会有一个48比特位长度的序列号,这个序列号在全球内都是唯一的,这个序列号信息我们就称为 Mac地址

在我们局域网进行实际通信的时候,当我们发送信息的时候,数据链路层的报头中一定要包含原 Mac地址和目标Mac地址,这个报文信息我们称为数据帧,整个局域网都会收到这个数据帧,每个主机会对该数据帧进行分离,如果发现报头中的目标Mac地址不是自己当前主机的Mac地址,就会直接丢弃,一旦丢弃了,上层就不会知道曾经收到过这个报文。而如果发现该数据帧的目标 Mac地址 是自己当前主机的地址时,就会将整个报文解析之后,继续交给上一层进行数据处理。

(2)数据碰撞

在一个局域网中,如果一台主机正在发消息,周围也有主机正在发消息,此时就会发生数据碰撞问题,一旦发生数据碰撞,所有人的消息也就全部都失效了。所以一旦发生数据碰撞,参与发送数据的主机,都要执行它所对应的碰撞避免的算法。

3. 数据跨网络传输

跨网段的主机的文件传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。如果数据从A主机跨网络送到B主机,那么A主机和 B主机中间必须得有路由器这样的设备。

那么数据在跨网路传输的时候,它怎么知道要将数据跨网络到目标主机呢?我们需要引入一个新的地址,叫做 IP 地址,IP 地址能够标识特定一台主机在全网当中的唯一性,那么 Mac地址 不也可以吗?理论上也可以,但是Mac地址 只能应用于局域网,也就是只在局域网中保证它的唯一性,而 IP 地址是要保证在全网内的唯一性的。

那么 IP地址Mac地址 有什么区别呢?我们从用户发信息开始谈起,假设用户需要跨网发一条信息 hello world,像 TCP/IP 协议的通讯过程,在每一层都会添加上对应的报头字段,其中在网络层的报头中,有两个比较重要的信息,就是 srcipdstip,分别表示出发的主机 ip 地址和目的主机 ip 地址。到了数据链路层,如果判断到目的 ip 的地址不在当前子网时,就会将该数据帧交给路由器,而在一个子网内把数据交给路由器,本质就是局域网通信。两个局域网需要通信,就必须要横跨同一个路由器,所以就需要知道路由器的 Mac地址,所以在需要跨网通信的时候,到了数据链路层,就会在对应的报头上的目标 Mac地址 中填上路由器的 Mac地址,说明该数据帧是要交给路由器进行跨网通信的。接下来路由器接收到该数据帧,将报头和有效载荷进行了分离,当路由器识别到该数据帧的目标 IP地址,它就能查到自己的路由表,将该数据帧直接送到对应子网的数据链路层,添加对方子网数据链路层的报头,也就是更新了新的 Mac地址!这次的 Mac地址 是从路由器到新的子网,而原来的 Mac地址 则是从原来的子网到路由器!当该数据帧到对方子网后,就可以继续交给上层的网络层继续读取数据了!可以结合下图理解:

在这里插入图片描述

如上图,路由器这个设备可以级联左侧和右侧的两个子网,也就是左右侧都是一个局域网,它们之间互相独立。

所以,IP 协议屏蔽了底层网络的差异化,靠的就是工作在 IP 层的路由器!IP 实现了全球主机的软件虚拟层,一切皆是 IP 报文!

所以得出结论,IP地址 尤其是目的 IP地址,一般都是不会改变的,用来协助我们进行路径选择。而 Mac地址 出局域网后,原 Mac地址 和目的 Mac地址 都要被丢弃,让路由器重新封装!

下面我们重新认识一下数据包在不同层的名字,在应用层一般叫做请求与响应;在传输层一般叫做数据段;在网络层一般叫做数据报;在数据链路层叫做数据帧。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络概论和数据通信基础

文章目录 计算机网络概论从物理构成上看,计算机网络包括硬件、软件和协议三大部分计算机网络的功能组成计算机网络的分类网络体系结构分层与体系结构接口、协议和服务数据传送单位OSI模型TCP/IP模型 数据通信基础数字信号调制为模拟信号正交振幅调制QAM 模拟数据编码…

STM32Cubemx TB6612直流电机驱动

一、TB6612FNG TB6612是一个支持双电机的驱动模块,支持PWM调速。PWMA、AIN1、AIN2 为一组控制引脚,PWMA 为 PWM 速度控制引脚,AIN1、AIN2 为方向控制引脚;PWMB、BIN1、BIN2 为一组控制引脚,PWMB 为 PWM 速度控制引脚&…

例40:滚动条的使用

建立一个EXE工程,在窗体上放一个文本框和一个水平滚动条。设置滚动条的最大最小属性分别为:100和1。如图36。 图36 为滚动条的change事件输入代码: Sub Form1_HScroll1_Change(hWndForm As hWnd, hWndControl As hWnd, hNewPos As Long, n…

【高效开发工具系列】PyCharm使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

更改WordPress作者存档链接author和用户名插件Change Author Link Structure

WordPress作者存档链接默认情况为/author/Administrator(用户名),为了防止用户名泄露,我们可以将其改为/author/1(用户ID),具体操作可参考『如何将WordPress作者存档链接中的用户名改为昵称或ID…

【二十四】【C++】多态

多态的基本概念 多态是一种允许使用相同的接口来访问不同的底层形式(类型)的对象的能力。C中的多态主要通过以下两种方式实现: 编译时多态(静态多态):通过函数重载和运算符重载实现。 运行时多态&#x…

wordpress外贸成品网站模板

首页大图slider轮播,橙色风格的wordpress外贸网站模板 https://www.zhanyes.com/waimao/6250.html 蓝色经典风格的wordpress外贸建站模板 https://www.zhanyes.com/waimao/6263.html

C# Winform .net6自绘的圆形进度条

using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;namespace Net6_GeneralUiWinFrm {public class CircularProgressBar : Control{private int progress 0;private int borderWidth 20; // 增加的边框宽度public int Progr…

通过VSCode开发Python项目

一、插件准备 Python 插件,必须 autoDocstring 生成注释,和Pycharm一样输入三个引号"""会生产注释结构 Todo Tree 高亮显示 TODO/FIXME 二、python相关设置 一)设置python环境 按"F1"打开命令面板(…

openai公司的chatgpt-3.5参数库内还未增加sora的语料信息

openai公司的chatgpt-3.5参数库内还未增加sora的语料信息!我想通过openai公司的chatgpt3.5来了解一下关于sora的技术信息,结果呢,它竟然回答不知道sora是什么。看来,sora的语料库信息还未来得及加入chatgpt3.5的训练模型中。 如图…

vue的十大面试题详情

1 v-show与v-if区别 v-if与v-show可以根据条件的结果,来决定是否显示指定内容&#xff1a; v-if: 条件不满足时, 元素不会存在. v-show: 条件不满足时, 元素不会显示(但仍然存在). <div id"app"><button click"show !show">点我</but…

ELAdmin 隐藏添加编辑按钮

使用场景 做了一个监控模块&#xff0c;数据都是定时生成的&#xff0c;所以不需要手动添加和编辑功能。 顶部不显示 可以使用 true 或者 false 控制现实隐藏 created() {this.crud.optShow {add: false,edit: false,del: true,download: true,reset: true}},如果没有 crea…

ubuntu服务器部署gitlab docker并配置nginx反向代理https访问

拉取镜像 docker pull gitlab/gitlab-ce运行容器 docker run --detach \--publish 9080:80 --publish 9022:22 --publish 9443:443\--namegitlab \--restartalways \--volume /home/docker/gitlab/config:/etc/gitlab \--volume /home/docker/gitlab/logs:/var/log/gitlab \-…

直接查看电脑几核芯几线程的方法

之前查看电脑几核芯几线程时都是点击 此电脑->属性->设备管理器->处理器 但是这样并不能判断是否有多线程 譬如这里&#xff0c;是2核芯2线程还是4核芯&#xff1f; 实际上&#xff0c;打开任务管理器后点击性能查看核芯线程数即可 所以示例这台电脑是4核芯而不是2…

PDF控件Spire.PDF for .NET【安全】演示:如何在 PDF 中添加签名字段

Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库&#xff0c;开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理&#xff0c;且无需安装 Adobe Acrobat。 E-iceblue 功能类库Spire 系列文档处…

html的表单标签(上):form标签和input标签

表单标签 表单是让用户输入信息的重要途径。 用表单标签来完成与服务器的一次交互&#xff0c;比如你登录QQ账号时的场景。 表单分成两个部分&#xff1a; 表单域&#xff1a;包含表单元素的区域&#xff0c;用form标签来表示。表单控件&#xff1a;输入框&#xff0c;提交按…

微信小程序swiper 视频中间大,两边小,轮播滑到中间视频自动播放组件教程

静态效果&#xff1a; 进入下面小程序可以体验效果&#xff0c;点击底部 看剧 栏目 一、创建小程序组件 二、代码 1、WXML <view class"swiper-wrapper" style"background-image:url(/asset/image/hot-banner.jpg);background-size: 100% 100%;">…

android 15

https://android-developers.googleblog.com/2024/02/first-developer-preview-android15.html android 15的预览版出了&#xff0c;这个版本的发布计划大概是这样的&#xff08;大约是今年8月发布最终版本&#xff09; https://developer.android.com/about/versions/15/over…

Java+Swing+Txt实现通讯录管理系统

目录 一、系统介绍 1.开发环境 2.技术选型 3.功能模块 4.系统功能 1.系统登录 2.查看联系人 3.新增联系人 4.修改联系人 5.删除联系人 5.工程结构 二、系统展示 1.登录页面 2.主页面 3.查看联系人 4.新增联系人 5.修改联系人 三、部分代码 Login FileUtils …

BUGKU-WEB 源代码

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 你说啥就是啥&#xff1a;去源代码吧 相关工具 URL解码平台&#xff1a;https://www.iamwawa.cn/urldecode.html 解题步骤 随便输入试试 2. 看看源码 存在script&#xff1a; <script> …