非鱼's profile谁可共鸣PhotosBlogListsMore Tools Help

Blog


    July 28

    最近买了几本书,特别是无线网络的方面的书,有中国人写的,有美国人写的。另外,还从网络上下载了一些资料是台湾人写的。

    从这些资料,我们可以看出,大陆的人写书,水平真TMD的差,就是把802.11的规范翻译了一下,而且很多地方都翻译的不好,甚至是错误,我敢确定,这些写书的人肯定是对这个协议是不懂的。自己都不同,仅仅是翻译成中文,别人就能够看懂吗?

    看看美国人写科技资料,真的让你佩服,什么叫做用心去写?看看美国人写书就知道了。美国人写科技方面的书有如下几个特点:

    1,  有心去写

    2,  深入浅出

    3,  擅长说明,能够把一个非常复杂的道理,说明的非常简单

    4,  从整体到局部细节,首先给你一个宏观的整体感,然后到细节步步检讨。

    5,  按照理解的思路和方法写起,

    反观中国人写书,简直一塌糊涂,有如下特点:

    1,  教条式说教多,不是循循善诱

    2,  很多逻辑跳跃比较大,其实是作者本身都打不通该逻辑。

    3,  懂得人不想看,需要看得人看不懂

    4,  拼凑,没有完整的系统

     

    总之,外国人写书是用心去写,中国人写书为了写而写,为了数量而写。

    July 25

    重拾理想

    2001年研究生毕业,到现在已经8年了,工作以后,时间过的真快,感觉这8年好像是弹指一挥间的事情。很多当年的理想已经抛弃,现在好像就是被现实的压力压住自己,喘不过气来,一直就是赚钱、赚钱,买房子,买车子。其实这些东西对我来讲有很多意义吗?没有!

    对于现在所在的公司也是这样的,公司真的是已经没有理想,整天就是在生存的挣扎中挣扎。忘了很多很多的东西。例如,你可以问很多人,我们公司的理想是什么?你在公司的理想是什么?很多人都会很茫然,一句话,就是赚钱。这个能叫理想吗?或许也是吧,现实很无奈,就是为了“活着”吧。

    我想起来当年共产党的发家史和“胡子”的不同。先说说胡子吧,胡子之所以能够聚集很多人,也是有他的原则和人格魅力的。很多电影里面都有这样的场景,老大往椅子上一坐,把酒一端,“兄弟们,跟我干,我们一定会有肉吃和有酒喝的”,共产党不同,共产党一开始就是有组织有规模,有理想有主义,这个主义是什么?就是马克思主义,这个理想是什么,就是实现共产主义。这帮泥腿子的奋斗目标不单有肉吃有酒喝,还在干一番伟大的事业,就是为了人类的解放而努力奋斗。

    这就是共产党的成功的地方,也是老毛成功的地方,如果没有这个理想,那么老毛根本无法团结这么多人在一起。比如,你说有酒喝有肉吃,在你这边,我需要打需要拼才有肉吃,跑到老蒋那边,我不需要打,也不需要拼了,也肉吃了,我为了要和你干?所以,共产党成功的一点,就是给了大家一个高尚的和纯洁的理想,这是非常关键的。

    环顾我们公司,我们现在理想是什么?老板阐述的很清楚,就是我们要打败精英打败FIC打败蓝天,成为二线厂里面的第一名。这个很多优秀的员工都不赞成,为什么呢?第一,要打败二线厂很简单,就是,我现在跳槽到一线厂商,例如ASUSOK了,我马上就把ECS打败了。第二,为什么要打败人家,人家做的好好的,为这么多穷人做了那么多贡献,我们为什么要做一个搅局者,去把人家打倒呢?所以,我们确实“师出无名”!

    师出有名,古往今来都是这样的,例如,诸葛亮出师打曹操,要写出师表,表明理想和决心,要光复汉室。就连袁绍打曹操也是这样,请了一个牛人写了一篇檄文。这样,我们要真的是打ECS,我们的檄文是什么?

    这些问题,如果解决不好,所有人都是为了挣钱,那么我们就是胡子,打家劫舍,抢到ECS等的东西,我们大家就有肉吃有酒喝。这样,一部分有理想的优秀人士慢慢的不齿与我们为伍就离开我们了,我们最后就剩下一帮乌合之众,成不了大器的。

    所以,如果我们想要不成为乌合之众,那么我们必须重新建立我们的理想,我们曾经有没有理想的,其实是有的,2003年,我们凝聚力了一批优秀的热血青年,我们高喊着要“制造世界上最好的笔记本”的愿望,忘我的工作。其实,理想就是理想,理想不一定能够实现的,例如共产主义。但是,理想一定要是一个目标,我们做事的价值观和依据目标都要从这个理想来,明显,现在我们的做法是与原来的理想背道而驰的,所以,不适合再做的我们的理想了。

    那么我们可以拿什么来做理想呢?“让12亿穷人用得起电脑”“让世界上所有人都用顶星电脑”?这个需要仔细和认真考虑。

    July 18

    狼性文化和疯狗文化

    企业文化,大家经常讲,特别是大家经常讲狼性文化。例如,某某领导对待员工过于严厉,他会说,我们这是狼性文化。我觉得这是对狼性文化的误解,为什么这样说呢?

    大家一提到狼,马上就想起东郭先生和狼,狼和小羊等故事,马上就想到狼的凶残特性。我觉得这纯粹是对狼性文化的误解,这样为什么叫狼性文化,而不叫鳄鱼文化,或者狗熊文化呢?

    为什么叫狼性文化,主要是指狼的目标坚持和不放弃的特性。也就是说狼为了一个猎物和目标,可以几天几夜的追逐,不达目标,我们誓不罢休。

    这才是狼性文化,如果没有目标的文化,只能叫疯狗文化。

    关于局域网内部机器上网问题

    我们知道,对于小公司,一般都是设定CIP地址,而且一般都是使用192.168.0.X或者192.168.1.X的形式。这个问题我一直有一个非常大的疑惑就是:我们知道,Internet上网络通讯一般都是使用IP数据包来传送的,例如,我们访问新浪网,是通过访问58.63.236.49完成的。也就是说,我给新浪发IP,目的地址写的新浪的IP,而新浪给我回信息,目的地址是我的IP,加入我的IP192.168.0.1,在我们互联网系统中,这样的IP太多了,新浪给我的信息怎么能够达到我的机器的呢?

    这个问题困扰了我很久,现在我基本上慢慢解开了。就是因为我们的局域网一般是通过一个网关接入广域网,而关于网路由的方法就是不是靠IP地址实现的,例如靠PPP数据包实现的,那么,如果我访问新浪,广域网会把我和新浪的服务器之间建立PPP链路,这样,新浪的服务器给我发送的数据包就是靠这个PPP链路回到我的局域网的网关,我们的局域网网卡去掉PPP的封装,检查到这个IP地址是我的,网关就会把这个IP数据报发送给我的机器,这样,我就可以和新浪的服务器通讯了。

    这也说明,在广域网上的机器,必须是不同的IP,这样别的机器才可以找到你。而局域网内部的机器,可以和别的局域网重复,但是这样,你只能访问别人和接受别人的回应,而别人是找不到你的。

    ADSL是如何上网的

    我们知道,一般上网信息都是封装成TCP协议,然后在封装成IP协议,也就是表现为IP数据包的形式。后面,我们需要数据链路层和物理层协调工作,把这个数据包发送到我们的终端。底下是如何做的呢?

    我们首先我们网卡先和ADSL的控制器建立连接,这就是通过连路程的PPPoE协议建立起来的。建立这个链路层之后,网卡就可以和ADSL的控制器通讯了,然后网卡的数据链路层在通过ADSL的电话线端和电信局的交换机(服务器)建立一个连接,这个就是PPP链路。这样,我们发送的IP数据包,就会通过网线,发送到ADSL控制器,ADSL取出PPP封装后的IP数据包,然后使用电话线,交给电信局的交换机(服务器)。

    为什么我们需要PPPoE呢?如果把PPP封装后的数据报直接发送给ADSL控制器难道不行吗?这样也是行的的,但是如果一个Ethernet局域网系统中如果有多个ADSL控制器,这样的方法就行不通了。(我的疑惑:难道仅仅就是这个原因?)

    另外,就是PPP的必要性,我们假设IP数据包,直接交给PPPoE,这样就会被ADSL收到,ADSL控制器再把数据转换成电话线上传输的方式,交给交换机不就OK了?为什么我们必须PPP这个东西呢?关键是,我们知道数据链路层的数据传输,必须是有MAC地址的,对于局域网内部的机器,我们可以使用IP层的ARP协议,根据IP数据报的IP目的地址来找到连路程所发送的MAC地址,但是由于数据ADSL不是一个工作在IP层的设备,所以,其没有IP,所以,就无法使用ARP协议登记其MAC地址,所以,我们必须有一个协议找到这个MAC地址,这就是PPPoE的作用了。

    然后,我们再进一步讨论为什么需要PPP

    按照道理,我们只需要把IP数据包交给ADSL控制器,然后由ADSL进行PPP封装,然后广域网的交换机把PPP封装的数据包送给接受者的ADSL控制器之类的东西,接受者然后就可以收到该IP数据包了,为什么在计算机段就需要封装呢?第一,因为ADSL不是工作在IP层,因此,其根据就不是哪些IP是往外部传的,哪些是内部的,所以这样,计算机段就自己进行判断,如果是网内,则不封装PPP,如果是网外,就进行PPP封装。

     

     

    July 08

    从前有座山,山里有座庙

     

    从前有座山,山里有座庙,庙里有个老和尚,在讲故事给小和尚听,讲的是: 从前有座山,山里有座庙,庙里有个老和尚,在讲故事给小和尚听,讲的是:…………

    这个故事无聊吗?很无聊,也很不无聊,因为这样的故事,整天在我们身边发生。

    我们公司就是这样,每年都在重复同样的故事,重复同样的错误,指定同样的目标,结果是,我们每一年每一天都没有进步,我们缺乏反省的勇气,缺乏创新的能力。

    N年前,老板就是我们一定要大家一起努力,把XXX项目做成一个示范项目,做成一个样板项目,可以,这样的热度过了两个月几乎就忘了。

    N年前,我们就分析出货目标没有达成是因为缺电池缺屏缺塑胶件,N年过去了,我们依然还是缺电池缺屏缺塑胶件。

    N年前,我们就通过计算甲客户这个月能够出多少,乙客户能够出多少来计算我们的销售额,结果没有一次我们计划是准的,N年后,我们依然还是这样的计算,结果我们还是没有算准。

    N年前,我们就整天提流程啊,改造啊,结果流程是越理越乱,效率是越来越低下,员工流失是越来越严重。

    N年了,我变化了多少?我是否还要重复昨日的故事?

     

    一码归一码

     

    现在公司内部,充满很多的混乱,逻辑混乱。例如,有的员工迟到了很久,问他原因,他说自己工资太低了。例如,项目Delay,他说公司阿姨做饭太难吃了。再如,项目做的Bug太多了,他说公司加班难调休。

    这种思想是从哪里来的?为什么我们公司会出现这样的问题?是我们管理层平时思想沟通不到位?还是其他?

     

    July 04

    NDIS(NetworkDriverInterfaceSpecification)

     

     

    NDIS(NetworkDriverInterfaceSpecification)是网络驱动程序接口规范的简称。它横跨传输层、网络层和数据链路层,定义了网卡或网卡驱动程序与上层协议驱动程序之间的通信接口规范,屏蔽了底层物理硬件的不同,使上层的协议驱动程序可以和底层任何型号的网卡通信。

    NDIS为网络驱动程序创建了一个完整的开发环境,只需调用NDIS函数,而不用考虑操作系统的内核以及与其他驱动程序的接口问题,从而使得网络驱动程序可以从与操作系统的复杂通讯中分离,极大地方便了网络驱动程序的编写。另外,利用NDIS的封装特性,可以专注于一层驱动的设计,减少了设计的复杂性,同时易于扩展驱动程序栈。

     

     

           NDIS支持三种类型的网络驱动程序:

        网卡驱动程序(NICdrivers):网卡驱动程序是网卡与上层驱动程序通信的接口,它负责接收来自上层的数据包,或将数据包发送到上层相应的驱动程序,同时它还完成处理中断等工作。

        中间驱动程序(Intermediateprotocoldrivers):中间驱动程序位于网卡驱动程序和协议驱动程序之间,它向上提供小端口(Minport)函数集,向下提供协议(protocol)函数集,因此对于上层驱动程序而言,它是小端口驱动程序。对于底层的驱动程序,它是协议驱动程序。

    协议驱动程序(Upperlevelprotocoldrivers):协议驱动程序执行具体的网络协议,IPX/SPXTCP/IP等。协议驱动程序为应用层客户程序提供服务,接收来自网卡或中间驱动程序的信息。

    我们开发的防火墙采用的是中间驱动程序。

    中间驱动程序在协议驱动程序和小型端口驱动程序之间插了一层,使得来自上层的发送包和来自网络的接收包都必须经过它而进行传递,从而可以用来拦截较为底层的网络数据包,在此基础上进行过滤、加密、压缩、网络地址转换等操作。由于中间驱动程序实际上不是从最下层直接截获的比特流,而是经过了NDIS,所以实际的包没有了CRC(循环冗余校验码),这部分已经被NDIS过滤掉了。基于这个原因,可以说中间驱动程序的大概位置是在数据链路层和网络层之间。中间驱动程序在数据链路层和网络层之间对所有的数据包进行

    检查,功能强大,但编程接口比较复杂。

    基于IMD包过滤防火墙系统总体框架:

    1)基于IMD的包过滤驱动程序PFilter.SYS

    位于核心态,运行效率高,主要用于在NDIS中间驱动程序中拦截所有的网络数据包,根据过滤规则判别是否接收或发送数据包。同时处理上层应用程序发送的IRP,可以将数据包直接传送到应用程序、设置网卡的工作模式等。

    2)应用层的网络监控与防火墙软件Firewall.EXE

    负责提供用户界面,为用户提供方便的服务,选择底层包过滤驱动程序监控网卡,读取和过滤数据包,支持对常见协议和地址的过滤设置,用树状视图有层次地显示以太数据帧的解码信息,以十六进制的形式显示整个数据包的数据转储,对捕获到的数据包的存储和加载等。

     

    包过滤驱动程序以虚拟网络设备驱动程序的方式“楔入”操作系统的协议堆栈,能截获所有进出系统的网络数据包,从而解决数据包过滤的核心问题。

    此次驱动程序的开发主要基于Windows 2000 DDK中的NDIS中间驱动程序例程Passthru,以此为框架进行编程,在此基础上通过改写接收和发送包函数、增加与用户态应用程序通信等功能去实现。驱动程序在核心态具备设置、请求传递、包截获和包管理等有效手段,向上可以通过系统为设备I/O提供的统一界面与用户态应用交互。

    当应用层程序要发送数据时,不是直接将数据包发送给NdisSend函数,而是先发送给包过滤驱动程序的MPSendMPSendPackets函数,可以在这两个函数里截获并处理所有要通过网卡向外发送的数据包。

      当外部数据包到达网卡时,首先由PtRequestComplete函数处理来自网卡外部数据包的请求,接着由驱动程序中的PtReceivePtreceivePacket函数接受所有来自网卡的数据包,并将数据包读入数据包缓冲区,可以在两个函数里截获并处理所有系统接收到的来自网卡的数据包。

     

    在拦截数据包过程中,如果读取等待队列中有上层应用程序请求读取数据包的IRP,则从读取等待队列的首部取出一个IRP,并将被截获的数据包拷贝到该IRP所指定的缓冲区中。

    在驱动程序中,使用注册设备接口的方法创建设备对象和符号链接,并注册分发例程接口,实现与上层应用程序的通信。

     

    上层应用程序在Visual C++6.0中利用MFC类库实现,用户界面友好。采用MFC SDI接口,在文档类中存储一些截获的简单统计信息,截获的数据以及数据包的解析信息,并在几个视图类中分别显示这些信息。

    整个应用程序的核心部分时对底层驱动程序截获的数据包的读取。由于网络中流动的是海量数据,并且数据的流量是随机的,因此可能存在丢包的情况。为了能够保证处理所有的包,或者保证足够低的丢包率,必须尽可能在最小包传输周期内将其处理完毕。应用程序利用Win32的重叠I/O操作和完成端口以及多线程特性极大地提高了运行效率,在测试运行(100M局域网)中可捕获ICMPUDPTCP等数据包。

    关于产业冬天的感想

     

    上次烟台开会,周其仁教授分析了国内的局势,目前,美国次级债务、人民币升值,高油价和通货膨胀、工人工资提高等因素,已经导致了国内制造业和IT行业已经到了一个冬天。

    冬天到了,我们应该怎么办?第一,想想办法度过这个冬天,例如,我们应该储备足够的粮食,买厚厚的棉衣,这样才能够抵御冬天。

    除了抵御冬天以外,我们还应该珍惜这个冬天,因为气候变化了,所以,在这个变化中间会有很多大的机会存在,例如,冬天很多对手会被冻死,这正是我们抢夺他们粮食的好时候,或者,因为很多人都需要棉衣,所以,这个时候,是我们买棉衣最好的时候。

    针对同一件事情,悲观的人感慨困难,乐观的人发现机会。乱世出英雄,如果没有变化,可能英雄就永远被埋没了。

    玩转网卡MAC地址

    玩转网卡MAC地址

    [编者按]人们经常感叹世界上没有完美的事物,但又忍不住努力去挑战完美极限,因为人们知道追求完美,取得进步的过程才真的是一种完美体验。我们众多的网络爱好者在探讨技术方面更是如此,这也正是我们所应鼓励的学习方式!

      正文:  


      看过赵馨发表在天极的文章《MAC地址完美攻略》,觉得作者思路清晰,文章结构简练,技术观点明确,但是对某些技术细节的描述似乎单薄了点,容易引起误会,技术在不断的进步,本文从设备原理描述和网络应用的角度重新阐述了作者对MAC的认知,和赵馨的文章中某些提法不相同,希望起到抛砖引玉的作用。网卡和交换机是常见的组网设备,网卡和交换机功能的实现需要MAC支撑,操作系统依赖网卡驱动程序和MAC打交道,进而通过网卡和交换机等网络设备完成网络通讯,MAC在网络安全中也扮演了重要角色。


      一、网卡、MAC控制器和MAC地址


      提到MAC不得不涉及网卡的工作原理,网卡工作在OSI参考模型的数据链路层和网络层。这里又出现了一个概念“OSI参考模型,在这个模型中定义了网络通讯是分层的,分别是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。以太网数据链路层其实包含MAC(介质访问控制)子层和LLC(逻辑链路控制)子层。


      



      物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。以太网卡中数据链路层的芯片一般简称之为MAC控制器,物理层的芯片简称之为PHY。许多网卡的芯片把MACPHY的功能做到了一颗芯片中,比如Intel 82559网卡的和3COM3C905网卡。但是MACPHY的机制还是单独存在的,只是外观的表现形式是一颗单芯片。当然也有很多网卡的MACPHY是分开做的,比如D-LINKDFE-530TX等,原文中说“MAC地址对应物理层是不确切的。

      通常提到的MAC指狭义的MAC地址,其实在网卡中,一块以太网卡MAC芯片的作用不但要实现MAC子层和LLC子层的功能,还要提供符合规范的PCI界面以实现和主机的数据交换。 以太网MAC芯片的一端接计算机PCI总线,另外一端就接到PHY芯片上。MACPCI总线收到IP数据包(或者其他网络层协议的数据包)后,将之拆分并重新打包成最大1518Byte,最小64Byte的帧。这个帧里面包括了目标MAC地址、自己的源MAC地址和数据包里面的协议类型(比如IP数据包的类型用80表示)。最后还有一个DWORD(4Byte)CRC码。

    网卡上有一颗EEPROM芯片,通常是一颗93C46。里面记录了网卡芯片的供应商ID、子系统供应商ID、网卡的MAC地址、网卡的一些配置,如SMI总线上PHY的地址,BOOTROM的容量,是否启用BOOTROM引导系统等东西。

      认识一下它们


      



      

    MACPHY集成在一颗芯片的以太网卡

      ①RJ-45接口②Transformer(隔离变压器)③PHY芯片


      ④MAC芯片⑤EEPROM⑥BOOTROM插槽


      ⑦WOL接头晶振电压转换芯片


      ⑩LED指示灯



      二、交换机、MAC地址表和MAC地址学习

      对于网络交换机来说,MAC地址表是其能否正确转发数据包的关键,为此,协议标准RFC2285RFC2889中都对以太网交换机的MAC地址表深度和MAC地址学习速度进行专门的描述。 MAC地址表显示了主机的MAC地址与以太网交换机端口映射关系,指出数据帧去往目的主机的方向。当以太网交换机收到一个数据帧时,将收到数据帧的目的MAC地址与MAC地址表进行查找匹配。如果在MAC地址表中没有相应的匹配项,则向除接收端口外的所有端口广播该数据帧,有人将这种操作翻译为泛洪(Flood,泛洪操作广播的是普通数据帧而不是广播帧)。在我们测试过的交换机中,有的除了能够对广播帧的转发进行限制之外,也能对泛洪这种操作进行限制。


      而当MAC地址表中有匹配项时,该匹配项指定的交换机端口与接收端口相同则表明该数据帧的目的主机和源主机在同一广播域中,不通过交换机可以完成通信,交换机将丢弃该数据帧。否则,交换机将把该数据帧转发到相应的端口。交换机还将检查收到数据帧的源MAC地址,并查找MAC地址表中与之相匹配的项。如果没有,交换机将记录该MAC地址和接收该数据帧的端口,并激活一个定时器。这个过程被称作地址学习。这个定时器一般就是我们在配置交换机时的AgeTime选项,一般我们都可以配置这一定时器的时间长度。在定时器到时的时候,该项记录将从MAC地址表中删除。而如果接收的数据帧的源MAC地址在MAC地址表中有匹配项,交换机将复位该地址的定时器。

    三、IP地址、MAC地址和三层交换技术

      一台计算机想要接入到网络中,必须要有两个地址。一个是网卡的地址,也就是MAC地址。在以太网中,我们通过MAC地址来进行数据传送和数据交换。在以太网环境中,数据会分帧传送,每一个数据帧都会包含自己的MAC和目的MAC地址信息; 另外一个地址是平时所说的IP地址,定义在网络层,每一台网络计算机都会有一个或者多个IP地址,这是一个虚拟的数据,并且可以随时更改。在硬件层次上进行的数据帧交换必须有正确的接口地址。但是,TCP/IP有自己的地址: 32 bitIP地址。知道主机的IP地址并不能让内核发送一帧数据给主机。内核(如以太网驱动程序)必须知道目的端的硬件地址才能发送数据。ARP的功能是在32 bitIP地址和采用不同网络技术的硬件地址之间提供动态映射。点对点链路不使用ARP。当设置这些链路时(一般在引导过程进行),必须告知内核链路每一端的IP地址。像以太网地址这样的硬件地址并不涉及。

      IP地址和MAC地址是同时使用的,在数据传送过程中,一个完整的TCP/IP包需要由以太网进行数据封装,数据分帧,最后再通过物理层传输到目标计算机。在以太网封装上层的TCP/IP包的时候,它需要知道源MAC地址和目的MAC地址,但是我们只能给出一个对方的IP地址,这个时候就需要一个协议来支持IPMAC的转换,这就是ARP,Address Resolution Protocol. ARP协议是介乎于网络层和数据链路层的一个协议。第一次传送某个目的IP地址的数据的时候,先会发出一个ARP包,其MAC的目标地址是广播地址,里面说到:"谁是xxx.xxx.xxx.xxx这个IP地址的主人?"因为是广播包,所有这个局域网的主机都收到了这个ARP请求。


      



      收到请求的主机将这个IP地址和自己的相比较,如果不相同就不予理会,如果相同就发出ARP响应包。这个IP地址的主机收到这个ARP请求包后回复的ARP响应里说到:"我是这个IP地址的主人"。这个包里面就包括了他的MAC地址。以后的给这个IP地址的帧的目标MAC地址就被确定了。其它的协议如IPX/SPX也有相应的协议完成这些操作。

      



      IP地址和MAC地址之间的关联关系保存在主机系统里面,叫做ARP表,由驱动程序和操作系统完成。在Microsoft的系统里面可以用 arp -a 的命令查看ARP表。收到数据帧的时候也是一样,做完CRC以后,如果没有CRC效验错误,就把帧头去掉,把数据包拿出来通过标准的借口传递给驱动和上层的协议客栈,最终正确的达到我们的应用程序。还有一些控制帧,例如流控帧也需要MAC直接识别并执行相应的行为。

      三层交换机工作过程的简单概括:如果目的IP地址显示不是同一网段的,那么A要实现和B的通讯,在流缓存条目中没有对应MAC地址条目,就将第一个正常数据包发送向一个缺省网关,这个缺省网关一般在操作系统中已经设好,对应第三层路由模块,所以可见对于不是同一子网的数据,最先在MAC表中放的是缺省网关的MAC地址;然后就由三层模块接收到此数据包,查询路由表以确定到达B的路由,将构造一个新的帧头,其中以缺省网关的MAC地址为源MAC地址,以主机BMAC地址为目的MAC地址。通过一定的识别触发机制,确立主机ABMAC地址及转发端口的对应关系,并记录进流缓存条目表,以后的AB的数据,就直接交由二层交换模块完成。这就通常所说的一次路由多次转发。

    四、真实MAC地址、注册表MAC地址和MAC地址的修改

      MAC地址固化在网卡中的BIOS中,可以通过命令取得,但是,通过命令取得的MAC地址不一定是真实的MAC地址,因为在网卡初始化过程中,操作系统确实读取了网卡中MAC地址,但是在以后通讯过程中使用的MAC地址却是从初始化过程结束后建立的缓冲区中读取,而缓冲区中MAC地址可能是注册表定义的MAC地址,而不是真实的MAC地址,这个过程由网卡驱动程序完成。这也是WIN操作系统的MAC地址可以被轻易修改的原因。

      WIN98/ME/2k/XP/2003用户都可以使用ipconfig/all命令获取MAC地址,XP/2003用户有更简单的方法:右键本地连接图标、选择状态然后点击支持选项卡,这里详细信息中包含有MAC和其它重要网络参数。


      



      大部分的网卡都可以通过在控制面板中修改网卡属性来更改其MAC地址。在设备管理器中,右键点击需要修改MAC地址的网卡图标,并选择属性/高级选项卡。在属性区,就可以看到一个称作“Network Address”或其他相类似名字的的项目,点击它,在右侧的下方,输入要指定的MAC地址值。要连续输入12个十六进制数字或字母,不要在其间输入“-”

      



      重新启动系统后设置就会生效了。参考上面发的图比较有明显的变化,显然图中显示的是修改过的MAC地址。

      

     

     

    五、MAC地址的捆绑、ARP命令缺陷和MAC地址重复

      MAC地址绑定与IP地址绑定类似,MAC地址绑定也分为服务器有关MAC地址绑定、服务器无关MAC地址绑定、MAC地址静态绑定和MAC地址动态绑定。服务器有关MAC地址绑定在政务网或园区网中的应用较多,可将用户的使用权限和机器的MAC地址绑定起来,限制用户只能在固定的机器上网,保障安全,防止帐号盗用。由于MAC地址可以修改,因此这个方法可以起到一定的作用,但仍有漏洞。

      关于在WINDOWS 2000 SERVER 下用ARP -S捆绑MACIP的方法需要具体分析,否则可能起不到绑定定作用。以WINDOWS 2000server为例,WIN主机用IP+MAC的方式限制上网,很容易被用户突破。这里需要说明的是有3种情况:


      1、 服务器用ARP -S IP+MAC捆绑后,如果用户自己改IP,保持MAC不变,这种情况下,ARP -S的捆绑被用户轻易突破。


      



      第一种情况的实验如上图,服务器2000/NAT/10.41.221.2。客户机的IP10.41.221.6,然后在2000的服务器上用ARP -S 做捆绑。然后把客户机的IP改为10.41.221.7,如图,10.41.221.7可以上网。轻易可以突破捆绑。

     

     

    2、 服务器用ARP -S IP+MAC捆绑后,如果用户自己改MAC,保持IP不变,这种情况下,ARP -S的捆绑被用户轻易突破。

      



      所以上面的实验用第三方软件发包欺骗网关,达到正常的用户IP不能上网的目的。

      3、 服务器用ARP -S IP+MAC捆绑后,如果LAN中存在2台计算机的 IPMAC完全相同(参考上面介绍的方法设置MAC地址),这种情况下,操作系统不会报告IP地址冲突,也不会报告MAC地址冲突。ARP -S的捆绑被用户轻易突破。


      为什么在WINDOWS 2000下用ARP -S IP+MAC捆绑会无效呢?


      高手做了详细的描述:对于ARP表,W2K系统是通过内建的SNMP来进行管理的,不管你的SNMP服务是否开启,呵呵,奇怪吧? 先我也一样很奇怪ARP这个程序是如何运行的,因为查遍了所有MSDN的文档都没有涉及到ARP表读取,修改的API。万般无奈之下,只有看ARP的汇编代码,才发现这个秘密。ARP -S命令也只是根据SNMP对应的OID接点的ARP表规范的ARP类型由3(动态)修改成4(静态),但是低层的TCP/IP协议栈在收到ARP包以后修改SNMP对应的ARP表,根本就没有检查其类型,这也是ARP -S命令无效的原因。


      六、MAC地址带来的网络安全问题


      修改IPMAC都很容易,这不可避免的带来了安全问题,下面分别以的IP+MAC绑定、端口和MAC捆绑和虚拟路由器这3种情况讨论,这里讨论的绑定可以是WIN主机也可以是路由交换设备。


      情况1、简单的IP+MAC绑定


      前面介绍了ARP -S静态ARP绑定无效的情况,使用“ARP SERVER”按一定的时间间隔广播网段内所有主机的正确IP-MAC映射表,可以解决这个问题。不过ARP绑定在WIN2003下却是有效果的,在LINUX下也有效果,不仅如此,个人防火墙如ZoneAlarm等也有MAC过滤功能。在交换机上也可以做类似绑定,增加静态ARP绑定以防止IP地址盗用(类似这样的命令arp 1.1.1.1 0001.0001.1111 ARPA)。设置完成之后,如果非法用户把地址改为1.1.1.1,它发送到路由器的包正常,但是从目标服务器2.1.1.1返回的数据包在路由器上转发的时候,目标MAC地址将总是设为0001.0001.1111,非法用户不能接收。


      突破方法:修改MAC地址很容易,在Windows网络连接设置修改网卡的配置,在高级页面中找到NetworkAddress设置为指定的值即可。

     

    情况2、端口和MAC地址捆绑认证

      如果限制了指定端口只能被特定MAC地址的机器,用户若更改了MAC地址端口将会进入不可用状态。交换机端口上首次连接的PCMAC地址将会记录到交换机中,成为唯一能够使用该端口的MAC地址。如果该PC更换MAC地址,默认将会使用端口置于shutdown状态,无法与网络连通。

      突破方法:


      1、代理服务器。用户在同一VLAN内能够对外访问的主机上安装代理服务器,通过代理访问。


      2、巧妙运用MAC地址重复。在要求进行端口和MAC地址认证的交换机中的一个端口下,用户私自接一个HUB或者交换机。再将几台PC连在这个HUB或是交换机上,并将几台PCIPMAC地址设的完全一致。结果是多台PC可以同时上网,只需要一个人包月就行了。先将MAC设成一样的,再改IP。这样,机器发出的免费ARP包被其它同IP主机收到时,那些主机发现MAC和自己的一样,就会认为是自己发的了。在windows系统下就不会弹出“IP地址冲突提示框。争用的情况会有丢包现象出现,但不太会影响使用的。至少我亲身感受是这样,有时网页打不开,再刷新一下就可以了。


      情况3、虚拟MAC地址挑战传统宽带认证管理


      包括MAC捆绑在内的所有宽带认证管理手段,它们都有个共同的目的,就是在某一时刻,只允许一台计算机上线,如果能虚拟一个路由器,这个虚拟的路由器拥有唯一的MAC,它取代物理代理服务器,完成认证过程、同时提供网络地址转换功能,不就可以突破MAC地址绑定解决共享上网问题了吗!HomeShare就是这样一个共享软件,使用单网卡共享方式,不需要设置专用的服务器。下图是HomeShare组网网络图,可以看出没有服务器或者路由设备。


      



      HomeShare虚拟的路由器有3个特点:

      1、和认证方式无关的特点。网络中谁先开机谁执行登录认证,即使认证手段改变也不影响共享上网。

     

    2、虚拟主机的特点。这个主机可以设置MAC地址,也就是说:对外无论谁先拨号,服务商检测到的是已经注册的唯一的合法的MAC,轻松突破服务商IP+MAC捆绑或者MAC+端口捆绑;当服务器关机后,其它电脑将会自动成为服务器,保证网络可以继续使用,这样可以实现无缝切换:当服务器关机,客户机切换到服务器的过程中,可以保证客户机中正在进行中的游戏不会中断。无缝切换已经在大多数游戏中测试过,包括CSQuake、联众世界等。

      



      3HomeShare虚拟的路由器提供网络地址转换(NAT)功能,实现共享上网和内部网络资源共享,而且是通过广播来完成的,客户机不需要复杂的设置就可以上网。网络中所有的计算机使用自己真实的MAC地址和虚拟主机的虚拟MAC通讯,完成数据交换。毫无疑问,HomeShare虚拟的路由器给传统的宽带认证管理带来了安全问题。

     

     

    July 03

    解密网络传输 工程师带你深入认识网卡

     

     

    一、什么是网卡?

        网卡现在已经上成为了目前电脑里的标准配置之一。小小的网卡,究竟蕴涵着多少秘密呢?让我们一起来看。

        我们最常用的网络设备当属网卡了。网卡本身是LAN(局域网)的设备,通过网关、路由器等设备就可以把这个局域网挂接到Internet上。而Internet本身就是无数个这样的局域网组成的。

        网卡有许多种,按照数据链路层控制来分有以太网卡,令牌环网卡,ATM网卡等;按照物理层来分类有无线网卡,RJ-45网卡,同轴电缆网卡,光线网卡等等。它们的数据链路控制、寻址、帧结构等不同;物理上的连接方式不同、数据的编码、信号传输的介质、电平等不同。以下主要介绍我们最常用到的蕴ā?lt;/P>

        以太网采用的CSMA/CD(载波侦听多路访问/冲突检测)的控制技术。他主要定义了物理层和数据链路层的工作方式。数据链路层和物理层各自实现自己的功能,相互之间不关心对方如何操作。二者之间有标准的接口(例如MIIGMII)来传递数据和控制。

        以太网卡的物理层可以包含很多种技术,常见的有RJ45,光线,无线等,它们的区别在于传送信号的物理介质和媒质不同。这些都在IEEE802协议族中有详细的定义。

        这次我们主要讨论的RJ45的网卡属于IEEE802.3定义的范围。

    二、网卡的组成

    1.网卡的基本结构

        一块以太网网卡包括OSI(开方系统互联)模型的两个层。物理层和数据链路层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。

        以太网卡中数据链路层的芯片一般简称之为MAC控制器,物理层的芯片我们简称之为PHY。许多网卡的芯片把MACPHY的功能做到了一颗芯片中,比如Intel 82559网卡的和3COM 3C905网卡。但是MACPHY的机制还是单独存在的,只是外观的表现形式是一颗单芯片。当然也有很多网卡的MACPHY是分开做的,比如D-LINKDFE-530TX等。

    图一:MACPHY分开的以太网卡(点击放大)

     

    图二:MACPHY集成在一颗芯片的以太网卡(点击放大)

     

    ①RJ-45接口 ②Transformer(隔离变压器)  ③PHY芯片

    ④MAC芯片  ⑤EEPROM   ⑥BOOTROM插槽
    ⑦WOL
    接头  ⑧晶振   ⑨电压转换芯片
    ⑩LED
    指示灯

     

    2.什么是MAC?

     

        首先我们来说说以太网卡的MAC芯片的功能。以太网数据链路层其实包含MAC(介质访问控制)子层和LLC(逻辑链路控制)子层。一块以太网卡MAC芯片的作用不但要实现MAC子层和LLC子层的功能,还要提供符合规范的PCI界面以实现和主机的数据交换。

     

        MACPCI总线收到IP数据包(或者其他网络层协议的数据包)后,将之拆分并重新打包成最大1518Byte,最小64Byte的帧。这个帧里面包括了目标MAC地址、自己的源MAC地址和数据包里面的协议类型(比如IP数据包的类型用80表示)。最后还有一个DWORD(4Byte)CRC码。

     

        可是目标的MAC地址是哪里来的呢?这牵扯到一个ARP协议(介乎于网络层和数据链路层的一个协议)。第一次传送某个目的IP地址的数据的时候,先会发出一个ARP包,其MAC的目标地址是广播地址,里面说到:"谁是xxx.xxx.xxx.xxx这个IP地址的主人?"因为是广播包,所有这个局域网的主机都收到了这个ARP请求。收到请求的主机将这个IP地址和自己的相比较,如果不相同就不予理会,如果相同就发出ARP响应包。这个IP地址的主机收到这个ARP请求包后回复的ARP响应里说到:"我是这个IP地址的主人"。这个包里面就包括了他的MAC地址。以后的给这个IP地址的帧的目标MAC地址就被确定了。(其它的协议如IPX/SPX也有相应的协议完成这些操作。)

     

        IP地址和MAC地址之间的关联关系保存在主机系统里面,叫做ARP表,由驱动程序和操作系统完成。在Microsoft的系统里面可以用 arp -a 的命令查看ARP表。收到数据帧的时候也是一样,做完CRC以后,如果没有CRC效验错误,就把帧头去掉,把数据包拿出来通过标准的借口传递给驱动和上层的协议客栈,最终正确的达到我们的应用程序。

    还有一些控制帧,例如流控帧也需要MAC直接识别并执行相应的行为。


       
    以太网MAC芯片的一端接计算机PCI总线,另外一端就接到PHY芯片上。以太网的物理层又包括MII/GMII(介质独立接口)子层、PCS(物理编码子层)、PMA(物理介质附加)子层、PMD(物理介质相关)子层、MDI子层。而PHY芯片是实现物理层的重要功能器件之一,实现了前面物理层的所有的子层的功能。

     

    3.网络传输的流程


        PHY
    在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说,都是数据而不管什么地址,数据还是CRC),每4bit就增加1bit的检错码,然后把并行数据转化为串行流数据,再按照物理层的编码规则(10Based-TNRZ编码或100based-T的曼彻斯特编码)把数据编码,再变为模拟信号把数据送出去。(注:关于网线上数据是数字的还是模拟的比较不容易理解清楚。最后我再说)

     

        收数据时的流程反之。

     

        PHY还有个重要的功能就是实现CSMA/CD的部分功能。它可以检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去。如果两块网卡碰巧同时送出了数据,那样必将造成冲突,这时候,冲突检测机构可以检测到冲突,然后各等待一个随机的时间重新发送数据。

    这个随机时间很有讲究的,并不是一个常数,在不同的时刻计算出来的随机时间都是不同的,而且有多重算法来应付出现概率很低的同两台主机之间的第二次冲突。

     

        许多网友在接入Internt宽带时,喜欢使用"抢线"强的网卡,就是因为不同的PHY碰撞后计算随机时间的方法设计上不同,使得有些网卡比较"占便宜"。不过,抢线只对广播域的网络而言的,对于交换网络和ADSL这样点到点连接到局端设备的接入方式没什么意义。而且"抢线"也只是相对而言的,不会有质的变化。

     

    4.关于网络间的冲突


       
    现在交换机的普及使得交换网络的普及,使得冲突域网络少了很多,极大地提高了网络的带宽。但是如果用HUB,或者共享带宽接入Internet的时候还是属于冲突域网络,有冲突碰撞的。交换机和HUB最大的区别就是:一个是构建点到点网络的局域网交换设备,一个是构建冲突域网络的局域网互连设备。

     

        我们的PHY还提供了和对端设备连接的重要功能并通过LED灯显示出自己目前的连接的状态和工作状态让我们知道。当我们给网卡接入网线的时候,PHY不断发出的脉冲信号检测到对端有设备,它们通过标准的"语言"交流,互相协商并却定连接速度、双工模式、是否采用流控等。

     

        通常情况下,协商的结果是两个设备中能同时支持的最大速度和最好的双工模式。这个技术被称为Auto Negotiation或者NWAY,它们是一个意思--自动协商。

     

    5.PHY的输出部分


        现在来了解PHY的输出后面部分。一颗CMOS制程的芯片工作的时候产生的信号电平总是大于0V的(这取决于芯片的制程和设计需求),但是这样的信号送到100米甚至更长的地方会有很大的直流分量的损失。而且如果外部网现直接和芯片相连的话,电磁感应(打雷)和静电,很容易造成芯片的损坏。

     

        再就是设备接地方法不同,电网环境不同会导致双方的0V电平不一致,这样信号从A传到B,由于A设备的0V电平和B点的0V电平不一样,这样会导致很大的电流从电势高的设备流向电势低的设备。我们如何解决这个问题呢?

     

        这时就出现了Transformer(隔离变压器)这个器件。它把PHY送出来的差分信号用差模耦合的线圈耦合滤波以增强信号,并且通过电磁场的转换耦合到连接网线的另外一端。这样不但使网线和PHY之间没有物理上的连接而换传递了信号,隔断了信号中的直流分量,还可以在不同0V电平的设备中传送数据。

     

        隔离变压器本身就是设计为耐2KV~3KV的电压的。也起到了防雷感应(我个人认为这里用防雷击不合适)保护的作用。有些朋友的网络设备在雷雨天气时容易被烧坏,大都是PCB设计不合理造成的,而且大都烧毁了设备的接口,很少有芯片被烧毁的,就是隔离变压器起到了保护作用。

     

    6.关于传输介质


       
    隔离变压器本身是个被动元件,只是把PHY的信号耦合了到网线上,并没有起到功率放大的作用。那么一张网卡信号的传输的最长距离是谁决定的呢?

     

        一张网卡的传输最大距离和与对端设备连接的兼容性主要是PHY决定的。但是可以将信号送的超过100米的PHY其输出的功率也比较大,更容易产生EMI的问题。这时候就需要合适的Transformer与之配合。作PHY的老大公司MarvellPHY,常常可以传送180~200米的距离,远远超过IEEE100米的标准。

     

        RJ-45的接头实现了网卡和网线的连接。它里面有8个铜片可以和网线中的4对双绞(8根)线对应连接。其中100M的网络中12是传送数据的,36是接收数据的。12之间是一对差分信号,也就是说它们的波形一样,但是相位相差180度,同一时刻的电压幅度互为正负。这样的信号可以传递的更远,抗干扰能力强。同样的,36也一样是差分信号。

     

        网线中的8根线,每两根扭在一起成为一对。我们制作网线的时候,一定要注意要让12在其中的一对,36在一对。否则长距离情况下使用这根网线的时候会导致无法连接或连接很不稳定。

     

        现在新的PHY支持AUTO MDI-X功能(也需要Transformer支持)。它可以实现RJ-45接口的12上的传送信号线和36上的接收信号线的功能自动互相交换。有的PHY甚至支持一对线中的正信号和负信号的功能自动交换。这样我们就不必为了到底连接某个设备需要使用直通网线还是交叉网线而费心了。这项技术已经被广泛的应用在交换机和SOHO路由器上。

     

        1000Basd-T网络中,其中最普遍的一种传输方式是使用网线中所有的4对双绞线,其中增加了4578来共同传送接收数据。由于1000Based-T网络的规范包含了AUTO MDI-X功能,因此不能严格确定它们的传出或接收的关系,要看双方的具体的协商结果。

     

    7PHYMAC之间如何进行沟通


       
    下面继续让我们来关心一下PHYMAC之间是如何传送数据和相互沟通的。通过IEEE定义的标准的MII/GigaMIIMedia Independed Interfade,介质独立界面)界面连接MACPHY。这个界面是IEEE定义的。MII界面传递了网络的所有数据和数据的控制。

     

        MACPHY的工作状态的确定和对PHY的控制则是使用SMISerial Management Interface)界面通过读写PHY的寄存器来完成的。PHY里面的部分寄存器也是IEEE定义的,这样PHY把自己的目前的状态反映到寄存器里面,MAC通过SMI总线不断的读取PHY的状态寄存器以得知目前PHY的状态,例如连接速度,双工的能力等。当然也可以通过SMI设置PHY的寄存器达到控制的目的,例如流控的打开关闭,自协商模式还是强制模式等。

     

        我们看到了,不论是物理连接的MII界面和SMI总线还是PHY的状态寄存器和控制寄存器都是有IEEE的规范的,因此不同公司的MACPHY一样可以协调工作。当然为了配合不同公司的PHY的自己特有的一些功能,驱动需要做相应的修改。

     

        一片网卡主要功能的实现就基本上是上面这些器件了。

     

        其他的,还有一颗EEPROM芯片,通常是一颗93C46。里面记录了网卡芯片的供应商ID、子系统供应商ID、网卡的MAC地址、网卡的一些配置,如SMI总线上PHY的地址,BOOTROM的容量,是否启用BOOTROM引导系统等东西。

     

        很多网卡上还有BOOTROM这个东西。它是用于无盘工作站引导操作系统的。既然无盘,一些引导用必需用到的程序和协议栈就放到里面了,例如RPLPXE等。实际上它就是一个标准的PCI ROM。所以才会有一些硬盘写保护卡可以通过烧写网卡的BootRom来实现。其实PCI设备的ROM是可以放到主板BIOS里面的。启动电脑的时候一样可以检测到这个ROM并且正确识别它是什么设备的。AGP在配置上和PCI很多地方一样,所以很多显卡的BIOS也可以放到主板BIOS里面。这就是为什么板载的网卡我们从来没有看到过BOOTROM的原因。

     

    8.网卡的供电


       
    最后就是电源部分了。大多数网卡现在都使用3.3V或更低的电压。有的是双电压的。因此需要电源转换电路。


       
    而且网卡为了实现Wake on line功能,必须保证全部的PHYMAC的极少一部分始终处于有电的状态,这需要把主板上的5V Standby电压转换为PHY工作电压的电路。在主机开机后,PHY的工作电压应该被从5V转出来的电压替代以节省5V Standby的消耗。(许多劣质网卡没有这么做)。


       
    Wake on line功能的网卡一般还有一个WOL的接口。那是因为PCI2.1以前没有PCI设备唤醒主机的功能,所以需要着一根线通过主板上的WOL的接口连到南桥里面以实现WOL的功能。


       
    新的主板合网卡一般支持PCI2.2/2.3,扩展了PME#信号功能,不需要那个接口而通过PCI总线就可以实现唤醒功能。

     

    结语
       
    一块以太网卡就是这些部分组成。它们紧密地配合并且相互协调,供给我们一个稳定而告诉的网络接入。网络的普及不但极大地增加了工作效率,而且使我们可以自由的驰骋在Internet的海洋中!


    注解
       
    网线上的到底是模拟信号还是数字信号呢?


       
    答案是模拟信号。因为它传出和接收是采用的模拟的技术。虽然它传送的信息是数字的,并不是传送的信息是数字的,信号就可以叫做数字信号。


       
    简单的例子:我们知道电话是模拟信号,但是当我们拨号上网的时候,电话线里传送的是数字信息,但信号本身依旧是模拟的。然而ADSL同样是通过电话线传送的,却是数字信号。这取决于它传出和接受采用的技术。

     

    解密网络传输 工程师带你深入认识网卡

     

     

    一、什么是网卡?

        网卡现在已经上成为了目前电脑里的标准配置之一。小小的网卡,究竟蕴涵着多少秘密呢?让我们一起来看。

        我们最常用的网络设备当属网卡了。网卡本身是LAN(局域网)的设备,通过网关、路由器等设备就可以把这个局域网挂接到Internet上。而Internet本身就是无数个这样的局域网组成的。

        网卡有许多种,按照数据链路层控制来分有以太网卡,令牌环网卡,ATM网卡等;按照物理层来分类有无线网卡,RJ-45网卡,同轴电缆网卡,光线网卡等等。它们的数据链路控制、寻址、帧结构等不同;物理上的连接方式不同、数据的编码、信号传输的介质、电平等不同。以下主要介绍我们最常用到的蕴ā?lt;/P>

        以太网采用的CSMA/CD(载波侦听多路访问/冲突检测)的控制技术。他主要定义了物理层和数据链路层的工作方式。数据链路层和物理层各自实现自己的功能,相互之间不关心对方如何操作。二者之间有标准的接口(例如MIIGMII)来传递数据和控制。

        以太网卡的物理层可以包含很多种技术,常见的有RJ45,光线,无线等,它们的区别在于传送信号的物理介质和媒质不同。这些都在IEEE802协议族中有详细的定义。

        这次我们主要讨论的RJ45的网卡属于IEEE802.3定义的范围。

    二、网卡的组成

    1.网卡的基本结构

        一块以太网网卡包括OSI(开方系统互联)模型的两个层。物理层和数据链路层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。

        以太网卡中数据链路层的芯片一般简称之为MAC控制器,物理层的芯片我们简称之为PHY。许多网卡的芯片把MACPHY的功能做到了一颗芯片中,比如Intel 82559网卡的和3COM 3C905网卡。但是MACPHY的机制还是单独存在的,只是外观的表现形式是一颗单芯片。当然也有很多网卡的MACPHY是分开做的,比如D-LINKDFE-530TX等。

    图一:MACPHY分开的以太网卡(点击放大)

     

    图二:MACPHY集成在一颗芯片的以太网卡(点击放大)

     

    ①RJ-45接口 ②Transformer(隔离变压器)  ③PHY芯片

    ④MAC芯片  ⑤EEPROM   ⑥BOOTROM插槽
    ⑦WOL
    接头  ⑧晶振   ⑨电压转换芯片
    ⑩LED
    指示灯

     

    2.什么是MAC?

     

        首先我们来说说以太网卡的MAC芯片的功能。以太网数据链路层其实包含MAC(介质访问控制)子层和LLC(逻辑链路控制)子层。一块以太网卡MAC芯片的作用不但要实现MAC子层和LLC子层的功能,还要提供符合规范的PCI界面以实现和主机的数据交换。

     

        MACPCI总线收到IP数据包(或者其他网络层协议的数据包)后,将之拆分并重新打包成最大1518Byte,最小64Byte的帧。这个帧里面包括了目标MAC地址、自己的源MAC地址和数据包里面的协议类型(比如IP数据包的类型用80表示)。最后还有一个DWORD(4Byte)CRC码。

     

        可是目标的MAC地址是哪里来的呢?这牵扯到一个ARP协议(介乎于网络层和数据链路层的一个协议)。第一次传送某个目的IP地址的数据的时候,先会发出一个ARP包,其MAC的目标地址是广播地址,里面说到:"谁是xxx.xxx.xxx.xxx这个IP地址的主人?"因为是广播包,所有这个局域网的主机都收到了这个ARP请求。收到请求的主机将这个IP地址和自己的相比较,如果不相同就不予理会,如果相同就发出ARP响应包。这个IP地址的主机收到这个ARP请求包后回复的ARP响应里说到:"我是这个IP地址的主人"。这个包里面就包括了他的MAC地址。以后的给这个IP地址的帧的目标MAC地址就被确定了。(其它的协议如IPX/SPX也有相应的协议完成这些操作。)

     

        IP地址和MAC地址之间的关联关系保存在主机系统里面,叫做ARP表,由驱动程序和操作系统完成。在Microsoft的系统里面可以用 arp -a 的命令查看ARP表。收到数据帧的时候也是一样,做完CRC以后,如果没有CRC效验错误,就把帧头去掉,把数据包拿出来通过标准的借口传递给驱动和上层的协议客栈,最终正确的达到我们的应用程序。

    还有一些控制帧,例如流控帧也需要MAC直接识别并执行相应的行为。


       
    以太网MAC芯片的一端接计算机PCI总线,另外一端就接到PHY芯片上。以太网的物理层又包括MII/GMII(介质独立接口)子层、PCS(物理编码子层)、PMA(物理介质附加)子层、PMD(物理介质相关)子层、MDI子层。而PHY芯片是实现物理层的重要功能器件之一,实现了前面物理层的所有的子层的功能。

     

    3.网络传输的流程


        PHY
    在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说,都是数据而不管什么地址,数据还是CRC),每4bit就增加1bit的检错码,然后把并行数据转化为串行流数据,再按照物理层的编码规则(10Based-TNRZ编码或100based-T的曼彻斯特编码)把数据编码,再变为模拟信号把数据送出去。(注:关于网线上数据是数字的还是模拟的比较不容易理解清楚。最后我再说)

     

        收数据时的流程反之。

     

        PHY还有个重要的功能就是实现CSMA/CD的部分功能。它可以检测到网络上是否有数据在传送,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去。如果两块网卡碰巧同时送出了数据,那样必将造成冲突,这时候,冲突检测机构可以检测到冲突,然后各等待一个随机的时间重新发送数据。

    这个随机时间很有讲究的,并不是一个常数,在不同的时刻计算出来的随机时间都是不同的,而且有多重算法来应付出现概率很低的同两台主机之间的第二次冲突。

     

        许多网友在接入Internt宽带时,喜欢使用"抢线"强的网卡,就是因为不同的PHY碰撞后计算随机时间的方法设计上不同,使得有些网卡比较"占便宜"。不过,抢线只对广播域的网络而言的,对于交换网络和ADSL这样点到点连接到局端设备的接入方式没什么意义。而且"抢线"也只是相对而言的,不会有质的变化。

     

    4.关于网络间的冲突


       
    现在交换机的普及使得交换网络的普及,使得冲突域网络少了很多,极大地提高了网络的带宽。但是如果用HUB,或者共享带宽接入Internet的时候还是属于冲突域网络,有冲突碰撞的。交换机和HUB最大的区别就是:一个是构建点到点网络的局域网交换设备,一个是构建冲突域网络的局域网互连设备。

     

        我们的PHY还提供了和对端设备连接的重要功能并通过LED灯显示出自己目前的连接的状态和工作状态让我们知道。当我们给网卡接入网线的时候,PHY不断发出的脉冲信号检测到对端有设备,它们通过标准的"语言"交流,互相协商并却定连接速度、双工模式、是否采用流控等。

     

        通常情况下,协商的结果是两个设备中能同时支持的最大速度和最好的双工模式。这个技术被称为Auto Negotiation或者NWAY,它们是一个意思--自动协商。

     

    5.PHY的输出部分


        现在来了解PHY的输出后面部分。一颗CMOS制程的芯片工作的时候产生的信号电平总是大于0V的(这取决于芯片的制程和设计需求),但是这样的信号送到100米甚至更长的地方会有很大的直流分量的损失。而且如果外部网现直接和芯片相连的话,电磁感应(打雷)和静电,很容易造成芯片的损坏。

     

        再就是设备接地方法不同,电网环境不同会导致双方的0V电平不一致,这样信号从A传到B,由于A设备的0V电平和B点的0V电平不一样,这样会导致很大的电流从电势高的设备流向电势低的设备。我们如何解决这个问题呢?

     

        这时就出现了Transformer(隔离变压器)这个器件。它把PHY送出来的差分信号用差模耦合的线圈耦合滤波以增强信号,并且通过电磁场的转换耦合到连接网线的另外一端。这样不但使网线和PHY之间没有物理上的连接而换传递了信号,隔断了信号中的直流分量,还可以在不同0V电平的设备中传送数据。

     

        隔离变压器本身就是设计为耐2KV~3KV的电压的。也起到了防雷感应(我个人认为这里用防雷击不合适)保护的作用。有些朋友的网络设备在雷雨天气时容易被烧坏,大都是PCB设计不合理造成的,而且大都烧毁了设备的接口,很少有芯片被烧毁的,就是隔离变压器起到了保护作用。

     

    6.关于传输介质


       
    隔离变压器本身是个被动元件,只是把PHY的信号耦合了到网线上,并没有起到功率放大的作用。那么一张网卡信号的传输的最长距离是谁决定的呢?

     

        一张网卡的传输最大距离和与对端设备连接的兼容性主要是PHY决定的。但是可以将信号送的超过100米的PHY其输出的功率也比较大,更容易产生EMI的问题。这时候就需要合适的Transformer与之配合。作PHY的老大公司MarvellPHY,常常可以传送180~200米的距离,远远超过IEEE100米的标准。

     

        RJ-45的接头实现了网卡和网线的连接。它里面有8个铜片可以和网线中的4对双绞(8根)线对应连接。其中100M的网络中12是传送数据的,36是接收数据的。12之间是一对差分信号,也就是说它们的波形一样,但是相位相差180度,同一时刻的电压幅度互为正负。这样的信号可以传递的更远,抗干扰能力强。同样的,36也一样是差分信号。

     

        网线中的8根线,每两根扭在一起成为一对。我们制作网线的时候,一定要注意要让12在其中的一对,36在一对。否则长距离情况下使用这根网线的时候会导致无法连接或连接很不稳定。

     

        现在新的PHY支持AUTO MDI-X功能(也需要Transformer支持)。它可以实现RJ-45接口的12上的传送信号线和36上的接收信号线的功能自动互相交换。有的PHY甚至支持一对线中的正信号和负信号的功能自动交换。这样我们就不必为了到底连接某个设备需要使用直通网线还是交叉网线而费心了。这项技术已经被广泛的应用在交换机和SOHO路由器上。

     

        1000Basd-T网络中,其中最普遍的一种传输方式是使用网线中所有的4对双绞线,其中增加了4578来共同传送接收数据。由于1000Based-T网络的规范包含了AUTO MDI-X功能,因此不能严格确定它们的传出或接收的关系,要看双方的具体的协商结果。

     

    7PHYMAC之间如何进行沟通


       
    下面继续让我们来关心一下PHYMAC之间是如何传送数据和相互沟通的。通过IEEE定义的标准的MII/GigaMIIMedia Independed Interfade,介质独立界面)界面连接MACPHY。这个界面是IEEE定义的。MII界面传递了网络的所有数据和数据的控制。

     

        MACPHY的工作状态的确定和对PHY的控制则是使用SMISerial Management Interface)界面通过读写PHY的寄存器来完成的。PHY里面的部分寄存器也是IEEE定义的,这样PHY把自己的目前的状态反映到寄存器里面,MAC通过SMI总线不断的读取PHY的状态寄存器以得知目前PHY的状态,例如连接速度,双工的能力等。当然也可以通过SMI设置PHY的寄存器达到控制的目的,例如流控的打开关闭,自协商模式还是强制模式等。

     

        我们看到了,不论是物理连接的MII界面和SMI总线还是PHY的状态寄存器和控制寄存器都是有IEEE的规范的,因此不同公司的MACPHY一样可以协调工作。当然为了配合不同公司的PHY的自己特有的一些功能,驱动需要做相应的修改。

     

        一片网卡主要功能的实现就基本上是上面这些器件了。

     

        其他的,还有一颗EEPROM芯片,通常是一颗93C46。里面记录了网卡芯片的供应商ID、子系统供应商ID、网卡的MAC地址、网卡的一些配置,如SMI总线上PHY的地址,BOOTROM的容量,是否启用BOOTROM引导系统等东西。

     

        很多网卡上还有BOOTROM这个东西。它是用于无盘工作站引导操作系统的。既然无盘,一些引导用必需用到的程序和协议栈就放到里面了,例如RPLPXE等。实际上它就是一个标准的PCI ROM。所以才会有一些硬盘写保护卡可以通过烧写网卡的BootRom来实现。其实PCI设备的ROM是可以放到主板BIOS里面的。启动电脑的时候一样可以检测到这个ROM并且正确识别它是什么设备的。AGP在配置上和PCI很多地方一样,所以很多显卡的BIOS也可以放到主板BIOS里面。这就是为什么板载的网卡我们从来没有看到过BOOTROM的原因。

     

    8.网卡的供电


       
    最后就是电源部分了。大多数网卡现在都使用3.3V或更低的电压。有的是双电压的。因此需要电源转换电路。


       
    而且网卡为了实现Wake on line功能,必须保证全部的PHYMAC的极少一部分始终处于有电的状态,这需要把主板上的5V Standby电压转换为PHY工作电压的电路。在主机开机后,PHY的工作电压应该被从5V转出来的电压替代以节省5V Standby的消耗。(许多劣质网卡没有这么做)。


       
    Wake on line功能的网卡一般还有一个WOL的接口。那是因为PCI2.1以前没有PCI设备唤醒主机的功能,所以需要着一根线通过主板上的WOL的接口连到南桥里面以实现WOL的功能。


       
    新的主板合网卡一般支持PCI2.2/2.3,扩展了PME#信号功能,不需要那个接口而通过PCI总线就可以实现唤醒功能。

     

    结语
       
    一块以太网卡就是这些部分组成。它们紧密地配合并且相互协调,供给我们一个稳定而告诉的网络接入。网络的普及不但极大地增加了工作效率,而且使我们可以自由的驰骋在Internet的海洋中!


    注解
       
    网线上的到底是模拟信号还是数字信号呢?


       
    答案是模拟信号。因为它传出和接收是采用的模拟的技术。虽然它传送的信息是数字的,并不是传送的信息是数字的,信号就可以叫做数字信号。


       
    简单的例子:我们知道电话是模拟信号,但是当我们拨号上网的时候,电话线里传送的是数字信息,但信号本身依旧是模拟的。然而ADSL同样是通过电话线传送的,却是数字信号。这取决于它传出和接受采用的技术。

     

    July 02

    正龙拍虎

     

    新成语:《正龙拍虎》
    词目:正龙拍虎
    发音:zhèng lóng pāi hǔ
    释义:

    意指某人或某集团为利益驱动做假,被揭穿后还抵死不认;
    社会公信力缺失;
    典故:
    《史记·周正龙列传》:周氏正龙者,秦地金州镇坪人也。正龙置彼画于深山密林中,遮淹修饰,远近数数摄之,得虎照数十副。照中虎卧于林下,双目炯炯,俨然真大虫也。归而 之县官,官喜,以呈上官,州府台阁皆不疑,布之互联网,传告天下,厚赏正龙。网民见之,咸以为假,竟相怒骂之,有好事者遍搜天下旧年画,果得虎照原版画, 多不可数。正龙之谋遂败焉,天下皆以为耻。

    关于治标与治本的问题

    端午节外出河源旅游,刚到河源,接到家里电话,说母亲生病了,可能是高血压犯了,呕吐不断。我非常担心,赶紧打电话给我的同学,让他把我母亲送到医院,然后,我赶紧驱车赶回。直接到了中医院。

    中医院的诊断就是我母亲的症状是呕吐,而且吐血了,说明胃里有毛病,需要做胃镜,但是他们没有胃镜,建议我去北大医院,我也只好去了北大医院。到了北大医院,那里的医生马上就给我母亲做CT和心电图,后来发现,是高血压和冠心病。我就问医生,中医院让我们做了做胃镜,怎么不需要做了?医生告诉我,吐血,一般严重的呕吐都会导致呕吐的,严重呕吐会损伤胃粘膜,当然有血了,但是,呕吐的原因是什么呢?一般而言,都是脑部有问题,我查CT是看看脑部有没有肿瘤之类的,查心电图是看看心脏供血有没有问题,现在原因已经确定是高血压引起的呕吐。事情就是这样的。可以看出,北大医院的医生确实比中医院的高明一些。

    回想起我们公司很多事情,都是类似的,例如,我们公司供货一直不顺,然后就分析,这次是因为屏的问题,这次是因为电池问题,这次是因为塑胶件的问题等等。每次一个问题还没有完结,下一个问题又来了,5年了,供应链还是没有顺起来。

    什么问题,说明这些电池屏等的问题,都不是根源,我们还没有找到根源,或者不原因找到根源,哎,把高血压当胃病治,会耽误人的。

    July 01

    什么是企业家精神----烟台会议感想。

     

    前几天在烟台参加一个企业家论坛的活动,与会者商界领袖很多,例如,蒙牛的牛根生,联想的柳传志,中粮的宁高宁,万科的王石等,柳传志不亏为商界的领袖,教父级任务,明显可以看出大家对他的认可和尊敬,柳总的讲话总是能够博得大家最真诚的掌声。

    柳总向大家阐述什么是企业家精神,我觉得阐述的非常好,其实他是阐述牛根生的经历,以此来阐述企业家的精神。

    据说,牛根生是个苦孩子,很苦很苦的哪种,好像是被别人收养多次吧!具体记得不太清楚,不敢乱说,后来长大了,也不是很务正业,就做了几次牢,最后一次从牢里出来,他决定洗心革面,努力工作,于是他就去了伊利牛奶厂当了一个洗奶瓶的临时工,洗奶瓶的工作据说是最苦的,别人都不想干,但是他却卖了命干,为什么呢?他说,以前在牢里,一分钱都没有,还要挨管教的大头皮鞋,都拼了命干,现在条件这么好,还有钱拿,一个月20块,当然拼命干了!就这样,别人不干的活,他都一个人揽了过来,一个月之后,他就被提拔为洗奶瓶组的组长,半年之后,他就是一个类似车间主任(经理之类的了),他的工资也涨到了32块。可是他每个月只拿回家20元,还有12元钱用来作为部门内部的激励用。柳总就问他,这样你老婆没有意见,呵呵,牛根生说,虽然我年轻的时候坐过牢,但是他还是很有魅力的,年轻的时候,追求他的女孩子很多,结发夫人是竞争上岗的,所以,比较支持他。据说,他的夫人家世等等非常好,因为嫁给了牛根生,当年家里闹了大地震。这样,靠着自己的努力和拼命,1977年,好像牛根生因为工作优秀上了人民日报。

    牛根生好像文凭最多也就是初中,但是,你现在和他交谈,各个方面,水平绝对达到大学本科以上,这就是不断的学习和积累提高的,据说,他对哈弗商学院的一套课程还是非常熟悉的。

    这就是牛根生,说明了什么?

    1)  企业家的精神就是一种拼了命干的精神。

    2)  企业家精神就是不断学习提高的精神

    3)  企业家的精神就是有宽大的胸怀

    4)  企业家的精神就是要学会分享

    5)  企业家的精神就是一种自信的精神