网络基础(一)
- 1. 网络的发展
- 2. 认识协议
- 3. 网络 VS 系统
- 4. 以太网通信原理
- 5. 重谈协议
- 6. 网络中的地址管理
1. 网络的发展
最开始时,计算机之间相互独立。
但是为了协作完成一些任务,就产生了计算机之间相互通讯的需求,于是,网路诞生了。
局域网:参与通讯的主机越来越多,形成一个更大的网络。各个计算机通过交换机和路由器连接在一起。
广域网:参与通讯的计算机更多了,远隔千里的计算机也能相互通讯了。路由器将各个子网连接在一起。
所谓 “局域网” 和 “广域网” 只是一个相对的概念。
2. 认识协议
1. 什么是协议?
- 计算机生产厂商有很多;
- 计算机操作系统,也有很多;
- 计算机网络硬件设备,还是有很多;
- 网络一定要保证,各种不同的机器,都能够无障碍进入互联网,所以从硬件到软件上,都要制定一些统一的约定;
- 这些约定就是 网络协议。
2. 跨网络通讯存在的问题(新技术带来新问题)
- 单台机器中,各个硬件之间也要相互通讯,他们通过各种电路连接到一起。所以单台机器,其实也是一个网络结构。
- 两台机器跨网络通讯的本质,是一台机器的网卡和另一台机器的网卡之间相互通讯。单台机器硬件间相互通讯时,因为距离短,所以很容易实现。
- 跨网络通讯由于距离很长,所以产生了如下几个新问题:
- 数据丢包了怎么办?
- 目标机器如何定位?
- 如何保证,我们的报文,在经历了无数个设备之后,还能准确的把数据推送到远端机器?
- 协议的制定,也解决了上述三个问题。
3. 协议分层
- 在打电话的场景中,我们的直观感受是,自己在和人说话,而不是在跟手机说话。而实际场景是,我们所说的话,需要通过电话先转成电信号,再传递给对方的手机,由对方的手机解析该信号,转化成语音。
- 人是无法直接跟手机说话的,因为人无法识别电信号,手机也无法识别语音信号。可以理解为,人和人之间,有一种协议,大家都说语音信号,所以可以相互沟通;手机和手机之间也有一种协议,大家都使用电信号,所以也可以相互沟通。
- 当人和人之间的协议变化时,比如大家都改说英文,是不影响下层手机的协议的;当手机由座机变为移动手机时,下层协议变为无线电协议,不影响上层人和人之间的协议。
- 协议只适用于同层之间相互通信,不能上下层通信,这样的设计理念就是协议分层。
3. 网络 VS 系统
1. 网络通讯存在的问题,更具体
- a. 怎么保证把数据给下一跳主机;
- b. 在转发中,如何进行路径选择,目标主机定位的问题;
- c. 如果报文中间出现错误或丢失,如何解决;
- d. 对于送达的数据,还要解决如何使用数据的问题。
- 上述abcd中的每一个问题,都要由协议解决,由此可以知道,协议有很多。
2. 网络的解决方案 —— 网络的层状结构
-
理论模型:OSI参考模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层,每一层都有相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
- 但是,它只是理论上的模型,既复杂也不实用。实际运用中,我们常采用 TCP/IP4 层网络模型。
-
实际运用模型:TCP/IP四层(或五层)模型
- TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
- 物理层:负责光/电信号的传递方式,比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层;
- 数据链路层:负责设备之间的数据帧的传送和识别,例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层;
- 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层;
- 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机;
- 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
绝大部分优秀的软件,结构都是层状的。
3. 网络协议栈(TCP/IP协议栈)
- 每一层都有对应的协议;每一层都解决一个网络传输中的具体问题。
4. 网络和系统的关系
- 如图所示,网络协议栈和系统的各层级有一一对应关系。TCP/IP协议是存在在系统内核中的。
- 对于不同的操作系统,如Windows、Linux、MacOS,他们的左边系统部分是不同的,实现上甚至有很大差别。但是他们的右边网络部分,必须相同。所以在不同的操作系统中,网络的系统调用接口大同小异。
4. 以太网通信原理
在同一个局域网中,两台主机可以直接通信,每一个网卡都有一个mac地址,这个mac地址是全球唯一的(mac地址也可以虚拟,例如虚拟机的mac地址就是虚拟出来的)
利用ifconfig
命令可以查看Linux操作系统的mac地址:
同一个局域网中的主机,连接在同一个网线中,如果主机A想向主机B发送一个消息“你好”,只需要知道主机A和主机B网卡的mac地址即可,这个信息携带着主机A和主机B网卡的mac地址,发送到了网线上,所有连接在这个网线上的主机都收到了这个信息,只是有的主机解析该信息后,发现mac地址不是自己的,也就不是发给自己的,就把这个信息丢弃了。
不难看出,要想正确的发送数据,任何时刻,只允许一台主机在局域网中发消息,不然就会发生数据碰撞。我们也将会发生数据碰撞的地方叫做碰撞域。局域网就是一个基于碰撞检测和碰撞避免的通信网络。
如果从系统的角度来看,局域网就是一个临界资源,要保证对临界资源的互斥访问。
以太网名字的由来:以太网就是局域网,上个世纪,物理学家认为,既然声音的传播需要介质,那么光的传播也是需要介质的。学者们把这种假想出来的介质称为“以太”,并认为宇宙中一定充满了“以太”。后来经过实验证明,“以太”这种物质不存在,但是“以太”这个名词被计算机领域使用了,也就有了最早的“以太”网。
5. 重谈协议
1. 生活小例子
- 在快递的场景中,一个完整的快递件,是由快递单号+快递内容组成的。作为用户,我们实际上并不关心快递具体是怎么送达的(不会去看快递单号),只关心最后拿到的快递内容;
- 快递单本身就是一种约定,是一种协议,它详细记录了寄件人和收件人的信息,以保证快递能正确的送到收件人手中;
- 如果我们用计算机语言来表示这个快递单,它实际上就是一个结构体数据。协议通常就是由结构体字段表征的,这个结构体字段定义的对象,我们叫做协议报头。
2. 数据包的封装和分用
- 假如现在有两台主机在通信(假设两天主机在同一局域网内),主机A给主机B发送了一条消息:你好。实际的传输过程如上图所示。
- “你好”消息在主机A中,需要对其逐层添加报头,封装数据包;B首先拿到的是封装了各种报头的数据帧,随后开始对这个数据帧进行逐层的解包和分用,返回给最上层用户的就是最原始的数据“你好”。
- 应用层封装的数据叫request&response,传输层封装的数据叫数据段,网络层封装的数据叫数据报,数据链路层封装的数据叫数据帧。
3. 只要有封装,就一定要考虑后续解包的过程,今后在学习协议时,绕不开的两个问题
- 如何将报文中的报头和有效载荷进行分离;
- 任何协议,都要解决如何将自己的有效载荷,交付给上层的哪一个协议的问题。
6. 网络中的地址管理
1. 认识IP地址
- IP协议有两个版本,IPv4和IPv6。我们整个的课程,凡是提到IP协议,没有特殊说明的,默认都是指IPv4。
- IP地址是在IP协议中,用来标识网络中不同主机的地址,最大的意义在于路径选择;
- 对于IPv4来说,IP地址是一个4字节,32位的整数;
- 我们通常也使用 “点分十进制” 的字符串表示IP地址,例如 192.168.0.1 ;用点分割的每一个数字表示一个字节,范围是 0 - 255。
- 在实际的网络传输中,IP地址是以整数形式传递的;在编程角度,也可以以字符串形式使用IP;IP地址是可以在整数和字符串之间相互转化的。
- Linux下的IPV4地址如下:
- Windows下的IPV4地址如下:
- IP地址又分为:a.公网IP b.内网IP(这个后面再详谈)。
- 可以通过一个
struct
结构体,来描述IP:
struct ip_struct
{
uint8_t p1;
uint8_t p2;
uint8_t p3;
uint8_t p4;
};
2. 认识MAC地址
-
MAC地址用来识别数据链路层中相连的节点;
- 长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
- 在网卡出厂时就确定了,不能修改。mac地址通常是全球唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置mac地址)。
-
Linux下的MAC地址:
- Windows下的MAC地址:
3. IP地址 VS MAC地址
- IP地址用来标识数据的发出地和目的地;
- MAC地址用来标识数据上一站从哪里来,以及下一站到哪里去。
就好比唐僧要去西天取经,起始地是大唐长安,目的地是大雷音寺;此时唐僧到了女儿国,上一站是火焰山,下一站是黑风岭。
4. 模拟跨网络传输
- 假设两台机器在不同的局域网中,A发送了一条消息“你好”给机器B;
- 该消息首先要进行封装,在网络层封装时,报头处必然要携带发送方主机A的IP地址,和接收方主机B的IP地址;
- 连接局域网和局域网的设备是路由器,所以消息“你好”首先要转发到这个路由器中。在数据链路层,报头处封装了主机A的MAC地址,和要到达的下一跳主机路由器R的MAC地址;
- 路由器拿到该消息后,首先进行解包,然后再进行封装。虽然我们不了解令牌环这种局域网,但是我们知道,该协议报头必然携带路由器R的MAC地址和主机B的MAC地址;
- 数据链路层,关于MAC地址的报头一直在变化,网络层关于IP的报头则一直不变(起始IP可能会变)。
令牌环网络:拿到临牌的主机才可以通信,同一时刻只能有一个主机拿到令牌,令牌按照一定规则轮流交给每个主机。从系统的角度看,令牌就是一把锁。
5. 网络通信整体轮廓