文章目录
一、计算机网络背景
1.1网络发展
在计算机发展初期,计算机之间相互独立,每个终端各自持有数据,这明显对于数据的共享很不友好,为了高效的数据传输和共享,世界各地的科学家、实验室就开始想办法提出自己的解决方案用来解决多设备数据共享的问题,所以在这一阶段形成了网络互联的概念,在这一阶段,不同设备之间可以进行数据共享,那么随着设备的增多,技术的发展,就产生了局域网,广域网这样的技术概念,那么具体的内容我们我们慢慢抽丝剥茧学习,这部分只是有一个网络发展的概念就行。
1.2认识“协议”
我们之前说为了解决多设备之间数据共享的问题,世界各地的实验室、科学家们提出了诸多解决方案,而这个数据通信的解决方案其实就是协议。
但是这时就存在一个问题,计算机的生产厂商有很多,操作系统也有很多,衍生的网络硬件设备也有很多,那么如何让这些不同厂商之间生产的计算机都能相互顺畅的通信呢,所以这时就需要标准的存在,而这个统一的标准就是网络协议。
当今的网络协议是osi(open system interconnection)提出的osi七层模型。
二、网络协议初识
2.1osi七层模型
- osi(open system interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层,每一层都有相关、相对应的物理设备,比如路由器,交换机;
- osi 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
- 但是,它既复杂又不实用,所以我们按照tcp/ip四层模型来讲解。
分层名称 | 功能 | 每层功能概述 |
---|---|---|
应用层 | 针对特定应用的协议 | ![]() |
表示层 | 设备固有数据格式和网络标准数据格式的转换 | ![]() |
会话层 | 通信管理、负责建立和断开通信连接(数据流动的逻辑通路)、管理传输层以下的分层 | ![]() |
传输层(tcp) | 管理两个节点之间的数据传输、负责可靠性传输(确保数据被可靠地传送到目标地址,即数据传输可靠性) | ![]() |
网络层(ip) | 地址管理与路由选择(路由器) | ![]() |
数据链路层 | 互联设备之间传送和识别数据帧(交换机) | ![]() |
物理层 | 以0/1代表电压的高低以及灯光的闪灭、界定连接器和网线的规格(集线器、调制解调器) | ![]() |
2.2osi五层模型
tcp/ip是一组协议的代名词,它还包括许多协议,组成了tcp/ip协议簇。
tcp/ip通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(hub)工作在物理层。
- 数据链路层: 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。 有以太网、令牌环网,无线lan等标准。交换机(switch)工作在数据链路层。
- 网络层: 负责地址管理和路由选择。例如在ip协议中,通过ip地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(router)工作在网路层。
- 传输层: 负责两台主机之间的数据传输。如传输控制协议 (tcp),能够确保数据可靠的从源主机发送到目标主机。
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(smtp)、文件传输协议(ftp)、网络远程访问协议(telnet)等。我们的网络编程主要就是针对应用层
网络层和传输层集成在os内部实现。
即操作系统源码中包含有实现网络层(ip协议)和传输层(tcp协议)的代码。
这两个层次合起来也称为tcp/ip协议栈。
所以你知道了网络也是os源码的一部分,所以应用层想要使用网络,就必须存在有系统调用接口,而将这些系统调用进行封装就形成了网络库。
三、网络传输基本流程
3.1局域网通信

场景:a设备给c设备发送数据。
实际上,b设备也受到了a设备的数据,但是b设备查看时发现不是发给自己的消息就忽略了,而c设备收到分析后发现是发送给自己的数据。
即局域网中所有主机都受到了消息,经过对比mac地址后确定通信双方。
区分不同设备的依据是mac地址,不同设备有不同的mac地址。
在发送数据和接收数据的过程中,可能会发生数据碰撞(一个局域网就是一个碰撞域),这是因为局域网可以被视为一种临界资源,在任何一个时刻,仅允许一个设备向局域网中发送数据。
所以思考下:局域网中,主机越多越好还是越少越好?
当然是越少越好,越少就意味着更小的数据碰撞可能性,当主机数目变多后,会存在有交换机这样的设备来解决处理。
3.2网络传输流程
不跨子网的网络传输
当设备a向设备b发送数据时,报文并不是直接发送过去的,而是需要自顶向下进行封装,即添加每一层的协议报头,然后到达链路层后将封装后的数据报文发送给以太网。
报文=协议报头(快递单)+有效载荷(快递)。
而当报文经过以太网传输到设备b时,需要解析报文,解析报文需要两个步骤:
- 将报头和有效载荷分离;
- 判断将有效载荷交付给上层的哪一个协议(每层可能存在有不同的协议,比如传输层可能存在有tcp协议和udp协议)。
这两个步骤被称为:解包与分用。
通过上述数据传输流程,逻辑上:同层协议都可以认为自己在和对方直接通信。
跨子网的网络传输
当网络传输跨子网时,我们需要路由器来进行转发。
路由器一般至少要横跨两个子网,这句话表明路由器要有两张网卡,有两个mac地址。
很明显第一套地址基本是不变的,因为数据传输一定有明确的通信双方,这个不变的地址也是路径规划的依据。
而第二套地址即mac地址在跨子网的情况下是会变化的,当数据跨网络到达另一个局域网时,其源mac地址和目的mac地址就需要发生变化,因此当数据达到路由器时,路由器会将该数据当中链路层的报头去掉**(解包),然后再重新封装一个报头(重新封装)**,此时该数据的源mac地址和目的mac地址就发生了变化。
而这个过程最重要的是:通过ip协议,我们能够在不同子网间进行通信,无需关注底层的mac地址变化。ip地址是网络通信的关键,它确保了数据能够准确地从源地址传输到目的地址。
3.3网络中的地址管理
ip地址
- ip协议有两个版本,ipv4和ipv6。
- ip地址是在ip协议中,用来标识网络中不同主机的地址;对于ipv4来说,ip地址是一个4字节,32位的整数;
- 我们通常也使用"点分十进制"的字符串表示ip地址,例如192.168.0.1。用点分割的每一个数字表示一个字节,范围是0 - 255;
mac地址
- mac地址用来识别数据链路层中相连的节点;
- 长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了,不能修改。mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置mac地址)。
在linux操作系统中,我们可以采用ifconfig -a
指令来查看mac地址:
幸福从来不曾远离我们,只是有时候它会用试探的方式,看我们还在不在意。 —朱德庸
发表评论