- 【计算机底层】1,非科班程序员如何学习计算机底层知识
- 【计算机底层】2,CPU的制作过程详解
- 【计算机底层】3,大专三本的同学如何规划进大厂路线?
- 【计算机底层】4,计算机的组成
- 【计算机底层】5,储存器的层次结构
- 【计算机底层】6,计算机执行命令的过程
- 【计算机底层】7,CPU 从L1到L3到底是什么概念
- 【计算机底层】8,小程序验证cache line的概念缓存行对齐伪共享
- 【计算机底层】9,CPU乱序执行的概念
- 【计算机底层】10,CPU乱序执行的概念下
- 【计算机底层原理】11,本次课程介绍—必听
- 【计算机底层原理】12,计算机组成,程序运行的底层原理
- 【计算机底层原理】13,线程切换以及,Java,GO,rest线程模型
- 【计算机底层原理】14,Java里面有没有协程
- 【计算机底层原理】15,锁的概念
- 【计算机底层原理】16,synchronized关键字的字节码原语
- 【计算机底层原理】17,偏向锁升级过程
- 【计算机底层原理】18,小结,马老师在线答疑,P8课程介绍
- 【计算机底层原理】19,CPU,内存,缓存,缓存行详解
- 【计算机底层原理】20,缓存一致性协议,FalseSharing以及其编程技巧
- 【计算机底层原理】21,CPU乱序执行概念丨CPU乱序执行的证明DCL为什么不能乱序volatil
- 【计算机底层原理】22,volatile如何阻止乱序丨内存屏障
- 【计算机底层原理】23,硬件级别的内存屏障到底怎么实现
- 【计算机底层原理】24,马士兵老师在线给同学们定制化学习
- 【TCP\u002FIP】25,tcpip在开发中的作用
- 【TCP\u002FIP】26,什么是socket
- 【TCP\u002FIP】27,什么是三次握手四次挥手
- 【TCP\u002FIP】28,如何应对百万连接,如何制造百万连接
- 【TCP\u002FIP】29,数据包如何发送出去
- 【TCP\u002FIP】30,什么是路由表什么IP地址什么是掩码
- 【TCP\u002FIP】31,什么是网关,什么是下一跳
- 【TCP\u002FIP】32,什么是链路层,什么是原子通信
- 【TCP\u002FIP】33,有状态无状态通信的本质是啥
- 【TCP\u002FIP】34,拆包粘包到底谁才是罪魁祸首
- 【TCP\u002FIP】35,什么是面向连接,什么是可靠传输
- 【TCP\u002FIP】36,什么是负载均衡的原子保障
- 【TCP\u002FIP】37,百万连接下代理层如何保障后端服务器
- 【TCP\u002FIP】38,TCP,IP应用层协议原理
- 【TCP\u002FIP】39,TCP,IP传输控制层原理
- 【TCP\u002FIP】40,TCP ip 网络层原理
- 【TCP\u002FIP】41,TCPIP 链路层原理
- 【操作系统】42,_汇编语言
- 【操作系统】43,硬件基础知识
- 【操作系统】44,_量子计算机
- 【操作系统】45_Java相关硬件知识
- 【操作系统】46,_CPU基本组成
- 【Netty】47,为什么要学习IO,以及本次课程如何学习
- 【Netty】48,计算机里面有哪些硬件组成以及运行原理
- 【Netty】39,内核怎么去实现,以及NIO原理详解
- 【Netty】40,nio的优势和弊端
- 【Netty】41,多路复用器原理详解
- 【Netty】42,select poll,多路复用器优势
- 【Netty】43,NIO EPOLL深度原理解析
- 【数据结构】1-1.位运算
- 【数据结构】1-2.什么叫算法
- 【数据结构】1-3.算法的分类
- 【数据结构】1-4.给定一个参数N,返回1!+2!+3!+...+N!的结果
- 【数据结构】1-5.选择排序
- 【数据结构】1-6.冒泡排序
- 【数据结构】1-7.插入排序
- 【数据结构】1-8.优化插入排序
- 【数据结构】1-9.答疑
- 【数据结构】2-1.什么叫数据结构
- 【数据结构】2-2.最基本的数据结构
- 【数据结构】2-3.java中的Math.random()函数
- 【数据结构】2-4.从1-5随机到1-7随机
- 【数据结构】2-5.01不等概率随机到01等概率随机
- 【数据结构】2-6.对数器的使用
- 【数据结构】3-1.有序数组中找到num
- 【数据结构】3-2.有序数组中找到=num最左的位置
- 【数据结构】3-3.局部最小值问题
- 【数据结构】3-4.什么是常数操作
- 【数据结构】3-5.什么是时间复杂度
- 【数据结构】3-6.等差数列求和公式
- 【数据结构】3-7.什么是动态数组
- 【数据结构】3-8.动态数组使用和扩容
- 【数据结构】3-9.哈希表和有序表的使用
- 【数据结构】4-1.介绍单链表和双链表
- 【数据结构】4-2.单链表的反转
- 【数据结构】4-3.双链表的反转
- 【数据结构】4-4.用单链表结构实现队列
- 【数据结构】4-5.用单链表结构实现栈
- 【数据结构】4-6.用双链表结构实现双端队列
- 【数据结构】4-7.K个节点的组内逆序调整
- 【数据结构】4-8.两个链表相加
- 【数据结构】4-9.两个有序链表的合并
- 【数据结构】5-1.位图的功能
- 【数据结构】5-2.位图的实现
- 【数据结构】5-3.怎么使用位运算进行加减乘除
- 【数据结构】5-4.使用位运算实现加法
- 【数据结构】5-5.使用位运算实现减法
- 【数据结构】5-6.使用位运算实现乘法
- 【数据结构】5-7.使用位运算实现除法
- 【数据结构】5-8.怎么解决系统最小值转绝对值
- 【数据结构】6-1 比较器
- 【数据结构】6-2 leetcode 23:合并k个升序链表
- 【数据结构】6-3 二叉树基本概念和判断两颗树是否结构相同
- 【数据结构】6-4 判断一棵树是否是镜面树
- 【数据结构】6-5 返回一棵树的最大深度
- 【数据结构】6-6 leetcode105用先序数组和中序数组重建一棵树
- 【数据结构】7-1 leetcode0102二叉树按层遍历并收集节点
- 【数据结构】7-2 判断是否是二叉树
- 【数据结构】7-3 判断是否是平衡搜索二叉树
- 【数据结构】7-4 能否组成路径和
- 【数据结构】7-5 收集达标路径和
- 【数据结构】8-1 归并排序
- 【数据结构】8-2 非递归
- 【数据结构】8-3 MergeSort代码1
- 【数据结构】8-4 MergeSort代码2
- 【数据结构】8-5 快排
- 【数据结构】8-6 快排代码及升级代码
- 【数据结构】8-7 递归和非递归实现PartitionAndQuickSort
- 【线程迷宫】穿越线程的迷宫:计算机的历史 算盘和机械计算机
- 【线程迷宫】计算机的基本组成-三大核心
- 【线程迷宫】程序的执行
- 【线程迷宫】腾讯必问:什么是进程什么是线程
- 【线程迷宫】线程的切换
- 【线程迷宫】CPU的并发控制:缓存一致性协议
- 【线程迷宫】CPU的并发控制:关中断
- 【线程迷宫】系统屏障:CPU的乱序执行 线程的as-if-senial
- 【线程迷宫】DCL单例Double Check Lock 到底需不需要volatile
- 【线程迷宫】多线程会产生的后果
- 【线程迷宫】JVM的内存屏障
- 【线程迷宫】CPU的并发控制
- 【操作系统】01.操作系统的概念和作用
- 【操作系统】02.操作系统的目标
- 【操作系统】03.操作系统的功能
- 【操作系统】04.操作系统的特征:并发
- 【操作系统】05.操作系统的特征:共享
- 【操作系统】06.操作系统的特征:虚拟
- 【操作系统】07.操作系统的特征:异步
- 【操作系统】08.操作系统的发展:手工和批处理阶段
- 【操作系统】09.操作系统的发展:分时操作系统
- 【操作系统】10.操作系统的发展:实时操作系统
- 【操作系统】11.操作系统的发展:微机&网络&分布式
- 【操作系统】12.用户空间与内核空间
- 【操作系统】13.时钟与中断
- 【操作系统】14.中断的处理过程
- 【操作系统】15.原语
- 【操作系统】16.系统调用
- 【操作系统】17.传统的操作系统结构
- 【操作系统】18.微内核操作系统结构
- 【进程线程】01.进程的概念
- 【进程线程】02.进程的结构和特征
- 【进程线程】03.线程的概念
- 【进程线程】04.进程和线程的区别
- 【进程线程】05.线程的实现方式
- 【进程线程】06.第一小节总结:进程和线程
- 【进程线程】07.进程的状态:三种基本状态
- 【进程线程】08.进程的状态:创建和终止
- 【进程线程】09.进程控制
- 【进程线程】10.进程控制:挂起与激活
- 【进程线程】11.处理机调度和调度层次
- 【进程线程】12.处理机调度方式、时机、过程和评价指标
- 【进程线程】13.处理机调度小结
- 【进程线程】14.调度算法:先来先服务(FCFS)
- 【进程线程】15.调度算法:短作业优先(SJF)
- 【进程线程】16.调度算法:高响应比优先(HRRN)
- 【进程线程】17.调度算法:优先级调度(PSA)
- 【进程线程】18.调度算法:时间片轮转调度(RR)
- 【进程线程】19.调度算法:多级反馈队列调度(MFQ)
- 【进程线程】20.进程通信:共享存储
- 【进程线程】21.进程通信:消息传递
- 【进程线程】22.进程通信:管道通信
- 【进程线程】23.进程同步:同步和互斥的概念
- 【进程线程】24.进程同步:互斥的访问过程
- 【进程线程】25.进程同步:互斥访问的原则
- 【进程线程】26.软件实现互斥的方法:单标志法
- 【进程线程】27.软件实现互斥的方法:双标志法先检查
- 【进程线程】28.软件实现互斥的方法:双标志法后检查
- 【进程线程】29.软件实现互斥的方法:皮特森算法
- 【进程线程】30.硬件实现互斥的方法:中断屏蔽
- 【进程线程】31.硬件实现互斥的方法:TS指令
- 【进程线程】32.硬件实现屏蔽的方法:Swap指令
- 【进程线程】33.信号量的概念
- 【进程线程】34.信号量的工作机制
- 【进程线程】35.分析同步和互斥问题的方法步骤
- 【进程线程】36.管程的概念和基本特性
- 【进程线程】37.管程中的条件变量
- 【进程线程】38.死锁的概念和产生的原因
- 【进程线程】39.死锁产生的必要条件
- 【进程线程】40.死锁的预防:破坏必要条件
- 【进程线程】41.死锁的避免:安全性算法
- 【进程线程】42.死锁的检测与解除概述
- 【进程线程】43.死锁的检测:死锁定理
- 【进程线程】44.死锁的解除
- 【内存管理】01.准备工作:存储器的多层结构
- 【内存管理】02.准备工作:进程运行的基本原理
- 【内存管理】03.准备工作_进程运行原理:程序的链接
- 【内存管理】04.准备工作_进程运行原理:程序的装入
- 【内存管理】05.准备工作_进程运行原理:逻辑地址与物理地址
- 【内存管理】06.准备工作_进程运行原理:内存保护
- 【内存管理】07.准备工作_进程运行原理:覆盖与交换
- 【内存管理】08.内存管理_连续分配:单一连续分配
- 【内存管理】09.内存管理_连续分配:固定分区分配
- 【内存管理】10.内存管理_连续分配:固定分区分配_如何记录
- 【内存管理】11.内存管理_连续分配:固定分区分配_如何分配
- 【内存管理】12.内存管理_连续分配:固定分区分配_如何回收
- 【内存管理】13.内存管理_非连续分配:基本分页存储
一、计算机网络概述
时代不同了,大家现在生活都好了,家家户户基本都有电脑,而且我们都习惯了使用电脑办公,打打游戏,聊聊天等等。那我们一起来想一个场景:如果没有了网络,我们是不是就不能使用电脑进行聊天了呀。那网络到底是如何帮助我们来完成网络聊天的?下面我就跟大家聊聊计算机网络到底是怎么回事儿。
了解我的读者都知道,我习惯先用自己的语言解释,后说官方定义。这回我和以往反着来,先说官方定义,再解释:
计算机网络是由通信介质将地理位置不同的且相互独立的计算机连接起来,实现数据通信与资源共享。
我们假设有两个独立且毫不相关的计算机,一台在青海,一台在河南,想要进行数据传输(聊天),没网是不行的。这个网指的就是互联网( Internet )。这个 Internet 它是一个通信协议。什么是协议?打个比方,就好比我们打电话,在中国,中国有十几亿人,地大物博,全国各地都有自己的方言,还有些地方使用自己的民族语言,这时候想要良好的沟通就必须使用一个统一的标准,就是普通话。大家都讲普通话,沟通起来就没有问题了。那如果是不同国家进行沟通呢?我们可以选择使用英语进行交流,那英语就是全世界国家通用的一个标准,计算机就好比是分布在全世界各个角落的人,计算机之间通话也要找一个统一的标准,这个标准就是 Internet 标准,又叫做 Internet 协议。
二、网络介绍及隔壁老王的故事
先给大家讲一个虚构版隔壁老王的故事:
有一个人叫隔壁老王,他有一个爱好就是看电影。有一天,这个隔壁老王想看一部电影,可是电脑里面存储的电影太多了,他费了老大劲才从里面找到,觉得很不爽。于是他想,我能不能把所有电影做个分类,把同一种类型的电影放在同一个文件夹下,然后把所有的文件夹整合在一起,自己写个浏览器软件,把文件夹信息放到浏览器上,到时候找电影的时候就好找了,只要找到相应的文件夹直接点进去就能找到电影了。老王说干就干,没多久就把所有的文件夹整理好了,然后把所有文件夹放到同一个页面上,到时候他想点哪个就点哪个,So easy!(那些网站可能就是这样来的)。
这回出来一个新人物,就叫小王吧(不是小王八),老王就是住在小王隔壁,有一天小王看到老王电脑上有那么多电影,就跟老王商量,能不能在他电脑上也弄个跟老王一样的,让他也看看。老王也不是个小气的人,好东西就是要分享的嘛,想都没想就答应了,给小王说在你电脑上插根线接到我电脑上,然后下载我这个软件,直接访问我的电脑就行了。小王很高兴,他马上回家按老王说的做,没多久他的电脑上也能看老王电脑上的东西了。有了小王,就还会有小张,小李,互相插根网线,他们都能互相共享电影了。这样,局域网也就产生了,就比如在一个公司或者一个学校用的网络,都称为局域网。那学校有很多呀,不同的学校用的局域网是不同的,不同的城市也有不同的局域网,以局域网为单位,散布在一个区或一个城市的各个局域网加一起叫城域 网,然后全世界所有城市的城域网加一起就叫广域网。
过了一段时间,老王去小王家,看到小王电脑里的电影比自己的还多,而且还好看,然后老王跟小王说,把你的这些电影给我一份吧,我也想看看。不用想,小王肯定立马答应了,说你自己弄吧,想看哪个随便看。姜还是老的辣,老王想到一个好办法,他跟小王说,我再找一台电脑,把我俩电脑上的资源全部放到那台电脑里,我俩只要在那个电脑上插根线连到自己电脑上,就都能访问那台电脑上的东西了,这样岂不是很方便。小王一拍脑门,呀!我咋就没想到,那还不赶紧的。老王另外找了一台电脑,然后他俩把自己的电脑和那台电脑用线连起来,再把自己电脑里的所有资源全传进那台电脑中,最后他俩就能共享资源了。(那台电脑就是服务器)
总结一下就是:
网络按地域分类:根据参照物不同、类型不同分为
局域网:一个公司、一个家庭、一个学校······
城域网:一个地区、一个城市······
广域网:一个国家、全世界······
三、互联网协议是如何分布和设计的
我在上面说了 Internet 协议,互联网协议按照功能的不同,分为 osi 七层, tcp / ip 五层, tcp / ip 四层协议。如下图:
osi 的七层协议体系结构的概念清楚,理论也比较完善,但它既复杂又不实用, ISO 制定的 osi 协议参考模型的过于庞大、复杂招致了许多批评。于此对照,由技术人员自己开发的 TCP / IP 协议获得了更为广泛的应用。因此,我们只需要弄明白 TCP / IP 五层协议 就能了解和明白计算机最底层的通信是怎么回事。
四、TCP/IP五层协议
如图,从最下方的物理层到最上方的应用层,对于我们用户而言,最直接的是应用层。从上到下每一层都依赖于下一层,所以我从最下一层开始给大家讲解:
注意:每一层都运行着一个特定的协议,共同组合成互联网协议
一、物理层
物理层主要是由双绞线、光缆、电缆、无线电波组成,其作用很简单,就是连接不同的计算机,并传递底层电信号,高电压:1 ,低电压:0 。
二、数据链路层
我们从物理层上接收或者发送单纯的 0 、 1 是没有意义的,为什么呢?想想哈,我想给女朋友发送一句话:“你好漂亮”,那我们要把“你好漂亮”转换成 01 之后,交给网卡,网卡就懵逼了,发给谁 ???不知道。那怎么办?必须要确定数据发给谁。就像我们的快递一样,是不是在外层包装上有商家地址和个人地址,这样我们不管是发还是收,都能准确定位了。网络传送数据也一样,我们就在数据前面加上目标地址,为了能接收到回信,也要把自己的地址也加上。但是,如果数据和地址放在一起,又乱了,比如,我给你一堆 01 ,1010101000101010101 ,你也分不清哪里是数据,哪里是地址。这时我们就要对要发送的 01 进行分组,规定前面 xxx 位是地址,后面 xxx 位是数据,并且,大家想互相都能通信,就必须都遵守这样的规则(协议),这个协议叫以太网协议。在以太网协议出现之前,各个公司都有自己的分组规则,后来都统一使用以太网协议了。
以太网协议规定:一组电信号构成一个数据包,叫帧,每一帧分为报头( head )和数据( data ) 两部分。
报头(head):固定 18 个字节
发送者/源地址:6 个字节
接收者/目标地址:6 个字节
数据类型:6 个字节 数据( data ):最短 46 个字节,最长 1500 字节 数据包的具体内容(发送给女朋友的话/快递货物)
以太网协议中的地址叫 MAC 地址, MAC 地址是每台计算机唯一的物理地址,是被写在网卡上的。以太网协议规定,每一台接收和发送数据的设备必须要装有网卡,负责发送和接收数据的设备,发送端和接收端的地址,指的就是网卡的地址,即 MAC 地址。
MAC地址
MAC 地址是每个网卡在出厂的时候,由各个厂商直接烧录在网卡上的,而且,这个地址必须是全世界唯一的。MAC 地址是由 12 位 16 进制的数字表示(前六位是厂商编号,后六位是流水线号),这样不同的厂商之间就不会产生冲突了,自己生产自己的就好了。
交换机
在这给大家介绍一个东西,我们说两个电脑要通信要先连根线,但是如果电脑多了之后,电脑间通信连的线也就多了,这样太乱了,我介绍的这个东西就是交换机,它是负责组件局域网,研究的是 MAC 地址,它有什么用你看下面中的接口就知道了
有了 MAC 地址,以太网就可以进行工作了.理论上讲,我们可以和世界上的每一台连接了互联网的计算机进行通信了,此时通信的方案是:广播
广播
广播又是怎么一回事?其实广播的方式很原始,基本通信就是靠吼。就像你想跟女朋友求婚一样,你会大喊:“ xxx ,嫁给我吧”,旁边能听到这句话的人有很多,但是只有你女朋友会回复你。其他人会把你当傻D一样看待。没错,广播就是这样进行通信的。首先组织好了一个数据包之后,把这个数据包通过电信号发出去,这时整个网络上所有的人都会收到你发的这条数据,然后看看这个数据是不是自己的。如果不是就当他不存在,如果是,就接收。虽然效率低点,但毕竟能通信了。
广播带来什么问题呢?如果是在一个小的网络环境里。比方说,你们宿舍几个人,一起玩 CS ,没问题,你喊一嗓子,你室友也能回应你,也就效率低点。但是如果你连接到全世界的互联网上,还使用广播的方式来通信,就不是效率问题了,而是一个巨大的通信灾难。全世界 60 多亿人,每个人吼一嗓子,每个人发送一条信息,那每个人都会收到 60 多亿条信息,网络瞬间瘫痪,这种问题被称为广播风暴,那如何解决呢?
三、网络层
首先,我们要了解一个事情,世界大网络(广域网)是由一个一个的互相隔离的小型局域网(子网)组成的,不同的局域网之间使用路由来连接。
路由器
上面说的交换机是负责组建局域网,研究的是 MAC 地址,而路由器是负责组件广域网,研究的是 IP 地址,这个 IP 地址下面我再解释。