原文链接: https://blog.csdn.net/qq_30062771/article/details/88856654

一、前言

计算机之间通信,主要通过网络通信的5层模型。即

应用层(Application Layer)

传输层(Transport Layer)

网络层(Network Layer)

数据链路层(Datalink Layer)

物理层(Physical Layer)

它们可以理解为逐层依赖,其中物理层为基础。

二 、物理层

两台计算机要同信,最基础的是相连,即通过光纤、电缆、双绞线等介质连接,这样才可以在两个计算机之间通过高低电频来传送最基础的0、1电信号。

三、数据链路层

上接物理层理解,物理层只传送0、1电信号,如果传送的0、1毫无规则,计算机是无法识别的,因此必须制定规则来进行01的传输,比如以太网协议,

01、以太网协议

以太网协议主要用来规定多少个电信号为一组,也叫一个数据包,或者帧。每个帧由表头(Head)和数据(Data)构成,大小一般为64-1518字节,数据量大就多帧传送。每帧的大小不一,所以必须就表头部分进行固定(否则计算机无法判断哪是表头,并且表头固定18个字节),表头部分主要存放该帧的发送者,接受者,等信息。数据部分则存放发起者要给接收者的内容。

通过一台计算机发送出去的一帧数据,如何保证另一台计算机能准确接收呢,(一个计算机不可能只连接一个计算机),这个就需要对计算机进行区分,确定一个唯一标识,即MAC地址。

02、MAC地址

连入网络的计算机均有一个网卡接口,每个网卡接口都有一个唯一的地址,即MAC地址,由48个字节组成,在网卡生产时就被唯一标识

03、广播和ARP协议

(1)广播

假设计算机A同时连着计算机B、C、D,A虽然知道计算机B的MAC地址,但是在同一子网中,如何将数据传送给B呢,一种方式就是广播,即A发送一个数据包,中间包含B的MAC地址,B、C、D接收后,会取出其中的MAC地址与自己进行比对,如果相同则进行接收,否则丢弃不理,类似于广播找人,叫到你的名字,你才会答应一样。

(2)ARP协议

上接上面的扩展考虑,就是A是如何知道B的MAC地址的呢?即通过ARP协议解决。

四、网络层

上接数据链路层内容,可以理解什么是子网?我们所处的网络,实际上是由各种各样的子网构成。如果不划分子网,那么可以理解为,计算机A广播一个数据包给计算机B,其他所有计算机都要接受一遍并进行舍弃,那么每台计算机都会奔溃。对于同一个子网中的计算机,可以通过MAC地址确定广播信息,那么又是如何确定每个MAC地址属于哪个子网呢?并且不同子网中的数据如何发送,这就通过网关,先发送给网关,然后让网关进行转发,这就需要一个IP协议。

(1)IP协议

通用的IP协议,也是为了确定一个地址,叫IP地址。通用的有IPv4和IPv6两种。

IPv4地址,由 32 位的二进制数组成,我们一般把它分成 4 段的十进制表示,地址范围为 0.0.0.0~255.255.255.255。其中前面部分是代表网络,后面部分代表主机,两者长度并不固定。如果两个计算机的网络部分一样,可以认为其处于同一子网中,例如192.168.43.1 和 192.168.43.2,如果网络部分为24位,主机部分为8位,则其网络部分为192.168.43,可以理解成同一子网。

但是无法仅仅通过IP就确定网络占几位,主机占几位,这就需要另一个东西——子网掩码。子网掩码和 IP 地址一样也是 32 位二进制数,不过它的网络部分规定全部为 1,主机部分规定全部为 0。也就是说,假如上面那两个 IP 地址的网络部分为 24 位,主机部分为 8 位的话,那他们的子网掩码都为  11111111.11111111.11111111.00000000,即 255.255.255.0。

那有了子网掩码,如何来判端 IP 地址是否处于同一个子网中呢。显然,知道了子网掩码,相当于我们知道了网络部分是几位,主机部分是几位。

我们只需要把 IP 地址与它的子网掩码做与(and)运算,然后把各自的结果进行比较就行了,如果比较的结果相同,则代表是同一个子网,否则不是同一个子网。

例如,192.168.43.1 和 192.168.43.2 的子码掩码都为 255.255.255.0,把 IP 与子码掩码相与,可以得到他们都为 192.168.43.0,进而他们处于同一个子网中。

(2)ARP协议

上接IP内容,有了两台计算机的 IP 地址与子网掩码,我们就可以判断出它们是否处于同一个子网之中了。

ARP 协议也是通过广播的形式给同一个子网中的每台电脑发送一个数据包(当然,这个数据包会包含接收方的 IP 地址,可以理解为在同一子网中无差别询问)。

对方收到这个数据包之后,会取出 IP 地址与自身的对比,如果相同,则把自己的 MAC 地址回复给对方,否则就丢弃这个数据包。这样,计算机 A 就能知道计算机 B 的 MAC 地址了。

既然计算机A询问对方MAC地址通过广播,发送数据给对方也通过广播,那么计算机B如何判断对方是发数据,还是问要MAC地址,其实询问 MAC 地址的数据包中,在对方的 MAC 地址这一栏中,填的是一个特殊的 MAC 地址,其他计算机看到这个特殊的 MAC 地址之后,就能知道广播想干嘛了。(可以理解为,计算机A发了一个数据包,其中包含了特殊的含义,即把你MAC告诉我,计算机B收到后即广播出自己的MAC供对方)

如果在不同的子网中,要想发送数据给对方,则通过网关转发。

(3)DNS服务器

我们是如何知道对方计算机的 IP 地址的呢?相当于我要和另一台计算机中的进行对话,则需要对方的IP,例如访问百度,我们必须知道百度的IP(可以理解百度是一台很大的计算机),但是大多数时候我们不会直接记住IP,而是访问百度是输入www.baidu.com 这个域名。当我们输入这个域名时,会有一个叫做 DNS 服务器的家伙来帮我们解析这个域名,然后返回这个域名对应的 IP 给我们。

因此,网络层的功能就是让我们在茫茫人海中,能够找到另一台计算机在哪里,是否属于同一个子网等。

五、传输层

通过物理层、数据链路层以及网络层的互相帮助,我们已经把数据成功从计算机 A 传送到计算机 B 了,可是,计算机 B 里面有各种各样的应用程序,计算机该如何知道这些数据是给谁的呢?

这个时候,就需要端口(Port)来进行区分,也就是说,我们在从计算机 A 传数据给计算表B的时候,还得指定一个端口,以供特定的应用程序来接受处理。

传输层的功能,就是建立端口到端口的协议通信。相比网络层的功能是建立主机到主机的通信。

也就是说,只有有了 IP 和端口,我们才能进行准确着通信。这个时候可能有人会说,我输入 IP 地址的时候并没有指定一个端口啊。那是因为,我们使用的某些协议,已经默认了端口号,例如 http 的传输默认端口是 80,这些端口信息也会包含在数据包里的。

传输层最常见的两大协议是 TCP 协议和 UDP 协议,其中 TCP 协议与 UDP 最大的不同就是 TCP 提供可靠的传输,而 UDP 提供的是不可靠传输。

六、应用层

应用层是最接近我们的一个层,我们通过各种协议接收来的数据,会有各种各样的格式,例如,html格式、mp4、JPG、等等,如何通过计算机的不同软件,翻译成我们人能看懂的东西,比如文字、图片、视频、音频等视觉听觉效果。

这个时候我们就需要再指定不同的格式和协议进行渲染。

因此我们需要指定这些数据的格式规则,收到后才好解读渲染。例如我们最常见的 Http 数据包中,就会指定该数据包是 什么格式的文件了。

七、总结

以上内容来源于微信公众号所看内容,非原创,文中已指定《计算机网络:自顶向下》这本书,感谢作者的心血付出和大力推荐。

计算机之间的通信原理相关推荐

  1. 键盘和计算机之间的通信是单工通信,通信方式

    [编辑] 什么是通信方式 通信方式是指通信双方之间的工作方式或信号传输方式. [编辑] 通信方式的分类 通信方式可分为单工通信.半双工通信及全双工通信三种. 1.单工通信 单工通信(Simplex C ...

  2. plc有与计算机的通讯请求时,OMRON PLC网络Ethernet网_OMRON PLC与上位计算机之间的通信_OMRON PLC与上位计算机通信程序-维库电子通...

    上位机通信软件是用VB开发的.VB具有强大的图形显示功能,可以容易开发出界面良好的图形用户界面,同时VB还提供了串行端口控件 MSCOMM,程序员在利用该控件时,只需设置.监视其属性和事件,即可完成对 ...

  3. 计算机交互工作原理,键盘,鼠标与计算机之间的交互原理

    键盘 键盘(Keyboard)是常用的输入设备,它是由一组开关矩阵组成,包括数字键.字母键.符号键.功能键及控制键等.每一个按键在计算机中都有它的惟一代码.当按下某个键时,键盘接口将该键的二进制代码送 ...

  4. 【Python任务导向】计算机之间的通信(网络编程、UDP、TCP)

    [Python]高级笔记第五部分:网络编程 全系列导航见:Python教程整理

  5. android单片机wifi通信原理,基于单片机计算机之间无线通信实现.doc

    基于单片机计算机之间无线通信实现 课 程 设 计 报 告 学 院: 专业名称: 学生姓名: 指导教师: 时 间: TOC \o "1-3" \h \u 课程设计任务书 题目:基于单 ...

  6. 计算机之间是如何实现通信的?—Vecloud微云

    如今,计算机网络已经成为我们日常生活的必需品,无论是工作时发送邮件,还是上网聊天,都离不开计算机网络,那么,什么是计算机网络呢?多台计算机之间是如何实现连接并且进行数据交换的呢? 计算机网 所谓的计算 ...

  7. 通信原理简明教程 | 物联网通信技术简介

    文章目录 1 物联网通信技术概述 1.1 物联网通信的产生和发展 1.2 物联网通信系统 2 RFID技术 2.1 RFID系统的组成 2.2 RFID系统的工作原理 2.3 RFID的典型应用 3 ...

  8. 计算机网络 - (一)计算机之间的网络互通

    计算机网络 内容目录 前言 计算机网络 - 计算机之间的网络互通 1. 物理层 2. 数据链路层 3. 网络层 4. 传输层 5. 应用层 总结 前言 大物理学家费曼提出一个高效的费曼学习法,即从问题 ...

  9. Socket的通信原理和使用

     目录 一.什么是 Socket? 二.Socket 通信过程 2.1 通信过程介绍 2.2 实现TCP建立连接的三次握手过程 三. 使用Socket进行通信[php] 3.1 PHP中Socket常 ...

最新文章

  1. dubbo被阿里放弃原因_中间件小姐姐直播“带货”——阿里程序员必知的插件
  2. 【GNN】谷歌、阿里、腾讯等在大规模图神经网络上必用的GNN加速算法
  3. [推荐]经典炸弹人手机游戏[年兽防御战2]
  4. python链表节点的插入p.next curnode_leetcode刷题总结之链表
  5. 接口测试基础知识学习
  6. HNU 19.迭代电路习题
  7. 应届生还是研究生?与大学生的MSN谈话二
  8. vue 双向数据绑定
  9. cad2017单段线_CAD制图规定-2017最新版.doc
  10. 【笔记】WGS84转GCj02
  11. 【nn.Parameter】Pytorch特征融合自适应权重设置(可学习权重使用)
  12. 通过Matplotlib画sin(x)
  13. Oracle 表空间时点恢复(TSPITR)
  14. 机器学习模型 非线性模型_pycaret在几分钟内准备好您的机器学习模型
  15. C# ObjectArx AutoCAD二次开发(转帖)
  16. 内蒙古最新八大员安全员模拟真题题库及答案
  17. pinterest数据科学家访谈
  18. 工业交换机和普通交换机的区别
  19. 蓝桥七届 冰雹数 JAVA
  20. Nginx学习(一)

热门文章

  1. Mysql对应的dul_DUL 恢复简单表测试
  2. 大数据物流项目:Kudu 入门使用(五)
  3. formality: 形式验证流程
  4. win7 64位VC串口控件打不开解决方法
  5. MOSFET管基本原理与应用
  6. 数据引擎助力车娱融合新业态 让秒杀狂欢更从容
  7. 九龙证券|服务器龙头获资金连续抢筹,尾盘主力抢筹前期大热门股
  8. 用css给我画一朵花
  9. 晓宇哥新年力作!AI离线语音开关控制器
  10. 北京工商专修学校计算机学院院长,北京工商大学计算机学院