1.网络互联
网络互联就是将多台计算机连接在一起,完成数据共享。
数据共享本质就是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。
根据网络互联的规模不同,可以划分为局域网和广域网。
1.1 局域网
局域网,即Local Area Network,简称LAN。
Local即标识了局域网是本地的,局部组建了一种私有网络。
局域网内的主机能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,位于不同局域网内的主机是不能够通信的。
局域网的组建方式有很多种
(1) 基于网线直连
(2)基于集线器直连
(3)基于交换机直连
(4)基于交换机和路由器直连
1.2 广域网
广域网,即Wide Area Network,简称WAN。
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就行成了广域网。广域网内部的局域网都属于其子网。
2.网络通信基础
网络互联的目的是进行网络通信,也叫网络数据传输,更具体一点,就是主机中的不同进程之间,基于网络传输数据。
那么,在组建的网络中,如何判断数据是从哪一台主机将数据传送给哪一台主机呢?这时候就需要使用IP地址来标识。
2.1 IP地址
IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址,简单来说,IP地址就是用来标识主机网络地址。
IP地址是一个32位的二进制数,通常被分割位4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。
通常用”点分十进制“的方式来表示,即a.b.c.d的形式(a,b,c,d都是0~255之间的十进制数字),如上面的IP地址的”点分十进制“:100.4.5.6
一个特殊的IP地址:127.0.0.1
127.0.0.1被称为本地回环地址,主要用于标识本地主机(即本地计算机本身)和网络测试和开发用途。
2.2 端口号
在网络通信中,端口号可以标识主机中发送数据和接收数据的进程(应用程序),简单来说,端口号用来标识主机中的进程(应用程序)
端口号是一个0~65535范围内的数字,在网络通信中,进程(应用程序)可以通过绑定一个端口号,来发送和接收网络数据。
问题:
有了IP地址和端口号,我们就可以定位到网络中唯一的一个进程,但是,网络通信是基于二进制0/1数据来传输的, 也就是对端接收到的数据是一串二进制数据,那对端是如何正确解析二进制数据,正确得获得对方发送过来得内容呢?
网络通信的数据类型有很多种,如图片,视频,文本等。同一个类型的数据,格式也可能会不同,例如纯文本和富文本都是文本数据,但是纯文本格式只是简单的字符序列,而富文本格式则可以包含字体样式、颜色、超链接等多种格式信息。
如我们发送一个文本字符串”你好“,是如何标识发送的数据是文本数据类型,及文本的编码格式呢?
所以基于网络数据传输,需要使用协议来规定双反方的数据格式。
3.认识协议
在网络领域中,协议是网络协议的简称。网络协议是所有网络通信(即网络数据传输)的网络设备必须共同遵守的一组约定、规则。例如,网络设备间如何建立连接、怎样互相识别等。只有遵守这个协议,计算机之间才能相互通信交流。
简单来说,网络协议是通信双方对于发送和接收数据格式的约定,我的数据怎么发出去的,你收到就得怎么解析。
在网络通信中,协议非常重要,只有互相通信之间的多个主机能认同并遵守同一套协议,此时的通信才是有意义的。
协议最终体现为在网络上传输的数据包的格式。
4.五元组
一次网络通信的进行会涉及到5个关键信息,分别为源IP,源端口号,目的IP,目的端口号和协议类型,这5个信息被称为五元组。
在TCP/IP协议中,用五元组来标识一个网络通信。
源IP:标识源主机
源端口号:标识源主机中该次网络通信中发送数据的进程(应用程序)
目的IP:标识目的主机
目的端口号:标识目的主机中该次网络通信中接收数据的进程(应用程序)
协议类型:标识发送数据的进程和接收数据的进程双方约定的数据格式
如下图:
5.协议分层
由于网络通信非常复杂,如果在一个网络协议中完成网络通信涉及到的方方面面的问题,那么必定会使这个协议非常复杂。
所以,一般会让协议分层,不同的层次分别根据各自层次的协议,各自完成在一次网络通信中,该层需要执行的任务。
什么是协议分层
协议分层是计算机网络中一种重要的组织和设计方法,用于将发杂的网络通信功能划分为多个层次,每个层次负责特定的任务,并通过明确规定的接口于相邻层进行交互。
注意事项
协议之间的交互,不能跨层进行。 只有相邻两层协议才能进行交互,上层协议可以调用下层协议,下层协议可以给上层提供服务。
分层的作用
分层的最大的好处类似于面对接口编程, 定义好两层之间的接口规范,让双方遵循这个规范来进行交互。
在代码中,类似于定义好一个接口,一方是实现接口的类(提供方,提供服务),另一方为接口的使用类(使用方)
对于使用方来说,并不关心接口的具体实现细节,只需使用接口即可。
对于提供方来说,利用封装的特性,隐藏了具体的实现细节,只需要开放接口即可。
如下图
这样的规定也能达到解耦合的效果。
如下图
两个互相进行通信的人, 只要这两个人能够说同一种语言,无论设备层的设备如何改变,也就是不论我们使用任何设备,对这两个人的交流的影响不是很大,后续改变通讯设备,对于两个人之间的交流也不会影响很大,这就达到了很好的解耦合的效果。
5.1 OSI七层模型
OSI七层模型是一种逻辑上的定义和规范:把网络从逻辑上分为了7层。但是由于这一套分层体系太复杂了,实际真实的网络分层方式更简化。
5.2 TCP/IP五层模型 (经典面试题)
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
1. 应用层:负责应用层序之间的沟通,也负责对网络传输的数据进行何种处理
2. 传输层:负责任意两台网络设备之间的通信,该层只考虑数据的发起点和数据的接点, 不关心数据传输的中间过程。例如在该层的TCP协议中,能够保证数据可靠的从源主机发送到目标主机。
3. 网络层:负责地址管理和路由选择。网络层也是负责任意两台网络设备之间的通信,但是 网络层会考虑网络数据传输的中间过程。例如在该层的IP协议中,通过IP地址来标识一台主机,并通过路由表(路由表的主要内容包含 目的网络地址,下一跳地址,出接口)的方式出两台主机之间数据传输的路线。
4. 数据链路层:负责相邻设备之间的数据帧的传送和识别。
5. 物理层:负责光/电信号的传递方式,规定了网络通信中一些硬件设施符合的要求。
有些资料将数据链路层和物理层结合在一起,所以也叫TCP/IP四层协议。
5.3 网络设备
主机:主机的操作系统实现了从传输层到物理层的内容(即TCP/IP五层模型的下四层),通过应用程序满足通信的需求。
路由器:路由器实现了网络层到物理层的内容,即是TCP/IP五层模型的下三层。
交换机:交换机实现了从数据链路层到物理层的内容,即TCP/IP五层协议的下两层。
集线器:集线器实现了物理层的内容。
注意:现在的路由器和交换机很多都有对方的功能了。
6. 网络通信的基本流程
6.1 封装与分用
1. 不同的协议层对数据包有不同的称谓,在传输层叫段,在网络层叫数据报,在数据链路层叫帧。
2. 应用层数据通过协议栈发到网络上,每层协议上都要加上一个数据首部,称为封装。
3. 首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息。
4. 数据封装成帧后发到传输介质上,,到达目的主机后,每层协议再剥掉相应的首部,根据首部中“上层协议字段”将数据交给对应的上层协议处理,这就是分用。
1.封装的过程
1. 应用层序获取到用户输入,构造一个“应用层数据包”,这个应用层数据包就会遵守应用层协议。
2. 应用程序调用传输层提供的接口(API),把数据交给传输层,传输层的拿到数据之后,构造出“传输层数据段” 。
这个传输层数据段主要遵守传输层协议,主要是TCP协议和UDP协议。
以TCP协议来说,TCP数据段就是由TCP段头+TCP载荷组成。TCP载荷就是应用层数据包。
3. 传输层构造好数据之后,继续调用网络层的api,把传输层的数据段交给网络层,网络层拿到数据后,构造出网络数据报。
网络数据报主要遵守网络层的IP协议,则网络数据报就是IP报头+IP载荷。
4. 网络层数据构造好之后,IP协议继续调用数据链路层的api,把IP数据包交给数据链路层,构造出一个“以太网数据帧” 。
再数据链路层中,核心协议为“以太网协议”,根据以太网这个协议,就会再网络层数据报的基础上进一步加工,打包成一个以太网数据帧。以太网数据帧=帧头+载荷+帧尾。
5. 数据链路层构造好“以太网数据帧” 之后,数据链路层继续调用物理层的api,把以太网数据帧交给物理层,也就是硬件设备(网卡),网卡会把上述二进制数据(网络上传输的数据本质上都是二进制),最终以光信号/电信号/电磁波信号传播出去了。
2.分用的过程
1. 数据到达接收方主机的网卡,接收方主机网卡会将光电信号还原成二进制,并把二进制数据交给上层数据链路层。
2. 数据达到数据链路层后,从帧头和帧尾发现此时的协议为“以太网协议”,则数据链路层按照以太网协议进行解析,把帧头和帧尾取出来,剩下的载荷,继续往上传给网络层。
3. 数据到达网络层后,从IP报头中得知此时的协议为网络层协议,则按网络层协议对数据进行解析,把IP报头取出来,剩下的载荷再继续传给传输层。
4. 数据达到传输层后,从TCP段头中得知此时的协议为传输层协议,则此时按照传输层协议对数据进行解析,把TCP段头取出来,剩下的载荷继续往上传给应用层。cong
5. 数据到达应用层后,会按照应用层协议(不同应用的应用层协议是不同的)解析,拿到关键信息,展示到界面上,并给出提示。
数据从源主机传送到目的主机的中间的过程中,也有可能涉及到封装的分用的。
数据传输过程中遇到交换机:
主机的数据 => 交换机,交换机收到数据后,物理层解析,数据链路层解析(没有网络层),重新构造出以太网数据帧,发给下一个设备。
数据链路层中,得到以太网数据帧的帧头后,信息就足以支持交换机进行下一步工作。
交换机是工作在数据链路层,也就是二层转发
数据传输过程中遇到路由器(面试常考)
主机的数据 =>路由器。路由器收到数据之后,物理层解析,数据链路层解析,网络层解析(没有传输层解析),构造出以太网数据帧,构造出二进制数据,进行转发。
路由器是工作在网络层,也就是三层转发。