鸟哥的 Linux 私房菜
目录 | Linux 基础篇 | Linux 服务器篇 | Linux 企业应用篇 | 安全管理
     
 
最近更新日期:2007/10/21
在金庸的小说里面提到了‘欲练神功,挥刀自宫’才能练成无敌的葵花宝典, 另外,金大侠也提到太极拳的学习到最后需要将所学的忘光光,此时才能‘无招胜有招’。 呵呵~这跟 Linux 有啥关系呐?在前一章我们不是提到关于‘搭建服务器前的技巧分析’吗?里面提到在 Linux 里面想要玩搭建服务器, 最重要的是得要搞熟 Linux 相关的操作技巧,这些技巧在一开始时真的得要花很多时间去熟悉, 真的会让人觉得好像已经‘自宫’的样子!不过,别担心, 等您花时间学习过后,肯定让您忘不了了!因为那时您已经‘无招胜有招’啦! 发生问题时,肯定会依循之前学习到的一贯解决方法去搜寻、解答!很重要的!

在这一章里面,我们得要来谈的就是另一个‘神功’啦!那就是网络基础。 网络基础真的很重要的,包括乙太网络硬体的了解可以让您知道如何查出有问题的地方,进一步解决他; 了解网络协定(IP)与路由(route)让您可以完整的设定好您的网络架构,更可进一步进行子网络的划分, 以建立更小而美的网络环境!当然还有不可不提的 OSI 网络七层协定,真是重要啊! 不过,在这一章鸟哥以较为口语的方式来介绍这些基础网络架构,希望能带给朋友们快速了解网络是啥。 当然,想要更了解网络相关功能的话,文末的参考资料可以参考看看喔! ^_^


大标题的图示网络(Network)
Linux 这个作业系统的优势之一就是在 (Network) 功能啦!这包含他的高稳定度系统资源分配, 以及较为安全的网络防备能力!所以很多人都喜欢拿他来进行网络服务器的搭建。 然而,这些网络功能的优点却同时也是缺点,怎么说呢?因为 Linux 网络功能太强了, 所以一旦被 Cracker (网络怪客) 入侵的话,嘿嘿嘿嘿!会遇上什么灾难你可能也想像不到! 所以啰,上网之前,请先注意:‘我的网络做好安全防护了吗?’

再者,相对于视窗作业系统来说, Linux 的设定确实会让使用者花费比较多的心力, 毕竟当初它是一群工程师由于本身兴趣而设计出来的,所以依旧具有相当麻烦的设定工作需要作! 这个时候,如果没有一些网络基础方面的认知的话,那么在 Linux 上面设定网络或者是进行网络除错将是您一生当中最大的梦魇......。 所以,这里有几件事情要请您好好的来参考一下:
  • 熟悉 Linux 操作与 Linux 基础
    还是要一再地不断强调,如果您确定您只是想要‘Linux 能正常运作就好’那一类型的使用者,那么真的不要再往下看了,因为主机后续的维护问题会很大, 倒不如花个小钱,请个专家来帮您搞定即可!而如果您确定您是‘想要更了解 Linux 的使用者,并且想要熟悉搭建网站’, 那么请不要再在网络上询问:‘为何我不能使用 FTP 传送资料到主机上?’ 或者是‘为何我不能建立个人网页’之类的傻问题,因为这仅仅牵涉到‘ 文件权限与属性 ’的概念而已,而这些概念都是 Linux 基础里头相当重要的功课!此外,由于远端操控 Linux 主机时,几乎都是使用文字界面来工作,所以不懂 bash shell ? 哈哈!那么想要干嘛都码不可能!

  • 花几晚的时间将网络基础看一看
    这一个章节旨在引导网络新鲜人快速进入网络的世界,所以鸟哥写的比较浅显一些些, 基本上,还有一堆网络硬体与通讯协定并没有被包含在这篇短文里头。 如果您的求知欲已经高过本章节,那么请自行到书局寻找适合您自己的书籍来阅读! 当然,您也可以在网际网络上面找到您所需要的资料。 在本章最后的参考资料可以瞧一瞧呐!

  • 随时掌握主机资讯
    这是最麻烦的一点了!因为大家还是常常认为‘我的网站这么小,没有人会注意的啦!’唉! 说过若干次了,就是因为有这种心理存在,我们才会常常听到 ‘奇怪!我在早上刚安装完毕,怎么下午就无法以 root 的身份登入了!’ 请随时注意您主机的资讯,好好的爱护他吧!
好了,底下我们就得要来谈一谈一些重要的网络基础概念了,清醒了没? 赶紧清醒清醒,准备要好好用功啦! ^_^


小标题的图示什么是网络
我们都知道,网络就是几部电脑主机或者是网络印表机之类的周边设备, 透过网络线或者是无线网络的技术,将这些主机与设备连接起来, 使得资料可以透过网络媒体(网络线以及其他网络卡等硬体)来传输的一种方式。 请您想像一下,如果您家里面只有电脑、印表机、传真机等机器,却没有网络连接这些硬体, 那么使用上会不会很麻烦?如果将这个场景移到需要工作的办公室时, 电脑的资料无法使用网络连接到印表机来列印,那是否很伤脑筋呢? 对吧!光用想的就觉得很麻烦吧!不幸的是,这些麻烦事在 1970 年代以前,确实是存在的啊!

各自为政的‘硬体与软件’技术发展
在 1970 年代前后,为了解决这个烦人的资料传输问题,各主要资讯相关的公司都在研究独自的网络连接技术, 以使自家的产品可以在办公室的环境底下组织起来。其中比较有名的就是全录公司的 Ethernet 技术, 以及 IBM 研发的 Token-Ring 技术了。但是这些技术有个很大的问题,那就是这些技术彼此不认识对方的网络技术, 也就是说,万一你的办公室购买了整合 Ethernet 技术的电脑主机,但是其他的电脑却是使用 IBM 的机器时, 想要在这两者之间进行资料的沟通,在早期来说那是不可能的。

以‘软件’技术将硬体整合
但是,这些硬体的技术出现之后,还是对企业造成一定程度的困扰,怎么说呢? 因为一个公司不太可能仅会使用一家厂商所推出的资讯产品吧!所以啰,这么多的硬体技术又该如何整合呐? 举例来说, IBM 不可能不用自己的 Token-Ring 技术,当然也不会将该技术用在其他公司的硬体上面, 所以,这些厂商当然只会针对自家的硬体来进行网络传输软件的撰写啰。那么当许多不同公司的产品在自己企业内时, 您该如何将这些咚咚整合在一起呢?伤脑筋是吧!

所以在 1960 年代末期美国国防部就开始研究一个 可以在这些不同的网络硬体上面运作的软件技术, 使得不同公司的电脑或资料可以透过这个软件来达成资料沟通。这个研究由美国国防部尖端研究企画署 ( Defense Advanced Research Project Agency, DARPA )负责,他们将该网络系统称为 ARPANET, 这个咚咚就是目前熟知的 TCP/IP 技术的雏形了!在 1975 年左右, ARPANET 已可以在常见的 Ethernet 与 Token-Ring 等硬体平台底下互通资料了。DARPA 在 1980 年正式推出 TCP/IP 技术后, 由于想要推展此项技术,因此与柏克莱 (Berkeley) 大学合作,将 TCP/IP 植入著名的 BSD Unix 系统内, 由于大学乃是未来人才资料库的培养处,所以, TCP/IP 这个技术便吸引越来越多使用者的投入, 而这种连接网络的技术也被称之为 Internet 。

没有任何王法的 Internet
现在我们知道 Internet 就是使用 TCP/IP 的网络连接技术所串联起来的一个网络世界, 而这个 Internet 在 1980 年代之后由于浏览器图形介面的兴起,因此快速的蔓延在电脑世界中。 但是, Internet 有没有人在管理啊?呵呵!很不巧的是, Internet 是一个管理相当松散的所在。 只要你能够使用任何支援 TCP/IP 技术的硬体与作业系统,并且实际连接上网络后, 你就进入 Internet 的世界了。在该世界当中,没有任何王法的保护,您的实际资料如果接上 Internet , 在任何时刻都需要自己保护自己,免得中了‘流弹’而受伤啊!

为什么说 Internet 没有王法呢?这是因为 Internet 仅是提供一个网络的连接介面, 所以您只要连接上 Internet 后,全世界都可以任你遨游,不过也因为如此,‘跨海’而来的攻击就成了简单的事件, 简单说,台湾的法律仅适用台湾地区对吧?但是电脑怪客可以在国外透过 Internet 对你的主机进行攻击, 我们的法律可管不到国外地区啊!虽然可以透过很多国际管道来寻求协助,不过,还是很难协助你缉拿凶手的啊。 因此啰,在你的主机要连上 Internet 之前,请先询问自己,真的有需要连上 Internet 吗?^_^

软硬体标准制定的成功带来的影响
现在我们常常听到‘你要上网啊!?那你要去买网络卡喔!还得要连接到 Internet 才行啊!’ 这个网络卡就是市面上随处可见的一个介面卡而已,至于 Internet 则是去向 Hinet/Seed net 或 其他网络服务提供公司 (Internet Service Provider, ISP) 申请的帐号密码。 问题是,是否就仅有网络卡与 Internet 才能上网啊?呵呵!当然不是!网络的硬体与软件可多着那! 不过,最成功的却是乙太网络 (Ethernet) 与 Internet ,这是为什么呢?这两者的技术比较好吗? 当然不是!这是因为这两者都被‘标准’所支援的缘故。

乙太网络最初是由全录 (Xerox PARC) 所建构出来的,而后透过 DEC, Intel 与 Xerox 合作将乙太网络标准化。 再经由 IEEE (Institute of Electrical and Electronic Engineers) 这个国际著名的专业组织利用一个 802 的专案制定出标准,之后有 19 家公司宣布支援 IEEE 所发布的 802.3 标准, 并且到了 1989 年国际标准组织 ISO (International Organization for Standard) 将乙太网络编入 IS88023 标准, 呵呵!这表示乙太网络已经是一项公认的标准介面了,如此一来,大家都可以依据这个标准来设定与开发自己的硬体, 只要硬体符合这个标准,理论上,他就能够加入乙太网络的世界,所以,购买乙太网络时, 仅需要查看这个乙太网络卡支援哪些标准就能够知道这个硬体的功能有哪些, 而不必知道这个乙太网络卡是由哪家公司所制造的呐。

Tips:
标准真的是个很重要的东西,真要感谢这些维护标准的专业组织。当有公司想要开发新的硬体时, 它可以参考标准组织所发布与维护的文件资料,透过这些文件资料后,该公司就知道要制作的硬体需要符合哪些标准, 同时也知道如何设计这些硬体,让它可以‘相容’于目前的机器,让使用者不会无所适从啊。 包括软件也有标准,早期 Linux 在开发时就是透过了解 POSIX 这个标准来设计核心的, 也使得 Linux 上面可以执行大多数的标准介面软件呢!您说,标准是否真的很重要啊!
鸟哥的图示
当然啦,乙太网络的成功除了加入成为国际标准之外,他持续发展成为星型连线也是一个相当重要的影响。 之后 Novell 的 NetWare 这个网络作业系统支援乙太网络,加上 NetWare 的强大功能与支援 IBM 的个人电脑, 都导致乙太网络的流行!直到现在,乙太网络是整个办公室与家庭内部的相当重要的一项硬体配备呢! 他也是等同于基本网络设备的同义字了呐! ^_^

除了硬体之外,TCP/IP 这个 Internet 的通讯协定也是有标准的,那就是底下的网站所提供的基本文件∶ 透过这些文件的辅助,任何人只要会写程序语言的话,就有可能发展出自己的 TCP/IP 软件, 并且连接上 Internet 。早期的 Linux 为了要连接上 Internet ,Linux 团队就自己撰写出 TCP/IP 的程序码, 透过的就是这些基础文件的标准依据啊!举例来说∶ RFC1122 这个建议文件就指出一些基本需求, 让人们可以了解啊!

透过这些软硬体的标准以及实际上很多公司的支援,让现今的网络世界很容易就串接在一起。 而目前我们最常谈到的就是上面提到的咚咚,硬体就属‘乙太网络’最为常见, 软件当然就是 TCP/IP 这个 Internet 最通用的通讯协定啰。那么乙太网络是啥? 为什么有高速乙太网络、超高速乙太网络? TCP/IP 是啥? 通讯协定是啥?浏览器又是啥?他们之间的关系是怎样?这些东西我们就慢慢来了解一下啰。


小标题的图示乙太网络
在目前的网络社会当中,常见的网络硬体包括有最常见的乙太网络,当然还有速度算是最快的光纤网络, 别忘了还有蓝芽无线技术以及 ATM (Asynchronous Transfer Mode, 可不是自动提款机啊!!) 等硬体。会有这么多网络硬体的原因有很多, 只要是将各个网络硬体的使用场合分类吧!举例来说,一般家庭使用的网络速度并不需要太高, 若使用光纤网络,贵的哩!用不起~而企业场合如果仅使用乙太网络作为整合介面, 又可能造成频宽的不足!所以啰,这些硬体各有其优缺点啦!

因此,在谈乙太网络之前您必须要了解的是,整个网络世界并非仅有乙太网络这个硬体介面, 只是由于个人电脑的成功以及相关作业系统的支援度,加上乙太网络加入成为标准, 使得乙太网络成为目前最为热门的网络硬体技术。 因此,我们当然得就乙太网络来聊一聊啦!事实上,整个乙太网络的发展建议您可以直接参考风信子与张民人先生翻译的 ‘Switched & Fast 乙太网络’一书,该书内容相当的有趣,挺适合阅读的呐。 底下我们仅做个简单的介绍而已说。

就像前一小节提到的,乙太网络最早是由全录这家公司为了自家的硬体设备而发展起来的, 经由发明者 Metcalfe 大力推动乙太网络成为业界的标准后, 再经由 3Com 发展大量的乙太网络硬体,配合越来越流行的相容于 IBM 的个人电脑, 以及支援网络的作业系统的流行,最后使得大家都参与乙太网络这个介面的发展呐, 也由于多数公司的量产,使得乙太网络设备越来越便宜。早期的一张 10/100 Mbps 的网络卡要价上千元, 目前最便宜的只要 150 台币就能购买到了!

乙太网络的速度
前面说到,乙太网络的流行除了相关的硬体以及作业系统的流行之外,‘标准’也是一个很重要的因素。 早先 IEEE 所制订的乙太网络标准为 802.3 的 IEEE 10BASE5 , 这个标准主要的定义是:‘10 代表传输速度为 10Mbps, BASE 表至采用基频信号来进行传输,至于 5 则是指每个网络节点之间最长可达 500 公尺。’ 网络的传输资讯就是 0 与 1 啊,因此,资料传输的单位为每秒多少 bit , 亦即是 M bits/second, Mbps 的意思。那么为何制订成为 10Mbps 呢? 这是因为早期的网络线压制的方法以及相关的制作方法,还有乙太网络卡制作的技术并不是很好, 加上当时的资料传输需求并没有像现在这么高,所以 10Mbps 已经可以符合大多数人的需求了。

当时的网络线使用的是旧式的同轴电缆线,这种线路在现在几乎已经看不到了。 取而代之的是类似传统电话线的双绞线 (Twisted Pair Ethernet) , IEEE 并将这种线路的乙太网络传输方法制订成为 10BASE-T 的标准。 10BASE-T 使用的是 10 Mbps 全速运作且采用无遮蔽式双绞线 (UTP) 的网络线。此外, 10BASE-T 的 UTP 网络线可以使用星形连线(star), 也就是以一个集线器为中心来串连各网络设备的一个方法, 有点类似底下的图示:

星形连线图示
图一、星形连线 (star) 简易图示

不同于早期以一条同轴电缆线连结所有的电脑的 bus 连线, 透过星形连线的帮助,我们可以很简单的加装其他的设备或者是移除其他设备, 而不会受到其他装置的影响,这对网络设备的扩充性与除错来说,都是一项相当棒的设计! 也因此 10BASE-T 让乙太网络设备的销售额大幅提升啊!

后来 IEEE 更制订了 802.3u 这个支援到 100Mbps 传输速度的 100BASE-T 标准,这个标准与 10BASE-T 差异不大, 只是双绞线线材制作需要更精良,同时也已经支援使用了四对绞线的网络线了, 也就是目前很常见的八蕊网络线呐!这种网络线我们常称为等级五 (Category 5, CAT5) 的网络线。 这种传输速度的乙太网络就被称为 Fast ethernet 。至于目前我们常常听到的 Gigabit 网络速度 1000 Mbps 又是什么呐?那就是 Gigabit ethernet 哩!只是 Gigabit ethernet 的网络线就需要更加的精良。

为什么每当传输速度增加时,网络线的要求就更严格呢? 这是因为当传输速度增加时,线材的电磁效应相互干扰会增强, 因此在网络线的制作时就得需要特别注意线材的质料以及内部线蕊心之间的缠绕情况配置等, 以使电子流之间的电磁干扰降到最小,才能使传输速度提升到应有的 Gigabit 。 所以说,在乙太网络世界当中,如果您想要提升原有的 fast ethernet 到 gigabit ethernet 的话, 除了网络卡 (Network Internet Card, NIC) 需要升级之外,主机与主机之间的网络线, 以及连接主机线路的集线器/交换器等,都必须要提升到可以支援 gigabit 速度等级的设备才行喔!

乙太网络的网络线接头
前面提到,网络的速度与线材是有一定程度的相关性的,那么线材的接头又是怎样呢? 目前在乙太网络上最常见到的接头就是 RJ-45 的网络接头,共有八蕊的接头,有点像是胖了的电话线接头, 如下所示:
RJ-45 接头示意图
图二、RJ-45 接头示意图

而 RJ-45 接头又因为每条蕊线的对应不同而分为 568A 与 568B 接头, 这两款接头内的蕊线对应如下表:

接头名称  1  2  3  4  5  6  7  8
568A 白绿 绿 白橙 蓝 白蓝 橙 白棕 棕
568B 白橙 橙 白绿 蓝 白蓝 绿 白棕 棕

事实上,虽然目前的乙太网络线有八蕊且两两成对,但实际使用的只有 1,2,3,6 蕊而已, 其他的则是某些特殊用途的场合才会使用到。但由于主机与主机的连线以及主机与集线器的连线时, 所使用的网络线脚位定义并不相同,因此由于接头的不同网络线又可分为两种:
  • 平行线:两边接头同为 568A 或同为 568B 时称为平行线,用在连结主机网络卡与集线器之间的线材;
  • 跳线:一边为 568A 一边为 568B 的接头时称为跳线,用在直接连结两部主机的网络卡。
而不同等级的线材除了针对线材材质的电阻等规格加以规范之外,有时为了更好的电磁效应屏蔽功能, 会将四对蕊线以金属薄膜包覆,以提供更佳的抗干扰能力。 没有屏蔽的我们就称为无遮蔽双绞线(UTP), 有屏蔽的就被称为有遮蔽双绞线(sheild Twisted Pair, STP)。 STP 的网络线由于加上屏蔽物质,所以较硬、较贵也较不易布线,不过优点则是对于电磁效应屏蔽较佳。 那么网络线如何选择?以目前来说,由于我们想到达到 Gigabit Ethernet 的网络速度, 所以必须使用 CAT 5e 以上等级包含 CAT 6 的网络线材才行!那么如何区分? 其实在网络线上面的缆线表面都会写上这条网络线的相关规范,看一看就知道啦! 而且还得要看看该条线段是‘跳线’还是‘平行线’喔!

资料在乙太网络间的传送 (MAC)
接下来要谈的是那么乙太网络到底是如何传输资料的呢? 由于目前办公室内部的乙太网络多是利用集线器以及交换器(Hub/Switch)做为中心, 利用星形连线达成网络环境的一种方式,因此网络线是一个很重要的媒体喔! 那么网络线里头最多就是电子讯号在跑嘛(就是 0 与 1 啊)!而如果同时有两部电脑要使用这个网络线时, 怎么可能同时发出两个电子讯号出来呢?这个时候是会发生讯号碰撞的问题的, 因此,网络共享媒体(包括网络线、集线器等)在单一时间点内, 仅能被一台主机所使用这个概念必须要先了解才行。

为了杜绝这种讯号碰撞产生的问题,所以乙太网络在发展时就使用一种名为 CSMA/CD (Carrier-Sense Multiple Access with Collision Detection) 的技术。 这种技术的特点就是当节点想要在网络媒体上面传输资料时, 会先探测该媒体上面是否有其他的节点正在使用,确定没有其他节点在使用该媒体时,该节点才会开始传送资料。 并且,当节点开始传送资料时,节点也能够同时探测是否有发生碰撞的现象。 (注:任何一个具有 MAC 的网络媒体接在该网络上面,就称为一个节点"node", 所以,一台主机就是一个 node !) 不过,事实上在这样的共享媒体环境下,当网络相当忙碌时, 资料的碰撞 (collision) 还是会发生的啦!

再来,我们还是得要知道一下‘那电子讯号由一台主机发出后,这个讯号怎么知道要传到哪里去?’ 既然有来源也有目标,那当然就得需要一个可以判别讯号来源与等待接受的主机的相关资讯啰? 没错!在乙太网络内,我们就是以 MAC (Media Access Control, 媒体存取控制)来管理资料传送的。 而 MAC 其实就是一个讯框( frame ), 你可以把他想成是一个在网络线上面传递的包裹, 而这个包裹是整个网络硬体上面传送资料的最小单位了。 也就是说,网络线可想成是一条‘一次仅可通过一个人’的独木桥, 而 MAC 就是在这个独木桥上面动的人啦!那 MAC 又该如何判断这独木桥的两端分别是何处呢? 这就得要看一看 MAC 这个讯框的内容了:

乙太网络的 MAC 讯框
图三、乙太网络的 MAC 讯框

在这个 MAC 当中,最重要的就是那个 6 Bytes 的目的与来源位址了! 事实上,在所有的乙太网络卡当中都有一个独一无二的网络卡卡号, 那就是上头的‘目的与来源位址’,这个位址是硬体位址( hardware address ), 共有 6 bytes ,分别由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF, 这 6 bytes 当中,前 3bytes 为厂商的代码,后 3bytes 则是该厂商自行设定的装置码了。 在 Linux 当中,你可以使用 ifconfig 这个指令来查阅你的网络卡卡号喔! 不过,由于 MAC 主要是与网络卡卡号有关,所以我们也常常将 MAC 作为网络卡卡号的代称。 特别注意,在这个 MAC 的传送中,他仅在区域网络内生效, 如果跨过不同的网络 (这个后面 IP 的部分时会介绍),那么来源与目的的位址就会跟着改变了。 这是因为变成不同网络卡之间的交流了嘛!所以卡号当然不同了!如下所示:

在不同主机间持续传送相同资料
图四、在不同主机间持续传送相同资料的 MAC 讯框变化

例如上面的图示,我的资料要由电脑 A 通过 B 后才送达 C ,而 B 电脑有两块网络卡, 其中 MAC-2 与 A 电脑的 MAC-1 互通,至于 MAC-3 则与 C 电脑的 MAC-4 互通。 但是 MAC-1 不能与 MAC-3 与 MAC-4 互通,为啥?因为 MAC-1 这块网络卡并没有与 MAC-3 及 MAC-4 使用同样的 switch/hub 相接嘛!所以,资料的流通会变成:
  1. 先由 MAC-1 传送到 MAC-2 ,此时来源是 MAC-1 而目的地是 MAC-2;
  2. B 电脑接收后,察看该讯框,发现目标其实是 C 电脑,而为了与 C 电脑沟通, 所以他会将讯框内的来源 MAC 改为 MAC-3 ,而目的改为 MAC-4 ,如此就可以直接传送到 C 电脑了。
也就是说,只要透过 B (就是路由器) 才将封包送到另一个网络 (IP 部分会讲) 去的时候, 那么讯框内的硬体位址就会被改变,然后才能够在同一个网络里面直接进行 frame 的流通啊!

另外,这个 MAC 讯框可以容纳多大的资料啊??在正规的乙太网络当中, 就如同上图三所标示的,一个讯框标准容量最大可达 1500Bytes, 也就是说,在整条网络上面,一个讯框最大就仅能达到 1500bytes。 那如果我有 100M Bytes 的资料要传送怎办呢?那您的作业系统会主动的将该 100M bytes 的资料拆解成为多个 1500bytes 的讯框后,传送到目的地,再重新组合成为原本 100Mbytes 的文件! 这里也就可以解释,为什么网络共享媒体一次只能有一台主机使用, 但是区域网络内的两部电脑却可以同时下载文件?这是因为‘每次要发出一个讯框时, 都需要进行 CSMA/CD 的监听,而刚刚成功发出讯框的那部主机, 也需要再使用 CSMA/CD 来跟大家抢。’ 所以啰,谁能抢到呢?有时后因为网络太忙碌,那么 frame 与 frame 就可能会碰撞啦。

在早期 10/100 Mbps 的年代,这个 1500 bytes 的网络媒体传输数值还没有多大的影响, 但到了 gigabit 的年代,如果使用的还是 1500 bytes 时,大型的文件将会被拆解成多个 frame , 而多个 frame 就意味着主机需要进行多次资料的拆解,网络也需要进行多次的传输。 如果可以将这个 MAC 的资料存放处加大的话,那么不就可以节省系统资源, 并且网络传递的次数也会降低,呵呵!没错~在这样的思考逻辑下,于是目前的 Gigabit Ethernet 通常都已经支援大的讯框架构,那就是 Jumbo Frame 啰~ 一般来说,只要是 Gigabit 乙太网络卡都会支援 Jumbo frame 的 (请参考文末的参考文献连结), 他的大小通常是定义在 9000 bytes 的, 不过其他的乙太网络媒体可就不一定了。由于网络媒体支援 Jumbo frame 后, 他的效能是会有所改善的,所以挑选乙太网络媒体时,记得查阅一下该媒体的说明喔!
Tips:
由于网络卡卡号是跟着网络卡走的,并不会因为重装作业系统而改变, 所以防火墙软件大多也能够针对网络卡来进行抵挡的工作喔! 不过抵挡网卡仅能在区域网络内进行而已,因为 MAC 不能跨 router 嘛!!
鸟哥的图示
共不共享很重要,集线器还是交换器?
刚刚我们上面提到了,当一个很忙碌的网络在运作时,网络共享媒体就可能会发生碰撞的情况, 这是因为 CSMA/CD 的缘故。那我们也知道在一个星形连线当中, 正中央的那个设备是集线器或交换器来连接各 PC 的。 那么 Hub 与 Switch 有啥不同啊?其实,那个 Hub 就是网络共享媒体, Hub 仅是将所有来自 PC 的 frame 再次送出去给所有的 PC 而已,所以他是个共享媒体。

Switch 则不然喔!Switch 内部具有微处理器以及记忆体,这个记忆体可以记录每个 switch port 与其连接的 PC 的 MAC 位址,所以,当来自 switch 两端的 PC 要互传资料时, 每个 frame 将不会透过 CSMA/CD 的监听,而是透过 switch 直接将该 frame 送到目标主机上头去呐! 也就是说, switch 不是个共享媒体,且 switch 的每个端口 (port) 都具有独立的频宽喔! 举例来说,10/100 的 Hub 上连结 5 部主机,那么整个 10/100Mbps 是分给这五部主机的, 所以这五部主机总共只能使用 10/100Mbps 而已。那如果是 switch 呢?由于‘每个 port 都具有 10/100Mbps 的频宽’, 所以就看您当时的传输行为是如何啰!举例来说,如果是底下的状况时,每个连线都是 10/100 Mbps 的。

Switch 的频宽简介
图五、Switch 的频宽简介

A 传送到 D 与 B 传送到 C 都独自拥有 10/100Mbps 的频宽,两边并不会互相影响! 不过,如果是 A 与 D 都传给 C 时,由于 C port 就仅有 10/100Mbps ,等于 A 与 D 都需要抢 C 节点的 10/100Mbps 来用的意思。 总之,你就是得要记得的是,switch 已经克服了封包碰撞的问题,因为他有个 switch port 对应 MAC 的相关功能, 所以 switch 并非共享媒体喔!同时需要记得的是,现在的 switch 规格很多, 在选购的时候,千万记得选购可以支援全双工/半双工,以及支援 Jumbo frame 的为佳!

那什么是全双工/半双工(full-duplex, half-duplex)? 前面谈到网络线时,我们知道八蕊的网络线实际上仅有两对被使用,一对是用在传送,另一对则是在接收。 如果两端的 PC 同时支援全双工时,那表示 Input/Output 均可达到 10/100Mbps, 亦即资料的传送与接收同时均可达到 10/100bps 的意思,总频宽则可达到 20/200Mbps 啰 (其实是有点语病的,因为 Input 可达 10/100Mbps, output 可达 10/100Mbps , 而不是 Input 可直接达到 20/200Mbps 喔!)如果您的网络环境想要达到全双工时, 使用共享媒体的 Hub 是不可能的,因为网络线脚位的关系,无法使用共享媒体来达到全双工的! 如果你的 switch 也支援全双工模式,那么在 switch 两端的 PC 才能达到全双工喔!

一些常见的乙太网络技术
如果您常常在网络上搜寻一些硬体资讯时,或者是常常跑到资讯卖场去看看新鲜货时, 应该会注意到一些网络硬体,尤其是越来越普及的 switch 这玩意儿的相关硬体资讯吧! 而且,我们知道网络线因为接头的关系而有平行线与跳线,这两种网络线使用的时机并不相同, 那么你是否一定需要购买特殊的线段才能够连结 PC 与 switch 呢?呵呵!不需要~ 因为现在的硬体实在太聪明了!底下的功能您应该都可以在新的硬体上面发现的!

自动协调速度机制
我们都知道现在的乙太网络卡是可以向下支援的,亦即是 Gigabit 网络卡可以与早期的 10/100Mbps 网络卡连结而不会发生问题。但是,此时的网络速度是怎样判定呢? 早期的 switch/hub 必须要手动切换速度才行,新的 hub/switch 因为有支援 auto-negotiation 又称为 N-Way 的功能,他可自动的协调出最高的传输速度来沟通喔!如果有 Gigabit 与 10/100Mbps 在 switch 上面, 则 N-Way 会先使用最高的速度 (gigabit) 测试是否能够全部支援,如果不行的话,就降速到下一个等级亦即 100 Mbps 的速度来运作的!

Auto MDI/MDIX
那么我们是否需要自行分辨平行线与跳线呢?不需要啦!因为 switch 若含有auto MDI/MDIX 的功能时, 会自动分辨网络线的脚位来调整连线的,所以您就不需要管你的网络线是跳线还是平行线啰!方便吧! ^_^

讯号衰减造成的问题
由于电子讯号是会衰减的,所以当网络线过长导致电子讯号衰减的情况严重时, 就会导致连线品质的不良了。因此,连结各个节点的网络线长度是有限制的喔! 不过,一般来说,现今的乙太网络 CAT5 等级的网络线大概都可以支援到 100 公尺的长度, 所以应该无庸担心才是呐!

但是,造成讯号衰减的情况并非仅有网络线长度而已!如果您的网络线折得太严重(例如在门边常常被门板压,导致变形) ,或者是自行压制网络线接头,但是接头部分的八蕊蕊线缠绕度不足导致电磁干扰严重, 或者是网络线放在户外风吹日晒导致脆化的情况等等,都会导致电子讯号传递的不良而造成连线品质恶劣, 此时常常就会发现偶而可以连线、有时却又无法连线的问题了!因此,当您需要针对企业内部来搭建整体的网络时, 注意结构化布线可是很重要的喔!

结构化布线
所谓的结构化布线指的是将各个网络的元件分别拆开,分别安装与布置到企业内部, 则未来想要提升网络硬体等级或者是移动某些网络设备时,只需要更动类似配线盘的机柜处, 以及末端的墙上预留孔与主机设备的连线就能够达到目的了。例如底下的图示:

结构化布线简易图示
图六、结构化布线简易图示

在墙内的布线需要很注意,因为可能一布线完成后就使用 5-10 年以上喔! 那您需要注意的仅有末端墙上的预留孔以及配线端部分。 事实上,光是结构化布线所需要选择的网络媒体与网络线的等级, 还有机柜、机架,以及美化与隐藏网络线的材料等等的挑选,以及实际施工所需要注意的事项, 还有所有硬体、施工所需要注意的标准规范等等, 已经可以写满厚厚一本书,而鸟哥这里的文章旨在介绍一个中小企业内部主机数量较少的环境, 所以仅提到最简单的以一个或两个交换器 (swtich) 串接所有网络设备的小型星形连线状态而已, 如果您有需要相关硬体结构化布线的资讯,可以参考风信子兄翻译的‘Swtich and Fast 乙太网络’一书的后半段!至于网络上的高手吗?您可以前往酷学园请教 ZMAN 大哥喔!

小标题的图示OSI 七层协定
目前我们的主机只要能够取得正确的 IP 与相关参数设定时,你就可以连上 Internet 了, 根本不管你的网络硬体是乙太网络还是光纤网络。而且,你主机的作业系统是啥, Internet 也是不管的! 这是为什么呢?因为网络的传输是有分层架构的,每个分层 (layer) 是可以独立的。 同时每个分层都有独自的标准可供依循,例如在网络媒体的硬体部分就可以参考 IEEE 的 802.3 的标准! 如此一来,大家都可以在自己的分层当中找到相关的标准来设定自己的资料,如此网络连结就变的更容易了。 关于网络的分层我们最喜欢拿 OSI (Open system Interconnection) 七层协定来说明喔! 事实上, OSI 七层协定只是一个参考的模型 (model),不过,由于 OSI 所定义出来的七层协定相当良好, 所以拿来当作网络连线解释真是太棒了!底下就来说说吧!

分层负责内容
Layer 1
实体层
Physical Layer, PHY
在这个层级当中主要定义了最基础的网络硬体标准,包括各种网络线、各种无线连线方式,各种设备规范、 以及各种接头的规则,还有传输讯号的电压等等,反正与硬体有关的标准大多都在这个层级当中定义的!
Layer 2
资料连接层
Data-Link Layer
由于传送资料的网络媒体是以电子讯号进行传送,所以我们的资料要使用这样的讯号传送时, 就需要制订各种网络型态的讯框 (frame) 了,才能确保资料可以在不同的网络媒体进行传送的动作。 所以,在这一层当中就制订了 frame 的格式以及通过网络的方式。 包括讯框的资料格式、错误控制、流量控制、检查资料传输错误的方法等等,都在这里控制。 既然与讯框有关,当然这个层级就与前面提到的 MAC 有很强烈的相关性啰!

但我们知道事实上目前的 Internet 使用的其实是 IP 来进行连线的啊!但硬体资料却是由讯框所传送的。 为了要将两者对应 (MAC 与 IP 的对应),就必须要经由 Address Resolution Protocol (ARP) 这个协定来帮忙解析出对应才行!
Layer 3
网络层
Network Layer
这一层是我们最感兴趣的啰~因为我们提及的 IP (Internet Protocol) 就是在这一层定义的, 同时也定义出电脑之间的连线建立、终止与维持等,资料封包 (packet) 的传输路径选择等等, 因此这个层级当中最重要的除了 IP 之外,就是封包能否到达目的地的路由 (route) 概念了! 此外,这一个网络层可以涵盖实体层与资料连结层,通常我们不需要设定硬体与相关 MAC 的资料, 就是因为网络层已经 (有点类似) 隐藏了底下两层,让我们只要设定好 IP 就能够上网呐! IP 与 route 的部分我们会在下一小节加以介绍的。
Layer 4
传送层
Transport Layer
这一个分层定义了发送端与接收端的连线技术(如 TCP 技术), 同时包括该技术的封包格式,资料封包的传送、流程的控制、传输过程的探测检查与复原重新传送等等, 以确保各个资料封包可以正确无误的到达目的端。
Layer 5
会谈层
Session Layer
在这个层级当中主要定义了两个位址之间的连线通道之连接与挂断,此外,亦可建立应用程序之对谈、 提供其他加强型服务如网络管理、签到签退、对谈之控制等等。如果说传送层是在判断资料封包是否可以正确的到达目标, 那么会谈层则是在确定网络服务建立连线的确认,例如三向交握。这部分我们会在底下的 TCP 技术当中做个说明。
Layer 6
表现层
Presentation Layer
我们在应用程序上面所制作出来的资料格式不一定符合网络传输的标准编码格式的! 所以,在这个层级当中,主要的动作就是:将来自本地端应用程序的资料格式转换(或者是重新编码)成为网络的标准格式, 然后再交给底下传送层等的协定来进行处理。所以,在这个层级上面主要定义的是网络服务(或程序)之间的资料格式的转换, 包括资料的加解密也是在这个分层上面处理。
Layer 7
应用层
Application Layer
完全与程序有关的啰,包括定义出文件的读取、复制、开启、关闭等等, 常见的程序包括有浏览器、资料库处理系统与电子邮件系统等等。

事实上,在上述的七层协定当中,前两层(实体与资料连接层)主要就是由一些硬体标准所规范出来的, 像我们前一小节提到的乙太网络之 MAC 讯框相关的格式,以及一些类似乙太网络线接头规范、 CSMA/CD 的技术等等,都是在前两层进行规范的。

至于网络层与传送层则与 TCP/IP 有关。我们知道目前的 Internet 相关的 IP 与 TCP 封包格式是由 Internet Network Information Center (INTERNIC) 所统一整理与维护的,至于 TCP/IP 的标准则主要以 Request For Comment (RFC) 技术报告的形式公开。 而会谈、表现与应用层则主要与作业系统及应用程序有关了。

那么这七层到底是如何运作的呢?我们以常见的 WWW 浏览器来进行说明好了。 假设你想要由奇摩雅虎(tw.yahoo.com)下载一个大于 10Mbytes 的文件, 那么你必须要由你的主机打开浏览器,并且输入相关的网址列后才能开始下载,对吧! 不过,我们知道由于网络媒体的关系,标准乙太网络的硬体最大仅能支援 1500 bytes 的讯框大小, 而我要去奇摩雅虎时,必须要知道奇摩雅虎那部主机的 IP 才行,而我们的浏览器使用的是 TCP 的封包格式。这样一层一层下来,你可以将各个分层想成是一个一个的大袋子, 而且每个袋子都必须要包含在下一个袋子内,例如 IP 的袋子必须要装在 MAC 讯框的袋子内。
  • 所以,由于最后被传送的袋子(实体层)的限制,我必须要将 10Mbytes 的文件先切成数个小包, 然后将这些小包给他包到 TCP 的袋子内,这个袋子记载了我的资料内容。
  • 然后这个袋子还要装到 IP 这个袋子内,IP 这个袋子会记录我的住址以及要传送到的目的地的住址,
  • 最后再将这个 IP 的袋子装到 MAC 的讯框袋子内, 这个袋子就记录了可以在同一区域内传递袋子的网卡卡号了。
之后这个 MAC 的大袋子就会被带到下个传递点去, 当然啦, MAC 这个袋子的传递是需要符合 CSMA/CD 以及乙太网络的相关定义的喔! 当传到目的地后,对方会一个袋子一个袋子的解开,最后拿到他们的资料。不过,由于我的 10Mbytes 已经被分成多个小袋子了,所以每个小袋子内需要有序号,这样当所有的小袋子都到达目的地后, 对方才可以依照这些序号将所有小袋子内的资料给他整合成为原来的资料啊!

所以啊,这些分层可以使用底下的图示来看:

OSI 七层协定的相关性
图七、OSI 七层协定的相关性

例题一:请找出您 Linux 主机上面的网络卡硬体位址(Hardware Address, 或 MAC), 如果已经连上网络的话,请找出您区域网络内其他电脑的网络卡卡号。

答:
    在 Linux 底下网络卡的装置代号一般是 eth0 ,所以想要了解您的网络卡卡号时,可以使用: ‘ ifconfig eth0 ’这个指令来查阅,在出现的资料中第一行最右边搜寻 HWaddr 的后面接的那串咚咚,就是你的卡号。 至于其他的卡号与 IP 的对应方面,直接输入‘ arp -n ’应该就可以查阅的到相关的对应表啰! 更多说明请先使用 man 来查询,后续章节我们也会继续加以介绍的。

大标题的图示IP 与 MAC
我们现在知道要有网络的话,必须要有网络相关的硬体,而目前最常见的网络硬体介面为乙太网络, 包括网络线、网络卡、Hub/Switch 等等。而乙太网络上面的传输使用网络卡卡号为基准的 MAC 讯框, 配合 CSMA/CD 的监听技术来传送讯框,这是硬体部分。那么在软件部分,我们知道 Internet 其实就是 TCP/IP 这个通讯协定的通称,Internet 是由 INTERNIC 所统一管理的, 但其实他仅是负责分配 Internet 上面的 IP 以及提供相关的 TCP/IP 技术文件而已, 另外,在 TCP/IP 上面还有很多的应用程序,包括 FTP, HTTP, EMAIL 等等的技术! 底下我们就先来谈一谈最底层的 MAC 与 IP 吧!


小标题的图示传输单位与 MAC
想一想,如果没有电的话,我们的网络是否能够通行无阻?当然不行! 因为网络其实就是电子讯号的传送啊!如果没有电,当然就没有办法传送讯息了。而电子讯号只有 0 跟 1 啊,所以在网络单位的计算上,一般通常是以二进位的 bit 为单位的。那么这个 bit 与我们通常用来计算文件大小的单位 bytes 有什么关连性?其实:
    1byte = 8bits
所以啦,一般来说,我们看到的网络提供者 (Internet Services Provider, ISP) 所宣称他们的 ADSL 传输速度可以达到 下行/上行 2Mbps/128Kbps ( Kbits per second) 时,那个 Kb 指的可不是 bytes 而是 bits 喔!所以 2M/128K 在实际的文件大小传输速度上面,最大理论的传输为 256KBps/16 KBps(KBytes per second),所以正常下载的速度约在每秒 100~200 KBytes 之间呐! 同样的道理,在网络卡或者是一些网络媒体的广告上面,他们都会宣称自己的产品可以自动辨识传输速度为 10/100 Mbps ( Mega-bits per second),呵呵!该数值还是得再除以 8 才是我们一般常用的文件容量计算的单位 bytes 喔!这样可以了解传输单位的意义了吗?!

那么 MAC 呢?MAC 是 Media Access Control (媒体存取控制),我们在前小节的 图三已经介绍过该讯框的资料格式, 且 MAC 常用来做为硬体位址 (Hardware address) 的代称。我们自己主机上面的 MAC 很好解决, 假设您的网络卡仅有一张,则 Linux 系统内网卡的代号预设由 eth0 开始编号, 因此当你输入 ifconfig eth0 这个指令时,就会出现如下的讯息了:
在 Linux 环境下
[root@linux ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:01:03:43:E5:34
          inet addr:192.168.1.100   Bcast:192.168.1.255   Mask:255.255.255.0
          inet6 addr: fe80::201:3ff:fe43:e534/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
.....

在 Windows 环境下
C:\Documents and Settings\admin..> ipconfig /all
....
        Physical Address. . . . . . . . . : 00-01-03-43-E5-34
....
事实上,这个 MAC 几乎都是焊死在网络卡上面的,所以不能够被修改。 不过,近来有些笔记型电脑上面的网络卡可以透过软件来进行 MAC 的修改啰~ 好,在我们的主机上网络卡可以透过 ifconfig 来查询到 MAC ,但我们知道讯框是在两张网络卡之间传讯的, 那我如何知道其他主机的网络卡卡号呢?此时就得要透过 ARP (Address Resolution Protocol) 的帮忙了。 由于 TCP/IP 的通讯协定内大多仅需要了解 IP 即可,但讯框却是透过 MAC 来传递, 因此 IP 与 MAC 就得要透过一个解析的功能啰!那就是 ARP 啦!

当我们的主机想要找出目标 IP 时,就会对整个区域网络进行广播封包(broadcast)的传送, 这个广播封包可以对所有区域网络内的电脑要求回报他的 IP 与 MAC , 当目标 IP 看到这个广播封包时,就会回应您主机相关的 MAC 资讯,如果非目标主机接到这个封包, 就会主动的忽略!如此一来,你就可以取得目标主机的 MAC 啰! 而这个目标主机的 MAC 就会被记录到你的主机内的 ARP table (ARP table 在记忆体中), 不过还是要再次的提醒, MAC 是不能跨路由的,请参考图四的相关说明喔! 如果想要查阅你的 ARP 记录,可以使用 arp 这个指令即可。
[root@linux ~]# arp -[nd] hostname
[root@linux ~]# arp -s hostname(IP) Hardware_address
参数:
-n :将主机名称以 IP 的型态显示
-d :将 hostname 的 hardware_address 由 ARP table 当中删除掉
-s :设定某个 IP 或 hostname 的 MAC 到 ARP table 当中 
范例一:
[root@linux ~]# arp -n
Address            HWtype  HWaddress           Flags Mask    Iface
192.168.1.100      ether   00:01:03:01:02:03      C          eth0
192.168.1.240      ether   00:01:03:01:DE:0A      C          eth0
192.168.1.254      ether   00:01:03:55:74:AB      C          eth0
范例二:
[root@linux ~]# arp -s 192.168.1.100  01:00:2D:23:A1:0E
# 这个指令的目的在建立静态 ARP 
如同上面的表格,我主机上面的 ARP 记录着这么多的 IP 与 MAC 的对应, 这个 ARP 的好处可多了!由于有记录 MAC 与 IP 的对应,因此当下回我的资料又传送到同一台主机时, 我的主机会主动的传送到同一个 MAC 去,而不需要再次透过 broadcast 来查询 MAC, 所以省去了很多网络延迟的时间喔!此外,特别注意的是, ARP table 是动态的资讯,他会随时随着您的网络里面电脑的 IP 更动而变化,所以,即使您常常更动您的电脑 IP,不要担心,因为 ARP table 会自动的重新对应 IP 与 MAC 的表格内容!但如果你有特殊需求的话, 也可以利用‘ arp -s ’这个参数来定义静态的 ARP 对应喔!


小标题的图示IP 的组成
好了,接下来可以开始介绍那个可爱的 TCP/IP 里头的 IP 啦!这个 IP 是 Internet Protocol 的缩写,他的功能有点像是‘门牌号码’,主要是在网络层( Layer 3 )的功能, 那么这个 IP 有哪些重要的地方需要了解的呢?底下我们就来谈一谈吧!

IP 是一种资料封包的格式,这个 IP 资料封包最大可以到达 65535 bytes , 然而就如同图三乙太网络讯框的资料所示, 由于标准乙太网络讯框可包含的资料最大仅达 1500 bytes , 并且依照不同的网络媒体而有不同的 MAC 讯框大小,我们前面也谈到的 OSI 七层协定当中, 由于 IP 封包必须要放到 MAC 讯框当中,因此 IP 封包在 Internet 上面应该是不可能达到 65535 bytes 这个值的(因为必须小于 MAC 讯框所能容许的最大值)。另外, 由于网络连线过程当中封包所经过的网络媒体各不相同,因此 MAC 讯框大小当然也不同, 而为了让 IP 封包可以适用在所有的网络媒体讯框当中,因此, IP 封包是可以被‘重组的’

我们知道 MAC 讯框表头 (将他想成是一个信封袋外面的记录资料) 当中最重要的就是网络卡卡号 (hardware address) 这个咚咚!(参考图三 ),那么 IP 表头最重要的是什么呢?呵呵!那就是 IP 位址 (address) 了!目前我们在 Internet 上面使用的 IP 协定是第四版,通称为 IPv4 ,这个版本的 IP 位址主要是由 32 bits 的资料所组成的一组数据,也就是 32 个 0 跟 1 所组成的数据资料,因为只有零跟一,所以 IP 的组成当然就是电脑认识的二进位的表示方式了。

不过,因为人类对于二进位实在是不怎么熟悉,所以为了顺应人们对于十进位的依赖性,因此,就将 32 bits 的 IP 分成四小段,每段含有 8 个 bits ,将 8 个 bits 计算成为十进位,并且每一段中间以小数点隔开,那就成了目前大家所熟悉的 IP 的书写模样了。如下所示:
IP 的表示式:
00000000.00000000.00000000.00000000   ==> 0.0.0.0
11111111.11111111.11111111.11111111   ==> 255.255.255.255
所以 IP 最小可以由 0.0.0.0 一直到 255.255.255.255 哩!事实上, IP 的组成当中,除了以 32 bits 的组成方式来说明外,还具有所谓的‘网络’的概念存在。底下就来谈一谈什么是网络吧!


小标题的图示网络的概念与 IP 的分级
事实上在 IP 的 32 bits 资料中,主要分为 HOST_ID 与 Net_ID 两部份,我们先以 192.168.0.0 ~ 192.168.0.255 这个 C Class 的网络当作例子来说明好了:
192.168.0.0~192.168.0.255 这个 C Class 的说明:
11000000.10101000.00000000.00000000
11000000.10101000.00000000.11111111
|----------Net_ID---------|-host--|
在 C Class 的范例当中,前面三组数字 (192.168.0) 称为网络号码 (Net_ID) ,最后面一组数字则称为 主机号码 (Host_ID)。同一个网络当中的定义是‘在同一个物理网段内,主机的 IP 具有相同的 Net_ID ,并且具有独特的 Host_ID’,那么这些 IP 群就是同一个网络内的 IP 网段啦!
Tips:
什么是物理网段呢?当所有的主机都是使用同一个网络媒体串在一起, 这个时候这些主机在实体装置上面其实是连线在一起的,那么就可以称为这些主机在同一个物理网段内了! 同时并请注意,同一个物理网段之内,可以依据不同的 IP 的设定,而设定成多个‘IP 网段’喔!
鸟哥的图示
上面例子当中的 192.168.0.1, 192.168.0.2, ...., 192.168.0.255 这些 IP 就是同一个网络内的 IP 群(同一个网络也称为同一个网段!),请注意,同一个 Net_ID 内,不能具有相同的 Host_ID ,否则就会发生 IP 冲突,可能会造成两部主机都没有办法使用网络的问题! 那么同一个网络该怎么设定,与将 IP 设定在同一个网络之内有什么好处呢?
  • 在同一个网段内,Net_ID 是不变的,而 Host_ID 则是不可重复,此外, Host_ID 在二进位的表示法当中,不可同时为 0 也不可同时为 1 ,例如上面的例子当中, 192.168.0.0 ( Host_ID 全部为 0 )以及 192.168.0.255 ( Host_ID 全部为 1 ) 不可用来作为网段内主机的 IP 设定,也就是说,这个网段内可用来设定主机的 IP 是由 192.168.0.1 到 192.168.0.254;

  • 在同一个网络之内,每一台主机都可以透过 MAC 讯框的格式传递资料, 并透过 ARP 协定与广播封包 (broadcast) 取得 MAC 与 IP 的对应后,直接利用 MAC 讯框传递资料。

  • 在同一个物理网段之内,如果两部主机设定成不同的 IP 网段,则两部主机无法直接以 MAC 讯框格式进行资料的传递,因为广播封包无法查询到 MAC 与 IP 的对应。

  • 当 Host_ID 所占用的位元越大,亦即 Host_ID 数量越多时,表示同一个网络内可用以设定主机的 IP 数量越多。
所以说,贵单位公司内的电脑群,或者是您宿舍或家里面的所有电脑,当然都设定在同一个网络内是最方便的, 因为如此一来每一台电脑都可以直接透过 MAC 来进行资料的交流,而不必经由 Router ( 路由器 ) 来进行封包的转递呢!( Router 这部份在后续才会提及! )。

IP 的分级
好了,现在我们知道 Net_ID 越大时,表示 Host_ID 越少,亦即网络内可以分配的 IP 数量就越少了! 咦!这表示 Net_ID 是有分级的喔!是啊!没错~刚刚上面那个 192.168.0.0~192.168.0.255 称为 Class C, 那还有哪些等级啊?目前 Internet 将 IP 简单的分类成为三种常见的等级,亦即所谓的 A, B, C class, 他们代表的意义如下:
以二进位说明 Network 第一个数字的定义:
A Class : 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 0
          |--net--|---------host------------|
B Class : 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 10
          |------net-------|------host------|
C Class : 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 110
          |-----------net-----------|-host--|

三种分级在十进位的表示:
A Class :   0.xx.xx.xx ~ 126.xx.xx.xx
B Class : 128.xx.xx.xx ~ 191.xx.xx.xx
C Class : 192.xx.xx.xx ~ 223.xx.xx.xx
在上表中,可能您会觉得很奇怪,咦!那个 127.xx.xx.xx 怎么不见了?!他应该也是 A Class 的一段吧?!没错,是不见了, 因为这个网段被拿去给作业系统做为内部回圈网络 ( loopback ) 之用了!在各个作业系统当中,不管该主机的硬体有没有网络卡, 为了让作业确认自己的网络没有问题,所以将 127.xx.xx.xx 这个 A Class 的网段拿到作业系统当中,来做为内部的回路测试!所以啦,这个 127.0.0.1 就不可以用来做为其他网络卡的网络网络之设定喔。


小标题的图示Netmask 的用途与子网络的切分
在上一小节当中提到的 A, B, C 三个层级的网络是由 IP 协定预设分配的,在这样的层级当中,我们可以发现 A Class 可以用于设定电脑主机的 IP 数量 ( Host ) 真的是很多,在同一个 A Class 的网络内,主机的数量可以达到‘ 256 X 256 X 256 - 2(Host_ID 全为 0 或 1 ) = 16777214’,不过, 这样的设定情况对于一般网络的效能却是不太好的!为什么呢?

让我们回到前面乙太网络的 MAC 运作模式那个小节,我们知道在共享媒体上面, 每当任何一台主机想要使用该网络媒体时,就得要利用 CSMA/CD 的方式去进行网络监听的工作,此时对于这么大的一个网络架构来说,每部主机要发出 MAC 讯框前要进行的这个 CSMA/CD 实在会造成系统上面很严重的停顿问题啊! 因为封包碰撞 (collision) 以及在进行 MAC 与 IP 对应的广播 (broadcast) 时, 要回应的主机数量也真是太多了点吧! 如此一来,整个网络的效能将会变的很糟糕!所以,一般来说,我们最多都仅设定 C Class 做为整个区域网络的架构,其实就连 C Class 也都太大了!不过不打紧,只要记得一个网络内不要超过 30 部以上的主机数量,那样网络的效能就会比较好一点~

其实,除了 C Class 之外,我们还是可以继续将网络切的更细的!上个小节我们提到 IP 这个 32 bits 的数值中分为 Net_ID 与 Host_ID,其中 C Class 的 Net_ID 占了 24 bits ,而其实我们还可以将这样的网络切的更细,就是让第一个 Host_ID 被拿来作为 Net_ID ,所以,整个 Net_ID 就有 25 bits ,至于 Host_ID 则减少为 7 bits 。在这样的情况下,原来的一个 C Class 的网络就可以被切分为两个子网络,而每个子网络就有‘ 256/2 - 2 = 126 ’个可用的 IP 了!这样一来,在这个网络当中的主机在进行逻辑广播时,回应的主机数量就少了一半, 当然对于网络的效能多多少少有点好处的啦!

好了,知道了子网络切分的大致情况后,现在要谈的是,那么到底是什么参数来达成子网络的切分呢?呵呵!那就是 Netmask ( 子网络遮罩 ) 的用途啦!这个 Netmask 是用来定义出网络的最重要的一个参数了!不过他也最难理解了~ @_@。为了帮助大家比较容易记忆住 Netmask 的设定依据,底下我们介绍一个比较容易记忆的方法。同样以 192.168.0.0~192.168.0.255 这个网络为范例好了,如下所示,这个 IP 网段可以分为 Net_ID 与 Host_ID,既然 Net_ID 是不可变的,那就假设他所占据的 bits 已经被用光了 ( 全部为 1 ),而 Host_ID 是可变的,就将他想成是保留着 ( 全部为 0 ),所以, Netmask 的表示就成为:
192.168.0.0~192.168.0.255 这个 C Class 的 Netmask 说明
11000000.10101000.00000000.00000000
11000000.10101000.00000000.11111111
|----------Net_ID---------|-host--|
11111111.11111111.11111111.00000000  <== Netmask 二进位
  255   .  255   .  255   .   0      <== Netmask 十进位
将他转成十进位的话,就成为‘255.255.255.0’啦! 这样记忆简单多了吧!照这样的记忆方法,那么 A, B, C Class 的 Netmask 表示就成为这样:
Class A, B, C 三个等级的 Netmask 表示方式:
A Class : 11111111.00000000.00000000.00000000 ==> 255.  0.  0.  0
B Class : 11111111.11111111.00000000.00000000 ==> 255.255.  0.  0
C Class : 11111111.11111111.11111111.00000000 ==> 255.255.255.  0
所以说, 192.168.0.0~192.168.0.255 这个 C Class 的网络中,他的 Netmask 就是 255.255.255.0 了!再来,我们刚刚提到了当 Host_ID 全部为 0 以及全部为 1 的时后该 IP 是不可以使用的,因为 Host_ID 全部为 0 的时后,表示 IP 是该网段的 Network ,至于全部为 1 的时后就表示该网段最后一个 IP ,也称为 Broadcast ,所以说,在 192.168.0.0 ~ 192.168.0.255 这个 IP 网段里面的相关网络参数就有:
Netmask:   255.255.255.0   <==网络定义中,最重要的参数
Network:   192.168.0.0     <==第一个 IP
Broadcast: 192.168.0.255   <==最后一个 IP
可用以设定成为主机的 IP 数:
192.168.0.1 ~ 192.168.0.254
一般来说,如果我们知道了 Network 以及 Netmask 之后,就可以定义出该网络的所有 IP 了!因为由 Netmask 就可以推算出来 Broadcast 的 IP 啊!因此,我们常常会以 Network 以及 Netmask 来表示一个网络,例如这样的写法:
Network/Netmask
192.168.0.0/255.255.255.0
192.168.0.0/24    <==因为 Net_ID 共有 24 个 bits
另外,既然 Netmask 里面的 Net_ID 都是 1 ,那么 C Class 共有 24 bits 的 Net_ID ,所以啦,就有类似上面 192.168.0.0/24 这样的写法啰!这就是一般网络的表示方法。好了,刚刚提到 C Class 还可以继续进行子网络 ( Subnet ) 的切分啊,以 192.168.0.0/24 这个情况为例,他要如何再细分为两个子网络呢?我们已经知道 Host_ID 可以拿来当作 Net_ID,那么 Net_ID 使用了 25 bits 时,就会如下所示:
原本的 C Class 的 Net_ID 与 Host_ID 的分别
11000000.10101000.00000000.00000000      Network:   192.168.0.0
11000000.10101000.00000000.11111111      Broadcast: 192.168.0.255
|----------Net_ID---------|-host--|

切成两个子网络之后的 Net_ID 与 Host_ID 为何?
11000000.10101000.00000000.0 0000000  多了一个 Net_ID 了, 为0
11000000.10101000.00000000.1 0000000  多了一个 Net_ID 了, 为1
|----------Net_ID-----------|-host--|

第一个子网络
Network:   11000000.10101000.00000000.0 0000000   192.168.0.0
Broadcast: 11000000.10101000.00000000.0 1111111   192.168.0.127
           |----------Net_ID-----------|-host-|
Netmask:   11111111.11111111.11111111.1 0000000   255.255.255.128
所有 IP 与网络表示式:
192.168.0.0/25 或 192.168.0.0/255.255.255.128

第二个子网络
Network:   11000000.10101000.00000000.1 0000000   192.168.0.128
Broadcast: 11000000.10101000.00000000.1 1111111   192.168.0.255
           |----------Net_ID-----------|-host-|
Netmask:   11111111.11111111.11111111.1 0000000   255.255.255.128
所有 IP 与网络表示式:
192.168.0.128/25 或 192.168.0.128/255.255.255.128
所以说,当再细分下去时,就会得到两个子网络,而两个子网络还可以再细分下去喔 (Net_ID 用掉 26 bits ....)。呵呵!如果您真的能够理解 IP, Network, Broadcast, Netmask 的话,恭喜您,未来的服务器学习之路已经顺畅了一半啦! ^_^

例题二:请试着计算出 172.16.0.0/23 这个网络的 Netmask, Network, Broadcast 等参数

答:
    由于 172.16.xxx.xxx 是在 Class B 的等级当中,亦即 172.16.0.0/16 才对。不过题目中询问的是 172.16.0.0/23, 等于是向 Host_ID 借了 7 个 bits 用在 Net_ID 当中。所以整个 IP 的位址会变成这样:
    预设:       172  .  16    .0000000 0.00000000
              |----Net_ID--------------|--Host---|
    Network:     172  .  16    .0000000 0.00000000   172.16.0.0
    Broadcast:   172  .  16    .0000000 1.11111111   172.16.1.255
    Netmask:  11111111.11111111.1111111 0.00000000   255.255.254.0
    鸟哥在这里有偷懒,因为这个 IP 段的前 16 个 bits 不会被改变,所以并没有计算成二进位( 172.16 ), 真是不好意思啊~至于粗体部分则是代表 host_ID 啊!


小标题的图示IP 的种类与取得方式
接下来要跟大家谈一谈也是很容易造成大家困扰的一个部分,那就是 IP 的种类!很多朋友常常听到什么‘真实IP, 实体 IP, 虚拟 IP, 假的 IP....’烦都烦死了~其实不要太紧张啦!实际上,在 IPv4 里面就只有两种 IP 的类别,分别是:
  • Public IP : 公共 IP ,经由 INTERNIC 所统一规划的 IP, 有这种 IP 才可以连上 Internet ;

  • Private IP : 私有 IP 或保留 IP,不能直接连上 Internet 的 IP , 主要用于区域网络内的主机连线规划。
早在 IPv4 规划的时候就担心 IP 会有不足的情况,而且为了应付某些私有网络的网络设定,于是就有了私有 IP ( Private IP ) 的产生了。私有 IP 也分别在 A, B, C 三个 Class 当中各保留一段作为私有 IP 网段,那就是:
  • A Class:10.0.0.0    - 10.255.255.255
  • B Class:172.16.0.0  - 172.31.255.255
  • C Class:192.168.0.0 - 192.168.255.255
由于这三个 Class 的 IP 是预留使用的,所以并不能直接作为 Internet 上面的连接之用,不然的话,到处都有相同的 IP 啰!那怎么行!网络岂不混乱?所以啰,这三个 IP 网段就只做为内部私有网络的 IP 沟通之用,也就是说,他有底下的几个限制:
  • 私有位址的路由资讯不能对外散播 (就是内部网络咯);
  • 使用私有位址作为来源或目的地址的封包,不能透过 Internet 来转送 (呵呵!当然啰!不然网络会混乱);
  • 关于私有位址的参考纪录(如DNS),只能限于内部网络使用(一样的原理啦!)
这个私有 IP 有什么好处呢?呵呵!由于他的私有路由不能对外直接提供资讯,所以呢, 你的内部网络将不会直接被 Internet 上面的 Cracker 所攻击!但是,你也就无法以私有 IP 来‘直接上网’啰!所以相当适合一些尚未具有 Public IP 的企业内部用来规划其网络之设定之用!否则当你随便指定一些可能是 Public IP 的网段来规划你企业内部的网络设定时,万一哪一天真的连上 Internet 了,那么启不是可能会造成跟 Internet 上面的 Public IP 相同了吗? 这可不是闹着玩的,要将你原先规划的 IP 网段整个重新调整过呢!哈哈!累死了!

那么万一你又要将这些私有 IP 送上 Internet 呢?呵呵!这个简单,设定一个简单的防火墙加上 NAT ( Network Address Transfer ) 主机设定,你就可以透过 IP 伪装(不要急,这个在后面也会提到!)来使你的私有 IP 的电脑也可以连上 Internet 啰(虽然不是真的直接,但是很像‘直接上网’呢!)

特殊的 loopback IP 网段
好了,那么除了这个预留的 IP 网段的问题之外,还有没有什么其他的怪东西呢?呵呵! 当然是有啦!不然鸟哥干嘛花时间来唬 XX 呢!?没错,还有一个奇怪的 A Class 的网络,那就是 lo 这个奇怪的网络啦( 注意:是小写的 o 而不是零喔! )这个 lo 的网络是当初被用来作为测试作业系统内部回圈所用的一个网络, 同时也能够提供给系统内部原本就需要使用网络介面的服务(daemon)所使用。

简单的说,如果你没有安装网络卡在的机器上面, 但是你又希望可以测试一下在你的机器上面设定的服务器环境到底可不可以顺利运作,这个时候怎么办, 嘿嘿!就是利用这个所谓的内部回圈网络啦!这个网段在 127.0.0.0/8 这个 A Class ,而且预设的主机 ( localhost ) 的 IP 是 127.0.0.1 呦!所以啰,当你启动了你的 WWW 服务器,然后在你的主机的 X-Window 上面执行 http://localhost 就可以直接看到你的主页啰!而且不需要安装网络卡呢!测试很方便吧!

此外,你的内部使用的 mail 怎么运送邮件呢?例如你的主机系统如何 mail 给 root 这个人呢?嘿嘿!也就是使用这一个内部回圈啦!当要测试你的 TCP/IP 封包与状态是否正常时,可以使用这个呦!( 所以哪一天有人问你嘿!你的主机上面没有网络卡, 那么你可以测试你的 WWW 服务器设定是否正确吗?这个时候可得回答:当然可以啰!使用 127.0.0.1 这个 Address 呀! ^_^... )

IP 的取得方式
谈完了 IP 的种类与等级还有相关的子网络概念后,接下来我们得来了解一下,那么主机的 IP 是如何设定的呢? 基本上,主机的 IP 与相关网络的设定方式主要有:
  • 固定制手动设定(static): 我们可以取得固定的 Public IP ,取得的管道可以是学术网络、或者是向 ISP 注册固定的 Public IP。不过,在使用固定的 Public IP 时,你必须要手动的在你的作业系统设定好网络参数;

  • 宽频拨接制(ADSL): 除了上述的方法之外,传统的以数据机拨接,以及目前很流行的 ADSL 拨接,都是另一个取得 Public IP 的方法。 早期的拨接制 ADSL 所取得的 IP 通常是由 ISP 随机提供,因此每次拨接所取得的 IP 可能都不固定, 所以也有人称这种取得 IP 的方式为浮动式 IP 取得方式。不过近来由于个人用户搭建服务器风行, 为因应用户的需求,某些 ISP 也提供很多不同的 IP 分配机制。 包括 hinet, seednet 等等都有提供 ADSL 拨接后取得固定 IP 的方式喔! 详情请向您的 ISP 洽询。

  • 缆线(Cable modem): 利用单向或者是双向 Cable 也可以向 ISP 注册取得 Public IP;
请记得,IP 就只有 Public 与 Private IP 这两种,而由于取得 IP 的方法不同,可能又有人喜欢宣称浮动式、固定制、动态等等的 IP , 这很容易造成刚刚接触网络的朋友们的困扰!所以这里仅告诉大家记得‘Public 与 Private IP’而已!你只要记得他就对了!其他的,以后自然就会理解的啦!^_^

小标题的图示IP 封包的表头
现在我们知道 IP 这个资料封包 (packet) 是需要放置在 MAC 讯框里面的,所以当然不能比 MAC 所能容许的最大资料量还大!但是 IP 封包其实可以到 65535 bytes 那么大的呐! 那么 IP 封包除了资料之外,他的表头资料 (head) 是长怎样呢? 在图三的 MAC 讯框表头里面最重要的莫过于那个网络卡硬体位址, 那么在 IP 表头里面当然就以来源与目标的 IP 位址为最重要啰! 除此之外, IP 表头里面还含有哪些重要资料呢?如底下所示:(下图第一行为每个栏位的 bit 数)

4 bits 4 bits 8 bits 3 bits 13 bits
Version IHL Type of Service Total Length
Identification Flags Fragmentation Offset
Time To Live Protocol Header Checksum
Source Address
Destination Address
Options Padding
Data
图八、IP 封包的表头资料

在上面的图示中有个地方要注意,那就是‘每一行所占用的位元数为 32 bits’, 也就是说, IP 封包的表头资料是 32 bits 的倍数喔!那各个表头的内容分别介绍如下:
  • Version(版本)
    宣告这个 IP 封包的版本,例如目前惯用的还是 IPv4 这个版本,在这里宣告的。

  • IHL(Internet Header Length, IP表头的长度)
    告知这个 IP 封包的表头长度,使用的单位应该是字组 (word) ,一个字组为 4bytes 大小喔。

  • Type of Service(服务类型)
    这个项目的内容为‘PPPDTRUU’,表示这个 IP 封包的服务类型,主要分为:
    PPP:表示此 IP 封包的优先度; D:若为 0 表示一般延迟(delay),若为 1 表示为低延迟;
    T:若为 0 表示为一般传输量 (throughput),若为 1 表示为高传输量;
    R:若为 0 表示为一般可靠度(reliability),若为 1 表示高可靠度。
    UU:保留尚未被使用。
    我们前面谈到 gigabit 乙太网络时曾提到 Jumbo frame 对吧!可以提高 MTU, 由于 gigabit 乙太网络的种种相关规格可以让这个 IP 封包加速且降低延迟, 某些特殊的标志就是在这里说明的。

  • Total Length(总长度)
    指这个 IP 封包的总容量,包括表头与内容 (Data) 部分。最大可达 65535 bytes。

  • Identification(辨别码)
    我们前面提到 IP 袋子必须要放在 MAC 袋子当中。不过,如果 IP 袋子太大的话, 就得先要将 IP 再重组成较小的袋子然后再放到 MAC 当中。而当 IP 被重组时, 每个来自同一笔资料的小 IP 就得要有个识别码以告知接收端这些小 IP 其实是来自同一个封包才行。 也就是说,假如 IP 封包其实是 65536 那么大 (前一个 Total Length 有规定), 那么这个 IP 就得要再被分成更小的 IP 分段后才能塞进 MAC 讯框中。那么每个小 IP 分段是否来自同一个 IP 资料,呵呵!这里就是那个识别码啦!

  • Flags(特殊旗标)
    这个地方的内容为‘0DM’,其意义为:
    D:若为 0 表示可以分段,若为 1 表示不可分段
    M:若为 0 表示此 IP 为最后分段,若为 1 表示非最后分段。

  • Fragment Offset(分段偏移)
    表示目前这个 IP 分段在原始的 IP 封包中所占的位置。 就有点像是序号啦,有这个序号才能将所有的小 IP 分段组合成为原本的 IP 封包大小嘛! 透过 Total Length, Identification, Flags 以及这个 Fragment Offset 就能够将小 IP 分段在收受端组合起来啰!

  • Time To Live(TTL, 存活时间)
    表示这个 IP 封包的存活时间,范围为 0-255。当这个 IP 封包通过一个路由器时, TTL 就会减一,当 TTL 为 0 时,这个封包将会被直接丢弃。说实在的,要让 IP 封包通过 255 个路由器,还挺难的~ ^_^

  • Protocol Number(协定代码)
    由于网络上面的封包协定太多了,每个协定都是装在 IP 当中的, 所以 IP 当然就得在表头上面告知收受端,这个 IP 内含有的资料是什么协定才行。 一般常见的网络协定如下所示:
    IP 内的号码协定名称(全名)
    1ICMP (Internet Control Message Protocol)
    2IGMP (Internet Group Management Protocol)
    3GGP (Gateway-to-Gateway Protocol)
    4IP (IP in IP encapsulation)
    6TCP (Transmission Control Protocol)
    8EGP (Exterior Gateway Protocol)
    17UDP (User Datagram Protocol)
    当然啦,我们比较常见到的还是那个 TCP, UDP, ICMP 说!

  • Header Checksum(表头检查码)
    用来检查这个 IP 表头的错误检验之用。

  • Source Address
    还用讲吗?当然是来源的 IP 位址,相关的 IP 我们之前提过啰!

  • Destination Address
    有来源还需要有目标才能传送,这里就是目标的 IP 位址。

  • Options (其他参数)
    这个是额外的功能,提供包括安全处理机制、路由纪录、时间戳记、 严格与宽松之来源路由等。

  • Padding(补齐项目)
    由于 Options 的内容不一定有多大,但是我们知道 IP 每个资料都必须要是 32 bits, 所以,若 Options 的资料不足 32 bits 时,则由 padding 主动补齐。

你只要知道 IP 表头里面还含有: TTL, Protocol, 来源 IP 与目标 IP 也就够了! 而这个 IP 表头的来源与目标 IP ,以及那个判断通过多少路由器的 TTL ,就能了解到这个 IP 将被如何传送到目的端呐。下一节我们将介绍一下那么 IP 封包是如何被传送到目的地?

大标题的图示网络层之路由概念
我们在前面两个小节提到了乙太网络在物理网段内可以使用 MAC 的讯框资料直接在两张网络卡之间传递资料, 那在前一节提到的 IP 相关概念里面,也知道在 Internet 的环境中,同一个网络 (Net_ID 相同的网段) 内可以直接使用广播的方式以 ARP 协定来取得 IP 与 MAC 的对应,好让我们的资料可以在同一个网络内进行传输。 好了,那问题来了,如果我想要向非同一个网络的主机要求资料呢?这个时候封包要如何传递? 呵呵~这可就需要路由(route)的帮忙啦!这个也是在网络层 (Layer 3) 里面的重要概念喔!


小标题的图示什么是路由
什么是‘非同一个网络’呢?刚刚上一小节提到的 IP 应该还没有忘记吧? 所谓的非同一个网络就是 Network/Netmask 不在同一个位址, 也就是两部主机间的 Net_ID 不相同的意思。例如参考底下的练习:

例题三:请问 192.168.10.100/25 与 192.168.10.200/25 是否在同一个网络内?

答:
    如果经过计算,会发现 192.168.10.100 的 Network 为 192.168.10.0 ,但是 192.168.10.200 的 Network 却是 192.168.10.128,由于 Net_ID 不相同,所以当然不在同一个网段内! 关于 Network 与 Netmask 的算法则请参考上一小节。

那么万一两部不在同一个网段内的主机想要互通资讯时,该如何做? 此时就得要经过 IP 的路径选择 (routing) 功能啦!我们以下面图示的例子来做说明。 下列图示当中共有两个不同的网段,分别是 Network A 与 Network B,这两个网段是经由一台路由器 (Server A) 来进行资料转递的,好了,那么当 PC01 这部主机想要传送资料到 PC11 时, 他的 IP 封包该如何传输呢?
简易的路由示意图
图九、简易的路由示意图

我们知道 Network A(192.168.0.0/24) 与 Network B(192.168.1.0/24) 是不同网段, 所以 PC01 与 PC11 是不能互通资料的。不过, PC01 与 PC11 是如何知道他们两个不在同一个网段内? 呵呵!这当然是透过 Net_ID 来发现的!那么当主机想要传送资料时,他主要的参考是啥? 很简单!是‘路由表 (route table)’,每部主机都有自己的路由表’, 让我们来看一看预设的情况下, PC01 要如何将资料传送到 PC02 呢?
  1. 当 PC01 有 IP 封包需要传送时,主机会查阅 IP 封包表头的目标 IP 位址;

  2. PC01 主机会分析自己的路由表,当发现目标 IP 与本机 IP 的 Net_ID 相同时(同一网络), 则 PC01 会参考本身的 ARP 记录,而直接利用 MAC 来互相传递资讯。

  3. 但在本案例中, PC01 与 PC11 并非同一网络,因此 PC01 会分析路由表当中是否有相符合的路由设定, 如果没有的话,就直接将该 IP 封包送到预设路由器 (default gateway) 上头去, 在本案例当中 default gateway 则是 Server A 这一台。

  4. 当 IP 封包被送至 Server A 之后,Server A 同样分析该 IP 封包的目标位址, 然后检查 Server A 自己的路由设定,注意,通常 Server A 这个作为路由器的主机, 都会拥有两个以上的介面来沟通不同的网络的。在这个案例当中, Server A 会发现这个 IP 目标是 192.168.1.11 ,刚好是 Network B 这个相同网段的区域, 因此 Server A 会直接以 MAC 讯框将资料送给 PC11 去。
Tips:
Gateway / Router :网关/路由器的功能就是在负责不同网络之间的封包转递 ( IP Forwarder ),由于路由器具有 IP Forwarder 的功能,并且具有管理路由的能力, 所以可以将来自不同网络之间的封包进行转递的功能。此外,您的主机与您主机设定的 Gateway 必定是在同一个网段内喔!
鸟哥的图示

大致的情况就是这样,所以啦,每一台主机里面都会存在着一个路由表 ( Route table ),资料的传递将依据这个路由表进行传送!而一旦封包已经经由路由表的规则传送出去后, 那么主机本身就已经不再管封包的流向了,因为该封包的流向将是下一个主机 (也就是那部 Router )来进行传送,而 Router 在传送时,也是依据 Router 自己的路由表来判断该封包应该经由哪里传送出去的!例如底下的图例:
路由的概念
图十、路由的概念

PC 01 要将资料送到 Server Bingo 去,则依据自己的路由表,将该封包送到 Server A 去,Server A 再继续送到 Server B ,然后在一个一个的接力给他送下去,最后总是可以到达 Server Bingo 的。

当然,上面的案例是一个很简单的路由概念,事实上, Internet 上面的路由协定与变化是相当复杂的,因为 Internet 上面的路由并不是静态的,他可以随时因为环境的变化而修订每个封包的传送方向。 举例来说,数年前在新竹因为土木施工导致台湾西部整个网络缆线的中断。 不过南北的网络竟然还是能通,为什么呢?因为路由已经判断出西部缆线的终止, 因此他自动的导向台湾东部的花莲路线,虽然如此一来绕了一大圈,而且造成网络的大塞车, 不过封包还是能通就是了!这个例子仅是想告诉大家,我们上面提的路由仅是一个很简单的静态路由情况, 如果想要更深入的了解 route ,请自行参考相关书籍喔! ^_^ 。

此外,在属于 Public 的 Internet 环境中,由于最早时的 IP 分配都已经配置妥当, 所以各单位的路由一经设定妥当后,上层的路由则无须担心啊! IP 的分配可以参考底下的网页:

小标题的图示观察主机的路由
既然路由是这么的重要,而且‘路由一旦设定错误, 将会造成某些封包完全无法正确的送出去!’ 所以我们当然需要好好的来观察一下我们主机的路由表啦!还是请再注意一下, 每一台主机都有自己的路由表喔!观察路由表的指令很简单,就是 route ,这个指令挺难的,我们在后面章节再继续的介绍,这里仅说明一些比较简单的用法:
[root@linux ~]# route [-n]
参数:
-n : 将主机名称以 IP 的方式显示
范例:

[root@linux ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref  Use Iface
192.168.0.0     *               255.255.255.0   U     0      0      0 eth0
127.0.0.0       *               255.0.0.0       U     0      0      0 lo
default         192.168.0.254   0.0.0.0         UG    0      0      0 eth0

[root@linux ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref  Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0      0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0      0 lo
0.0.0.0         192.168.0.254   0.0.0.0         UG    0      0      0 eth0

# 上面输出的资料共有八个栏位,您需要注意的有几个地方:
# Destination :其实就是 Network 的意思;
# Gateway     :就是该介面的 Gateway 那个 IP 啦!若为 0.0.0.0 表示不需要额外的 IP;
# Genmask     :就是 Netmask 啦!与 Destination 组合成为一台主机或网络;
# Flags       :共有多个旗标可以来表示该网络或主机代表的意义:
#               U:代表该路由可用;
#               G:代表该网络需要经由 Gateway 来帮忙转递;
#               H:代表该行路由为一台主机,而非一整个网络;
# Iface       :就是 Interface (介面) 的意思。
在上面的例子当中,鸟哥是以 PC 01 这部主机的路由状态来进行说明。由于 PC 01 为 192.168.0.0/24 这个网络,所以主机已经建立了这个网络的路由了,那就是‘ 192.168.0.0 * 255.255.255.0 ... ’那一行所显示的讯息!当您下达 route 时, 荧幕上说明了这部机器上面共有三个路由规则,第一栏为‘目的地的网络’,例如 192.168.0.0 就是一个网络咯,最后一栏显示的是 ‘要去到这个目的地要使用哪一个网络介面!’例如 eth0 就是网络卡的装置代号啦。如果我们要传送的封包在路由规则里面的 192.168.0.0/255.255.255.0 或者 127.0.0.0/255.0.0.0 里面时,因为第二栏 Gateway 为 * ,所以就会直接以后面的网络介面来传送出去,而不透过 Gateway 咯!

万一我们要传送的封包目的地 IP 不在路由规则里面,那么就会将封包传送到‘default’所在的那个路由规则去,也就是 192.168.0.254 那个 Gateway 喔!所以,几乎每一台主机都会有一个 default gateway 来帮他们负责所有非网络内的封包转递!这是很重要的概念喔!^_^! 关于更多的路由功能与设定方法,我们在后面的‘简易 Router 搭建’ 当中会再次的提及呢!


大标题的图示常见的通讯协定
终于给他来到了封包格式的地方了!上面的咚咚大多是在网络最底层的基础知识, 得自行好好的理解理解!第一次看不懂没关系,多看几次,或者是未来有些网络经验后再回来这个章节好好看一看! 假设您已经知道了网络最底层的 IP 以及相关的参数的意义,那么应该知道的是, 网络层的协定只是提供路由的判断以确定封包的传送路径, 但是这些协定并没有管理可能由于网络媒体的损坏问题,或者是网络的负荷过重以及其他不可预期的情况, 而造成封包损毁或者被丢弃的状态。为了使封包的传送过程中更具有稳定性与可靠性, 我们就得提供一套机制来让资料可以没有错误的到达到目的地。

在 TCP/IP 这个协定组合当中,TCP ( Transmission Control Protocol ) 就是用来做为传送的一个协定,当然啦,还有一个 UDP 的协定呢!在 TCP 这个协定当中, 他提供了较为稳定而且可靠的连线状态,至于 UDP 则是一个比较没有这么可靠的连线型态了。 除了这个 TCP 与 UDP 之外,其他相关的网络协定请参考前一小节 IP 封包内的 Protocol 说明。 底下我们就来分别谈一谈重要的 TCP/UDP/ICMP 吧!


小标题的图示TCP 协定
在前几个小节内谈到的 IP 与路由的相关说明中,我们知道 IP 与路由仅能将资料封包传送到正确的目标而已, 但是这个目的地是否真的能够收下来这个封包?那可就不一定了。要确认该资料能否正确的被目的端所接收, 就必须要在资料封包上面多加一些参数来判断才行。

在前面的 OSI 七层协定当中,在网络层的 IP 之上则是传送层,而传送层的资料打包成什么? 最常见的就是 TCP 封包了。这个 TCP 封包资料必须要能够放到 IP 的资料袋当中才行喔! 所以,我们可以将 MAC, IP 与 TCP 的封包资料这样看:
各封包之间的相关性
图十一、各封包之间的相关性

所以说,IP 除了表头之外的 Data 内容其实就是 TCP 封包的表头与内容;而 MAC 的 Data 内容, 就是一个完整的 IP 封包资料!这也是我们上头提到的,最终还是得以 MAC 能够支援的最大容许容量, 才能够决定 IP 与 TCP 封包是否需要再进行分段的工作。那么既然 MAC 与 IP 都有表头资料, 想当然尔,TCP 也有表头资料来记录该封包的相关资讯啰??没错啦~ TCP 封包的表头是长这个样子的:

4 bits 6 bits 6 bits 8 bits 8 bits
Source Port Destination Port
Sequence Number
Acknowledge Number
Data
Offset
Reserved Code Window
Checksum Urgent Pointer
Options Padding
Data
图十二、TCP 封包的表头资料

上图就是一个 TCP 封包的表头资料,各个项目以 Source Port, Destination Port 及 Code 算是比较重要的项目,底下我们就分别来谈一谈各个表头资料的内容吧!
  • Source Port & Destination Port ( 来源端口 & 目标端口 )
    什么是端口(port)?我们知道 IP 封包的传送主要是藉由 IP 位址连接两端, 但是到底这个连线的通道是连接到哪里去呢?没错!就是连接到 port 上头啦! 举例来说,鸟站 (http://linux.vbird.org) 有开放 WWW 服务器, 这表示鸟站的主机必须要启动一个可以让 client 端连接的端口,这个端口就是 port , 中文翻译成为端口。同样的,用户端想要连接到鸟哥的鸟站时,就必须要在 client 主机上面启动一个 port ,这样这两个主机才能够利用这条‘通道’来传递封包资料喔! 这个目标与来源 port 的纪录,可以说是 TCP 封包上最重要的参数了! 下个小单元我们还会继续介绍。

  • Sequence Number ( 封包序号 )
    由于 TCP 封包必须要带入 IP 封包当中,所以如果 TCP 资料太大时(大于 IP 封包的容许程度), 就得要进行分段。这个 Sequence Number 就是记录每个封包的序号, 可以让收受端重新将 TCP 的资料组合起来。

  • Acknowledge Number ( 回应序号 )
    为了确认主机端确实有收到我们 client 端所送出的封包资料,我们 client 端当然希望能够收到主机方面的回应,那就是这个 Acknowledge Number 的用途了。 当 client 端收到这个确认码时,就能够确定之前传递的封包已经被正确的收下了。

  • Data Offset (资料补偿)
    在图十二倒数第二行有个 Options 栏位对吧!那个 Options 的栏位长度是非固定的, 而为了要确认整个 TCP 封包的大小,就需要这个标志来说明整个封包区段的起始位置。

  • Reserved (保留)
    未使用的保留栏位。

  • Code (Control Flag, 控制标志码)
    当我们在进行网络连线的时候,必须要说明这个连线的状态,好让接收端了解这个封包的主要动作。 这可是一个非常重要的控制码喔!这个栏位共有 6 个 bits ,分别代表 6 个控制码,若为 1 则为启动。分别说明如下:

    • URG(Urgent):若为 1 则代表该封包为紧急封包, 接收端应该要紧急处理,且图十二当中的 Urgent Pointer 栏位也会被启用。

    • ACK(Acknowledge):若为 1 代表这个封包为回应封包, 则与上面提到的 Acknowledge Number 有关。

    • PSH(Push function):若为 1 时, 代表要求对方立即传送缓冲区内的其他对应封包,而无须等待缓冲区满了才送。

    • RST(Reset):如果 RST 为 1 的时候, 表示连线会被马上结束,而无需等待终止确认手续。这也就是说,这是个强制结束的连线, 且发送端已断线。

    • SYN(Synchronous):若为 1 , 表示发送端希望双方建立同步处理,也就是要求建立连线。通常带有 SYN 标志的封包表示‘主动’要连接到对方的意思。

    • FIN(Finish):若为 1 ,表示传送结束, 所以通知对方资料传毕,是否同意断线,只是发送者还在等待对方的回应而已。

    其中比较常见到的应该是 ACK/SYN/FIN 等,这三个控制码是务必要记下来的, 这样未来在谈到防火墙的时候,您才会比较清楚为啥每个 TCP 封包都有所谓的‘状态’条件! 那就是因为连线方向的不同所致啊!底下我们会进一步讨论喔!

  • Window (滑动视窗)
    主要是用来控制封包的流量的,可以告知对方目前本身有的缓冲器容量(Receive Buffer) 还可以接收封包。当 Window=0 时,代表缓冲器已经额满,所以应该要暂停传输资料。 Window 的单位是 byte。

  • Checksum(确认检查码)
    当资料要由发送端送出前,会进行一个检验的动作,并将该动作的检验值标注在这个栏位上; 而接收者收到这个封包之后,会再次的对封包进行验证,并且比对原发送的 Checksum 值是否相符,如果相符就接受,若不符就会假设该封包已经损毁,进而要求对方重新发送此封包!

  • Urgent Pointer(紧急资料)
    这个栏位是在 Code 栏位内的 URG = 1 时才会产生作用。可以告知紧急资料所在的位置。

  • Options(任意资料)
    目前此栏位仅应用于表示接收端可以接收的最大资料区段容量,若此栏位不使用, 表示可以使用任意资料区段的大小。这个栏位较少使用。

  • Padding(补足栏位)
    如同 IP 封包需要有固定的 32bits 表头一样, Options 由于栏位为非固定, 所以也需要 Padding 栏位来加以补齐才行。同样也是 32 bits 的整数。


通讯端口与 Socket
在刚刚上头提到的 TCP 表头资料后,您大概也清楚了要建立一个 TCP 封包时所需要检验的相关参数可不少啊!其中最重要的就属通讯端口 (port) 了。 这个 port 主要是由主机的程序所触发的,网络上面的其他 client 端, 可以通过这个端口直接与启动该 port 的程序相互沟通, 而达到资料传输的目的。我们都知道二进位程序 (binary program) 才是真的主机认识的程序指令, 那么我们要启动网络服务时,其实也就是启动一个 program 就是了。但是网络上面如何与您的 program 互通资料呢?就是透过在网络介面上面的 port 来达成的啦。

不过,必须要注意的是 port 的沟通是双向的, 举例来说,当我们要使用浏览器连接到奇摩雅虎查阅资料时, 我们必须要使用 client 端主机的浏览器连接到 Yahoo 主机的 WWW 服务器软件上面。 由于是透过网络介面,所以我们的浏览器也必须要启动一个 port 并且透过这个 port 连接到 Yahoo 主机的 WWW port 上头去,然后透过 TCP 封包上头各项参数的确认后, 才能够建立连线,并进一步开始传输资料啊!

现在来想一想,我们的主机上面有多少网络介面的 port 可用呢? 基本上就有 65536 (216)。那我们连线到 Yahoo 时, 是连线到 Yahoo 主机的那个 port 啊?如果不知道几号 port ,那又该如何建立起这个连线呢? 所以啰,Internet 上面已经有很多规范好的固定 port (well-known port) 在提供使用者建立服务器时启用的 port number 啦。这些 port number 通常小于 1024 , 且是提供给许多知名的网络服务软件用的。在我们的 Linux 环境下, 各网络服务与 port number 的对应预设给他写在 /etc/services 文件内喔! 不过如果是 client 端的话,由于 client 端都是主动向 server 端要资料, 所以 client 端的 port number 就使用随机取一个大于 1024 以上且没有在用的 port number 来进行连线了。底下鸟哥列出几个常见的 port number 与网络服务的对应:

连接端口服务名称与内容
20FTP-data,文件传输协定所使用的主动资料传输端口
21FTP,文件传输协定的命令通道
22SSH,较为安全的远端连线服务器
23Telnet,早期的远端连线服务器软件
25SMTP,简单邮件传递协定,用在作为 mail server 的端口
53DNS,用在作为名称解析的领域名称服务器
80WWW,这个重要吧!就是全球资讯网服务器
110POP3,邮件收信协定,办公室用的收信软件都是透过他
443https,有安全加密机制的WWW服务器

另外一点比较值得注意的是,小于 1023 以下的端口要启动时, 启动者的身份必须要是 root 才行!这个限制挺重要的,大家不要忘记了喔!

曾经有一个朋友问过我说:‘一台主机上面这么多服务,那我们跟这部主机进行连线时, 该主机怎么知道我们要的资料是 WWW 还是 FTP 啊?!’呵呵!这就是 port 的不同的结果啦!因为每种 Client 软件他们所需要的资料都不相同,例如上面提到的浏览器( Netscape 以及 IE ) 他们所需要的资料是 WWW ,所以该软件预设就会向主机的 80 port 索求资料;而如果您是使用 cuteftp 来进行与主机的 FTP 资料索求时, cuteftp 这个 Client 软件当然预设就是向主机的 FTP 相关端口 ( 预设就是 port 21 ) 进行连接的动作啦!所以当然就可以正确无误的取得 Client 端所需要的资料了

举个例子来说,一台主机就好像是一间多功能银行,该银行内的每个负责不同业务的窗口就好像是通讯端口, 而我们民众就好像是 Client 端来的封包。当您进入银行想要缴纳信用卡帐单时, 一到门口服务人员就会指示您直接到该窗口去缴纳,当然,如果您是要领钱,服务人员就会请您到领钱的窗口去填写资料, 您是不会跑错的对吧! ^_^。万一跑错了怎么办?呵呵!当然该窗口就会告诉您‘我不负责这个业务,您请回去!’, 呵呵!所以该次的连线就会‘无法成功’咯!

谈过了通讯端口后,再来聊一聊每个封包的基本内容有哪些资料呢?这就得要谈论到 Socket Pair ( 成对的端口 )了! 当本机发送出封包时,主机是根据 IP 封包内的 IP 位址来判别来源与目的地的行进路线, 并且,也需要 TCP 封包内的 port number 来告知 Client 与 Server 是以哪一个端口来进行连线的对吧! 所以呢,一个连线过程所包含的底下这些咚咚就称为成对插槽 (socket pair) 了:
  • 来源 IP ( Source Address )
  • 目的 IP ( Destination Address )
  • 来源端口 ( Source Port )
  • 目的端口 ( Destination Port )
这四个封包的基本资讯是相当重要的!您得必须要了解喔!


封包的传送
OK,从前面这样一路看下来,相信您对于 OSI 七层协定当中的 MAC 讯框与 IP 封包有一定程度的了解了, 也知道七层协定必须要在不同的主机之间一再地拿出来察看,因为 Internet 是用 IP 来传递封包资料, 而实体线路则是使用 MAC 讯框。那我们也了解 TCP 封包的表头资料后,再来就是要了解一下, 那我如何利用 TCP 这个传送层的协定来进行实际的封包接收呢? 当然是得要透过 TCP 表头的 Sequence Number 来组合收集大的 TCP 封包, 也必须要透过 Code (Control Flags) 来了解到这个封包的特性才行。 说穿了,我们可以使用信封袋来说明,实际的内容 (data) 是在信封袋当中的, 而信封的外面的资讯就是各个封包的表头资料啦!

那么如何藉由 TCP 的表头来确认这个封包有实际被对方接收,并进一台与对方主机达成连线? 我们以底下的图示来作为说明。

三向交握之封包连接模式
图十三、封包连接模式之三向交握

在上面的封包连接模式当中,在建立连线之前都必须要通过三个确认的动作, 所以这种连线方式也就被称为三向交握(Three-way handshake)。 那么我们将整个流程依据上面的 A, B, C, D 四个阶段来说明一下:
  • A:封包发起
    当用户端想要对服务器端连线时,就必须要送出一个要求连线的封包, 此时用户端必须随机取用一个大于 1024 以上的端口来做为程序沟通的介面。 然后在 TCP 的表头当中,必须要带有 SYN 的主动连线(SYN=1),并且记下发送出连线封包给服务器端的序号 (Sequence number = 10001 ) 。

  • B:封包接收与确认封包传送
    当服务器接到这个封包,并且确定要接收这个封包后,就会开始制作一个同时带有 SYN=1, ACK=1 的封包, 其中那个 acknowledge 的号码是要给 client 端确认用的,所以该数字会比(A 步骤)里面的 Sequence 号码多一号 (ack = 10001+1 = 10002), 那我们服务器也必须要确认用户端确实可以接收我们的封包才行,所以也会发送出一个 Sequence (seq=20001) 给用户端,并且开始等待用户端给我们服务器端的回应喔!

  • C:回送确认封包
    当用户端收到来自服务器端的 ACK 数字后 (10002) 就能够确认之前那个要求封包被正确的收受了, 接下来如果用户端也同意与服务器端建立连线时,就会再次的发送一个确认封包 (ACK=1) 给服务器,亦即是 acknowledge = 20001+1 = 20002 啰。

  • D:取得最后确认
    若一切都顺利,在服务器端收到带有 ACK=1 且 ack=20002 序号的封包后,就能够建立起这次的连线了。
也就是说,你必须要了解‘网络是双向的’这个事实! 所以不论是服务器端还是用户端,都必须要透过一次 SYN 与 ACK 来建立连线, 所以总共会进行三次的交谈! 在设定防火墙或者是追踪网络连线的问题时,这个‘双向’的概念最容易被忽略, 而常常导致无法连线成功的问题啊!切记切记!

在建立了连线之后,该次连线通道就可以在用户端与服务器端建立起一对 socket pair , 然后通过该 socket pair 进行 TCP 封包的 PSH、FIN 等资料传输与连线中断等动作啰!

小标题的图示UDP 协定
UDP 的全名是:‘User Datagram Protocol, 用户资料流协定’,UDP 与 TCP 不一样, UDP 不提供可靠的传输模式,因为他不是连线导向的一个机制,这是因为在 UDP 的传送过程中,接受端在接受到封包之后,不会回覆回应封包 ( ACK ) 给发送端,所以封包并没有像 TCP 封包有较为严密的验证机制。至于 UDP 的表头资料如下表所示:

16 bits 16 bits
Source Port Destination Port
Message Length Checksum
Data
图十四、UDP 封包的表头资料

TCP 封包确实是比较可靠的,因为通过三向交握嘛!不过,也由于三向交握的缘故, TCP 封包的传输速度会较慢。 至于 UDP 封包由于不需要确认对方是否有正确的收到资料,故表头资料较少,也因为如此所以 UDP 就可以在 Data 处填入更多的资料了。同时 UDP 比较适合需要即时反应的一些资料流,例如即时通讯软件或者是影像即时传送软件等, 就可以使用这类的封包传送说。也就是说, UDP 传输协定并不考虑连线要求、连线终止与流量控制等特性, 所以使用的时机是当资料的正确性不很重要时,例如上面提到的即时通讯软件啊!

另外,很多的软件其实是同时提供 TCP 与 UDP 的传输协定的,举例来说,查询主机名称的 DNS 服务就同时提供了 UDP/TCP 协定。由于 UDP 较为快速,所以我们 client 端可以先使用 UDP 来与服务器连线。 但是当使用 UDP 连线却还是无法取得正确的资料时,便转换为较为可靠的 TCP 传输协定来进行资料的传输啰。 这样可以同时兼顾快速与可靠的传输说!


小标题的图示ICMP 协定
ICMP 的全称是‘ Internet Control Message Protocol, 网际网络讯息控制协定 ’。 基本上,ICMP 是一个错误探测与回报的机制,最大的功能就是可以确保我们网络的连线状态与连线的正确性! 同样的,ICMP 封包也是必须要装在 IP 封包的 Data 内才行喔! 因为在 Internet 上面有传输能力的就是 IP 封包啦! ICMP 有相当多的类别可以探测与回报,底下是比较常见的几个 ICMP 的类别 (Type):

类别代号类别名称与意义
0Echo Reply (代表一个回应信息)
3Destination Unreachable (表示目的地不可到达)
4Source Quench (当 router 的负载过高时,此类别码可用来让发送端停止发送讯息)
5Redirect (用来重新导向路由路径的资讯)
8Echo Request (请求回应讯息)
11Time Exceeded for a Datagram (当资料封包在某些路由传送的现象中造成逾时状态,此类别码可告知来源该封包已被忽略的讯息)
12Parameter Problem on a Datagram (当一个 ICMP 封包重复之前的错误时,会回覆来源主机关于参数错误的讯息)
13Timestamp Request (要求对方送出时间讯息,用以计算路由时间的差异,以满足同步性协定的要求)
14Timestamp Reply (此讯息纯粹是回应 Timestamp Request 用的)
15Information Request (在 RARP 协定应用之前,此讯息是用来在开机时取得网络信息)
16Information Reply (用以回应 Infromation Request 讯息)
17Address Mask Request (这讯息是用来查询子网络 mask 设定信息)
18Address Mask Reply (回应子网络 mask 查询讯息的)

那么我们是如何利用 ICMP 来检验网络的状态呢?最简单的指令就是 ping 与 traceroute 了, 这两个指令可以透过 ICMP 封包的辅助来确认与回报网络主机的状态。在设定防火墙的时候, 我们最容易忽略的就是这个 ICMP 的封包了,因为只会记住 TCP/UDP 而已~事实上, ICMP 封包可以帮助连线的状态回报,除了上述的 8 可以考虑关闭之外,基本上, ICMP 封包也不应该全部都挡掉喔!


小标题的图示MTU 的限制
我们在本章的第一台份谈到 MAC 时,不是有提到标准乙太网络封包的资讯容量大约在 1500bytes 吗? 所以 IP 封包、TCP 封包以及其他相关的封包,如果能够控制在 1500 bytes 内的话, 那么 IP 封包将不需要重组成可以放进 MAC 讯框的分段了!

让我们来想一个小案例,假设你的资料量大到 60000 bytes 好了,如果你使用的传输协定为 TCP 封包, 万一你没有考虑到 MAC 讯框的大小,而让整笔资料放到可以容纳最大 65535 bytes 的 IP 封包内, 此时 IP 封包已经建立好成为内含 60000 bytes 的资料包了,但是再往下到达资料连接层时,唉~ 这个 IP 封包就得要进行重组,好让 IP 封包可以放到 MAC 讯框当中!您说,这个时候不是又得让系统多进行一段手续, 而导致网络效能的低落吗?

此时,如果能够规范 TCP 以及 IP 在包起来时就考虑讯框的最大容量时, 不就可以减少很多资料重组的问题啰?呵呵呵呵!没错啊! 那就是最大传输单元 (Maximum Transmission Unit, MTU) 这个设定值的重要性啊!

一般来说,我们的 Gigabit 网络卡已经可以支援 Jumbo frame ,所以 MTU 值都可以到达 9000 bytes 左右, 不过,不建议您设定 MTU 成为 9000 喔!为什么呢?因为我们的封包总是需要在 Internet 上面跑吧? 您无法确认所有的网络媒体都是支援那么大的 MTU 对吧! 如果您的 9000 bytes 封包通过一个不支援 Jumbo frame 的网络媒体时, 好一点的是该网络媒体 (例如 router ) 会主动的帮您重组封包而进行传送, 差一点的可能就直接回报这个封包无效而丢弃了~那个时候可就糗大啰~ 所以, MTU 设定为 9000 这种事情,大概仅能在内部网络的环境作作~ 举例来说,很多的内部丛集系统 (cluster) 就将他们的内部网络环境 MTU 设定为 9000, 但是对外的介面卡可还是原本的标准 1500 喔! ^_^

也就是说,不论您的网络媒体支援 MTU 到多大,您必须要考量到您的封包需要传到目的地时, 所需要经过的所有网络媒体,然后再来决定您的 MTU 设定才行。
Tips:
事实上,MTU 不会刚好等于 1500 呐!这是因为不论是 IP 封包或者是 TCP 封包都会有表头资料, 这些表头资料都会占用去一些位元容量,所以 MTU 就会比标准乙太网络容量的 1500 小一些。
鸟哥的图示

小标题的图示封包过滤的防火墙概念
由上面的说明当中,我们知道资料的传送其实就是封包的发出与接受的动作啦!并且不同的封包上面都有不一样的表头 ( header ),此外,封包上面通常都会具有四个基本的资讯,那就是 socket pair 里面提到的‘来源与目的 IP 以及来源与目的端的 port number’ 。当然啦,如果是可靠性连线的 TCP 封包,还包含 Control Flag 里面的 SYN/ACK 等等重要的资讯呢!好了,开始动一动脑筋, 有没有想到‘网络防火墙’的字眼啊? 网络防火墙可以抵挡掉一些可能有问题的封包,那么在 Linux 系统上面是怎么挡掉封包的呢?其实说来也是很简单,既然封包的表头上面已经有这么多的重要资讯, 那么我就利用一些防火墙机制与软件来进行封包表头的分析,并且设定分析的规则,当发现某些特定的 IP 、特定的端口或者是特定的封包资讯(SYN/ACK等等),那么就将该封包给他丢弃, 那就是最基本的防火墙原理了!

举例来说,大家都知道 Telnet 这个服务器是挺危险的,而 Telnet 使用的 port number 为 23 ,所以,当我们使用软件去分析要送进我们主机的封包时, 只要发现该封包的目的地是我们主机的 port 23 ,就将该封包丢掉去!那就是最基本的防火墙案例啦! 更多的防火墙资讯我们会在后头的‘简易防火墙’与 ‘认识网络安全’当中进行更多的说明喔!


大标题的图示连上 Internet 前的准备事项
讲了这么多,其实我们最需要的仅是‘连接上 Internet ’啦!那么在 Internet 上面其实使用的是 TCP/IP 这个通讯协定,所以我们就需要 Public IP 来连接上 Internet 啊!您说对吧~ 不过,您有没有发现一件事,那就是‘为啥我不知道 Yahoo 的主机 IP ,但是俺的主机却可以连到 Yahoo 主机上?’ 如果您有发现这个问题的话,哈哈!您可以准备开始设定网络啰~ ^_^


小标题的图示什么是主机名称与 DNS
除了上面提到的最基本的网络基础概念之外,这里还必须要先谈一个基本的观念, 否则后续的主机名称查询设定挺难说明白的!好了,我们知道电脑在网络上面要找寻主机的时后,是利用 IP 来定址,而以 TCP/UDP/ICMP 等资料来进行传送的,并且传送的过程中还会去检验封包的资讯。 总归一句话,网络是靠 TCP/IP 家族来达成的,所以必须要知道 IP 之后,电脑才能够连上网络以及传送资料。

问题是,电脑网络是依据人类的需要来建立的,不过人类对于 IP 这一类的数字并不具有敏感性,即使 IP 已经被简化为十进位了,但是人类就是对数字没有办法啊!怎么办?没关系,反正电脑都有主机名称嘛! 那么我就将主机名称与他的 IP 对应起来,未来要连接上该电脑时,只要知道该电脑的主机名称就好了,因为 IP 已经对应到主机名称了嘛!所以人类也容易记忆文字类的主机名称,电脑也可以藉由对应来找到他必须要知道的 IP ,啊!真是皆大欢喜啊!

这个主机名称 (Hostname) 对应 IP 的系统,就是鼎鼎有名的 Domain Name System (DNS) 咯!也就是说, DNS 这个服务的最大功能就是在进行‘主机名称与该主机的 IP 的对应’的一项协定。 DNS 在网络环境当中是相当常被使用到的一项协定喔!举个例子来说,像鸟哥我常常会连到奇摩雅虎的 WWW 网站去看最新的新闻,那么我一定需要将奇摩雅虎的 WWW 网站的 IP 背下来吗?!天呐, 鸟哥的忘性这么好,怎么可能将 IP 背下来?!不过,如果是要将奇摩站的主机名称背下来的话, 那就容易的多了!不就是 http://tw.yahoo.com 吗?!而既然电脑主机只认识 IP 而已, 因此当我在浏览器上面输入了‘http://tw.yahoo.com’的时后,我的电脑首先就会藉由向 DNS 主机查询 tw.yahoo.com 的 IP 后,再将查询到的 IP 结果回应给我的浏览器, 那么我的浏览器就可以藉由该 IP 来连接上主机啦!

发现了吗?我的电脑必须要向 DNS 主机查询 Hostname 对应 IP 的资讯 喔!那么那部 DNS 主机的 IP 就必须要在我的电脑里面设定好才行,并且必须要是输入 IP 喔,不然我的电脑怎么连到 DNS 主机去要求资料呢?呵呵!在 Linux 里面,DNS 主机 IP 的设定就是在 /etc/resolv.conf 这个文件里面啦!

目前各大 ISP 都有提供他们的 DNS 主机 IP 给他们的用户,好设定客户自己电脑的 DNS 查询主机, 不过,如果您忘记了或者是您使用的环境中并没有提供 DNS 主机呢?呵呵!没有关系, 那就设定 Hinet 那个最大的 DNS 主机吧! IP 是 168.95.1.1 咯!要设定好 DNS 之后,未来上网浏览时,才能使用主机名称喔!不然就得一定需要使用 IP 才能上网呢!DNS 是很重要的,他的原理也顶复杂的,更详细的原理我们在后面的 ‘DNS 服务器搭建’里面进行更多更详细的说明喔!这里仅提个大纲!


小标题的图示一组可以连上 Internet 的必要网络参数
从上面的所有说明当中,我们知道一台主机要能够使用网络,必须要有 IP ,而 IP 的设定当中,就必须要有 IP, Network, Broadcast, Netmask 等参数,此外,还需要考虑到路由里面的 Default Gateway 才能够正确的将非同网络的封包给他传送出去。 此外,考虑到主机名称与 IP 的对应,所以您还必须要给予系统一个 DNS 主机的 IP 才行~ 所以说,一组合理的网络设定需要哪些资料呢?呵呵!就是:
  • IP
  • Netmask
  • Network
  • Broadcast
  • Gateway
  • DNS
没错!就是这些资料!如果您是使用 ADSL 拨接来上网的话,上面这些资料都是由 ISP 直接给您的,那您只要使用拨接程序进行拨接到 ISP 的工作之后, 这些资料就自动的在您的主机上面设定完成了!但是如果是固定制 ( 如学术网络 ) 的话,那么就得自行使用上面的参数来设定您的主机啰!缺一不可呢!以 192.168.0.0/24 这个 C Class 为例的话,那么您就必须要在您的主机上面设定好底下的参数:
  • IP: 由 192.168.0~192.168.0.254
  • Netmask: 255.255.255.0
  • Network: 192.168.0.0
  • Broadcast: 192.168.0.255
  • Gateway: 每个环境都不同,请自行询问网络管理员
  • DNS: 也可以直接设定成 168.95.1.1

大标题的图示重点回顾:
  • 只要是能够连接上 Internet 的主机,都有危险,不要以为小网站就不会被 cracker 所破解;
  • 虽然目前的网络媒体多以乙太网络为标准,但网络媒体不只有乙太网络而已;
  • Internet 主要是由 Internet Network Information Center (INTERNIC) 所维护,但其仅维护一些技术文件的推展;
  • 乙太网络的标准相当多,速度的定义亦不相同,购买时需要特别留意其速度标准。
  • 乙太网络的 RJ-45 网络线,由于 568A/568B 接头的不同而又分为平行线与跳线;
  • 网络媒体都有其最大可接受的封包量,在乙太网络上可接收的封包为 MAC (Media Access Control) 讯框
  • 乙太网络上最重要的传输资料为 Carrier Sence Multiple Access with Collision Detect (CSMA/CD) 技术, 至于传输过程当中,最重要的 MAC 讯框内以硬体位址 (hardware address) 资料最为重要;
  • 乙太网络的交换技术 (switch) 已经可以克服 CSMA/CD 所发生的封包碰撞情况,因为 switch 为非共享媒体
  • 透过八蕊的网络线 (Cat 5 以上等级),现在的乙太网络可以支援全双工模式;
  • OSI 七层协定为一个网络模型 ( model ) ,并非硬性规定。这七层协定可以协助软硬体开发有一个基本的准则, 且每一分层各自独立,方便使用者开发;
  • 现今的网络基础是架构在 TCP/IP 这个通讯协定上面;
  • 资料连接层里重要的资讯为 MAC (Media Access Control),亦可称为硬体位址,而 ARP Table 可以用来对应 MAC 与软件位址 ( IP ) ;
  • 网络的传输单位使用 bit 而不是 byte ;
  • 在网络媒体方面, Hub 为共享媒体,因此可能会有封包碰撞的问题,至于 Switch 由于加入了 switch port 与 MAC 的对应,因此已经克服了封包碰撞的问题,也就是说,Switch 并不是共享媒体;
  • IP 为 32 bits 所组成的,为了适应人类的记忆,因此转成四组十进位的数据;
  • IP 主要分为 Net ID 与 Host ID 两部份,加上 Netmask 这个参数后,可以设定‘网络’的概念;
  • 所谓的同一网络指的是 Net_ID 相同,但 Host_ID 不同的环境下;
  • 根据 IP 网络的大小,可将 IP 的等级分为 A, B, C 三种常见的等级;
  • Loopback 这个网段在 127.0.0.0/8 ,用在每个作业系统内部的回圈测试中。
  • 网络可继续分成更小的网络 (subnetwork),主要是透过将 Host_ID 借位成为 Net_ID 的技术;
  • 若 IP 封包大于 MAC 可接受的最大值时,就得将该 IP 封包重组分段;
  • IP 只有两种,就是 Public IP 与 Private IP ,中文应该翻译为 公共 IP 与 私有(或保留) IP,私有 IP 与私有路由不可以直接连接到 Internet 上;
  • 每一台主机都有自己的路由表,这个路由表规定了封包的传送途径,在路由表当中,最重要者为预设的通讯闸 ( Gateway/Router );
  • TCP 协定的表头资料当中,那个 Code (control flags) 所带有的 ACK, SYN, FIN 等为常见的旗标, 可以控制封包的连线成功与否;
  • TCP 与 IP 的 IP address/Port 可以组成一对 socket pair
  • 网络连线都是双向的,在 TCP 的连线当中,需要进行用户端与服务器端两次的 SYN/ACK 封包发送与确认, 所以一次 TCP 连线确认时,需要进行三向交握的流程;
  • UDP 通讯协定由于不需要连线确认,因此适用于快速即时传输且不需要资料可靠的软件中,例如即时通讯;
  • ICMP 封包最主要的功能在回报网络的探测状况,故不要使用防火墙将他完全挡掉;
  • MTU 可以用来规范各种封包打包时的最大单位,单位为 byte。
  • 一般来说,一台主机里面的网络参数应该具备有:IP, Netmask, Network, Broadcast, Gateway 等;
  • 目前常见的资料封包格式有 TCP/UDP/ICMP 等,TCP 为较可靠的封包格式, 透过多种确认手段来使封包可以准确的到达目的地,至于 UDP 则略过这些确认手续,因此传送速度较快。
  • 在主机的 port 当中,只有 root 可以启用小于 1023 以下的 port ;
  • DNS 主要的目的在于进行 Hostname 对应 IP 的功能;

大标题的图示课后练习:
  • 请简述 OSI 网络七层协定每一层的功能;
  • 请参考本章第一节的相关内容。
  • 在 ISP 提供的网络服务中,他们提到传输速度为 1.5M/382K ,请问这个数据的单位为何?
    数据单位为 bits/second, 与惯用的 bytes 差 8 倍。
  • 什么是 MAC ( Media Access Control ) ,MAC 主要的功能是什么?
  • Media Access Control 的缩写,为乙太网络硬体讯框的规格,乙太网络就是以 MAC 讯框进行资料的传送。 目前 MAC 也常被用为乙太网络卡卡号的代称。
  • 什么是封包碰撞?为什么会发生封包碰撞?
  • 当主机要使用网络时,必须要先进行 CSMA/CD 监听网络,如果(1)网络使用频繁 (2)网络间隔太大, 则可能会发生监听时均显示无主机使用,但发出封包后却发生同步发送封包的情况,此时两个封包就会产生碰撞, 造成资料损毁。
  • ARP Table 的作用为何?如何在我的 Linux 察看我的 ARP 表格?
  • ARP 协定主要在分析 MAC 与 IP 的对应,而解析完毕后的资料会存在系统的记忆体中, 下次要传送到相同的 IP 时,就会主动的直接以该 MAC 传送,而不发送广播封包询问整个网络了。
    利用 arp -n 即可
  • 简略说明 Netmask 的作用与优点;
  • Netmask 可以用来区分网络,且 Netmask 可以有效的增加网络的效率,这是因为 Netmask 可以定义出一个网络的大小,那么 broadcast 的时间就可以降低很多!一般来说, 我们如果要将一个大网络再细分为小网络,也需要藉由 Netmask 来进行 subnet 的切割。
  • 我有一组网络为: 192.168.0.0/28 ,请问这个网络的 Network, Netmask, Broadcast 各为多少?而可以使用的 IP 数量与范围各是多少?
  • 因为共有 28 个 bits 是不可动的,所以 Netmask 位址的最后一个数字为 11110000,也就是 (128+64+32+16=240) ,所以:
    Network:192.168.0.0
    Netmask:255.255.255.240
    Broadcast:192.168.0.15
    IP:由 192.168.0.1 ~ 192.168.0.14 共 14 个可用 IP 喔!
  • 承上题,如果网络是 192.168.0.128/29 呢?
  • 因为是 29 个 bits 不可动,所以最后一个 Netmask 的位址为: 11111000 也就是 (128+64+32+16+8=248),所以:
    Network:192.168.0.128
    Netmask:255.255.255.248
    Broadcast:192.168.0.135
    IP:由 192.168.0.129 ~ 192.168.0.134 共 6 个可用的 IP 喔!
  • 我要将 192.168.100.0/24 这个 C Class 的网络分为 4 个子网络,请问这四个子网络要如何表示?
  • 既然要分为四个网络,也就是还需要藉助 Netmask 的两个 bits (2的2次方为4啊!),所以 Netmask 会变成 255.255.255.192 ,每个子网络会有 256/4=64 个 IP ,而必须要扣除 Network 与 Broadcast ,所以每个子网络会有 62 个可用 IP 喔!因此,四个子网络的表示方法为:
    192.168.100.0/26, 192.168.100.64/26, 192.168.100.128/26, 192.168.100.192/26。
  • 如何观察 Linux 主机上面的路由资讯 ( route table )?
  • 路由资讯的观察可以下达 route 来直接察看!或者是下达 route -n 亦可
  • TCP 封包上面的 SYN 与 ACK 标志代表的意义为何?
  • SYN 代表该封包为该系列连线的第一个封包,亦即是主动连线的意思;
    ACK 则代表该封包为确认封包,亦即是回应封包!
  • 什么是三向交握?在哪一种封包格式上面才会有三向交握?
  • 使用 TCP 封包才会有三向交握。TCP 封包的三向交握是一个确认封包正确性的重要步骤,通过 SYN, SYN/ACK, ACK 三个封包的确认无误后,才能够建立连线。至于 UDP 封包则没有三向交握喔!
  • 参考合勤科技网页上的说明 (http://www.zyxel.com.tw/product/category.htm?indexFlagvalue=1028014886 ) 试说明何谓有网管?无网管的 switch ?此外,这些 switch 的硬体应算在 OSI 七层协定的第几层?
  • 有网管者,会在 switch 内部加入其他的小型 OS,藉以管理 IP 或 MAC 的流通; 通常基础的 switch 仅达管理 MAC ,故为 OSI 第二层(资料连接层)
  • 为何 ISP 有时后会谈到‘申请固定 8 个 IP ,其中只有 5 个可以用’,你觉得问题出在哪里? 如果以网络的观念来看,他的 netmask 会是多少?
  • 因为如果是一个网络的话,那么八个 IP 前后(Host_ID 全为 0 与 1 的条件)为 Network 及 Broadcast , 加上一个在 ISP 处的 Gateway ,所以仅有 5 个可以用。因为有 8 个 IP ,所以其 netmask 后八 bits 为 11111000 ,故为 255.255.255.248。
  • Internet 协定中共包含 "Network Access Layer", "Internet Layer", "Transport Layer", "Application Layer", 请将这四层与 OSI 七层协定的内容进行连结 (自行上网查询相关文章说明);
  • Network Access Layer: 涵盖 Data-Link 及 Physical Layer
    Internet Layer: 也是 Network Layer
    Transport Layer: 也是 Transport Layer
    Application Layer: 涵盖 Application Layer, Persentatin Layer, Session Layer.
  • 请自行上网查询关于 NetBIOS 这个通讯协定的相关理论基础,并请说明 NetBIOS 是否可以跨路由?
  • 请自行参考网中人的网络基础文章
  • 什么是 Socket pair ?包含哪些基本资料?
  • 由 IP 封包的 IP address 与 TCP 封包的 port number 达成,分别为目的端的 IP/port 与本地端的 IP/port。
  • 分别说明 568A 及 568B 这两种 RJ-45 接头的蕊线颜色排列顺序;
  • 568A: 白绿 绿 白橙 蓝 白蓝 橙 白棕 棕
    568B:白橙 橙 白绿 蓝 白蓝 绿 白棕 棕
  • IP 有一段 A Class 的网段分给系统做为测试用,请问该网段为?设定的名称为?
  • 127.0.0.0/8, loopback
  • ICMP 这个协定最主要的目的为?同时做为‘回应’的类别为第几类?
  • 做为网络检测之用,为第 8 类 (echo request)
  • IP 封包表头有个 TTL 的标志,请问该标志的基本说明为何?其数据有何特性?
  • 为该封包的存活时间,该时间每经过一个 node 都会减少一,当 TTL 为 0 时,该封包会被路由器所丢弃。 该数据最大为 255。
  • 在 Linux 当中,如何查询每个 port number 对于服务的对应 (filename)
  • /etc/services 文件中有纪录
  • 什么是星形连线?优点为何?
  • 利用一 hub/switch 连结所有的网络设备的一种连线方式,最大的好处是,每个‘网络设备与 switch 之间’都是独立的, 所以所以每个主机故障时均不会影响其他主机的连线。
  • 请说明 CSMA/CD 的运作原理?
    发送流程
    1. 主机欲使用网络时,会先监听网络,若网络没有被使用时,才会准备传送,否则继续监听;
    2. 当资料传送钟,发现有碰撞情况时,则会重新监听网络,并且重新发送一次该封包;
    3. 若重复发生碰撞 16 次,则网络会瘫痪;
    接收流程
    1. 主机如果没有在传送资料,则会监听网络,并且主动在接收的状态下;
    2. 若接收到一个封包,并且该表头所载 MAC 为本身的网卡卡号,则开始接收该封包,否则将该封包丢弃;
    3. 接收过程当中如果发生封包碰撞,则会通知原发送主机碰撞的资料;
    4. 封包接收完毕后,会以 MAC 表头所载长度同时分析本封包长度,若发生问题,则会通知对方重新传送。
  • TCP/IP 这两个通讯协定必须要在一起才能生效,为什么?
  • 因为 IP 协定仅定位出 IP 的所在处与路由,并没有沟通协调的能力, 至于 TCP 封包则具有目的端、本地端程序之间沟通的能力,但无法直接传送封包。 故 TCP/IP 常会放在一起讲。

大标题的图示参考资料
特别感谢:
本文在 2002/07 发出之后,收到相当多朋友的关心,也从而发现了自己误会的一些基础的网络理论,真的是感谢好朋友 Netman 兄与 ZMAN 兄的指导!这篇短文在 2003/08/03 做了相当大幅度的修订,与原来的文章 ( 上次更新日期 2002/09 ) 已经有一定程度的差异了,希望网友们如果有时间的话,能够再次的阅读, 以厘清一些基本概念喔!

2002/07/18:第一次完成日期!
2002/09/26:修改了部分可能引起误解的文章部分!
2003/08/03:重新编排版面,并且重新检视文章内容,修订文章!
2003/08/20:增加重点回顾与课后练习
2003/09/06:加入参考用解答
2004/03/16:修订 N-Way 的错误,订正为 Auto MDI/MDIX 的功能!
2006/02/09:将旧的文章移动到 此处
2006/07/12:参考了粘教授与风信子兄的书籍,修改了很多基础资料喔!还有重点整理,不过,练习尚未更新
2006/07/16:加入习题练习啰!
2007/10/21:图14那个 UDP 的表头资料中,16 bits 误植为 16 bytes,感谢讨论区 ricky.liu 的告知!
2008/04/21:经由网友 chyanlong 兄的指点,IHL 的大小单位误植为 byte,应该是字组 (word) 才对。

 
     
中国存储网 ChinaStor.com排版整理
原文作者鸟哥,主页,更多Linux学习资料在线看:Linux系统管理员手册 - Linux命令大全 - Linux调用大全- Linux专栏 - 国产Linux