网络划分和各层协议以及webservice 浅谈

最近在公司做一些和其他外部系统接口调用的工作,遇到一些网络传输的问题,趁周末的时间记录、整理一下。

提到网络我们不得不提网络的分层架构:
我们通常听到 网络七层架构/五层架构/四层架构,但是不了解很容易被弄迷糊:什么是分层?这几层架构有何不同?我们为什么要分层?

不要着急,我们先来了解一下这七层、五层、四层 是什么有何区别:

  1. 七层:OSI开放式系统互联通信参考模型理念由ISO(国际标准化组织)提出,现有的理念标准,并没说具体实现,只是概念模型 osi;
  2. 四层:在实际中先使用,然后再有的理念 ;(实际生产中为了解决网络通信问题,大家不约而同的使用某种方式(四层)来解决问题,各个厂家在具体分层的细节不一样,为了统一规范,更加合理规范使用从而提出四层理念 )
  3. 五层:方便理解 七层 和 四层,由此提出五层作为中间理解的概念(通常是教学中才出现的叫法)

image

我们上面可以理解:七层、五层、四层的 各种叫法都是我们自己抽象出来的规范,具体的做事情是四层模型。

下面我们具体来看一下各个层具体是用来做了什么事情(我们这边为了方便理解,所以使用了五层结构):

物理层

解释:从字面看来就是我们实际接触到的实物层:电缆线、光缆线、无线电波等,是传输的基础;

作用:将信号(0,1)由一端 传输到 另一端 ,具体形式是二进制(0,1)。

例子:电信号可以将电压不同作为 0,1 的表示;无线电波以波长作为 0,1 的表示……

说白了其实就是做为传输信号的载体而已。

但是由此引出来一个问题:

信号可以传递过去,但是对方 面对一堆0,1信号,怎么去理解,也就是如何去划分?(单纯的0,1 是没有意义的,重要的是如何进行解读?)

各个厂家都有一套自己的规范(也就是0,1分组的方式不一样),同一厂家的机器进行通信是没有问题的,但是如果不通厂家的话还需要进行转换,一个不小心就容易造成分组错误,导致传递的意思发生改变。这也就急需一个方案来具体解决厂商之间的通信问题(解决物理层解决不了的问题)。

设计这种规范问题,都是这层解决不了,在前面加一层去解决,我们在物理层前面加一层去规范各个厂商的通信问题不就行了。这就引出-->链路层

链路层

为了解决物理层问题,在链路层,我们提出了划分数据的规范:以太网协议

以太网协议:

  1. 一组数据(多个0,1)需要构成一个数据包:叫做 :解决数据识别的问题。

  2. 这个数据包的形式包含 标头数据

image

  1. 标头包含 发送者/接收者 的信息,从而来进行解释划分

  2. 所有接入网络的设备必须要有 网卡 数据的真实流向其实是从 一端 网卡 =》 另一 网卡

网卡:

网卡就是各个厂商 自己去分组解释 二进制数据的。

网卡:由48位二进制/12个6进制 (前6个数字是厂商编码,后6个是该厂商的流水号)组成,这就是网卡的 mac 地址

Mac 地址是独一无二的。

好了,现在我们解决了物理层数据的划分问题,现在又出现了两个新问题:

1、发送者是自己,怎么知道对方的 mac 地址呢? ARP协议,这个稍后解释

2、有了双方的MAC地址,系统如何准确将包送到对方

对于第2个问题解决方案:使用广播:

向本网络内所有机器发送数据(此时标头:(发送者mac\接收者mac))由所有的机器自己判断是/否接受数据

但是 这个只能是本网络 ,是需要将所有的机器都连到一个网络上的?

可是这样我们想象一下:一个机器发送数据,所有的机器都要接受到数据,这是灾难性的(数据传输会很大,并发问题)

从而我们提出 划分子网的概念,但是子网怎么半?(子网是找不到mac地址的),所以我们不得不去解决 mac 地址问题,从而在往前加一层(网络层)

网络层

这层我们是用来解决 链路层 提出以太网协议 中 网卡mac 地址 寻找的问题(就是 标头中 怎么找到对方信息)。

这好办啊,我们在加一个地址,也就是给mac地址,在绑定一个地址,以此区分是不是同一个网络:

  1. 是同一网络:广播 查找
  2. 不是同一网络:路由(新地址的查找)

新地址就是ip 协议:

IP协议

  1. 32 个 2 进制;
  2. ip 和 以太网 协议一样,也是包含 标头 和 数据两部分;
  3. 标头包含 本机 ip 地址,和 接收方 ip 地址。
  4. Ip 包在 以太网 数据包的 “数据”里

(这点可能有点绕,解释一下为啥是包在 以太网的 数据包里 :我们从 上层拿到数据,然后包到 ip 数据包里,然后ip包给了 以太网,以太网 只认 以太网的标头包,只有解析出 才能得到 ip 包的数据,从而找到 对方以太网地址)

好了,我们整理一下,目前我们有两个地址

  1. mac 地址:主要解决厂商之间通信兼容问题;
  2. Ip 地址:解决网络 之间 通信问题

然后这个是如何查找mac 地址的呢?

这就是ARP协议:

ARP协议

发送一个数据包到所在网络:此时包含有ip(自己的/对方的都有)/mac(只有自己的) 地址,

然后对方的mac 写成 FF:FF:FF:FF:FF:FF

本网络与ip 比较:一样 回复 ip 地址,mac地址;不一样 丢弃 包数据

图解:

image
image

到此,实现了网络之间 主机 与 主机 之间的通信了

但是有个新问题:一台机器,多个程序同时进行 网络 收/发 包,如何判断 包(数据)的归属?也就是说这个包到底归谁?

这是同一个机器内的问题。

由此我们引出 传输层的概念。

传输层

这层为了解决 机器内部包的归属问题,提出了UDP 协议:

给每个程序 分配不同的 端口 号,引入 “第三个" 地址:端口号

其实就是每个程序 使用网卡 的编号而已

当然,我们的udp 协议也是 有标头、数据两个部分

与此同时 还有个tcp协议,这个说白了就是 有确认机制的udp 协议,这个点 我们基本都清楚,所以不详细说了,具体的可以百度查看。
image

到此,我们就解决了通信的问题,也就是数据从一个机器到另一个机器,然后另一个机器如何解读的问题。

但,但是,还有一个重要的问题:数据来源很杂的(email、ftp、www)不同的格式,我们没办法解读啊,这就相当于识别图片 /音源/文本的判断问题了(其实和 0,1 如何分组一样)

所以这就用到我们的应用层解决

应用层

这层主要是识别 数据源,进行解码的,具体怎么做呢?制定协议、规范,编码按照规范编码,解码按照规范解码就行。

这层协议:

http:超文本

ftp:文件传输

smtp:邮件

当然http 也有 头+数据这样的格式

总结网络分层

物理层 是解决传输 信号问题(0,1);

链路层是 解决物理层 谁来接收的问题(也是识别 谁发来信息,从而进行0,1 分组)--要站在接收方的角度想一下

传输层是 解决链路层 查找的问题(也算是优化)

网络层是 解决机器的 分包问题(到底数据是给哪个程序)

应用层是 解决数据的展示问题(图片还是文本)

这样我们模拟一下数据传输的具体路线:

本机传输到另一机器一张图片:

首先,通过http 协议,里面包含了 这是图片的信息(标头,识别标志);

数据传输到 传输层,TCP 标头里面加上本地 端口号(具体哪个程序);打包给网络层

在走到网络层(包含 本机ip/传送方ip(关于接收方ip 肯定之前就知道,不然你传给谁)),这里是arp 协议,由ip 拿到了对方的mac 地址等信息(也就是在这层知道给给谁传输的数据); 确定的链接,后面都是已经知道对方的地址了

ARP 协议怎么走的:

通过ip 区别出 网络(本网络还是 子网络(这个是子网掩码之类的,不再讲述)),

​ 本网络:广播到本网络 对方 ip地址,和mac 地址( FF:FF:FF:FF:FF:FF)

​ 非同一:路由方式找到对方网络(网关之间的链接),由网关 广播 ip 地址和 mac(这个基础是建立在网络中各个主机互相信任的基础上的)

非目标源丢弃,目标源 接收到信息,并记录下 发送方ip 和mac 地址放到缓存中,并且回复 发送方,自己的ip 和 mac 地址。

发送方接收到信息,放到缓存中,然后正式发送数据。

ARP数据具体的流转:

发送方:

网络层 包含 本机ip 和对方ip ;

向下给到 链路层,链路层添加 自己mac 和对方 mac 然后第一次链接不知道对方Mac (写成 FF:FF:FF:FF:FF:FF)包成以太网包;

物理层:数据发送,这次数据很小,相当于探测,所以本网络都发送一遍(本网络的机器都 物理层 都收到这个包);

对方:

物理层 解析出 0,1的包给到 传输层,链路 层进行 解析 ip 和mac 都不是自己的,丢弃包;

是自己的,记录并回复。

数据传输到链路层,这里在包裹上 我们的mac 地址,和对方mac地址(对方的mac 地址已经在ARP 中获取到了),在将数据包到 以太网 包中

然后在走到 物理层,这样物理层通过 0,1将数据发送出去。(ARP 之后就是确定地址传输了,不再是所有网络都发一次数据)

接收方:接到0,1 识别mac 地址,然后解码,找到对方ip 地址 和分包方式,在向上传输到 传输层,解析出对方接口号和 这层的分包方式,然后在向上 解读这是http 协议,解读标头,解读出这是图片,展示出来。

关于 web service 和 hessian

他们都是RPC 框架的一种,是在http/tcp 协议上(跨了一层或多层)的协议

Web service :

Soap:http传输协议+特定的xml

wsdl:文档说明书

Uddi: 发布服务会用到
image

Hession 是 二进制的传输协议,里面自己进行了序列化 和反 序列化。

以上是自己理解的,如果有不对的地方,请各位大佬帮忙指正,在此感激不尽!!!

posted @ 2021-12-11 18:03  张小吉  阅读(614)  评论(0编辑  收藏  举报