【计算机网络学习之路】网络基础1
文章目录
- 前言
- 一. 计算机网络发展
- 局域网和广域网
- 二. 网络协议
- 三. OSI七层模型
- 四. TCP/IP四层(五层)模型
- 五. 计算机体系结构与网络协议栈
- 六. 协议形式及局域网通信
- 数据包封装与分用
- 七. 跨网络通信
- 八. MAC地址与网络通信的理解
- 结束语
前言
本系列文章是计算机网络学习
的笔记,欢迎大佬们阅读,纠错,分享相关知识。希望可以与你共同进步
本篇文章是网络学习的一些前景认识,基本都是概念性的知识
一. 计算机网络发展
最开始,计算机之间是彼此独立工作的,各自处理自己的业务
接着,因为一个人的业务可能会影响另一个人的业务,所以需要数据共享,于是尝试将多台计算机连接在一起
然后需要链接的计算机越来越多,就出现了局域网LAN,通过交换机和路由器连接在一起
最后,为实现全球互联网化,相隔千里的计算机也能互相通信,使用路由器将各个局域网连接,构成广域网
局域网和广域网
局域网
局域网,缩写LLAN,是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成
广域网
广域网,缩写WAN,又称外网,公网,指的是连接不同地区局域网或城域网计算机通信的远程网。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,能连接多个地区,城市,国家或横跨几个洲并能提供远距离通信,形成国际性的远程网络。
平常所指的互联网是属于一种公共型的广域网
局域网和广域网的区别
目前看来,二者的区别是范围大小,并且广域网内包含许多的局域网
另外,在之后的学习中,我们会理解:
- 广域网上的每一台电脑都有一个或多个广域网IP,广域网IP一般要付费申请,且不能重复
- 局域网上的每一台电脑都有一个或多个局域网IP
- 局域网IP是内部分配的,两个局域网内的电脑可能有相同的IP,不会影响
二. 网络协议
要想连接多台计算机,实现数据共享,就要保证彼此传送数据的完整和一致
但计算机生产厂商各有不同,操作系统各有不同,计算机网络硬件设备各有不同,如此多的不同,势必影响数据的正确传输
如何解决呢?就是通过共同的标准——协议
就以打电话为例
简单将通行分为两层,语言层和通信设备层
可见,要想正常沟通,语言层需要协议统一,数据传送也需要协议统一
而语言层和通信设备层之间为低耦合
,可以有不同语言或通信设备
三. OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范
- 把网络从逻辑上分为了
7层
,每一层都有相关的物理设备,比如路由器,交换机 - OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输
- OSI将服务,接口,协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠通讯
但是OSI是最初的理论模型,较为复杂,后续出现了TCP/IP
这一四层模型
后续也主要研究TCP/IP模型
OSI七层模型
四. TCP/IP四层(五层)模型
TCP/IP是一组协议的代名词,它包括许多协议,组成立TCP/IP协议簇
TCP/IP通讯协议采用了5层的层级结构,但最后一层物理层多数不考虑,所以是TCP/IP4层模型
每一层都呼叫它的下一层所提供的网络来完成自己的需求
应用层
:负责应用程序间沟通,如简单电子邮件传输(SMTP),文件传输协议(FTP),网络远程访问协议(Telnet)等。网络编程主要针对应用层
传输层
:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机网络层
(互联网层):负责地址管理和路由选择、例如在IP协议中,通过IP地址标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)
。路由器工作在网络层数据链路层
(网卡层):负责设备之间的数据帧的传送和识别。例如网卡设备的驱动,帧同步(从网线上检测到什么信号算作新帧的开始),冲突检测(冲突则重发),数据差错校验等。有以太网,令牌环网,无线LAN等标准,交换机工作在数据链路层物理层
(了解):负责光/电信号的传递方式,比如现在以太网通用的网线(双绞线),早期以太网采用的同轴电缆,光纤,WIFI无线网使用电磁波等都属于物理层概念。物理层的能力决定了最大传输速率,传输距离,抗干扰性等。集线器工作在物理层
对于一台主机,操作系统内核实现从传输层到物理层的
对于一台路由器,其实现了从网络层到物理层
对于一台交换机,它实现了从数据链路层到物理层
对于集线器,它只实现了物理层
但并不绝对,有些交换机也实现了网络层的转发;有些路由器也实现了部分传输层的内容(比如端口转发)
参考博客:TCP/IP四层模型和OSI七层模型的概念
五. 计算机体系结构与网络协议栈
可以看到网络协议栈是贯穿计算机体系结构的,层层对应。
并且传输层和网络层是在操作系统内部的,实际是属于文件系统的一部分。虽然不同操作系统的具体实现有所不同,但网络的这部分必须达成一致
,才可以在大环境中实现通信。
数据链路层是驱动,可以有不同,比如以太网和令牌环网
用户这里指的不是所有人,而是会使用语言的工程师等
六. 协议形式及局域网通信
讲协议形式前,我们先举个例子,方便大家理解
- 我们在网购时,比如购买一个键盘,快递员最后并不是直接将键盘送达,而是将包裹送达。而包裹外有快递单,上面有我们的地址,电话,用户名等等信息。
- 网络通信的数据就像一个个商品,从发送方开始,就需要包裹,并且附带目的地址
- 快递是商品+快递单,而网络数据是
有效载荷+协议报头
接下来我们从协议栈角度,讲述“在吗”
这一消息(有效载荷)如何通过网络协议栈上传到网络,又如何从网络中抓取解包的
这是简化的收发双方的网络协议栈,每层各自举例比较有代表性的协议
可以看到
- 每一层都会给有效载荷添加自己的协议报头
- 每一层都将上层所交付的数据当成有效载荷
- 每一层也要能将自己的协议报头和有效载荷分离,并
向上交付
- 从协议层来看,每层都是跟对方的协议层直接通信
- 同层协议,能够互相认识对方的报头
其中,最为重要的两点是
每个协议层都要
能将自己的报头和有效载荷分离
能将有效载荷向上交付
这两点分别称为解包
和分用
后续具体协议层的学习,我们也会围绕这两点展开
数据包封装与分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Ebcapsulation)
- 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给
对应的上层协议处理
下图为数据封装的过程
下图为数据分用的过程
局域网通信
举例:
就像在课堂上,王老师在讲台上问张三,昨天作业交了没,这个消息其实全班同学都听到了,但是因为对象不是自己,所以就忽略,丢弃这个消息了。只有张三会捕获这个消息,给出答复。
如果同时有多个人说话,那么彼此之间的话语就会影响,导致传输异常
所以,在局域网
通行中,任何时刻只允许一个人向局域网中发送消息
七. 跨网络通信
图中为跨一个路由器的两个局域网(子网)
此处故意让双方主机使用不同的数据链路层,上面也说过,数据链路层不在操作系统中,可以不同
可以看到,路由器是级联两个不同局域网主机的媒介
路由器也是一台主机(节点),其有1.物理层 2.链路层 3.网络层
路由器因为要连接不同局域网,所提至少要级联两个子网,至少要有两个网络接口
主机A想要和主机B通信,需要先将数据发送给路由器,然后由路由器转发给主机B
首先面临的第一个问题是,如何定位路由器。
因为路由器也是主机,在局域网中如何定位呢?
方法就是标识所有主机——IP地址(表示公网
中主机的唯一性,公网!公网!公网!
)
IP地址实际是一个整数
IPV4下,IP是一个4字节
的整数
IPV6下,IP是一个16字节
的整数
使用点分十进制表示,常见的有192.168.X.Y
范围是0.0.0.0 ~ 255.255.255.255
字符串风格的点分十进制IP地址是给人看的,计算机中是如此实现
struct ip
{int part1:8;int part2:8;int part3:8;int part4:8;
}int srcIP=XXX;//一个IP地址//转化成结构体
struct ip *p=(struct ip*)&srcIp;
//如此就按比特位填充,并且知道每8个比特位的数值
p->part1=...
p->part2=...
在IP层,会维护一个路由表
,其中记录了该主机所属局域网的所有主机IP,所以可以知道目的地址是不是本局域网的主机。如果目的IP地址不是本局域网的,就会将数据转发给路由器,路由器再转发给主机B。
路由器也需要解包,然后匹配目的IP是否是自己的
注意
:局域网中是上述的广播,即所有主机都会收到,但是因为其中的目的IP不是自己,所以将报文丢弃
就像大家在学校的学号,我们知道自己的学号,以及其中组成。面对一个陌生的学号,我们可能不知道这个学号是谁的,具体哪个学院的,但可以根据自己的学号,确定是不是和自己一个学院的
另外,路由器还会根据将要转发的数据链路层的协议,重新添加链路层的报头
,这样就避免了不同链路层无法通信的问题。
只要通过IP地址,就可以找到对应主机。IP协议及以上的协议没有看到任何网络方面的差异,IP地址屏蔽了底层子网机制的差异
其中运用的思想就是软件工程的核心思想:
任何软硬件问题,都可以通过添加一层软件层解决
八. MAC地址与网络通信的理解
MAC地址
- MAC地址用来识别数据链路层中相连的节点
- 长度为48位,及6个字节,一般用16进制加上冒号的形式表示(例如:08:00:27:03:fb:19)
- 在网卡出厂时MAC地址就确认了,不能修改。MAC地址通常是
全球唯一
的(虚拟机中的mac地址不是真实的),可能会冲突,也有些网卡支持用户配置MAC地址
网络通信的理解
在跨网络通信中,我们只举例了一个路由器连接的两个子网通信,实际上,真实的网络通信有许许多多的路由器和子网,所以路上一定途径多个路由器,进行了多次路由转发
可能路径如下:
线性如下:
因为路由器只需要交付到网络层(IP)即可,所以向上的线段较短
结束语
网络基础1的内容到此就结束了,感谢看到此处
欢迎大家纠错和补充
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
相关文章:

【计算机网络学习之路】网络基础1
文章目录 前言一. 计算机网络发展局域网和广域网 二. 网络协议三. OSI七层模型四. TCP/IP四层(五层)模型五. 计算机体系结构与网络协议栈六. 协议形式及局域网通信数据包封装与分用 七. 跨网络通信八. MAC地址与网络通信的理解结束语 前言 本系列文章是…...

HTTP/2.0协议详解
前言 HTTP/2.0:互联网通信的革新标准 随着互联网技术的飞速发展,HTTP协议作为互联网应用最广泛的通信协议,也在不断演进和优化。HTTP/2.0是HTTP协议的最新版本,它旨在提供更高效、更安全、更快速的互联网连接。 一、HTTP/2.0的优…...

Python中的Random模块详解:生成随机数与高级应用
在Python编程中,随机数生成是许多应用的基础之一。random模块为我们提供了生成伪随机数的丰富工具,从简单的随机数生成到复杂的应用场景,都有很多功能可以探索。本文将深入介绍random模块的各个方面,通过详实的示例代码࿰…...

(论文阅读32/100)Flowing convnets for human pose estimation in videos
32.文献阅读笔记 简介 题目 Flowing convnets for human pose estimation in videos 作者 Tomas Pfister, James Charles, and Andrew Zisserman, ICCV, 2015. 原文链接 https://arxiv.org/pdf/1506.02897.pdf 关键词 Human Pose Estimation in Videos 研究问题 视频…...

【设计一个缓存--针对各种类型的缓存】
设计一个缓存--针对各种类型的缓存 1. 设计顶层接口2. 设计抽象类 -- AbstractCacheManager3. 具体子类3.1 -- AlertRuleItemExpCacheManager3.2 -- AlertRuleItemSrcCacheManager 4. 类图关系 1. 设计顶层接口 // 定义为一个泛型接口,提供给抽象类使用 public interface Cach…...

Django部署时静态文件配置的坑
Django部署时静态文件配置配置的坑 近期有个需求是用django进行开发部署,结果发现静态文件配置的坑是真的多,另外网上很多的内容也讲不清楚原理,就是这样这样,又那样那样,进了不少坑,这里记录一下关于css,…...

Android---网络编程优化
网络请求操作是一个 App 的重要组成部分,程序大多数问题都是和网络请求有关。使用 OkHttp 框架后,可以通过 EventListener 来查看一次网络请求的详细情况。一次完整的网络请求会包含以下几个步骤。 也就是说,一次网络请求的操作是从 DNS 解析…...

《算法通关村——不简单的字符串转换问题》
《算法通关村——不简单的字符串转换问题》 8. 字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入…...

给VSCode插上一双AI的翅膀
#AI编程助手哪家好?DevChat“真”好用# 文章目录 前言一、安装DevChat1.1、访问地址1.2、注册1.3、在VSCode里安装DevChat插件1.3.1、未安装状态1.3.2、已安装状态 二、设置Access Key2.1. 点击左下角管理(“齿轮”图标)—命令面板ÿ…...

2023年亚太杯数学建模思路 - 案例:异常检测
文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…...

机器学习的医疗乳腺癌数据的乳腺癌疾病预测
项目视频讲解:基于机器学习的医疗乳腺癌数据的乳腺癌疾病预测 完整代码数据分享_哔哩哔哩_bilibili 效果演示: 代码: #第一步!导入我们需要的工具 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns %matplotlib inlin…...

解析:什么是生成式AI?与其他类型的AI有何不同?
原创 | 文 BFT机器人 快速浏览一下头条新闻,你会发现生成式AI似乎无处不在。事实上,一些新闻标题甚至可能是通过生成式AI编写的,例如OpenAI旗下的ChatGPT,这个聊天机器人已经展现出了生成看起来像人类所写文本的惊人能力。 当人们…...

国产化项目改造:使用达梦数据库和东方通组件部署,前后端分离框架
前提:前后端分离前后端包都要用war包。 1、springboot后端改变war包 pom文件添加 <packaging>war</packaging>添加依赖,并且支持tomcat<!-- war包 --><dependency><groupId>org.springframework.boot</groupId><…...

Nginx实现负载均衡
Nginx实现负载均衡 负载均衡的作用 1、解决单点故障,让web服务器构成一个集群 2、将请求平均下发给后端的web服务器 负载均衡的软硬件介绍 负载均衡软件: # nginx 四层负载均衡:stream(nginx 1.9版本以后有stream模块&#x…...

SpringCloud 2022有哪些变化
目录 前提条件 AOT支持 Spring Native支持 前提条件 Spring Cloud 2022.0.0是构建在Spring Framework 6.0和Spring Boot 3.0 之上的一S个主要版本。 JDK要求最低需要是Java 17J2EE要求最低需要Jakarta EE 9 AOT支持 Spring cloud 2022支持AOT编译,它是将程序源…...

如何快速本地搭建悟空CRM结合内网穿透工具高效远程办公
🌈个人主页:聆风吟 🔥系列专栏:数据结构、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 无需公网IP,使用cpolar实现悟空CRM远程访问二. 通过公网来访问公司…...

Docker打包Python项目
1. 简介 Docker是一种开源的容器化平台,可以将应用程序及其依赖项打包到一个轻量级、可移植的容器中。通过使用Docker,可以简化Python项目的部署和运行,提高开发效率和应用程序的可移植性。 本文将介绍如何使用Docker来打包Python项目。我们…...

【Java并发编程一】并发与并行
为什么引入并发 摩尔定理逐渐失效,单核性能很难提升,通过组合多核性能来进一步满足实际需要,从而引入并发编程。在大部分场景下,并行是由于串行的,并行可以优化非关键节点的时间消耗。 并发的三大特性 原子性 某个…...

MFC/QT 一些快忘记的细节:
1:企业应用中,MFC平台除了用常见的对话框模式还有一种常用的就是单文档模式, 维护别人的代码,不容易区分,看它与程预序认同名cpp,就知道了,比如项目名称为 DoCMFCDemo,那么就看BOOL CDocMFCDe…...

在服务器上部署MVC 6应用程序
在服务器上成功部署MVC 6应用程序(现在更为称为ASP.NET Core MVC)涉及一系列步骤。以下是一般的指导步骤: 1. 准备服务器环境: - 确保服务器上安装了.NET Core Runtime和.NET Core SDK。可以从[.NET下载页面](https://dotnet.mi…...

golang学习笔记——斐波纳契数列
斐波纳契数列 编写一个程序来计算某个数字的斐波纳契数列。 斐波那契数列是一个数字列表,其中每个数字是前两个斐波那契数字之和。 例如,数字 6 的序列是 1,1,2,3,5,8,数字 7 的序列是 1,1,2,3,5,8,13,数字 8 的序列是 1,1,2,3,5…...

学习raft协议(1)
CAP C: 一致性 强调数据的正确性,每次读操作,要么读到最新,要么读失败 A:可用性 不发生错误,也不能出现过长的等待时间. P:分区容错性 在网络环境不可靠的背景下,整个系统仍然是正常运作的两种流派 (1&am…...

SpringSecurity+jwt使用
参考文章链接 自定义SpringSecurity用户 package com.daben.springsecurityjwt.vo;import com.daben.springsecurityjwt.entity.SysUser; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.User; import j…...

html-网站菜单-点击显示导航栏
一、效果图 1.点击显示菜单栏,点击x号关闭; 2.点击一级菜单,展开显示二级,并且加号变为减号; 3.点击其他一级导航,自动收起展开的导航。 二、代码实现 <!DOCTYPE html> <html><head>&…...

【C++函数的进化】函数指针,模板,仿函数,lambda表达式
/*** poject * author jUicE_g2R(qq:3406291309)* file C函数的进化* * language C* EDA Base on VS2022* editor Obsidian(黑曜石笔记软件)* * copyright 2023* COPYRIGHT 原创学习笔记:转载需获得博…...

云服务器windows service2022 部署git服务器
1 安装 下载地址gitblit 解压到你的一个目录,我这里给的是C:\gitblit 根据官网提示要下载jre or jdk7.0,这里建议使用下载jre (jdk 有时候运行出问题,或者2个都安装),自行安装java,这里不做环境配置的说明 进入c:\gitblit\data 目录里面找到,defaults.properties 文件,编辑主…...

Linux_Docker修改Docker Root Dir
今天遇到需求,要修改一下docker容器和镜像的存储位置,默认位置为/var/lib/docker目录下,要修改到/new/dockerFile目录下。 停止docker服务 sudo service docker stop 备份docker容器镜像 移动/var/lib/docker目录下的文件到/dockerFile目录…...

解决requests 2.28.x版本SSL错误:证书验证失败
1、问题背景 在使用requests 2.28.1版本时,我进行HTTP post传输报告负载时,由于SSL验证设置为True,请求失败,错误如下:(Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certifi…...

【开源】基于Vue.js的开放实验室管理系统的设计和实现
项目编号: S 013 ,文末获取源码。 \color{red}{项目编号:S013,文末获取源码。} 项目编号:S013,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…...

使用composer安装ffmpeg的步骤
以下是使用composer安装ffmpeg的步骤: 1.在laravel根目录下执行以下命令安装ffmpeg: composer require php-ffmpeg/php-ffmpeg 2.如果不指定版本号,则默认使用0.14版本。 3.执行以上命令后,composer会自动下载并安装ffmpeg。 …...