计算机网络协议: OSI 七层协定
计算机网络协议: TCP/IP
其实 TCP/IP 也是使用 OSI 七层协议的观念, 所以同样具有分层的架构,只是将它简化为四层,在结构上面比较没有这么严谨,程序撰写会比较容易些。
那 TCP/IP 是如何运作的呢?我们就拿妳常常连上的 Yahoo 入口网站来做个说明好了,整个联机的状态可以这样看:
1. 应用程序阶段:妳打开浏览器,在浏览器上面输入网址列,按下 [Enter]。此时网址列与相关数据会被浏览器包成一个数据, 并向下传给 TCP/IP 的应用层;
2. 应用层:由应用层提供的 HTTP 通讯协议,将来自浏览器的数据报起来,并给予一个应用层表头,再向传送层丢去;
3. 传送层:由于 HTTP 为可靠联机,因此将该数据丢入 TCP 封包内,并给予一个 TCP 封包的表头,向网络层丢去;
4. 网络层:将 TCP 包裹包进 IP 封包内,再给予一个 IP 表头 (主要就是来源与目标的 IP 啰),向链结层丢去;
5. 链结层:如果使用以太网络时,此时 IP 会依据 CSMA/CD 的标准,包裹到 MAC 讯框中,并给予 MAC 表头,再转成位串后, 利用传输媒体传送到远程主机上。
网络媒体一次传输的数据量是有限的,因此如果要被传输的数据太大时,我们在分层的包装中,就得要将数据先拆开放到不同的包裹中, 再给包裹一个序号,好让目的端的主机能够藉由这些序号再重新将数据整合回来!
以太网络的传输协议:CSMA/CD
整个以太网络的重心就是以太网络卡啦!所以说,以太网络的传输主要就是网络卡对网络卡之间的数据传递而已。 每张以太网络卡出厂时,就会赋予一个独一无二的卡号,那就是所谓的 MAC (Media Access Control)。那么以太网络的网卡之间数据是如何传输的呢?那就得要谈一下 IEEE 802.3 的标准 CSMA/CD (Carrier Sense Multiple Access with Collision Detection) 了。
TCP/IP 的网络层相关封包与数据
我们现在知道要有网络的话,必须要有网络相关的硬件,而目前最常见的网络硬件接口为以太网络,包括网络线、网络卡、Hub/Switch 等等。而以太网络上面的传输使用网络卡卡号为基准的 MAC 讯框,配合 CSMA/CD 的标准来传送讯框,这就是硬件部分。在软件部分,我们知道 Internet 其实就是 TCP/IP 这个通讯协议的通称,Internet 是由 InterNIC(注12) 所统一管理的, 但其实他仅是负责分配 Internet 上面的 IP 以及提供相关的 TCP/IP 技术文件而已。不过 Internet 最重要的就是 IP。
IP 地址的组成与分级
IP 的组成是 32 bits 的数值,也就是由 32 个 0 与 1 组成的一连串数字!那么当我们思考所有跟 IP 有关的参数时,你就应该要将该参数想成是 32 位的数据喔! 不过,因为人类对于二进制实在是不怎么熟悉,所以为了顺应人们对于十进制的依赖性,因此,就将 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 哩!但在这一串数字中,其实还可以分为两个部分喔! 主要分为 Net_ID (网域号码)与 Host_ID (主机号码) 两部份。
192.168.0.0~192.168.0.255 这个 Class C 的说明:
11000000.10101000.00000000.00000000
11000000.10101000.00000000.11111111
|-----------------Net_ID----------------|----host----|
在上面的范例当中,前面三组数字 (192.168.0) 就是网域号码,最后面一组数字则称为主机号码。 至于同一个网域的定义是『在同一个物理网段内,主机的 IP 具有相同的 Net_ID ,并且具有独特的 Host_ID』,那么这些 IP 群就是同一个网域内的 IP 网段啦!
IP 在同一网域的意义
Net_ID 与 Host_ID 的限制:
在同一个网段内,Net_ID 是不变的,而 Host_ID 则是不可重复,此外,Host_ID 在二进制的表示法当中,不可同时为 0 也不可同时为 1 ,因为全为 0 表示整个网段的地址 (Network IP),而全为 1 则表示为广播的地址 (Broadcast IP)。例如上面的例子当中,192.168.0.0 (Host_ID 全部为 0)以及 192.168.0.255 (Host_ID 全部为 1) 不可用来作为网段内主机的 IP 设定,也就是说,这个网段内可用来设定主机的 IP 是由 192.168.0.1 到 192.168.0.254;
在区网内透过 IP 广播传递数据
在同物理网段的主机如果设定相同的网域 IP 范围 (不可重复),则这些主机都可以透过 CSMA/CD 的功能直接在区网内用广播进行网络的联机,亦即可以直接网卡对网卡传递数据 (透过 MAC 讯框);
设定不同区网在同物理网段的情况
在同一个物理网段之内,如果两部主机设定成不同的 IP 网段,则由于广播地址的不同,导致无法透过广播的方式来进行联机。 此时得要透过路由器 (router) 来进行沟通才能将两个网域连结在一起。
网域的大小
当 Host_ID 所占用的位越大,亦即 Host_ID 数量越多时,表示同一个网域内可用以设定主机的 IP 数量越多。
IP 的种类与取得方式
Public IP : 公共 IP ,经由 INTERNIC 所统一规划的 IP,有这种 IP 才可以连上 Internet ;
Private IP : 私有 IP 或保留 IP,不能直接连上 Internet 的 IP , 主要用于局域网络内的主机联机规划。
IP 与 MAC:链结层的 ARP 与 RARP 协定
ARP (Address Resolution Protocol, 网络地址解析) 协议,以及 RARP (Revers ARP, 反向网络地址解析)
IP 其实是设定于某张以太网络卡上头时,我们的主机会对整个区网发送出 ARP 封包, 对方收到 ARP 封包后就会回传他的 MAC 给我们,我们的主机就会知道对方所在的网卡,那接下来就能够开始传递数据。当使用 ARP 协议取得目标 IP 与他网卡卡号后, 就会将该笔记录写入我们主机的 ARP table 中 (内存内的数据) 记录 20 分钟。
当你发送 ARP 封包取得的 IP/MAC 对应,这个记录的 ARP table 是动态的信息 (一般保留 20 分钟),他会随时随着你的网域里面计算机的 IP 更动而变化。
特权端口 (Privileged Ports)
另外一点比较值得注意的是,小于 1024 以下的端口要启动时, 启动者的身份必须要是 root 才行,所以才叫做特权端口嘛!这个限制挺重要的,大家不要忘记了喔! 不过如果是 client 端的话,由于 client 端都是主动向 server 端要数据, 所以 client 端的 port number 就使用随机取一个大于 1024 以上且没有在用的 port number。