目录:
前言
打怪升级:第101天 |
---|
网络发展
中午空闲的时候,拿出手机,打开哔站看视频,打开微信和朋友聊天 …
如今我们无时无刻不在使用着网络,它为我们的生活提供了便利,加快了信息传播的速度,拉进了人与人之间的距离。
而如此快捷的网络是如何发展的呢,人们为什么要创建网络,有是如何将各个主机链接到一起的?
下面我们一起来探究。
- 独立模式: 计算机之间相互独立;
此时各个主机无法互相通信,两个主机想要交换数据,只能由A主机拷贝到硬盘,再通过硬盘拷贝到B主机。
- 网络互联: 多台计算机连接在一起, 完成数据共享;
为了加快数据传输的速度:少量主机链接到同一个网络,彼此之间可以进行数据交换。
- 局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;
为了让距离更远的双方也可以相互发送信息:比如一个国家的人可以互相通信。
- 广域网WAN: 将远隔千里的计算机都连在一起;
局域网的扩展:比如全世界任意两台主机都可以互相通信。
认识协议
协议就是一种约定。
比如a和b两个人约定好:我给你发送数字1表示我要去吃饭了,给你发送数字2表示我现在在写博客(22222…)
有了这样的约定,a给b发送1,2,3等等b就能明白a在做什么;
但是同时,由于c不知道这个约定,所以如果a给c发送1,2,c就不知道是其中的含义。
还有比如人们用于交流的语言,a和b只会说汉语,c只会说英语,那么a和b交流的时候c就听不懂(同理,c和c交流时a和b也听不懂)。
通过上面两个例子我们可以看出,协议有两个特点:
- 有过协议约定的双方可以明白彼此发出各种信号的含义;
- 没有接受该约定的人,无法理解采用该约定发送的消息。
因此我们可以得出一个结论:通信双方想要进行通信,就必须采用同一份协议。
- 硬件方面的协议
计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信
息, 就需要约定好双方的数据格式.
- 软件方面的协议
struct str
{
int a:4;
int b:10;
int c:20;
int d:8;
};
各个协议的头部都是采用位段来存储数据的,通过约定前4个比特位的含义,之后10个比特位的含义等,为之后的通信达成共识。
那么既然通信双方需要采用同一种协议才能互相通信,我们平时使用的OS有Windows、Linux、Unix等等各不相同,大家都想要来制定标准,那么我们如何达到统一?
此时,就需要有人站出来,由他来为混乱的市场敲定最后的一锤,这个人就必须是该方面的领头羊,拥有令人信服的实力;
比如我们如今使用的5G,5G的各种通信协议、规范等都是由华为来制定的,其他企业如果不按照华为制定的方案来就无法使用5G。
那么从上面我们可以得出:使用不同OS的用户想要进行通信必须使用同样的通信协议,
也就是说:不同OS的网络协议栈是相同的。
网络协议初始
协议分层
分层,类比班级小组,并不是一定要分层,分层是为了方便管理。
电话聊天中,通话双方都采用汉语交流,双方都认为对方和自己是直接交流的,
但是实际情况是:A讲话 -> A的电话机采用相关协议发送信号给B的电话 -> B的电话机采用同样的协议将信号解析出来给B -> B听到A讲话
上面示例,左边通信双方采用的通信介质发生变化,那么只要双方采用同样的通信设备即可(通信协议统一),语言协议不受影响;
右边通信双方的语言发生变化,那么只要双方采用的同样的语言即可(语言协议统一),通信协议不受影响;
由此我们发现:通过分层封装,一个层的变化并不会影响到其他层(高内聚低耦合)。
OSI七层协议
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解
TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都需要它的下一层所提供的服务来完成自己的需求.
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.
物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型.
- 一般而言:
对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
对于一台路由器, 它实现了从网络层到物理层;
对于一台交换机, 它实现了从数据链路层到物理层;
对于集线器, 它只实现了物理层;
但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);
系统和网络的关系
系统和网络是不分家的,从上图我们可以看到:网络协议栈贯穿整个计算机,我们想要进行网络通信肯定需要通过OS来管理,
那么OS就要有一套对网络的管理机制,要提供一套网络调用接口,
这里我们应当有一个共识:Linux下一切皆文件,不管是键盘还是网卡等硬件还是文件,我们都对它们进行了封装,这样对于不同的设备我们都可以像访问文件一样从它们中获取数据,
那么网络理所当然地在文件系统的管理之下;
由此我们可以合理推测:我们要在网络中获取或发送数据,需要有一个文件描述符,来借助文件系统进行访问。
-
网络协议栈为什么又称为TCP/IP网络协议栈?
在计算机当中,最重要的组成部分当然就是操作系统,
而协议栈的网络层和传输层又是在操作系统内部的,并且,网络层的最重要的协议为IP协议,传输层最重要的协议为TCP协议,
因此为了体现出它们的重要程度,会称网络协议栈为TCP/IP网络协议栈。 -
系统和网络不分家,并且,我们要学习的网络本就是系统的一部分,那么我们在学习的时候为什么会将两者拆开?
在上面我们有谈过一点:我们现实中使用的OS有很多种,但是如果不同OS上的进程要进行通信,就必须要使用相同的网络协议。
因此,网络的确是包含在OS内的,但是又是OS中的特殊存在,不同计算机可以采用不同的OS,但是它们必须采用相同的网络协议,所以网络很有必要拉出来单独讲一讲。
IP协议的重要程度一览:
网络传输基本流程
网络传输流程图
两台计算机通过TCP/IP协议通信过程
- 同一个网段内的两台主机进行文件传输.
同一网段内的两台主机可以直接找到对方进行通信,不需要第三方转发。
- 跨网段的主机的文件传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器.
与同一网段内文件传输不同:
- 最显而易见的就是中间多了一个路由器,该路由器就是用来在不同网段传输文件的中介;
- 左边传输信息用的以太网,右边传输信息用的令牌环;
说明信息传输的方式可以不同,并且路由器有多种接收和发送信息的方式,可以按照需要的方式接收发送信息.
这里也表现了分层的好处, 信息传输方式不同并不影响上面的多层.
- 跨网络传输流程
跨网络文件传输时可能需要1个或多个传输中介帮助转发,
中介在接收到数据帧后会进行解包,
通过查看MAC头知道该数据帧是哪一台主机发送来的, 之后去掉最外层的头部,
查看数据的IP网络地址,判断应该将这份数据转发到哪个网络,
最后加上自己的MAC头部和尾部转发出去.
电脑主机, 路由器等等各种仪器都可以称为主机.
-
(注意1:
加上自己的MAC头而不是A的MAC,注意了,这里有操作,我们下面细锁) -
(注意2:
MAC地址设置在网卡中,属于硬件配置, 所以又称为物理地址;用来将你的主机连接到网络;
IP地址为主机启动随机分配给你的,主机下线后就回收,分给其他主机了.
所以一台电脑的IP地址是不固定的? 是的
为什么要这样做? 因为IP地址现在不够用
如何解决? 我们之前使用的是IPv4, 现在推出了IPv6,提供了更多的IP地址,不过如今并未大规模使用) -
(注意3:
这里的转发是转发给下一个网络的所有主机), 也就是说A给B发消息,C主机也会受到,但是C主机接收到消息后同上面路由器的分析过程,当发现目的地ip地址不是自己时就丢弃该数据帧,不会往上继续交付,所以我们平时感受不到(我们所谓的抓包工具就是修改了系统的这部分设置,也就是不管是不是发给你的消息,都会往上推送给你)
封装.解包和分用
发送方层层往下传递消息并且添加对应协议的头部的过程我们称为封装;
接收方层层往上传递消息并且去掉对应协议的头部的过程我们称为解包,
在解包的同时,根据头部的某些信息来判断该数据要交给那个协议,叫做分用.
网络中的地址管理
教学楼(主机):五层,老师在最高层
门卫室(路由器):三层,门卫大爷在最高层
前景提示: A老师让小明去给B老师送一份文件, 但是没有告诉小明B老师在那个办公楼,需要小明去找门卫大爷1问路.
那么现在小明的目的地有两个: 找门卫大爷1, 找B老师
其中门卫大爷1是临时地址,找到他的目的是为了找到B老师.
小明找到了门卫大爷1,.
大爷问"你从哪里来,要到哪里去?"
小明答:“我从①位置来,要找②位置,我要帮A老师给B老师送一份文件”;
门卫大爷2告诉小明自己也不知道B老师的具体位置, 不过可以去问一问门卫大爷2,他应该知道, 并且告诉小明继续往前走, 找到③位置,门卫大爷2在③位置的三楼休息室.
小明找到了门卫大爷2.
大爷问"你从哪里来,要到哪里去?"
小明答:“我从②位置来,要找③位置,我要帮A老师给B老师送一份文件”;
门卫大爷2告诉小明继续往前走, 找到④位置,B老师在④位置的五楼办公室.
小明找到了B老师.
B老师问"你从哪里来,要到哪里去?"
小明答:“我从③位置来,要④找位置,我是帮A老师给B老师您送一份文件”;
一次查找通信结束.
MAC地址是短期目标, 下一步要做什么,
IP地址为最终目标, 我要达到的目的.
认识IP地址
IP协议有两个版本, IPv4和IPv6. 在讲解时默认使用IPv4
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地址).