专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 网络通信

第10六章 网络通信协议探讨

发布时间:2011-07-03 06:58:59 文章来源:www.iduyao.cn 采编人员:星星草
第十六章 网络通信协议探讨

                    第十六章    网络通信协议探讨

     LINUX的源代码中属于网络的就有近38万行;我必须先花时间彻底解决网络编程问题,再论其它;所以、其它题目暂停更新;或许这样、APO操作系统的改动就会少一些。Internet网络是一个公用网络,要知道林子大了、什么鸟都有;我们必须将安全放在第一。说实在、我仔细看了ipv6协议,给我的印象就是希望越大、失望就越大。总之,我认为ipv6是一个失败协议。本文就是我的观点和设想,当然以后还会修改、不可能一部到位。

    对于网络设备、或称为节点,我们可以归纳为二大类:网络终端设备-主机,和网络中的设备-路由器(路由器、交换机等)。那么,协议应该有3种:主机之间,主机和路由器,路由器之间。好的协议应该是能保证用户通信安全,主机和路由器驱动程序简洁;和路由器高效、高速处理数据包的路径选择、和保证传输质量等。网络安全的首要问题就是杜绝地址假冒、杜绝用户数据包的被窃取。那么,我们必须对链路地址作认证、和注册。

一、网络安全

1、防止同一条链路下的以太网地址假冒

     通常,表示主机的地址就是6字节的以太网地址(前3字节是厂家编码、后3字节是网卡序号);那么IPV6的64位接口地址就显得多余、和浪费网络带宽了。连接一台用户主机,基本上都是二层交换机的一个端口,跟别的主机是隔离的;不再是以前挂在同一条线路上。当一台主机A想使用在同一条链路上的另一台主机B的以太网地址时,交换机发出警告、并给A一个错误报文。不同链路上的以太网地址是可以相同,但在同一条链路上的就不允许相同。6字节的地址分配可以到千万亿个以上,而通常是网卡决定的,不可能相同;相同的情形只会是用户故意修改造成。所以、假冒其它用户的以太网地址只能是影响自己。对于移动用户,可以随机生成以太网地址、或交换机分配。每一台主机打开时,都会向其所属交换机发宣告报文“hello”、包含有主机的以太网地址和主机名字,交换机返回其自身的IP地址、即链路地址、和交换机的以太网地址;并查询端口表,看是否需要刷新。连接几十个用户主机的交换机不一定就代表一个子网地址,一台用户主机也不一定就不是代表一个子网。在一个子网下,理论上可以有千万亿个以上的主机。不管如何,一个子网必定有一台做主管的带路由功能的交换机。我们称一个子网下的所有主机都在同一个网段上。同一个网段上的主机都是互为邻居,一个用户主机想查看其邻居;可以向其子网主管交换机提交申请报文;主管交换机将其管辖下、并在线的邻居信息返回报文;并不一定要通过广播来实行,也不需要什么路由器前缀公告。用户主机的以太网地址、和其所属的主管交换机的64位链路地址就构成了一个IP地址。用户主机想和另一个用户主机通信,那必须知道对方的IP地址才行。因为IP地址就包含了以太网地址,所以、我们不需要ARP协议。这样、我们的IP地址,似乎有很多个;这又能飞天?即使你的MAC地址在不断的做不冲突的变换,你的链路地址是变不了的,最后、还是能追查到。如果用户主机作为网站服务,是不能随意更改MAC地址的;那需DNS服务数据库也相应更改才行。有时候,我们只有用户域名的网站字符串地址;那需要向DNS域名服务器查询。DNS的IP地址通常是基本固定的、在安装网络时,就设置在你的主管交换机上了、或你设置在主机上。在你hello时,主管交换机的返回报文中就有DNS的IP地址。表面上,我们是用网站字符串地址访问网站,实际上、主机要先用存储在主机上的DNS的IP发报文给DNS查询到对应的网站IP之后、才能真正的访问相应网站。经常访问的网站IP地址,我们可以保存到一个临时文件;这样、以后就可先查临时文件中的数据,如果有相关网站IP,就不需要查询DNS了。

2、防止链路地址假冒

    64位的链路地址包含:16位TLA世界级电信公共骨干网接入点,32位NLA下级聚合体、通常是大型ISP网络服务商,16位SLA节点级聚合体、子网地址。一些机构或小型ISP可以申请多个连续的子网地址、或1个NLA(包含64K个子网地址)来构造局域网络。所以、链路地址是通过申请、登记、注册才获得的,每个子网所在的地域位置、创建时间、负责人等信息都备案在上级NLA、或TLA数据库中。可能有人会说,我只要在发送数据包时,将源IP中的链路地址改变为自己设置的链路地址,那就可以起到假冒作用了。这是不行的、你的主管交换机都会在你的源IP中的链路地址打上正确的链路地址印记,并在链路地址最高字符写入你的连接交换机的端口号标记;以便上级更好的做本地交换。如果你是出到大网的,自然有更上级的交换机在出去时、打上正确的链路地址印记。即使你能搞掂SLA,还有上级NLA的监控维护服务器啊;你的SLA总有个连接到NAL的端口吧,一旦进入该端口时的数据包中的源链路地址范围不对,就给记录在案了。用户级交换机通常是链路层、用以太网地址做交换;但主管交换机再往上的、通常是3层交换机了,即是用链路地址做标记交换。就像一个金字塔,汇聚到最顶端的骨干网时,每个端口的数据包数目巨大,但通常都是许多数据包(可能数百万包)整合到一包、标记交换(如ATM等标记交换机)到另一端口。这时,MUT不可能是1518B了;或许是4GE = 128GB。对于网络,我是外行、新手;主要靠想象。所以,本文仅供参考;我会使用APO来设计、规划、模拟路由器,2层、3层、4层交换机,标记交换机,虚拟网络VLAN组服务器,网络编程等等。

     安全、简洁是首要;可惜太多的资料要看了,速度会放慢。学院派啊,学院派;你们的脑袋也太复杂了,整出一大堆协议,有必要吗?那个IPV6啊,就只有源主机可以分段是改进得好外;没有发现什么比较先进的地方。链路地址汇聚、IP4就这样了;接口地址跟以太网地址重复、浪费啊。你说、简化了IPV4的协议字段数,但那个扩展头要复杂得多啊!一个就行了,一个MTU大小的包就含多个扩展头、那代码量太大了。那个指定路径路由器、或中间点路由器扩展头,随着网络设备的发展、除了浪费路由器资源,将是没屁用的功能;还不踢掉,失望。那个版本位段IPV4、IPV6有屁用,各协议组合时、地址有重复啊;浪费。ICMP协议应该是想办法将路由器、网关、主机之间的协议简化、合一啊,却越搞越复杂。只有你们晚上做梦时,可以自我欣赏吧;我是学得一肚子气。安全性,完全没考虑好、搞个复杂的IPSEC有屁用、花拳绣腿。认证、加密无需搞进协议里的,多余。最为失望的是,你们都认识到以字节、或字分段;在64位CPU对数据包组装时、会死人的!搞成64位分段、你们除了吹嘘64位操作比8位的字节要快8倍外,有没有用你们的复杂脑袋想想啊?能否看长远些?能否不鼠目寸光!人类在发展啊,连我一个业余爱好者都在设计用256位的高速总线了,2GE/S = 64GB/S;将来、就是一次操作32字节、甚至64字节,难道、你的IPV6还能更改?设备也要丢掉?只要把分段改为64字节为单位,那都能兼容字节、32位、64位、128位、256位;反之、不成立啊。学院派啊,我无语了。

3、数据包安全

    如果要考虑防止ISP服务商、或一些监控软件对数据包的窃听;那么,只能对数据包内的数据进行加密了。可以使用公开的常用加密算法,也可以定义自己的加密算法、只要通信双方认可就行。

二、网络通信协议:

     网络通信除了标准协议外,也应该能支持用户自定义的协议。路由器主要的任务就是转发数据包,还需实现网络控制消息协议(internet control message protocol)ICMP。不过、ICMP是IP层上的协议,如果不是使用IP包的、还需另外定义控制消息协议;那需要路由器认识才行。TYPE.15-11共5位协议类型,TYPE.15 = 1 是非IP协议:0X8137IPX协议、0X8035为RARP、Ethernet 802.2.LLC 、Ethernet802.2.LLC.SNAP、用户自定义协议、等等。

TYPE.15 = 0 是IP协议:
1、互联网控制报文协议ICMPAPO(还包含IGMP、GGP、EGP、OSPF、RIP、SNMP等),
2、IPA/TCP,  IPA为APO的IP协议,
3、IPA/UDP,
4、IPV4,
5、IPAICMP,ICMP的差错报文、应答报文协议,
6、IPV6,
7-15 其它、或用户自定义。

    路由器、交换机通常只是处理第一项ICMPAPO,其它项是转发。如果数据报有错误时,会做第5项APOICMP的差错报文;如果是路由器组播地址、或目标是路由器地址,也会做第5项APOICMP的应答报文。

     对于用户组播,我希望是全球型的、而非单纯是局域网VLAN。网上的关于组播资料(IPV4、或IPV6),或许我笨了些、真的看了半天、没有明白过来。我想:先不说112位的组播地址,就拿32位组播地址ID来说;假设一个小组可以有64K个用户,那32位就可有64K个小组。我们是不可能知道那一个用户主机、在什么时候加入了那n个小组的。要想实现对组播ID的转发,那用户主机的主管交换机就要建立最少一张表吧;假设主管交换机有1K个用户、那表大小是1K个记录项;每个记录项是用户MAC地址、端口号、组播ID1-IDn、上行端口号。嗯、全世界的小组数不止64K个,好、我们又换种方式:24位的组播标识地址、40位组地址ID、48位小组成员MAC地址。就算、每个小组成员最多能加入64K个小组,那组播ID1-IDn最少要安排64K个列字段啊、一个列字段40位,不算别的,我们就算32位、64K个列字段;那表大小也要64KW * 1K = 64MW = 256MB。路由器、交换机就是查表、识辨就要耗尽资源了,还能做转发?主管交换机的上一级需要的表更大,能实现吗?还是我没考虑到?还是学院派的虚妄?

    我的设想是:用户组播功能从路由器、交换机中剔除,用户组播应该是应用层的事情,而路由器、交换机只是实现二层、三层、四层交换;主要用于转发。路由器、交换机的组播只是有限的组播,局限于周边;或局部节点、或本地节点、或子网节点。而用户组播功能是由某个服务器、或用户主机来实现;这种用户组播功能是相当灵活、强大的;表大小不受限、可以构建许多个组;易于实现权限,组成员管理;轻松构建全球性的VLAN。但组播服务器的带宽要高些,这需要在NLA、或TLA上建立组播服务器才合理。

1)、APO的IP数据包帧结构:头部占2E = 64B,包含MAC、IPA、TCP/UDP/ICMPA字段。

BU64B  EMAC{ // 最小长度2E = 18 + 46 = 64B,最大长度= 1526B

//IP数据包分段单位是2E一片,所以分段数据含头部最多23片、46E = 1472B。

//如果以一片为1E,则含头部最大47E = 1504B,分段数据最大45E = 1440B。

  BU1E MACIP{ // 以太网和IP头部、1E(1行) = 32B;路由器处理入口。

   BU48  MDA; // 以太网目标地址

   BU48  MSA; // 以太网源地址

   BU16  TYPE; // 类型和长度。

//TYPE.15  IPX; 1、0X8137 IPX等非IP协议;0、IP协议。

//TYPE.14-11  TYPEP; 协议类型标识。

//TYPE.10-0  LEN; 数据包字节长度。

   BU8   TTL; // 跳数限制。

   BU8   TOS; // 8位传输优先级、流量类型。

   BU64  SLADD; // 源链路地址。SLADD + MSA = 源IP地址

   BU64  DLADD; // 目标链路地址。DLADD + MDA = 目标IP地址

}

union{// APO的TCP协议头、1E;支持4GB的文件流传输。

   BU32 length; // 文件流总字节长度,不含头部64字节(2E)。

   BU32 sheetoff; // 低26位片偏移、分段单位1片 = 64字节。

//sheetoff.31  MF; 更多分段标志(more fragment),0、最后一个分段

//sheetoff.30-26  tcplen; 5位选项长度。

   BU32  flowlabel; // 32位流标签

   BU20B TCP{ // 标准TCP协议头。

    BU16  SPORT; // 源端口

    BU16  DPORT; // 目的端口

    BU32  seqnum; // 序号。

    BU32  connum; // 确认号。

    BU16  trflag; // 控制标志。

    BU16  windows; // 窗口

    BU16  cheksum; // 校验和。

    BU16  urgentp; // 紧急指针。

    }

}

//

   TCP协议太复杂了,也要结合ICMP做大的改进。希望能改革MTU,为2KE= 64KB;这时,我们的分段单位就可以设为 1片 = 256字节 = 8E;甚至 1片 = 1个扇区 = 16E。
//

union{// APO的UDP协议头、1E,带弱连接;支持4GB的文件流传输。

   BU32 length; // 文件流总字节长度,不含头部64字节(2E)。

   BU32  sheetoff;// 低26位片偏移、分段单位1片 = 64字节。

//sheetoff.31  MF; 更多分段标志(more fragment),0、最后一个分段

//sheetoff.30  RRQ; 以数据包头后的文件名、映射到一个流标签,读请求。

//sheetoff.29  WRQ; 以数据包头后的文件名、映射到一个流标签,写请求。

//sheetoff.28  RRQ; 以流标签、分段偏移、段片数,重传一个段请求。

//sheetoff.27  eroor; 错误标识。

//sheetoff.26  ACK; 确认应答。

//如果sheetoff.30-27= 0,则是正常的DATA传输。

   BU32  flowlabel; // 32位流标签

   BU16  rwmode; // 读、写请求的传输模式。

   BU16  eroorm; // 差错码。

   BU8B  usedata; // 用户自定义。

   BU8B UDP{ // 标准UDP协议头。

    BU16  SPORT; // 源端口

    BU16  DPORT; // 目的端口

    BU16  segnum; // 文件流的段数;不分段时就是数据报长度。

    BU16  cheksum; // 校验和。

   }

}

union{// APO的组播UDP协议头、1E,支持弱连接,由组播服务器处理。

//每个组播UDP包、需要相应的组播服务器转发到其它成员。数据报还是同一份、

//但目标IP地址成为多个;可以任播、组播;组成员必须保存有组服务器IP。

   BU32 length; // 文件流总字节长度,不含头部64字节(2E)。

   BU32  sheetoff;// 低26位片偏移、分段单位1片 = 64字节。

//sheetoff.31  MF; 更多分段标志(more fragment),0、最后一个分段

//sheetoff.30  RRQ; 以数据包头后的文件名、映射到一个流标签,读请求。

//sheetoff.29  WRQ; 以数据包头后的文件名、映射到一个流标签,写请求。

//sheetoff.28  RRQ; 以流标签、分段偏移、段片数,重传一个段请求。

//sheetoff.27  eroor; 错误标识。

//sheetoff.26  ACK; 确认应答。

//如果sheetoff.30-27= 0,则是正常的DATA传输。

   BU32  flowlabel; // 32位流标签

   BU16  rwmode; // 读、写请求的传输模式。

   BU16  eroorm; // 差错码。

   BU8B  usedata;// 用户自定义的IGMP协议,查询、注册、注销等。

   BU8B UDP{ // 标准UDP协议头。

    BU16  SPORT; // 源端口

    BU16  DPORT; // 目的端口

    BU16  segnum; // 文件流的段数;不分段时就是数据报长度。

    BU16  cheksum; // 校验和。

    }

}

}


APO的以太网包格式:14字节、4个字段;IP包格式:18字节、4个字段;数据包格式:最大1518字节。APO的TCP/UDP:32字节、12字段。

----MAC-------  -------IP------- TCP/UDP/ICMPA   

BU48

 BU48

BU5

BU11

BU8

BU8

BU64

 BU64

BU32B

0―1450B

BU32

目的MAC

源MAC

类型

包长

跳数

TSO

源SLADD

目的DLADD

TCP/UDP

数据包

CRC


 

2)、APO的网际信报控制协议(ICMP)

    有2类ICMP报文,应答、差错报文IPAICMP总是起始于数据包的2E包头后面、而信令报文则被封装到类似UDP格式的ICMPAPO协议1E。从设备上分类则有:

1、主机、路由器的宣告、请求报文。

2、路由器、或主机到主机的应答、差错报文。

3、路由器间的协议报文(内部网关协议IGP(包括RIP、IGRP、OSPF、EIGRP、IS-IS等),外部网关协议BGP、也称为EGP)

    为何要分为2类ICMP报文?因为信令报文ICMPAPO是路由器必须检查、处理的,而应答、差错报文IPAICMP对于路由器来说、通常只是转发;而最终是由目的节点来处理。对于应答、差错报文,我们往往要保留TCP/UDP/ICMPAPO的头部、以便节点知道缘由、从而方便处理。

    交换机都有路由功能,二层交换机的路由实现较为简单一些;三层交换机就能实现大部分的路由功能。二层交换机是以MAC地址作交换、而三层交换机是以链路地址作交换。交换机必须实现的基本功能有:1、包头长度检查。2、校验和检查。3、本节点的地址、设备编号、时间戳提交。4、跳数处理。5、出错时、发出差错ICMP报文。6、转发(二层是据MAC地址,三层是据链路地址)。7、广播处理。8、对本节点的请求、应答处理。9、在一个子网内MTU最少要做到8KB。10、

三、ICMPAPO协议

    每一个子网必须有一台主管交换机,它保存有子网下的所有主机MAC、端口表。一个子网不要超过2K台主机,全球子网地址可达到16E+18;那么庞大的子网地址数量,没必要一个子网带太多的主机。用户开机时,会有一个主机宣告ICMP报文发送;这虽然是一个路由器广播报文,但也只是到达主管交换机路径上的相关交换机会处理,并更新它们的MAC表;主管交换机还要做MAC地址是否重复的处理,重复则回发差错ICMP报文。泛洪广播会过多的浪费带宽、应避免。邻居请求ICMP报文,这虽然也是一个路由器广播报文,但也只是连接有用户主机端口的交换机才会应答;而不是子网下的所有交换机都应答;避免重复的邻居信息。交换机、路由器也同样有一个宣告开机报文,和邻居信息请求报文;我们不能将它们封装在一起吗?探查ICMP报文是探查从源到目的的路径上所有路由器的IP地址、时间戳、MTU、跳数等信息,应可以应用到主机、路由器,它们的两两之间;而非单纯的主机到主机。

BU64B  EMAC{ // 最小长度2E = 18 + 46 = 64B,最大长度 = 1518B

BU1E  MACIP; // MAC、IP头32字节。

union{// APO的ICMPAPO协议头、1E。

 


}

}


待续。。。

               

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: