目录
2.5.2 牛客网Java刷题知识点之OSI七层参考模型 和TCP/IP五层参考模型
1. 网络发展史
1.1 独立模式
独立模式:计算机之间相互独立
1.2 网络互连
1.2.1 网络互联的背景
随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互连。
1.2.2 网络互联的定义
- 网络互连:将多台计算机连接在一起,完成数据共享。
- 数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。
- 根据网络互连的规模不同,可以划分为局域网和广域网。
1.3 局域网LAN
局域网的定义
- 局域网,即 LocalArea Network,简称LAN。
- Local 即标识了局域网是本地,局部组建的一种私有网络。
- 局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网组建网络的方式
(1) 基于网线直连
(2) 基于集线器组建
(3) 基于交换机组建
(4) 基于交换机和路由器组建
1.4 广域网WAN
广域网的定义
- 广域网,即 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之间的十进制整数)如:100.4.5.6。
我们需要明确主机的IP地址,才可以把网络数据发送到对应的主机上;
2.2 端口号
端口号的应用场景
- 端口号和IP地址往往是配合使用的,IP 地址用于标识主机网络地址,我们通过IP地址,就能找到一台计算机/服务器。
- 当主机接收到一个数据包,会将数据包给哪一个应用程序使用呢?
- 这些程序都在一台主机上,所以IP地址都相同。但是他们的端口号是不同的,所以我们的数据包,可以借助端口号,再进一步进行区分;
- 因此网络通信的过程,往往是需要先根据IP,找到主机的网络地址;再根据端口号,找到对应的程序;
端口号的概念
在网络通信中,IP 地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单来说,端口号就是用于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。
端口号的格式
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
2.3 认识协议
问题
有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?
网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如发送一个文本字符串“你好!”,如何标识发送的数据是文本类型,及文本的编码格呢?
基于网络数据传输,需要使用协议来规定双方的数据格式。
概念
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备,都必须共同遵从的一组约定、规则。
如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议(protocol)最终体现为在网络上传输的数据包的格式。
2.4 五元组
在TCP / IP协议中,用五元组来标识一个网络通信:
五元组在网络通信中的作用,类似于发送快递:
- 可以在cmd中,输入netstat -ano ,查看网络数据传输中的五元组信息
- 如果需要过滤(一般是通过端口号或进程PID过滤),可以使用netstat - ano | findstr过滤字符串
2.5 协议分层
2.5.1 分层的作用
把大的协议拆分成小的协议,降低实现和使用的难度
- 网络通信本身是一件非常复杂的问题;
- 如果只使用一个协议,来完成网络方方面面的问题,就很可能使得这个协议非常的庞大和复杂;
- 这样协议实现和使用都会困难重重,所以需要对协议进行拆分,把大的协议拆分成若干个小的协议,使得拆分出来的协议的功能更单一,更易于理解。
解耦合,高内聚,使得各个协议分工明确
只是把大协议,拆分成若干个小协议也是不够的,因为如果拆分出来的小协议数量比较多,也会比较麻烦;所以我们需要对这些小的协议进行归类,能更好的满足高内聚;
为了这些小的协议能够进行良好的交互,需要按小协议的类别分类,并且约定好若干个层级结构,只有相邻两层协议之间可以进行交互,上层协议可以调用下层协议,下层协议可以给上层提供服务;
这样的约定非常有必要如果只是归类,但是这些协议彼此之间的调用关系混乱不堪,会使得体系也变得十分混乱
封装,便于更好的拓展和维护
分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务),这样能更好的扩展和维护,如下图:
2.5.2 牛客网Java刷题知识点之OSI七层参考模型 和TCP/IP五层参考模型
OSI:即Open System Interconnection,开放系统互连;
- OSI七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层。
- OSI七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
通俗理解OSI各层作用 实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下TCP / IP 五层(或四层)模型来实现;
OSI 七层模型既复杂又不实用:所以 OSI七层模型没有落地、实现。
2.5.3 TCP / IP五层(或四层)模型
下图就把 OSI七层模型,和TCP / IP五层模型之间做了一个对应,OSI和TCP / IP下面四层是一 一对应的,主要区别在上面,OSI上面有三层,但是在TCP中合并成了一层,往往应用层不会分得那么细,所以合成一个应用层即可;
下面四层的叫法,更常见的是左边的 OSI 模型命名;
通俗理解TCP / IP各层作用
从五层模型到四层模型,是因为把数据链路层和物理层看做一个整体;
为什么要把物理层和数据链路层看做一个整体,主要是因为在实际实现协议的时候,数据链路层和物理层本身就不太容易完全分开;
因为物理层和硬件设备直接相关,不同的硬件设备,又会影响到数据链路层中的特性,所以数据链路层和物理层的耦合比较紧密,很难把它们完全拆分开;
协议分层有一个好处,就是可以灵活的替换层,但是如果站在物理层和数据链路层的角度来看,物理层一旦被替换,那么对应的数据链路层往往也会发生改变,因为它们的高耦合,所以可以把这两层看做一层 ;
2.5.4 网络设备所在分层
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;
- 对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;
路由器工作过程
- 主机的数据发送到路由器,路由器收到之后,物理层,数据链路层,网络层解析,重新构造出新的网络数据包,构造出以太网数据帧,构造出二进制数据,进行转发。
- 路由器是工作在网络层,这也叫三层转发
- 对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
交换机工作过程
主机的数据发送到交换机,交换机收到之后,物理层解析,数据链路层解析,重新构造出新的以太网数据帧,发给下一个设备数据链路层中,得到的以太网数据帧的帧头,信息就足以支持交换机进行下一步工作。
交换机是工作在数据链路层,这也叫二层转发。
- 对于集线器,它只实现了物理层;
注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。
随着现在网络设备技术的不断发展,也出现了很多3层或4层交换机,4层路由器。我们以下说的网络设备都是传统意义上的交换机和路由器。
2.5.5 网络分层对应
网络数据传输时,经过不同的网络节点(主机、路由器)时,网络分层需要对应。
以下为同一个网段内的两台主机进行文件传输:
两台计算机通过TCP/IP协议通讯的过程如下所示
TCP/IP通讯过程
以下为跨网段的主机的文件传输:数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
3. 网络通信基本流程
3.1 数据传输时的封装分用过程
计算机利用协议进行通信时:
- 发送方从上层向下层传输数据,每经过一层都附加一个协议控制信息,到达物理层后将数据包进行转换,送入传输介质。这样的操作称为“封装”(Encapsulation);
- 数据传输到接收方时,再自下层向上层,逐层去掉协议控制信息,并且完成各层的指定功能,这样的操作,称为“分用”;
3.2 简述封装过程
第一步
- 应用程序,获取到用户输入,构造一个“用户数据包”。
- 这个用户数据包遵守开发这个程序的程序猿定义的应用层协议。
第二步
- 应用程序调用传输层提供的API,把数据交给传输层。传输层拿到数据之后构造出“传输层数段”。
- 这个“传输层数据段”遵守传输层协议,主要是 TCP 协议,或者 UDP 协议。
- TCP数据段(传输层数据段) = TCP段头+TCP载荷。
- TCP载荷就是“应用数据”。
第三步
- 传输层构造好“传输层数据段”后,继续调用网络层的API,把“传输层数据段”交给网络层,网络层拿到数据后构造出“网络层数据报”。
- 这个“网络层数据报”遵守网络层协议,主要是IP协议。
- IP数据段(网络层数据报)=IP报头+IP载荷。
- IP载荷就是“传输层数据段”
第四步
- 网络层构造好“网络层数据报“后,继续调用数据链路层的API,把“网络层数据报”交给数据链路层,数据链路层拿到后构造出“数据链路层数据帧”
- “数据链路层数据帧”遵守数据链路层协议,主要是以太网协议。
- 以太网数据帧(数据链路层数据帧)=太网帧头+以太网载荷+以太网帧尾。
- 以太网载荷就是 IP数据报。
第五步
- 数据链路层构造好“数据链路层数据帧”后,继续调用物理层的API,把“数据链路层数据帧”交给物理层;
- 物理层给网卡,网卡将上诉二进制数据,最终以光/电/电磁信号发送出去。
完整过程
3.3 简述分用过程
- 信号到达接受方网卡,网卡将这些信号还原为二进制数据,交给上层数据链路层。
- 数据到达数据链路层,通过帧头帧尾包含的数据反应出使用的数据链路层协议,按该协议进行解析,将载荷数据传给上层网络层。
- 数据到达网络层,通过报头包含的数据反应出使用的网络层协议,按该协议进行解析,将载荷数据传给上层传输层。
- 数据到达传输层,通过段头包含的数据反应出使用的传输层协议,按该协议进行解析,将载荷数据传给上层应用层。
- 数据到达应用层,按照程序的应用层协议解析,将信息输出给接受者。
复习巩固