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


     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位、512位;反之、不成立啊。学院派啊,我无语了。


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,

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字段。

APO中,带连接的UDP协议和TCP的合一;所以,除了无连接的ICMP外,APO就只有一个TCP协议了。

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-26  request; 上层协议的请求方法标识。Read、write、GET、

// POST、PUT、DELETE、TRACE、CONNECT、PATCH、ABOR、ACCT等等。

   BU8   trflag; // 传输控制标志。

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

// trflag.6  DF; 分段标志:1、不分段,0、可以分段

// trflag.5  MULTICAST; 组播标志,1、有效。

// trflag.4  SIGLL; 信令标志:1、信令报文段,0、正常的DATA报文段传输。

// trflag.3  RQ; 请求标志(SIGLL=1有效):1、请求报文段,0、响应报文段。

// trflag.2 SIGI; 1、连接信令,0、应用层协议的信令。

// trflag.1-0 SIGC; 关于连接信令的标识,0、丢失的数据包信息,1-3备用。

   BU24  flowlabel; // 24位流标签,标识不同的数据报。

   BU8   conflag; // 连接控制标志。

// conflag.7 CWR; 用来表明它接收到了设置ECE标志的TCP包。

// conflag.6  ECE; 网络拥挤标志。

// conflag.5 URG; 1、紧急指针字段有效。

// conflag.4  ACK; 1、确认应答。

// conflag.3  PSR; 1、推送,不等组装、直接提交报文段到应用层。

// conflag.2  RST; 1、复位连接。

// conflag.1  SYN; 1、请求建立连接。

// conflag.0  FIN; 1、释放连接。

   BU24  servesockfd; // 24位服务端的文件号。  

   BU16  SPORT; // 源端口

   BU16  DPORT; // 目的端口

   BU16  cheksum; // 校验和。

   BU16  urgentp; // 紧急指针。

   BU16  tranmode; // 高层协议的传输模式。

   BU16  staterp; // 高层协议的状态响应码,或错误码。

   BU32  usedata; // 用户自定义、或高层协议使用、或组播域定义。

}

union{ // APO的ICMPAPO协议头、1E,无连接。

   BU8   imcptype; // 报文类型:宣告、邻居请求、探查。

   BU8   segnum; // 路由交换机附带数据项印记指针(项数、每项16字节)。

   BU16  devtype;// 源设备类型(主机,2-3-4层交换机等)、网络中的级数。 

   BU32  PTID;  // 源设备的进程号(或端口号)、线程号(或标识)。

   BU32  times; // 报文发送时的时间戳us。

   BU16  MTU;   // 源设备的MTU。

   BU16  cheksum;// 校验和。

   BU16B icmpdata; // 第0项的附带数据,后面接着是更多的附带数据。

  }

}

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

 



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、在一个子网内MTU最少要做到64KB。

    到此、在APO网络中,将节点、路由器等广播地址全部去掉;只有用户层的组播功能,路由器、交换机不再处理广播数据报。要知道交换机、路由器是交换、转发数据报,不是广播机!不要连姓什么都忘了。


三、ICMPAPO协议


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


    我们的目标是简化路由器、交换机代码量,而非让他们执行许多垃圾协议。那个全网广播命令、只有白痴才会去实行。我们应该彻底清除掉所有广播地址,清扫掉这些扰乱市场的因素;还网络一个清净,网络只有点对点通信;用户组播实质还是用点对点通信在用户层完成的。


BU64B  EMAC{ // ICMPAPO是节点必须检查、执行的协议。

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

union{// APO的ICMPAPO协议头、1E,无连接。

   BU8   imcptype;// 报文类型:宣告、邻居请求、探查。

   BU8   imcpcode;// 代码号。 

   BU16 devtype;// 源设备类型(主机,2-3-4层交换机等)、网络中的级数。 

   BU32 PTID;  // 源设备的进程号(或端口号)、线程号(或标识)。

   BU32  times; // 报文发送时的时间戳us。

   BU16  MTU;   //源设备的MTU。

   BU16  cheksum;// 校验和。

   BU16B  icmpdata; // 用户自定义的数据。

  }

}


1、链路地址汇聚三层交换机


     图1,假设我是一个ISP网络服务商,获得了一个NLA下级聚合体地址,具有64K个的子网地址;三层交换机的上级端口2个、下级端口48个。我们先不考虑备用交换机,和非线性分割;那么A层(顶端、只需一台)交换机有47个下级端口、每个端口线性分割子网地址后,为包含1394个子网地址的子网集束;第48端口为余下的18个子网地址用于服务器。那么,B层的47个交换机的每个交换机的29个下级端口连接下级的C层交换机(每个C层端口包含48个子网地址集束),有2个端口是单子网地址、直接连接子网主管交换机;余下的17个端口用于B层交换机互连,以减少跳数。到达B层某个交换机j的数据包,如果目的地是B层的另一个交换机i、如有互联、那么一跳就行了,否则需经A层交换机做2跳。C层交换机的48个下级端口(每端口一个子网地址)就连接到子网主管交换机。用户主机要发数据包到ISP网络外,那么、需要经0-3级到达其子网主管交换机(用户主机0级、hub是1级、用户接入交换机是2级、主管交换机是3级)、再2-3级(C、B、A,或B、A)才能到达外网。


    这样一来,三层交换机将是非常简洁,路由表最多48项;每一项记录是:端口号、子网集束(16位的子网开始地址、结束地址)。到达交换机的数据包,先查NLA地址、不同则往上级端口转发(如果从上级端口来的、则直接抛弃),相同、则用子网地址查路由表、没有符合项则往上级端口转发(如果从上级端口来的、则直接抛弃);有符合项、则按照相应端口号往下级转发。骨干交换机也是类似的,不过是用更大的子网集束NLA地址来判断吧了。整个网络基本上就是2-4层交换机,网关内、外等协议全部简化成2对ICMP报文类型:宣告、应答,和邻居请求、应答。那些垃圾的、人为复杂的协议通通清掉。


2、二层交换机

    就是用MAC地址来转发数据包,每个主管交换机只有一个子网地址,最多管理2K个用户主机。用户主机可能通过HUB端口才连接到上一级2层用户接入交换机,所以交换机的每个下级端口会有一张端口MAC表,每项是:设备类型级数、活动标志、MAC地址、活动定时器、主机名字(最多10字符)等。对于主管交换机最多2K项;24口交换机也就24项;48口交换机也就48项。对于一个子网,网内的通信需要更大的数据报(64KB);64KB = 2KE,包头只占数据报的0.1%。用户主机发一个请求邻居报文,其主管交换机就返回一个大的数据包、包含了子网上所有活动邻居的信息;简单多了。对于路由交换机的情形略有不同。在三层交换机时、它的宣告,其上级路由交换机会返回一个链路地址前缀、和子网束报文;接着、它需要扫描下级端口,并为下级端口分配子网地址束;这也是属于一个强权型请求邻居报文;通常A层、B层是手工分配(几百万用户、只需手工分配50台交换机),C层是每个下级端口一个子网地址的自动分配。在二层交换机时、也类似,不过换成是MAC地址。对于交换机、宣告是上级端口的分配,请求是处理下级端口分配。对于用户主机、宣告是其所在用户交换机端口的刷新设置,请求只有邻居请求。

3、用户主机


    用户主机可发出宣告(类型0)、邻居请求(类型1)、探查(类型2)、这3种报文,而交换机、路由器只是能发前2种。探查请求是由用户主机发出的报文,但路由器也需要在上面打上印记。这3种报文都对应有应答报文,它们在IPAICMP协议。


四、IPAICMP协议


BU64B  EMAC{ // IPAICMP是目标节点必须检查、执行的协议。

  BU2E  MACIPTUI; // MAC、IP、TCP/UDP/ICMAPO头64字节。

  BU1E  IPAICMP{ // APO的IPAICMP协议头、1E,无连接。

   BU8   imcptype;// 报文类型:宣告、邻居请求、探查的应答0-2。

//差错报文类型:3、目表不可到达,4、超时,5、源端抑制,6、参数问题。

   BU8   imcpcode;// 代码号。 

   BU16 devtype;// 发报文节点设备类型、网络中的级数。 

   BU32  times; // 报文发送时的时间戳us。

   BU16  MTU;   //发报文节点的MTU。

   BU16  segnum; // 附带数据项指针(项数)。

   BU10Z  jdname; // 发报文节点的设备名字(最多10个字符)。

  }

}

主机宣告的应答:经过的交换机,做刷新端口、MAC表,并置端口为活动状态;之后、往上级交换机转发报文。主管交换机查是否MAC地址重复,是发参数问题差错报文;否、回发链路地址、填写IPAICMP报文头,刷新端口、MAC表,并置该MAC为活动状态等。

主机的邻居请求应答:经过的交换机,往上级交换机转发报文。主管交换机将网段内所有活动的MAC地址、设备类型和级数、MTU、设备名字、等每项1E,填写IPAICMP报文头、打包发往源主机。

主机探查的应答:经过的交换机,在IPAICMP协议头后,据segnum附带数据项指针、填写8字节的:节点设备类型和级数、MTU、时间戳,并使segnum+、之后转发;如果是目标节点、则改写协议类型ICMPAPO为IPAICMP后,并填写IPAICMP报文头、回发数据包。这样,返回路径的交换机不会再处理该报文、只是转发。

匆匆忙忙、写得我自己都不满意,没法、下章进入网络编程;以后再改。


        

第十六章 网络通信协议探讨相关推荐

  1. UNIX环境高级编程 学习笔记 第十六章 网络IPC:套接字

    socket的设计目标之一:同样的接口既可以用于计算机间通信,也可以用于计算机内通信.socket接口可采用许多不同的网络协议进行通信,本章讨论限制在因特网事实上的通信标准:TCP/IP协议栈. 套接 ...

  2. 《UNIX环境编程》第十六章--网络IPC:套接字

    Contents 套接字接口 套接字描述符 寻址 字节序 地址格式 地址查询 绑定地址 建立连接 数据传输 套接字选项 带外数据 UNIX域套接字 使用套接字的示例 面向连接的ruptime 无连接的 ...

  3. 第十六章 网络高级编程

    尽管大多数应用层协议都是基于TCP的,但除了编写像QQ服务器那样的服务端应用,很少直接使用 TCP Socket 进行编程.一般都编写基于应用层网络协议(HTTP.FTP等)的应用都是直接使用封装相应 ...

  4. 第十六章 ConvNeXt网络详解

    系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网 ...

  5. 【JAVA SE】第十六章 进程、线程、同步锁和线程锁的简介

    第十六章 进程.线程.同步锁和线程安全问题 文章目录 第十六章 进程.线程.同步锁和线程安全问题 一.进程 1.基本介绍 2.进程模型 二.线程 1.基本介绍 2.线程的生命周期 3.线程的优先级 4 ...

  6. Java基础学习——第十四章 网络编程

    Java基础学习--第十四章 网络编程 一.网络编程概述 计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信 ...

  7. 鸟哥的Linux私房菜(服务器)- 第十六章、文件服务器之二: SAMBA 服务器

    第十六章.文件服务器之二: SAMBA 服务器 最近更新日期:2011/07/29 如果想要共享档案,在 Linux 对 Linux 的环境下,最简单的方法就是透过 NIS 这玩意儿了!至于 Wind ...

  8. 软件测试之第六章 网络基础知识

    第六章 网络基础知识 一.计算机网络基本概念与分类 1 计算机网络的定义 计算机网络是在网络协议的控制下,通过通信设备和线路将分布在不同地理位置,且具有独立功能的多个计算机系统连接起来,通过网络操作系 ...

  9. 【正点原子MP157连载】第二十六章 DS18B20数字温度传感器实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

最新文章

  1. 腾讯斥资3.17亿美元增持B站 持股增至12%
  2. 数据库优化:Mysql慢查询的定位和分析
  3. 1059 Prime Factors (25 分)【难度: 一般 / 知识点: 分解质因子 】
  4. 我为什么要学习C++反汇编
  5. IE6不支持min-heigt的bug解决的办法
  6. es6新特性之Set
  7. android打开网络连接失败怎么办,《我叫MT Online》安卓版网络连接失败怎么解决?...
  8. hive指定hadoop执行队列
  9. Enterprise Library 缓存应用程序块快速入门
  10. Java Script基础(七) HTML DOM模型
  11. MySQL数据库笔试题附解析 (1)——每天学一点,天天都进步
  12. Java通过月份获取当月工作日
  13. 【DBA100人】Payso张耀辉:学材料专业出身的他转身做了“码农”
  14. Github上设置小图标/小徽章
  15. 在网页中插入flash的方法
  16. 灵魂拷问:我的口红什么色?为此,我做了一个口红识别神器
  17. 用一片74LS90实现一个六进制计数器,并画出实验连接线路图。
  18. uboot配置早期debug uart
  19. Visual Studio 2019许可证授权
  20. 回文数(指正序(从左向右)和倒序(从右向左)读都是一样的整数)

热门文章

  1. dynamo怎样由线生成体_令人惊呼的“衡水体”答题卡,难怪人家考高分!(附练习方法)...
  2. 开源页面可视化平台:tmagic-editor
  3. C语言关于函数学习的总结
  4. 村田电容电感的LTspice,HFSS,AWR,ADS,Genesys模型下载
  5. 活字格调用(6612345网页打印浏览器)打印无响应的解放方法_20221215_112738
  6. 数据仓库在税务系统的应用现状
  7. yipin project 05
  8. Promisification
  9. 46个不可不知的常识收藏
  10. 计时器模仿地球绕太阳圆周运动