鸟哥的私房菜网络篇

2.1.2 计算机网络组成组件

接下来,让我们来谈谈那么组成计算机网络的组件有哪些呢?这些组件的定义为何啊?

  • 节点 (node):节点主要是具有网络地址 (IP) 的设备之称, 因此上面图示中的一般PC、Linux服务器、ADSL调制解调器与网络打印机等,个别都可以称为一个 node ! 那中间那个集线器 (hub) 是不是节点呢?因为他不具有 IP ,因此 hub 不是节点。
  • 服务器主机 (server):就网络联机的方向来说,提供数据以『响应』给用户的主机, 都可以被称为是一部服务器。举例来说,Yahoo 是个 WWW 服务器,昆山的 FTP (http://ftp.ksu.edu.tw/) 是个文件服务器等等。
  • 工作站 (workstation) 或客户端 (client):任何可以在计算机网络输入的设备都可以是工作站, 若以联机发起的方向来说,主动发起联机去『要求』数据的,就可以称为是客户端 (client)。举例来说,一般 PC 打开浏览器对 Yahoo 要求新闻数据,那一般 PC 就是客户端。
  • 网络卡 (Network Interface Card, NIC):内建或者是外插在主机上面的一个设备, 主要提供网络联机的卡片,目前大都使用具有 RJ-45 接头的以太网络卡。一般 node 上都具有一个以上的网络卡, 以达成网络联机的功能。
  • 网络接口:利用软件设计出来的网络接口,主要在提供网络地址 (IP) 的任务。 一张网卡至少可以搭配一个以上的网络接口;而每部主机内部其实也都拥有一个内部的网络接口,那就是 loopback (lo) 这个循环测试接口!
  • 网络形态或拓朴 (topology):各个节点在网络上面的链接方式,一般讲的是物理连接方式。 举例来说,上图中显示的是一种被称为星形联机 (star) 的方式,主要是透过一个中间连接设备, 以放射状的方式连接各个节点的一种形态,这就是一种拓朴。

网关 (route) 或通讯闸 (gateway):具有两个以上的网络接口, 可以连接两个以上不同的网段的设备,例如 IP 分享器就是一个常见的网关设备。那上面的 ADSL 调制解调器算不算网关呢? 其实不太能算,因为调制解调器通常视为一个在主机内的网卡设备,我们可以在一般 PC 上面透过拨号软件, 将调制解调器仿真成为一张实体网卡 (ppp) ,因此他不太能算是网关设备啦

2.1.4 计算机网络协议: OSI 七层协定

每一个阶层所负责的任务是什么呢?简单的说,每一层负责的任务如下:(注6, 注8, 注9)

分层

负责内容

Layer 1
物理层
Physical Layer

由于网络媒体只能传送 0 与 1 这种位串,因此物理层必须定义所使用的媒体设备之电压与讯号等, 同时还必须了解数据讯框转成位串的编码方式,最后连接实体媒体并传送/接收位串。

Layer 2
数据链结层
Data-Link Layer

这一层是比较特殊的一个阶层,因为底下是实体的定义,而上层则是软件封装的定义。因此第二层又分两个子层在进行数据的转换动作。 在偏硬件媒体部分,主要负责的是 MAC (Media Access Control) ,我们称这个数据报裹为 MAC 讯框 (frame), MAC 是网络媒体所能处理的主要数据报裹,这也是最终被物理层编码成位串的数据。MAC 必须要经由通讯协议来取得媒体的使用权, 目前最常使用的则是 IEEE 802.3 的以太网络协议。详细的 MAC 与以太网络请参考下节说明。

至于偏向软件的部分则是由逻辑链接层 (logical link control, LLC) 所控制,主要在多任务处理来自上层的封包数据 (packet) 并转成 MAC 的格式, 负责的工作包括讯息交换、流量控制、失误问题的处理等等。

Layer 3
网络层
Network Layer

这一层是我们最感兴趣的啰,因为我们提及的 IP (Internet Protocol) 就是在这一层定义的。 同时也定义出计算机之间的联机建立、终止与维持等,数据封包的传输路径选择等等,因此这个层级当中最重要的除了 IP 之外,就是封包能否到达目的地的路由 (route) 概念了!

Layer 4
传送层
Transport Layer

这一个分层定义了发送端与接收端的联机技术(如 TCP, UDP 技术), 同时包括该技术的封包格式,数据封包的传送、流程的控制、传输过程的侦测检查与复原重新传送等等, 以确保各个资料封包可以正确无误的到达目的端。

Layer 5
会谈层
Session Layer

在这个层级当中主要定义了两个地址之间的联机信道之连接与挂断,此外,亦可建立应用程序之对谈、 提供其他加强型服务如网络管理、签到签退、对谈之控制等等。如果说传送层是在判断资料封包是否可以正确的到达目标, 那么会谈层则是在确定网络服务建立联机的确认。

Layer 6
表现层
Presentation Layer

我们在应用程序上面所制作出来的数据格式不一定符合网络传输的标准编码格式的! 所以,在这个层级当中,主要的动作就是:将来自本地端应用程序的数据格式转换(或者是重新编码)成为网络的标准格式, 然后再交给底下传送层等的协议来进行处理。所以,在这个层级上面主要定义的是网络服务(或程序)之间的数据格式的转换, 包括数据的加解密也是在这个分层上面处理。

Layer 7
应用层
Application Layer

应用层本身并不属于应用程序所有,而是在定义应用程序如何进入此层的沟通接口,以将数据接收或传送给应用程序,最终展示给用户。

事实上, OSI 七层协议只是一个参考的模型 (model),目前的网络社会并没有什么很知名的操作系统在使用 OSI 七层协议的联网程序代码。那...讲这么多干嘛?这是因为 OSI 所定义出来的七层协议在解释网络传输的情况来说, 可以解释的非常棒,因此大家都拿 OSI 七层协议来做为网络的教学与概念的理解。至于实际的联网程序代码,那就交给 TCP/IP 这个玩意儿吧!

2.1.5 计算机网络协议: TCP/IP

虽然 OSI 七层协议的架构非常严谨,是学习网络的好材料。但是也就是因为太过严谨了,因此程序撰写相当不容易, 所以造成它在发展上面些许的困扰。而由 ARPANET 发展而来的 TCP/IP 又如何呢?其实 TCP/IP 也是使用 OSI 七层协议的观念, 所以同样具有分层的架构,只是将它简化为四层,在结构上面比较没有这么严谨,程序撰写会比较容易些。后来在 1990 年代由于 email, WWW 的流行,造成 TCP/IP 这个标准为大家所接受,这也造就目前我们的网络社会啰!

既然 TCP/IP 是由 OSI 七层协议简化而来,那么这两者之间有没有什么相关性呢?它们的相关性可以图示如下, 同时这里也列出目前在这架构底下常见的通讯协议、封包格式与相关标准:

从上图中,我们可以发现 TCP/IP 将应用、表现、会谈三层整合成一个应用层,在应用层上面可以实作的程序协议有 HTTP, SMTP, DNS 等等。 传送层则没有变,不过依据传送的可靠性又将封包格式分为连接导向的 TCP 及非连接导向的 UDP 封包格式。网络层也没有变,主要内容是提供了 IP 封包,并可选择最佳路由来到达目标 IP 地址。数据链结层与物理层则整合成为一个链结层,包括定义硬件讯号、 讯框转位串的编码等等,因此主要与硬件 (不论是区网还是广域网) 有关。

那 TCP/IP 是如何运作的呢?我们就拿妳常常连上的 Yahoo 入口网站来做个说明好了,整个联机的状态可以这样看:

  1. 应用程序阶段:妳打开浏览器,在浏览器上面输入网址列,按下 [Enter]。此时网址列与相关数据会被浏览器包成一个数据, 并向下传给 TCP/IP 的应用层;
  2. 应用层:由应用层提供的 HTTP 通讯协议,将来自浏览器的数据报起来,并给予一个应用层表头,再向传送层丢去;
  3. 传送层:由于 HTTP 为可靠联机,因此将该数据丢入 TCP 封包内,并给予一个 TCP 封包的表头,向网络层丢去;
  4. 网络层:将 TCP 包裹包进 IP 封包内,再给予一个 IP 表头 (主要就是来源与目标的 IP 啰),向链结层丢去;
  5. 链结层:如果使用以太网络时,此时 IP 会依据 CSMA/CD 的标准,包裹到 MAC 讯框中,并给予 MAC 表头,再转成位串后, 利用传输媒体传送到远程主机上。

等到 Yahoo 收到你的包裹后,在依据相反方向拆解开来,然后交给对应的层级进行分析,最后就让 Yahoo 的 WWW 服务器软件得到你所想要的数据,该服务器软件再根据你的要求,取得正确的资料后,又依循上述的流程,一层一层的包装起来, 最后传送到你的手上!就是这样啰!

根据这样的流程,我们就得要知道每个分层所需要了解的基础知识,这样才算学习网络基础嘛!所以底下我们会依据 TCP/IP 的链结层、网络层、传送层来进行说明,应用层的协议则在后续章节中有对应的协定再来谈啰!同时我们也知道, 网络媒体一次传输的数据量是有限的,因此如果要被传输的数据太大时,我们在分层的包装中,就得要将数据先拆开放到不同的包裹中, 再给包裹一个序号,好让目的端的主机能够藉由这些序号再重新将数据整合回来!很有趣吧!接下来就让我们一层一层来介绍啰!

2.2.1 广域网使用的设备

2.1.3 节我们有提到过,广域网使用的设备价格较为低廉。 不过广域网使用到的设备非常的多,一般用户通常会接触到的主要是 ADSL 调制解调器或者是光纤到大厦,以及第四台的 Cable 宽带等。在这里我们先介绍一些比较常见的设备,如果以后你有机会接触到其他设备,再请你依据需求自行查阅相关书籍吧!

    • 传统电话拨接:透过 ppp 协议

      早期网络大概都只能透过调制解调器加上电话线以及计算机的九针串行端口 (以前接鼠标或游戏杆的插孔),然后透过 Point-to-Point Protocol (PPP 协议) 配合拨接程序来取得网络 IP 参数,这样就能够上网了。不过这样的速度非常慢,而且当电话拨接后, 就不能够讲电话了!因为 PPP 支持 TCP/IP, NetBEUI, IPX/SPX 等通讯协议,所以使用度非常广!
    • 整合服务数字网络 (Integrated Services Digital Network, ISDN)

      也是利用现有的电话线路来达成网络联机的目的,只是联机的两端都需要有 ISDN 的调制解调器来提供联机功能。 ISDN 的传输有多种通道可供使用,并且可以将多个信道整合应用,因此速度可以成倍成长。基本的 B 信道速度约为 64Kbps, 但如美国规格使用 23 个以上的通道来达成联机,此时速度可达 1.5Mbps 左右。不过台湾这玩意儿比较少见。
    • 非对称数位用路回路 (Asymmetric Digital Subscriber Line, ADSL):透过 pppoe 协议

      也是透过电话线来拨接后取得 IP 的一个方法,只不过这个方式使用的是电话的高频部分,与一般讲电话的频率不同。 因此妳可以一边使用 ADSL 上网同时透过同一个电话号码来打电话聊天。在台湾,由于上传/下载的带宽不同, 因此才称为非对称的回路。ADSL 同样使用调制解调器,只是他透过的是 PPPoE (PPP over Ethernet) 的方法! 将 PPP 仿真在以太网络卡上,因此你的主机需要透过一张网络卡来连接到调制解调器,并透过拨接程序来取得新的接口 (ppp0) 喔!
  • 电缆调制解调器 (Cable modem)

    主要透过有线电视 (台湾所谓的第四台) 使用的缆线作为网络讯号媒体,同样需要具备调制解调器来连接到 ISP,以取得网络参数来上网。 Cable modem 的带宽主要是分享型的,所以通常具有区域性,并不是你想装就能装的哩!

 CSMA/CD 搭配上述的环境,它的传输情况需要有以下的流程:

  1. 监听媒体使用情况 (Carrier Sense):A 主机要发送网络封包前,需要先对网络媒体进行监听,确认没有人在使用后, 才能够发送出讯框;
  2. 多点传输 (Multiple Access):A 主机所送出的数据会被集线器复制一份,然后传送给所有连接到此集线器的主机! 也就是说, A 所送出的数据, B, C, D 三部计算机都能够接收的到!但由于目标是 D 主机,因此 B 与 C 会将此讯框数据丢弃,而 D 则会抓下来处理;
  3. 碰撞侦测 (Collision Detection):该讯框数据附有检测能力,若其他主机例如 B 计算机也刚好在同时间发送讯框数据时, 那么 A 与 B 送出的数据碰撞在一块 (出车祸) ,此时这些讯框就是损毁,那么 A 与 B 就会各自随机等待一个时间, 然后重新透过第一步再传送一次该讯框数据。

了解这个程序很重要吗?我们就来谈谈:

    • 网络忙碌时,集线器灯号闪个不停,但我的主机明明没有使用网络:
    • 透过上述的流程我们会知道,不管哪一部主机发送出讯框,所有的计算机都会接收到!因为集线器会复制一份该数据给所有计算机。 因此,虽然只有一部主机在对外联机,但是在集线器上面的所有计算机灯号就都会闪个不停!
    • 我的计算机明明没有被入侵,为何我的数据会被隔壁的计算机窃取:
      透过上述的流程,我们只要在 B 计算机上面安装一套监听软件,这套软件将原本要丢弃的讯框数据捉下来分析,并且加以重组, 就能够知道原本 A 所送出的讯息了。这也是为什么我们都建议重要数据在因特网上面得要『加密』后再传输!
    • 既然共享媒体只有一个主机可以使用,为何大家可以同时上网:
      这个问题就有趣了,既然共享媒体一次只能被一个主机所使用,那么万一我传输 100MB 的档案,集线器就得被我使用 80 秒 (以 10Mbps 传输时),在这期间其他人都不可以使用吗?不是的,由于标准的讯框数据在网络卡与其他以太网络媒体一次只能传输 1500bytes,因此我的 100MB 档案就得要拆成多个小数据报,然后一个一个的传送,每个数据报传送前都要经过 CSMA/CD 的机制。 所以,这个集线器的使用权是大家抢着用的!即使只有一部主机在使用网络媒体时,那么这部主机在发送每个封包间, 也都是需要等待一段时间的 (96 bit time)!
    • 讯框要多大比较好?能不能修改讯框?:
      如上所述,那么讯框的大小能不能改变呢?因为如果讯框的容量能够增大,那么小数据报的数量就会减少, 那每个讯框传送间的等待就可以减少了!是这样没错,但是以太网络标准讯框确实定义在 1500 bytes, 但近来的超高速以太网络媒体有支持 Jumbo frame (巨型讯框,注10) 的话,那么就能够将讯框大小改为 9000bytes 哩!但不是很建议大家随便修改啦!为什么呢?2.2.5 MTU 那小节再说。
    • 2.2.4 MAC 的封装格式

      上面提到的 CSMA/CD 传送出去的讯框数据,其实就是 MAC 啦!MAC 其实就是我们上面一直讲到的讯框 (frame) 啰! 只是这个讯框上面有两个很重要的数据,就是目标与来源的网卡卡号,因此我们又简称网卡卡号为 MAC 而已。 简单的说,你可以把 MAC 想成是一个在网络线上面传递的包裹,而这个包裹是整个网络硬件上面传送数据的最小单位了。 也就是说,网络线可想成是一条『一次仅可通过一个人』的独木桥, 而 MAC 就是在这个独木桥上面动的人啦!接下来,来看一看 MAC 这个讯框的内容吧!

    • 图 2.2-3、以太网络的 MAC 讯框

      上图中的目的地址与来源地址指的就是网卡卡号 (hardware address, 硬件地址),我们前面提到,每一张网卡都有一个独一无二的卡号, 那个卡号的目的就在这个讯框的表头数据使用到啦!硬件地址最小由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF (16 进位法), 这 6 bytes 当中,前 3bytes 为厂商的代码,后 3bytes 则是该厂商自行设定的装置码了。
    • 什么是全双工/半双工(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 才能达到全双工喔!
  • IP 的分级

你应该要想到一个问题,那就是我的总门牌『台南市永康区大湾路 949 号』中,到哪里是巷子而到哪里是门牌? 如果到『台南市』是巷子,那么我的门牌将有好多乡镇的组成,如果巷子号码到『台南市永康区』时, 那么我们的门牌就又少了点。所以说,这个『巷子』的大小,将会影响到我们主机号码的数量!

为了解决这个问题,以及为了 IP 管理与发放注册的方便性,InterNIC 将整个 IP 网段分为五种等级, 每种等级的范围主要与 IP 那 32 bits 数值的前面几个位有关,基本定义如下:

以二进制说明 Network 第一个数字的定义:
Class A : 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 0
          |--net--|---------host------------|
Class B : 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 10
          |------net-------|------host------|
Class C : 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 110
          |-----------net-----------|-host--|
Class D : 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 1110
Class E : 1111xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 1111

五种分级在十进制的表示:
Class A :   0.xx.xx.xx ~ 127.xx.xx.xx
Class B : 128.xx.xx.xx ~ 191.xx.xx.xx
Class C : 192.xx.xx.xx ~ 223.xx.xx.xx
Class D : 224.xx.xx.xx ~ 239.xx.xx.xx
Class E : 240.xx.xx.xx ~ 255.xx.xx.xx

根据上表的说明,我们可以知道,你只要知道 IP 的第一个十进制数,就能够约略了解到该 IP 属于哪一个等级, 以及同网域 IP 数量有多少。这也是为啥我们上头选了 192.168.0.0 这一 IP 网段来说明时,会将巷子定义到第三个数字之故。 不过,上表中你只要记忆三种等级,亦即是 Class A, B, C 即可,因为 Class D 是用来作为群播 (multicast) 的特殊功能之用 (最常用在大批计算机的网络还原),至于 Class E 则是保留没有使用的网段。因此,能够用来设定在一般系统上面的,就只有 Class A, B, C 三种等级的 IP 啰!

2.3.3 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 网段,那就是:

  • Class A:10.0.0.0    - 10.255.255.255
  • Class B:172.16.0.0  - 172.31.255.255
  • Class C:192.168.0.0 - 192.168.255.255

由于这三段 Class 的 IP 是预留使用的,所以并不能直接作为 Internet 上面的连接之用,不然的话,到处就都有相同的 IP 啰!那怎么行!网络岂不混乱?所以啰,这三个 IP 网段就只做为内部私有网域的 IP 沟通之用。简单的说,他有底下的几个限制:

  • 私有 IP 的路由信息不能对外散播 (只能存在内部网络);
  • 使用私有 IP 作为来源或目的地址的封包,不能透过 Internet 来转送 (不然网络会混乱);
  • 关于私有 IP 的参考纪录(如 DNS),只能限于内部网络使用 (一样的原理啦)

这个私有 IP 有什么好处呢?由于他的私有路由不能对外直接提供信息,所以,你的内部网络将不会直接被 Internet 上面的 Cracker 所攻击!但是,你也就无法以私有 IP 来『直接上网』啰!因此相当适合一些尚未具有 Public IP 的企业内部用来规划其网络之设定!否则当你随便指定一些可能是 Public IP 的网段来规划你企业内部的网络设定时,万一哪一天真的连上 Internet 了,那么岂不是可能会造成跟 Internet 上面的 Public IP 相同了吗?

此外,在没有可用的公开网络情况下,如果你想要跟同学玩联机游戏怎办?也就是说,在区网内自己玩自己的联机游戏, 此时你只要规范好所有同学在同一段私有 IP 网段中,就能够顺利的玩你的网络啦!就这么简单呢!

那么万一你又要将这些私有 IP 送上 Internet 呢?这个简单,设定一个简单的防火墙加上 NAT (Network Address Transfer) 服务,你就可以透过 IP 伪装 (不要急,这个在后面也会提到) 来使你的私有 IP 的计算机也可以连上 Internet 啰!

  • Netmask, 或称为 Subnet mask (子网掩码)

那到底是什么参数来达成子网的切分呢?那就是 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 说明
第一个 IP: 11000000.10101000.00000000.00000000
最后一个 : 11000000.10101000.00000000.11111111
            |----------Net_ID---------|-host--|
Netmask  : 11111111.11111111.11111111.00000000  <== Netmask 二进制
         :   255   .  255   .  255   .   0      <== Netmask 十进制
特别注意喔,netmask 也是 32 位,在数值上,位于 Net_ID 的为 1 而 Host_ID 为 0

将他转成十进制的话,就成为『255.255.255.0』啦! 这样记忆简单多了吧!照这样的记忆方法,那么 A, B, C Class 的 Netmask 表示就成为这样:

Class A, B, C 三个等级的 Netmask 表示方式:
Class A : 11111111.00000000.00000000.00000000 ==> 255.  0.  0.  0
Class B : 11111111.11111111.00000000.00000000 ==> 255.255.  0.  0
Class C : 11111111.11111111.11111111.00000000 ==> 255.255.255.  0

所以说, 192.168.0.0 ~ 192.168.0.255 这个 Class C 的网域中,他的 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

  • 子网切分

好了,刚刚提到 Class C 还可以继续进行子域 (Subnet) 的切分啊,以 192.168.0.0 ~192.168.0.255 这个情况为例,他要如何再细分为两个子域呢?我们已经知道 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

第二个子网
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

所以说,当再细分下去时,就会得到两个子域,而两个子域还可以再细分下去喔 (Net_ID 用掉 26 bits ....)。呵呵!如果你真的能够理解 IP, Network, Broadcast, Netmask 的话,恭喜你,未来的服务器学习之路已经顺畅了一半啦! ^_^

例题:
试着计算出 172.16.0.0,但 Net_ID 占用 23 个位时,这个网域的 Netmask, Network, Broadcast 等参数
答:
由于 172.16.xxx.xxx 是在 Class B 的等级当中,亦即 Net_ID 是 16 位才对。不过题目给的 Net_ID 占用了 23 个位喔! 等于是向 Host_ID 借了 (23-16) 7 个位用在 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 个位不会被改变,所以并没有计算成二进制 (172.16), 真是不好意思啊~至于粗体部分则是代表 host_ID 啊!

其实子网的计算是有偷吃步的,我们知道 IP 是二进制,每个位就是 2 的次方。又由于 IP 数量都是平均分配到每个子网去, 所以,如果我们以 192.168.0.0 ~ 192.168.0.255 这个网段来说,要是给予 Net_ID 是 26 位时,总共分为几段呢? 因为 26-24=2 ,所以总共用掉两个位,因此有 2 的 2 次方,得到 4 个网段。再将 256 个 IP 平均分配到 4 个网段去, 那我们就可以知道这四个网段分别是:

  • 192.168.0.0~192.168.0.63
  • 192.168.0.64~192.168.0.127
  • 192.168.0.128~192.168.0.191
  • 192.168.0.192~192.168.0.255

有没有变简单的感觉啊?那你再想想,如果同样一个网段,那 Net_ID 变成 27 个位时,又该如何计算呢?自己算算看吧!

2.4.2 TCP 的三向交握

TCP 被称为可靠的联机封包,主要是透过许多机制来达成的,其中最重要的就是三向交握的功能。 当然, TCP 传送数据的机制非常复杂,有兴趣的朋友请自行参考相关网络书籍。 OK,那么如何藉由 TCP 的表头来确认这个封包有实际被对方接收,并进一步与对方主机达成联机? 我们以底下的图示来作为说明。

三向交握之封包连接模式
图 2.4-3、三向交握之封包连接模式

在上面的封包连接模式当中,在建立联机之前都必须要通过三个确认的动作, 所以这种联机方式也就被称为三向交握(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 来建立联机,所以总共会进行三次的交谈! 在设定防火墙或者是追踪网络联机的问题时,这个『双向』的概念最容易被忽略, 而常常导致无法联机成功的问题啊!切记切记!

1. 鸟哥说:A同学你在不在?
2. A同学说:我在!那鸟哥你在不在?
3. 鸟哥说:我也在
三次握手

2.5.2 一组可以连上 Internet 的必要网络参数

从上面的所有说明当中,我们知道一部主机要能够使用网络,必须要有 IP ,而 IP 的设定当中,就必须要有 IP, Network, Broadcast, Netmask 等参数,此外,还需要考虑到路由里面的 Default Gateway 才能够正确的将非同网域的封包给他传送出去。 另外,考虑到主机名与 IP 的对应,所以你还必须要给予系统一个 DNS 服务器的 IP 才行~ 所以说,一组合理的网络设定需要哪些数据呢?呵呵!就是:

  • IP
  • Netmask
  • Network
  • Broadcast
  • Gateway
  • DNS

其中,由于 Network 与 Broadcast 可以经由 IP/Netmask 的计算而得到,因此需要设定于你 PC 端的网络参数, 主要就是 IP, Netmask, Default Gateway, DNS 这四个就是了!

没错!就是这些数据!如果你是使用 ADSL 拨接来上网的话,上面这些数据都是由 ISP 直接给你的,那你只要使用拨接程序进行拨接到 ISP 的工作之后, 这些数据就自动的在你的主机上面设定完成了!但是如果是固定制 (如学术网络) 的话,那么就得自行使用上面的参数来设定你的主机啰!缺一不可呢!以 192.168.1.0/24 这个 Class C 为例的话,那么你就必须要在你的主机上面设定好底下的参数:

  • IP: 由 192.168.1.1~192.168.1.254
  • Netmask: 255.255.255.0
  • Network: 192.168.1.0
  • Broadcast: 192.168.1.255
  • Gateway: 每个环境都不同,请自行询问网络管理员
  • DNS: 也可以直接设定成 168.95.1.1
2.6 重点回顾:
  • 虽然目前的网络媒体多以以太网络为标准,但网络媒体不只有以太网络而已;
  • Internet 主要是由 Internet Network Information Center (INTERNIC) 所维护;
  • 以太网络的 RJ-45 网络线,由于 568A/568B 接头的不同而又分为并行线与跳线;
  • 以太网络上最重要的传输数据为 Carrier Sense Multiple Access with Collision Detect (CSMA/CD) 技术, 至于传输过程当中,最重要的 MAC 讯框内以硬件地址 (hardware address) 数据最为重要;
  • 透过八蕊的网络线 (Cat 5 以上等级),现在的以太网络可以支持全双工模式;
  • OSI 七层协议为一个网络模型 (model) ,并非硬性规定。这七层协议可以协助软硬件开发有一个基本的准则, 且每一分层各自独立,方便使用者开发;
  • 现今的网络基础是架构在 TCP/IP 这个通讯协议上面;
  • 数据链结层里重要的信息为 MAC (Media Access Control),亦可称为硬件地址,而 ARP Table 可以用来对应 MAC 与软件地址 ( IP ) ;
  • 在网络媒体方面, Hub 为共享媒体,因此可能会有封包碰撞的问题,至于 Switch 由于加入了 switch port 与 MAC 的对应,因此已经克服了封包碰撞的问题,也就是说,Switch 并不是共享媒体;
  • IP 为 32 bits 所组成的,为了适应人类的记忆,因此转成四组十进制的数据;
  • IP 主要分为 Net ID 与 Host ID 两部份,加上 Netmask 这个参数后,可以设定『网域』的概念;
  • 根据 IP 网域的大小,可将 IP 的等级分为 A, B, C 三种常见的等级;
  • Loopback 这个网段在 127.0.0.0/8 ,用在每个操作系统内部的循环测试中。
  • 网域可继续分成更小的网域 (subnetwork),主要是透过将 Host_ID 借位成为 Net_ID 的技术;
  • 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 封包最主要的功能在回报网络的侦测状况,故不要使用防火墙将他完全挡掉;
  • 一般来说,一部主机里面的网络参数应该具备有:IP, Netmask, Network, Broadcast, Gateway, DNS 等;
  • 在主机的 port 当中,只有 root 可以启用小于 1024 以下的 port ;
  • DNS 主要的目的在于进行 Hostname 对应 IP 的功能;

更多内容http://cn.linux.vbird.org/linux_server/0110network_basic.php

posted @ 2017-01-07 09:57  菲菲菲菲菲常新的新手  阅读(720)  评论(0编辑  收藏  举报