网络基础概述
1.计算机网络背景
计算机刚刚发展的时候,是没有网络的,每一台计算机都是相互独立的。后来,人们有了多人协作的需求,人们就想办法把多台计算机用“线”连接起来,实现数据共享。后来,连接到一起的电脑越来越多,就逐渐衍生出局域网,城域网,广域网这样的概念。所谓的局域网,广域网只是一个相对的概念,我们不用区分的过于清楚。你只需要知道连接在一起的计算机比较少就是局域网,连接在一起的电脑比较多就属于广域网。广域网可以看成最大的局域网。通常,一个局域网内,只有交换机,通过交换机数据共享。而广域网,在此基础上还需要很多很多的路由器来实现数据传输。
2.认识网络前的知识储备
为了助于我们更好的学习网络,我们先来回忆一下计算机体系结构。当今的计算机绝大多数都是冯诺依曼体系结构,相比大家对此并不陌生
我们常说,输入设备将数据传给内存,然后内存将数据传给CPU,CPU对数据进行处理将结果传给内存,内存再将处理结果传给输出设备。那么我现在问,怎么传的的数据呢,总不能你说传就能传吧,其实呢,这些硬件之间也是通过线来连接起来的。其中,CPU与内存之间进行数据传输的线叫做“系统总线”,而外设与内存之间进行数据传输的线叫做IO总线。(虽然我这样说的并不是很准确,但是我们只需要知道各个硬件之间用线连接起来之后就可以进行数据交互,至于为什么连上线就能数据交互我们并不关心)同理,当我们把多台计算机用线连接起来之后,就可以实现多台计算机数据交互了。
3.什么是协议?
所谓协议,其实就是一种约定,或者说是一种规则。其实我们在现实生活中有很多这样的规则。比如我们在过马路看到红绿灯的时候,红灯停下,绿灯通行,黄灯等一等。这是国家的交通管理部门制定的规则,我们每个公民都遵守规则,才能保证交通井然有序。同样的网络传输,自然也需要有相应的网络协议,并且每个网民都遵守协议,才能保证数据在网络中正确高效的传输。
4.网络协议分层
70年代以来,国外一些主要计算机生产厂家先后推出了各自的网络体系结构,但它们都属于专用的。为使不同计算机厂家的计算机能够互相通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系结构标准。国际标准化组织ISO 于1981年正式推荐了一个网络系统结构----七层参考模型,叫做开放系统互连模型(Open System Interconnection,OSI)。由于这个标准模型的建立,使得各种计算机网络向它靠拢,大大推动了网络通信的发展。OSI参考模型将网络协议分为以下七层。
但是在实际使用的时候发现,很难将最上面三层区分的特别清楚,于是上面三层就被简化为一层,统称为应用层。我们现在所说的TCP/IP四层(或五层)网络协议就是这么来的。我们学习也是按这四层(或五层)协议来学习。
- 协议分层的原因/好处有哪些呢?
- 降低通信协议的复杂性,每层各自完成一定的任务,功能相对独立(高内聚低耦合),这样实现起来更容易
- 将网络的通信过程划分为小一些、简单一些的部件,因此有助于各个部件的开发、设计和故障排除
- 在通信过程中,每一层都认为和对端的同一层直接通信,不用管下层具体怎样将信息传输的。
5.TCP/IP协议
TCP/IP协议不是一个协议,而是一组协议,包括了很多协议。TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问 协议(Telnet)等. 我们的网络编程主要就是针对应用层.
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
- 物理层: 负责光/电信号的传递方式. 比如以前以太网通用的网线(双绞线)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
本文只是对TCP/IP协议总体介绍,后面在对每一层进行深入学习。
下面我们将之前学的计算机体系层状结构和网络协议放到一起看看
通过观察我们可以发现,一台主机想和另一台主机通信肯定要借助硬件,而应用层是不能直接驱动硬件的,而是必须经过操作系统。用户在应用层通过使用操作系统提供给用户的系统调用接口,告诉操作系统想和另一台主机通信,而操作系统在告诉网卡驱动,驱动再告诉网卡,通过网卡将信息发到互联网。由此可见,两台主机通信一定是自上而下的发送信息,自下而上的接收信息。就好比张三住在五楼,李四也住在五楼(不是同一栋楼),王五帮助他们两个传话,王五肯定是从五层收到张三的消息,再下到一层,走到马路上,然后走到李四那栋楼,再从一楼上到五楼,把消息传给李四。
-
那么从计算机的视角是如何看待协议呢?
举个例子,你在网上买了一部手机,你下单之后,你就只需要等快递了。商家会收到订单,然后商家会把手机交给快递员,然后呢商家也什么也不用管了。快递员收到包裹之后呢,会给手机打包起来,并且贴上快递单,这个快递单上一定包含了从哪来,到哪里去,上一站是哪,下一站是哪,并且呢包裹每走一站,上一站下一站的地址一定会改变。当快递小哥把包裹交给你之后,你会把包裹拆开,拿到里面的手机。虽然你只想买一部手机,但是你收到的绝不仅仅是一部手机,而一定包含了其他东西(快递包装箱,快递单)。以上过程可以简化为:打包–转发–解包。
两台主机通信的过程,同样也有类似的过程。请看下图。
讲到这里,想必刚刚学习网络的同学会有这样的疑惑。为什么处于同一个局域网的两台主机能够通信呢?
- 举个例子,老师和同学们在一间教室里上课,老师叫张三:张三你站起来回答问题。老师说的这句话,所有的同学都听到了,但是只有张三站起来了,因为老师是在叫他的名字。其他同学之所以没有站起来,是因为没有叫他们的名字。同样的,一个局域网,就好比一间教室,一台主机发消息,局域网内的所有主机都是可以收到的,但是,每一台主机都有他们自己的“名字”,发消息的人呢,也会带上接收方的“名字”,指明消息是发给谁的。所有的主机收到消息的时候,都会将自己的“名字”和消息中接收方的“名字”做对比,如果不是在叫自己,就会自动忽略消息内容。再回到教室的例子,比如此时是下课期间,教室里比较吵闹,老师叫张三,但是张三坐的比较靠后没有听到,那么老师可能就会过一会重新叫张三一次。而在局域网中,也是有可能多台主机同时在发消息,这些消息可能发生“碰撞”,导致有些消息没有被正确的发送给接收方。此时,就会使用碰撞检测算法,(应该就是过一定时间重发一次,大概是这样)。
上面我们介绍了同一局域网内的主机通信,那么互联网中不同局域网的两台主机又是如何通信的呢?请看下图。
其中路由器,屏蔽了底层硬件的差异,使得不同数据链路层的协议的主机也能正常通信。
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
依赖版本信息如下: "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 目标…...

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()
前言:在Socket通信中使用Select 来对NIO 进行实现,那么它们的实现方式是怎样的呢,本文从 Selector.open() 进行第一步的分析; Selector.open() : Selector 类: public static Selector open() throws IOEx…...

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

(4)C#传智:分支Switch与循环While(第四天)
一、异常捕获 定义:语法无错,程序因某些原因出现的错误,而不能正常运行。 用try-catch进行捕获。哪行代码可能出现异常,你就踹它一脚。 try { 可能会出现异常的代码; ---- …...

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

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

注意,这本2区SCI期刊最快18天录用,还差一步录用只因犯了这个错
发表案例分享: 2区医学综合类SCI,仅18天录用,录用后28天见刊 2023.02.10 | 见刊 2023.01.13 | Accepted 2023.01.11 | 提交返修稿 2022.12.26 | 提交论文至期刊部系统 录用截图来源:期刊部投稿系统 见刊截图来源:…...

Could not find resource jdbc.properties问题的解决
以如下开头的内容: 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 的区别是什么?2.Hashcode的作用3. 两个对象的hashCode() 相同, 那么equals()也一定为 true吗?4.泛型常用特点5.使用泛型的好处?1. 和 equals 的区别是什么? “” 对于基本类型和引用类型 的作…...

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

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

robotframework自动化测试环境搭建
环境说明 win10 python版本:3.8.3rc1 安装清单 安装配置 selenium安装 首先检查pip命令是否安装: C:\Users\name>pipUsage:pip <command> [options]Commands:install Install packages.download Do…...

尚硅谷《Redis7》(小白篇)
尚硅谷《Redis7 》(小白篇) 02 redis 是什么 官方网站: 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…...

并非从0开始的c++ day6
并非从0开始的c day6二级指针练习-文件读写位运算位逻辑运算符按位取反 ~位于(AND):&位或(OR): |位异或: ^移位运算符左移<<右移>>多维数组一维数组数组名一维数组名传入到函数参数中数组指…...

PMP考前冲刺2.22 | 2023新征程,一举拿证
承载2023新一年的好运让我们迈向PMP终点一起冲刺!一起拿证!每日5道PMP习题助大家上岸PMP!!!题目1-2:1.在新产品开发过程中,项目经理关注到行业排名第一的公司刚刚发布同类型的产品。相比竞品&am…...

RxJava的订阅过程
要使用Rxjava首先要导入两个包,其中rxandroid是rxjava在android中的扩展 implementation io.reactivex:rxandroid:1.2.1implementation io.reactivex:rxjava:1.2.0首先从最基本的Observable的创建到订阅开始分析 Observable.create(new Observable.OnSubscribe<S…...

【2.22】MySQL、Redis、动态规划
认识Redis Redis是一种基于内存的数据库,对数据的读写操作都是在内存中完成的,因此读写速度非常快,常用于缓存,消息队列,分布式锁等场景。 Redis提供了多种数据类型来支持不同的业务场景,比如String(字符串…...

2年手动测试,裸辞后找不到工作怎么办?
我们可以从以下几个方面来具体分析下,想通了,理解透了,才能更好的利用资源提升自己。一、我会什么?先说第一个我会什么?第一反应:我只会功能测试,在之前的4年的中我只做了功能测试。内心存在一种…...

Leetcode6. N字形变换
一、题目描述: 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下: 之后,你的输出需要从左往右逐行读取,产…...

将Nginx 核心知识点扒了个底朝天(十)
ngx_http_upstream_module的作用是什么? ngx_http_upstream_module用于定义可通过fastcgi传递、proxy传递、uwsgi传递、memcached传递和scgi传递指令来引用的服务器组。 什么是C10K问题? C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。 Nginx是否支持将请求压…...

GPU显卡环境配置安装
前言 最近公司购买了一张RTX3090的显卡和一台新的服务器,然后对机器的GPU环境进行了安装和配置,然后简单记录一下 环境版本 操作系统:Centos7.8 显卡型号:RTX3090 Python版本:3.7.6 Tensorflow版本:2…...

CIMCAI super unmanned intelligent gate container damage detect
世界港航人工智能领军者企业CIMCAI中集飞瞳打造全球最先进超级智能闸口无人闸口ceaspectusG™视频流动态感知集装箱箱况残损检测箱况残损识别率99%以上,箱信息识别率99.95%以上World port shipping AI leader CIMCAIThe worlds most advanced super intelligent gat…...

web概念概述
软件架构:1. C/S: Client/Server 客户端/服务器端* 在用户本地有一个客户端程序,在远程有一个服务器端程序* 如:QQ,迅雷...* 优点:1. 用户体验好* 缺点:1. 开发、安装,部署,维护 麻烦…...