您的位置:首页 > 理论基础 > 计算机网络

第二章、基础网络概念

2013-04-08 08:19 183 查看
1.计算机网络协议: OSI 七层协定
依据定义来说,越接近硬件的阶层为底层 (layer 1),越接近应用程序的则是高层 (layer 7)。 不论是接收端还是发送端,每个一阶层只认识对方的同一阶层数据。 而整个传送的过程就好像人们在玩整人游戏一般,我们透过应用程序将数据放入第七层的包裹,再将第七层的包裹放到第六层的包裹内, 依序一直放到第一层的最大的包裹内,然后传送出去给接收端。接收端的主机就得由第一个包裹开始,依序将每个包裹拆开, 然后一个一个交给对应负责的阶层来视察!这就是整人游戏...喔!是 OSI 七层协议在阶层定义方面需要注意的特色。

在七层协议中,每层都会有自己独特的表头数据 (header),告知对方这里面的信息是什么, 而真正的数据就附在后头啰!

分层 负责内容
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 应用层本身并不属于应用程序所有,而是在定义应用程序如何进入此层的沟通接口,以将数据接收或传送给应用程序,最终展示给用户。

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



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

3.IP封包的封装
IP 封包可以达到 65535 bytes 这么大,在比 MAC 大的情况下,我们的操作系统会对 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
在上面的图示中有个地方要注意,那就是『每一行所占用的位数为 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 以太网络的种种相关规格可以让这个 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 内的号码
封包协议名称(全名)
1
ICMP (Internet Control Message Protocol)
2
IGMP (Internet Group Management Protocol)
3
GGP (Gateway-to-Gateway Protocol)
4
IP (IP in IP encapsulation)
6
TCP (Transmission Control Protocol)
8
EGP (Exterior Gateway Protocol)
17
UDP (User Datagram Protocol)
当然啦,我们比较常见到的还是那个 TCP, UDP, ICMP 说!

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

Source Address:来源的 IP 地址,从这里我们也知道 IP 是 32 位喔!

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

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

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

你只要知道 IP 表头里面含有: TTL, Protocol, 来源地址与目标地址也就够了!而这个 IP 表头的来源与目标 IP ,以及那个判断通过多少路由器的 TTL ,就能了解到这个 IP 将被如何传送到目的端吶。后续各小节我们将介绍 IP 的组成与范围,还有 IP 封包如何传送的机制 (路由) 等等。

4.网域ID(Net_ID)与主机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;

5.IP的分级
为了解决这个问题,以及为了 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

6.Netmask或称为Subnet mask(子网掩码)
那到底是什么参数来达成子网的切分呢?那就是 Netmask (子网掩码) 的用途啦!这个 Netmask 是用来定义出网域的最重要的一个参数了!
以 192.168.0.0 ~ 192.168.0.255 这个网域为范例好了,如下所示,这个 IP 网段可以分为 Net_ID 与 Host_ID,既然 Net_ID 是不可变的,那就假设他所占据的 bits 已经被用光了 (全部为 1),而 Host_ID 是可变的,就将他想成是保留着 (全部为 0),所以, Netmask 的表示就成为:

Netmask : 11111111.11111111.11111111.00000000 <== Netmask 二进制
: 255 . 255 . 255 . 0 <== Netmask 十进制

所以说,在 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

7.子网切分
好了,刚刚提到 Class C 还可以继续进行子域 (Subnet) 的切分啊,以 192.168.0.0 ~192.168.0.255 这个情况为例,他要如何再细分为两个子域呢?我们已经知道 Host_ID 可以拿来当作 Net_ID,那么 Net_ID 使用了 25 bits 时,就会如下所示:

切成两个子网之后的 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

8.无层级 IP: CIDR (Classless Interdomain Routing)

既然 Netmask 里面的 Net_ID 都是 1 ,那么 Class C 共有 24 bits 的 Net_ID ,所以啦,就有类似上面 192.168.0.0/24 这样的写法啰!这就是一般网域的表示方法。 同理可证,四个网段的写法就可以写成:
192.168.0.0/26
192.168.0.64/26
192.168.0.128/26
192.168.0.192/26

无须理会啥是无等级网域间路由啦!只要知道,那个 Network/Netmask 的写法,通常就是 CIDR 的写法! 然后,你也要知道如何透过 Netmask 去计算出 Network, Broadcast 及可用的 IP 等。

9.观察主机路由: route

[root@www ~]# route [-n]
选项与参数:
-n : 将主机名以 IP 的方式显示
[root@www ~]# route -n

# 上面输出的数据共有八个字段,你需要注意的有几个地方:
# Destination :其实就是 Network 的意思;
# Gateway :就是该接口的 Gateway 那个 IP 啦!若为 0.0.0.0 表示不需要额外的 IP;
# Genmask :就是 Netmask 啦!与 Destination 组合成为一部主机或网域;
# Flags :共有多个旗标可以来表示该网域或主机代表的意义:
# U:代表该路由可用;
# G:代表该网域需要经由 Gateway 来帮忙转递;
# H:代表该行路由为一部主机,而非一整个网域;
# Iface :就是 Interface (接口) 的意思。

10. IP 与 MAC:链结层的 ARP 与 RARP 协定
现在我们知道 Internet 上面最重要的就是那个 IP 了,也会计算所谓的局域网络与路由。 但是,事实上用在传递数据的明明就是以太网络啊!以太网络主要是用网卡卡号 (MAC) 的嘛!这就有问题啦!那这两者 (IP 与 MAC) 势必有一个关连性存在吧?没错!那就是我们要谈到的 ARP (Address Resolution Protocol, 网络地址解析) 协议,以及 RARP (Revers ARP, 反向网络地址解析)

11.arp指令

[root@www ~]# arp -[nd] hostname
[root@www ~]# arp -s hostname(IP) Hardware_address
选项与参数:
-n :将主机名以 IP 的型态显示
-d :将 hostname 的 hardware_address 由 ARP table 当中删除掉
-s :设定某个 IP 或 hostname 的 MAC 到 ARP table 当中

范例一:列出目前主机上面记载的 IP/MAC 对应的 ARP 表格
[root@www ~]# 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

范例二:将 192.168.1.100 那部主机的网卡卡号直接写入 ARP 表格中
[root@www ~]# arp -s 192.168.1.100 01:00:2D:23:A1:0E # 这个指令的目的在建立静态 ARP

12.TCP 协议在传输层的打包
在前面的 OSI 七层协议当中,在网络层的 IP 之上则是传送层,而传送层的数据打包成什么? 最常见的就是 TCP 封包了。这个 TCP 封包数据必须要能够放到 IP 的数据袋当中才行喔! 所以,我们将图 2.1-4 简化一下,将 MAC, IP 与 TCP 的封包数据这样看:



13.TCP 的三向交握

TCP 被称为可靠的联机封包,主要是透过许多机制来达成的,其中最重要的就是三向交握的功能。 当然, TCP 传送数据的机制非常复杂,有兴趣的朋友请自行参考相关网络书籍。 OK,那么如何藉由 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 序号的封包后,就能够建立起这次的联机了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: