计算机网络原理最详细解说

article/2025/9/28 23:40:42

一、计算机网络概述

时代不同了,大家现在生活都好了,家家户户基本都有电脑,而且我们都习惯了使用电脑办公,打打游戏,聊聊天等等。

那我们一起来想一个场景:如果没有了网络,我们是不是就不能使用电脑进行聊天了呀。那网络到底是如何帮助我们来完成网络聊天的?

下面我就跟大家聊聊计算机网络到底是怎么回事儿。

先说官方定义,再解释:

计算机网络是由通信介质将地理位置不同的且相互独立的计算机连接起来,实现数据通信与资源共享。

 

我们假设有两个独立且毫不相关的计算机,一台在青海,一台在河南,想要进行数据传输(聊天),没网是不行的。

这个网指的就是互联网( 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 地址下面我再解释。

图片

刚才说的广播,只能在一个局域网内进行通信,不可以在大网络上进行广播,有了路由器,就避免了广播风暴的问题。每个局域网被称为一个广播域,

局域网和局域网之间使用路由的方式进行通信(向不同的广播域/子网发送数据包),用路由器把一个局域 网里的所有计算机划分成一个个子网。

现在大家先想一想生活中,如果是之前说的广播,就相当于在一间教室里你正在上课,你要给某个女孩传纸条,那你要在纸条外面写上你和你要传的女孩的名字,

再在里面写上你要写的话,写好后折起来,你和女孩的名字在外,内容在内,然后让同学一个一个帮你传,每个同学在传的时候都会看外面写的名字,如果不是他,

就继续传,直到传到的人是你写的那个女孩为止。那这间教室就相当于一个局域网。好,现在我们要实现局域网和局域网之间的通信,比如此时位于青海的你要给

河南的朋友送东西,你不可能用广播的方式了,你只能快递,这个青海和河南以及还有很多不同的省份是我国的土地划分中的一部分,每一个省也可以看作是一个个

局域网,那在网络中,我国就相当于广域网,那不同的局域网是如何划分的呢?MAC 地址是没办法区分的,因为  MAC 地址上只有厂商的流水号,这就引出我要说的网

络层,网络层引出了一套新的地址来区分不同的局域网/子网,这一套地址就是网络地址。

规定网络地址的协议叫 IP 协议,它定义的地址叫 IP 地址。其实跟我国的省份名差不多,继续说送快递,你要把送的东西包装好,在外面写上你自己的地址和省份地址,

还有朋友的地址和省份地址,交给青海的快递公司,然后青海的快递公司转交给河南的快递公司,最后由河南的快递公司分配给你朋友,你朋友就收到快递了。在这有两点需要注意:

  • 你要同时写两个地址,自己的地址( MAC 地址)和省份地址( IP 地址),这样就能确定所要 接收和发送人的具体的位置了。

  • 青海的快递公司和河南的快递公司就相当于路由器

子网掩码

在这给大家普及一下子网掩码,我们上面说有了 IP 地址和 MAC 地址,我们就能让任何计算机之间进行通信了,那现在再想想,如果我要用我的计算机给另外

一台计算机实现通信,我是不是要判断要通信的计算机是否和我的计算机在同一个 IP 地址中,相当于上面例子中我和我要送东西的朋友是否在一个省,这个时候

就需要用子网掩码,我拿着我的 IP 地址和对方的子网掩码通过计算,判断是否在同一个 IP 地址下,如果在同一个IP 地址下,我可以用广播的形式进行通信,

如果不在同一个 IP 地址下,我可以先把数据传给我方的路由器,再由我方的路由器把数据传给对方的路由器,最后由对方的路由器把数据传给要接收数据的计算机。

这样说,再联系上面已经说过的,我想不难理解了。

IP地址

目前我们普遍使用的是 IPV4 ,它规定,一个网络地址由 32 位二进制组成,把 32 位平均分成四份,每一份   8 位, 8 位最大能表示的数据是 255 ,所以IP地址的范围:0.0.0.0255.255.255.255.

一个IP地址分为两部分,分别是网络位和主机位

网络位用来标识不同的子网主机位用来标识子网下主机的编号

为什么要分两部分呢?很简单,就好比你想写信给你的女朋友,假设你女朋友的地址是西宁市平安路128号,那么网络位就会直接找到西宁市,主机位帮你找到你的女朋友。

网络位和主机位是如何划分的?使用子网掩码来划分。子网掩码和IP地址差不多,都是由32位二进制数来表示,子网掩码也分为网络部分和主机部分,网络部分由1组成,主机部分由0组成。

图片

那说了这么多,IP协议是如何发送数据的?协议规定,IP协议使用IP数据包进行发送 数据。IP数据包同样把数据分为了两部分,head和data,并且在发送数据的时候,

直 接用IP数据包直接装载以太网的data部分。

图片

head:长度为 20 到 600 字节

data:最长为 65515 字节

而以太网数据包的“数据”部分,最长只有 1500 字节,因此,如果IP数据包超过了 1500 字节,它就需要分割成几个以太网数据包,分开发送了。

再回顾一下啊,以太网的头是包含了自己的 MAC 地址和目标 MAC 地址的,那如何查 找目标 MAC 地址呢?前辈们弄了一个叫 ARP 协议的东西专门来解析目标 MAC 地址。

它是如何工作的?首先,它是数据链路层的东西,在我们发送一个数据包的时候是包含着对方的 IP 地址的。例如我(172.13.4.58)想发送一条数据给女朋友(172.13.4.90),

首 先,我得先拿到女朋友的MAC地址才可以通信。此时,我们会先计算一下我和女朋友 是否在一个子网内(子网掩码)

在一个子网内,直接广播发送一个数据包

图片

子网内的计算机发现了这个包之后会返回一个数据包并且带有 MAC 地址,这样就通过 IP 地址找到了目标主机的 MAC 地址,接下来就可以进行数据传输了。

不在一个子网内,单纯的用广播就不行了,因为广播只是针对自己内网而言。那怎么办,此时会把数据包发给网关,由网关发给其它路由,这样在整个万维网

里就可以找到你想要的那个计算机的 MAC 地址了。

总结

  • ARP 就是通过 IP 地址来查找 MAC 地址的一套固定协议,它是数据链路层的内容。

  • 网络层的意义:定义了子网, 区分各个局域网

  • IP 地址:网络地址

  • 子网掩码:计算是否是同一个子网

四、传输层

到目前为止,前三层内容已经可以进行数据传输了。但是,我们的一台计算机上可以 一次性运行多个网络应用程序,比如, QQ 、微信 、 LOL 三个软件一起运行,

都要进行网络传输,但是就前面学习的这三层内容,是没办法区分开数据是要发送给哪一个 软件的。那怎么办?引入第四层,传输层,传输层定义了端口的概念

每一个网络应 用程序占用一个网络端口,不同的程序就用端口把数据隔离,两两互相不影响。

  • 端口:应用程序和网卡的关联编号

  • 传输层:建立端口到端口的通信。

  • 传输层有两种协议:TCP 和 UDP

图片

TCP协议

TCP 协议:可靠传输, TCP 数据包没有长度限制,理论上可以无限长,但是为了保证网络的 效率,

通常 TCP 数据包的长度不会超过 IP 数据包的长度,以确保单个 TCP 数据包不必再分割。

图片

TCP 头放的主要是源端口和目标端口

UDP协议

UDP 协议:不可靠传输,“报头”部分一共只有 8 个字节,总长度不超过 65535 字节,正好放 进一个 IP 数据包。

图片

其实和邮信是一样的,写好地址,写好接收人,直接装进信封里,丢进邮箱里就不用你管了,对方什么时候收,收没收到,你不知道。

五、应用层

用户使用的都是应用程序,均工作于应用层,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式。对于用于而言最直观的就是应用层。

应用层:规定应用程序的数据格式

例:TCP 协议可以为各种各样的程序传递数据,比如 Email 、 WWW 、 FTP 等,那么, 必须有不同协议规定电子邮件、网页、 FTP 数据的格式,这些应用程序协议就构成了“应用层”。

总结

以上是对TCP/IP5层协议的解读,总结一下:

图片

发送数据其实就是一个封装数据的过程

图片

最后从物理层发出,对方接收到了之后再自下而上一层一层打开拿到数据,以上内容就是一个网络传输的大致过程,

其中还有好多细节没有阐述,但大家知道和了解以上内容,对开发而言足够了。


http://chatgpt.dhexx.cn/article/pFVKcURs.shtml

相关文章

[网络原理] 网络中的基本概念

人生,本就是苦乐参半,这样的生活才是丰富多彩. 文章目录 前言1. IP地址2. 端口号3. 协议4. 五元组5. 协议分层6. OSI七层模型7. TCP/IP协议8. 封装和分用9. 客户端与服务端10. 请求与响应 前言 本章开始,我们开启网络部分的知识大门. 1. IP地址 1.定义: IP地址主要用于表示网…

网络原理-网络发展史和通信基础

目录 1.网络发展史 面向终端的计算机网络 计算机网络阶段(局域网LAN) 组网方式 计算机网络互联阶段(广域网WAN) 2.通信基础 IP地址 端口号 网络协议 协议的作用 知名协议的默认端口 协议分层 分层的作用 OSI七层模型 TCP/IP五层模型 网络设备所在分层 网络分层…

【Linux】网络原理

本篇博客让我们一起来了解一下网络的基本原理 1.网络发展背景 关于网络发展的历史背景这种东西就不多bb了,网上很容易就能找到参考资料,我的专业性欠缺,文章参考意义也不大。这里只做简单说明。 网络发展经过了如下几个模式 独立模式&…

计算机网络 ——网络原理之初识

✨计算机网络 ——初识网络原理 作者介绍: 🎓作者:偷偷敲代码的青花瓷🐱‍🚀 👀作者的Gitee:代码仓库 ✨✨我和大家一样都是热爱编程✨,很高兴能在此和大家分享知识,希望在分享知识的同时,能和大家一起共同进步,取得好成绩&#x…

计算机网络原理简介

物理层 电脑要联网,需要做什么,电脑需要电, 然后电脑与电脑之间相连,需要网,可以用光纤,双绞线,同轴电缆,无线波等 把电脑连接起来的物理手段,主要规定了网络的一些电气特性,作用是负责传送0和1的电信号.而机械特性,及时如何去与硬件相连了,比如说插座的尺寸 数据链路层 物…

快速了解网络原理

作者:~小明学编程 文章专栏:JavaEE 格言:热爱编程的,终将被编程所厚爱。 目录 局域网和广域网 局域网 局域网组建的方式 广域网 网络通信基础 IP地址 端口号 协议 什么是协议 协议分层 分层模型 OSI七层模型 TCP/IP…

网络原理 (1)

网络原理 文章目录 1. 前言: 2. 应用层2.1 XML2.2 json2.3 protobuffer 3. 传输层3.1 UDP3.1 TCP4. TCP 内部的工作机制 (重点)1. 确认应答 2.超时重传3. 连接管理3.1 建立联系 :三次握手3.2 断开连接 : 四次挥手 4. 滑动窗口5. 流…

网络原理初识(基础)

目录 一,网络的划分 1.局域网(LAN) 概念 局域网的组建(连接方式) 2.广域网(WAN) 概念 二,网络通信基础 1.IP地址 概念 格式 组成 分类 特殊IP 2.端口号(po…

网络基本原理

一、网络与网卡 网络:进程与进程间跨主机(Host)通信 网卡: 网卡发送数据:1.填充数据 2.触发发送 网卡接收数据:1.接收数据 2.通过中断把控制权交给OS 3.OS把数据搬给进程 数据经过不断的封装之后才能发…

安装vue-devtool

新买了台电脑,想要安装vue-devtool,发现安装不上,特此记录下。 一,下载 因为某种大家都知道的原因,外网上不了。 可以使用这里的下载地址: https://chrome.zzzmh.cn/info?tokenljjemllljcmogpfapbkkighb…

嵌入式linux之yocto(六)devtool往返开发

1. 参考 yocto官方文档-devtool 微信读书:嵌入式Linux系统开发:基于Yocot Project 书中对于devtool讲解较少,官方文档对devtool的工作流和使用方法较为详细。 传统开发内核是直接进入内核路径修改源码,这里简述使用devtool工具开发Linux内核…

Chrome Devtool 调试 Javascript

重现错误 单击打开演示。演示在新选项卡中打开。在 Number 1 中输入数字5在 Number 2 中输入数字2点击 Add Number 1 and Number 2 熟悉 Sources 面板 UI 点击Source get-started 是 get-started.html(不包括JS) get-started.js 就是 get-started 的…

devtool使用介绍(2)

devtool使用介绍2 2.4.2 使用devtool Modify修改现有组件的来源 2.4.2 使用devtool Modify修改现有组件的来源 devtool Modify命令为使用已有代码的现有代码作准备,该代码已具有用于构建软件的本地recipe。 该命令足够灵活,可让你从上游源提取代码&…

webpack——devtool配置及sourceMap的选择

官方手册传送门 官方对devtool配置的定义很简单:选择一种 source map 格式来增强调试过程,不同的值会明显影响到构建build和重新构建rebuild的速度。 不过,什么是source map,官方用提供了许多种的source map,其中的区…

webpack:devtool配置中的source map

webpack:devtool配置中的source map 一、功能作用二、配置文件三、source map格式(1)source-map(2)inline-source-map(3)hidden-source-map(4)eval-source-map&#xff0…

sourceMap: devtool 模式以及SourceMapDevToolPlugin的使用

1. 什么是sourceMap sourceMap 是一个信息文件, 维护着代码转换编译前后的映射关系; 2. devtool : 选项控制是否生成,以及如何生成 source map source Map对应的模式 1)inline 2) cheap 3)module 4) eval 5) source-map …

webpack之devtool

关于Devtool 该选项控制是否以及如何生成源映射。官网上给出的可选值有: 其中一些值适合开发,一些用于生产。对于开发,您通常需要快速的Source Maps,以bundle的大小为代价,但是对于生产,您需要独立的Sourc…

chrome devtool使用基础

保存js和css setting > workspace 工作区设置后,自动映射工作区 带绿色图标的文件,不需要请求 blackbox script 黑盒调试,调试不进入第三方代码,只调试项目代码 setting > blackbox 或者鼠标右键设置 network throttling profile 设置网络模式,网速限制,在ne…

Chrome Devtool 使用指南

Chrome Devtool Performance使用指南 运行时性能表现(runtime performance)指的是当你的页面在浏览器运行时的性能表现,而不是在下载页面的时候的表现。这篇指南将会告诉你怎么用Chrome DevToos Performance功能去分析运行时性能表现。在RAI…

devtool使用

记录点没用的东西 1. 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><version>2.3.2.RELEASE</version> </dependency> 2.pom中加入maven插件 <plugin…