2.3 TCP/IP参考模型

TCP/IP 是计算机网络的祖父 ARPANET 和其后继的因特网使用的参考模型。TCP/IP是一组用于实现网络互连的通信协议。Internet 网络体系结构以 TCP/IP 为核心。基于TCP/IP的参考模型将协议分成4个层次,分别是网络接口层(也称网络访问层)、网络层(也称网际互联层)、传输层(主机到主机)和应用层,如图 2-19 所示,其与 OSI 七层模型的对比如下。

图2-19 TCP/IP四层模型与OSI七层模型的对照

共同点:

(1)OSI七层模型和TCP/IP参考模型都采用了层次结构的概念。

(2)二者都能够提供面向连接和无连接两种通信服务机制。

不同点:

(1)OSI采用的是七层模型,而TCP/IP是四层结构。

(2)TCP/IP 参考模型的网络接口层实际上并没有真正的定义,只是一些概念性描述;而 OSI 七层模型不仅分了两层,而且每一层的功能都很详尽,甚至在数据链路层又分出一个介质访问子层,专门解决局域网的共享介质问题。

(3)OSI 七层模型与 TCP/IP 参考模型的传输层功能基本相似,都是负责为用户提供真正的端对端的通信服务。二者所不同的是 TCP/IP 参考模型的传输层是建立在网络互联层基础之上的,而网络互联层只提供无连接的网络服务,所以面向连接的功能完全在TCP中实现,当然TCP/IP的传输层还提供无连接服务,如UDP,而OSI七层模型的传输层是建立在网络层基础之上的,在 OSI 七层模型中,网络层通常提供的都是无连接服务,其也可以提供一些面向连接的服务,如虚电路,它是由分组交换通信所提供的面向连接的通信服务,但传输层只提供面向连接的服务。

(4)OSI 七层模型的抽象能力高,适用于描述各种网络;而 TCP/IP 是先有协议,再建立TCP/IP模型的。

(5)OSI 七层模型的概念划分清晰,但过于复杂;而 TCP/IP 参考模型在服务、接口和协议的区别上不清楚,其功能描述和实现细节混在一起。

(6)TCP/IP 参考模型的网络接口层并不是真正的一层;OSI 七层模型的缺点是层次过多,增加了复杂性。

(7)OSI 七层模型虽然被看好,但由于没把握好时机,技术不成熟,实现困难;相反TCP/IP参考模型虽然有许多不尽如人意的地方,但还是比较成功的。

2.3.1 网络接口层

在TCP/IP参考模型中,网络接口层对应OSI七层模型的物理层和数据链路层。

1.数据帧

数据帧(Frame)传递的单位是帧,是数据链路层的协议数据单元,如图2-20所示,其包括3部分:(1)帧首部:里面有MAC地址,通过这个地址可以在底层的交换机层面顺着网线找到你的计算机。(2)帧的数据部分:包含网络层的数据、IP 数据报,即使用IP 地址定位的一个数据包。(3)帧尾部:帧首部和帧尾部包含一些必要的控制信息,如同步信息、地址信息、差错控制信息等。

图2-20 数据帧的结构

MTU是帧的数据部分的最大长度,也是IP数据报的最大传输长度(相当于快递时限制传输包裹不能超过 20kg),因为上层数据依靠下层支撑传输,如果 IP 数据报超过了下层MTU的最大长度,就需要进行IP层的分片处理。

因为协议数据单元的包头和包尾的长度是固定的,MTU 越大,则一个协议数据单元承载的有效数据就越长,通信效率也就越高,同时传送相同的用户数据所需的数据包个数越少。MTU 也不是越大越好,因为 MTU 越大,传送一个数据包的延迟也越长(因为需要等待数据包传输完毕),数据包中比特位发生错误的概率也越高,通信效率越高,而传输延迟增加,所以要通过权衡通信效率和传输延迟来选择合适的MTU。

2.MAC地址

MAC(Media Access Control,介质访问控制)地址也称MAC位址、硬件地址,用来定义网络设备的位置。如图2-21所示,MAC地址由48bit的十六进制数字组成,前24位叫组织唯一标志符(Organizationally Unique Identifier,OUI),是由IEEE的注册管理机构给不同厂家分配的代码。后 24 位由厂家自己分配,称为扩展标识符,同一厂家生产的网卡中MAC地址的后24位是不同的。

图2-21 MAC地址的结构

例如:00-06-1b-e3-93-6c。

数据链路层又细分为 MAC 子层(介质访问控制子层)和 LLC 子层(逻辑链路控制子层),如图2-22所示。

图2-22 数据链路层的结构

(1)MAC 子层:帧的封装和拆封,物理介质传输差错的检测、寻址,以及实现介质访问控制协议。

(2)LLC 子层:连接管理(建立和释放连接)、与高层的接口、帧的可靠、按序传输及流量控制。

2.3.2 网络层

网络层又称互联网层(Internet Layer),是将整个网络体系结构贯穿在一起的关键层,几乎可以看作与 OSI 七层模型的网络层等同,负责处理主机到主机的通信,决定数据包如何交付,选择是交给网关(路由器)还是交给本地端口。

1.IP地址

IP 是英文 Internet Protocol 的缩写,表示“网际协议”,IP 地址是分配给网络中每台机器的数字标识符,其指出了设备在网络中的具体位置。相对于MAC地址,IP地址是设备的软件地址。IP 地址让一个网络中的主机能够与另一个网络中的主机通信,而不关心这些主机所属的网络是什么类型。

IP 地址就是为网络连接通信而设计的协议。在互联网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在互联网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP规范就可以与互联网互连互通。正是因为有了 IP,互联网才得以迅速发展成为世界上最大的、开放的计算机通信网络。IP 地址由两部分组成:网络号和主机号,如图 2-23 所示,网络号用于标识该IP地址所在的网络,主机号标识单个主机,由组织分配给各个设备。

图2-23 IP地址的结构

IP地址的总长度为32位,这些位被划分成4组(称为字节),每组8位,以二进制的表示形式如下:

××××××××.××××××××.××××××××.××××××××

1)IP地址的分类

IP地址的设计者决定根据网络规模创建网络类型,包括A类、B类、C类、D类、E类。对于拥有大量主机的网络,创建了 A 类网络;对于只包括少量主机的网络,创建了C 类网络;介于之间的是 B 类网络。其中,不管哪一类 IP 地址,其网络地址,也就是开头的几位,都做了限制,其目的是为了实现更高效的路由选择。

(1)A类地址

在A类地址中,第一个字节为网络地址,余下的为主机地址,如图2-24所示。

图2-24 A类地址

A类网络地址长1字节(8位),其中第一个字节的第1位必须为0,余下的7位可用于编址。如果将余下的7位都设置为0,再将它们都设置为1,便可获得A类网络地址的范围:

00000000=0

01111111=127

因此,最多可以有128个A类网络,可表示为27=128个网络。需要注意的是,全0网络地址被保留用于指定默认路由。地址127被保留用于本地回环地址,这意味着只能使用编号为1~126的A类网络地址。实际可以使用的A类网络地址数为128-2=126。

每个 A 类地址都有 3 字节(24 位)用于表示机器的主机地址。这意味着有 224=16777216种组合,因此每个A类网络可使用的主机地址数为16777216。由于全0和全1的主机地址被保留,所以A类网络实际可包含的最大主机数为224-2=16777214,即有约1.68亿个可用的主机。

(2)B类地址

在B类地址中,前两字节为网络地址,余下的两字节为主机地址,如图2-25所示。

图2-25 B类地址

IP地址的设计者规定,所有B 类网络地址都必须以二进制数10开头,留下的14位可以使用,因此有2414=16384个B类网络地址。与A类地址一样,我们将B类地址第一个字节剩余的 6 位全部设置为 0 或 1,即可确认 B 类网络地址第一个字节的取值范围为128~191。

B类地址用两字节表示主机地址,因此每个B类网络都有216个地址,除去主机位全为0时的网络地址和主机位全为1时的广播地址,合法主机地址有216-2=65534个。

(3)C类地址

C类地址的前3字节为网络地址,余下的1字节表示主机地址,如图2-26所示。

图2-26 C类地址

在 C 类网络地址中,前 3 位固定为二进制 110,因此有 221=2097152 个 C 类网络。每个 C 类网络有 28-2=254 个主机地址。同理,C 类地址的一个字节的取值范围为 192~223。

(4)D类和E类网络地址的范围

第一个字节为224~255的地址,被保留用于D类和E类网络。D类(224~239)地址以1110开头,用作组播地址,而E类(240~255)地址以1111开头,用于科学用途。

(5)具有特殊用途的地址

有些IP地址被保留用于特殊目的(见表2-1),网络管理员不能将它们分配给主机。

表2-1 具有特殊用途的地址及其功能

(6)私有IP地址

私有 IP 地址可免费用于私有网络,但在互联网中不可路由。设计私有地址的目的是提供一种安全措施,同时可以节省宝贵的 IP 地址空间。如果每个网络中的每台主机都必须有可路由的 IP 地址,则 IP 地址在多年前就耗尽了。通过使用私有地址,ISP、公司和家庭用户只需少量公有地址就可将其网络连接到互联网。这是一种经济的解决方案,因为只需在内部网络中使用私有 IP 地址。为此,ISP 和公司需要使用 NAT(Network Address Translation,网络地址转换),NAT 将私有 IP 地址进行转换,以便在互联网中使用,同一个公有 IP 地址可供很多人使用,以便将数据发送到互联网,这节省了大量的地址空间,对所有人都有益,私有地址如表2-2所示。

表2-2 私有地址

2)IP包头

IP包头由首部和数据部分组成,如图2-27所示。

图2-27 IP包头

(1)版本:占4bit,指IP的版本,目前的IP版本号为4,即IPv4。

(2)首部长度:首部长度为 4bit,可以从0000~1111,其取值范围是 0~15,它的单位不是1字节而是4字节(32bit),也就是每一行的长度,所以IP包头首部的最大长度就是 15×4=60 字节。如图 2-27 所示,首部包含固定部分和可变部分,最小长度应该为固定部分,可变部分为 0,固定部分为 5 行,因此最小数字是 5,即 1001,首部长度最小为5×4=20字节。

(3)服务类型(TOS):共 8bit,其中包括 3bit 的优先权字段(取值可以是 000~111的所有值),4bit的TOS子字段和1bit未用位但必须为0。

(4)总长度:占16bit,指首部和数据之和的长度,单位为字节,因此数据包的最大长度为 216-1=65535 字节,而总长度不能超过最大传输单元(MTU),这点前面已经解释过。

(5)标识:占16bit,其是一个计数器,用来产生数据包的标识。

(6)标志:占 3bit,目前只有两个比特位有意义。标志字段的最低位是 MF(More Fragment),MF=1 表示后面“还有分片”,MF=0 表示最后一个分片。标志字段中间的一位是DF(Don’t Fragment),只有当DF=0时才允许分片。

(7)片偏移:占13bit,片偏移以8字节为偏移单位。

(8)生存时间:占8bit,记为TTL(Time to Live),其作用是限制数据报在网络中的生存时间,单位最初是秒,为了方便,现在用“跳数”作为单位。数据报每经过一个路由器,其TTL值减1。

(9)协议:占 8bit,指数据报携带的数据使用何种协议,以便目标主机的 IP 层将数据部分上交给传输层。

(10)首部校验和:占 16bit,只检验数据报的首部,不包括数据部分。这里不采用CRC检验码而采用简单的计算方法。

(11)源地址和目的地址:各占4字节,32bit。

(12)可选字段:记录经过路由的IP地址和时间等。

(13)填充:不足32bit的,用此位置填充。

3)子网掩码

子网掩码又叫网络掩码、地址掩码,它是用来指明 IP 地址标识的主机所在的子网,以及哪些位标识是主机的位掩码。子网掩码不能单独存在,必须结合 IP 地址一起使用。子网掩码只有一个作用,即将某个 IP 地址划分成网络地址和主机地址两部分,单独存在的子网掩码无任何意义。子网掩码是一个 32bit 地址,子网掩码使用“1”来声明 IP 地址上数字是网络地址或子网地址,使用“0”来声明对应IP地址比特位属于主机地址。子网掩码的网络标识是连续的。举例来说,对于 C 类地址的默认子网掩码可以使用下面两种表示方式。

点分十进制:255.255.255.0

二进制:11111111.11111111.11111111.00000000

另外,对于 A 类地址来说,默认的子网掩码是 255.0.0.0;对于 B 类地址来说,默认的子网掩码是255.255.0.0。

(1)子网掩码的划分

子网地址的应用还可以扩展网络部分,通过从原主机部分借位并将其指定为子网字段来创建子网地址,这就是可变长子网掩码(VLSM),它是为了缓解 IP 地址紧缺而产生的。子网和主机的最佳数量是由网络类型和所需的主机地址数量决定的,可用子网的数量取决于借用的位数。

可用子网的数量=2s,其中,s是借用的位数。每个子网中的可用主机数量取决于未借用主机ID的位数。每个子网中的可用主机数量=2h-2,其中h是未借用的主机位数。

保留一个地址作为网络地址(主机位全部为0的地址)。

保留一个地址作为广播地址(主机位全部为1的地址)。

(2)子网掩码的划分案例

公司有 4 个部门(1、2、3、4),主机数量分别为 100、55、29、20,目前公司拥有的网络为192.168.1.0/24,请问该如何为每个部门分配网段地址?

① 先安排主机数多的部门:部门1需要100个可用IP,27-2>100;部门1主机位需要7bit,网络位为32-7=25。

所以部门 1 的网段为 192.168.1.0/25,将 192.168.1.0~192.168.1.127 分配给部门 1,可用地址为 192.168.1.1~192.168.1.126,共 126 个,剩下 192.168.1.128~192.168.1.255,依次类推。

② 部门2主机位需要6bit。

将192.168.1.128~192.168.1.191分配给部门2。

可用地址为192.168.1.129~192.168.1.190,共62个。

剩下192.168.1.192~192.168.1.255。

③ 部门3主机位需要5bit。

将192.168.1.192~192.168.1.223分配给部门3。

可用地址为192.168.1.193~192.168.1.222,共30个。

剩下192.168.1.224~192.168.1.255。

④ 部门4主机位需要5bit。

将192.168.1.224~192.168.1.255分配给部门4。

可用地址为192.168.1.225~192.168.1.254,共30个。

注:在实际工作中进行网段和子网掩码划分的时候,重点要掌握几个与 2 相关幂的数字,即2n

4)IPv6

IPv6是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组(IETF)设计的用于替代 IPv4 的下一代 IP,其地址数量号称可以为全世界的每一粒沙子编一个地址。IPv4 最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6 的使用,不仅能解决网络地址资源数量的问题,而且解决了多种接入设备连入互联网的障碍。IPv6的地址长度为128bit,是IPv4地址长度的4倍,于是IPv4的点分十进制格式不再适用,而采用十六进制表示,有如下3种表示方法。

(1)冒分十六进制表示法

格式为X:X:X:X:X:X:X:X,其中X表示地址中的16bit,以十六进制表示。

例如:ABCD:EF01:2345:6789:ABCD:EF01:2345:6789。

这种表示法中,每个X的前导0是可以省略的。

例如:2001:0DB8:0000:0023:0008:0800:200C:417A可写为

2001:DB8:0:23:8:800:200C:417A

(2)0位压缩表示法

在某些情况下,一个 IPv6 地址中间可能包含很长的一段 0,可以把连续的一段 0 压缩为“::”,但为了保证地址解析的唯一性,地址中的“::”只能出现一次,例如:

FF01:0:0:0:0:0:0:1101可写为FF01::1101;

0:0:0:0:0:0:0:1可写为::1;

0:0:0:0:0:0:0:0可写为::。

(3)内嵌IPv4地址表示法

为了实现 IPv4 与 IPv6 的互通,IPv4 地址会嵌入 IPv6 地址中,此时地址常表示为X:X:X:X:X:X:d.d.d.d,前 96bit 使用冒分十六进制表示,而后 32bit 使用 IPv4 的点分十进制表示。例如,::192.168.0.1与::FFFF:192.168.0.1就是两个典型的例子。注意,在前96bit中,压缩0位的方法依旧适用。

2.ARP

地址解析协议即ARP,是根据IP地址获取物理地址的一个TCP/IP。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址。收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询 ARP 缓存以节约资源。地址解析协议建立在网络中各个主机互相信任的基础上,网络上的主机可以自主发送 ARP 应答报文,其他主机收到应答报文时不会检测该报文的真实性就将其记入本机 ARP 缓存;ARP 命令可用于查询本机 ARP缓存中 IP 地址和 MAC 地址的对应关系、添加或删除静态对应关系等。相关协议还有RARP、代理ARP、无故ARP。

1)ARP的通信过程

如图 2-28 所示,主机 10.1.1.1 想发送数据给主机 10.1.1.2,检查缓存,发现没有10.1.1.2 的 MAC 地址,于是主机 10.1.1.1 发送 ARP 广播“我需要 10.1.1.2 的 MAC 地址”,所有主机都接收到10.1.1.1的ARP广播,但只有10.1.1.2给它一个单播回复“我的MAC地址是0800.0020.1111”,并缓存10.1.1.1的MAC地址。主机10.1.1.1将10.1.1.2的MAC地址保存到缓存中,然后发送数据。

图2-28 ARP的通信过程

2)ARP欺骗

ARP 欺骗(ARP spoofing)又称 ARP 毒化(ARP poisoning,网上多译为“ARP 病毒”)或 ARP 攻击,是针对 ARP 的一种攻击技术,通过欺骗局域网内访问者 PC 的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC地址,也就是伪装为网关,最终导致网络不通。此种攻击可让攻击者获取局域网上的数据包甚至可篡改数据包,且可让网络中特定计算机或所有计算机无法正常连线,攻击者可以向某一主机发送伪 ARP 应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。其目的是要让送至特定IP地址的流量被错误地送到攻击者所取代的地方,因此攻击者可将这些流量另行转送到真正的网关(被动式数据包嗅探,Passive Sniffing)或篡改后再转送(中间人攻击,Man-in-the-middle Attack)。攻击者也可将 ARP数据包转发到不存在的MAC地址以达到阻断服务的攻击效果,如netcut软件。

3)RARP

反向地址转换协议(Reverse Address Resolution Protocol,RARP)允许局域网的物理机器从网关服务器的ARP表或缓存上请求其IP地址。网络管理员在局域网网关路由器里创建一个表以映射物理地址(MAC)和与其对应的 IP 地址。当设置一台新机器时,其RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器,此机器就会存储起来以便日后使用。RARP 以与 ARP 相反的方式工作。RARP 发出要反向解析的物理地址并希望返回其对应的IP地址,应答包括由能够提供所需信息的RARP服务器发出的IP地址。虽然发送方发出的是广播信息,但 RARP 规定只有 RARP 服务器能产生应答。许多网络指定多个RARP服务器,这样做既是为了平衡负载,也是为了出现问题时具有备份。

4)代理ARP

代理ARP是ARP的一个变种。对于没有配置默认网关的计算机,要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求后会使用自己的 MAC 地址与目标计算机的 IP 地址对源计算机进行应答。代理 ARP 就是将一个主机作为类似网关对其他主机ARP 进行应答,它能在不影响路由表的情况下添加一个新的 Router,使得子网对该主机来说变得更透明,同时会带来巨大的风险,除了ARP欺骗和某个网段内的ARP增加,最重要的是无法对网络拓扑进行网络概括。代理 ARP 一般使用在没有配置默认网关和路由策略的网络上。

5)无故ARP

无故ARP(Gratuitous ARP,GARP)也称无为ARP。主机有时会使用自己的IP地址作为目的地址发送ARP请求。这种ARP请求称为无故ARP,主要有以下两个用途:

(1)检查重复地址(如果收到ARP响应,则表明存在重复地址)。

(2)用于通告一个新的数据链路标识。当一个设备收到一个 ARP 请求时,如果发现ARP缓冲区中已有发送者的IP地址,则更新此IP地址的MAC地址条目。

如果某个子网内运行热备份路由协议(HSRP)的路由器从其他路由器变成了主路由器,它就会发送一个无故ARP来更新该子网上的ARP缓存。

3.ICMP

ICMP(Internet Control Message Protocol,因特网信报控制协议)被认为是网络层的一个组成部分,用于传递差错、控制、查询报文等信息。ICMP 报文常被 IP 层或更高层协议(TCP 或 UDP)使用,如 Ping。IP 并不是一个可靠的协议,它不保证数据被送达,故保证数据送达的工作就应该由其他模块来完成,其中一个重要的模块就是 ICMP。ICMP 的消息可以分为错误消息、请求消息和响应消息。一台主机向一个节点发送一个ICMP 请求报文,如果途中没有异常(如被路由器丢弃、目标不回应 ICMP 或传输失败),则目标返回ICMP响应报文,说明这台主机存在。当传送IP数据报发生错误,如主机不可达、路由不可达等,ICMP 将会把错误信息封包,即 ICMP 差错报文,然后传送回主机,给主机一个处理错误的机会。

1)Ping

Ping(Packet Internet Groper,因特网包探索器)是用于测试网络连接量的程序。Ping发送一个ICMP回声请求消息给目的地址并报告是否收到所希望的ICMP echo(ICMP回声应答)。对于一个生活在网络上的管理员或黑客来说,Ping 命令是第一个必须掌握的DOS 命令,它所利用的原理是这样的:利用网络上机器 IP 地址的唯一性,给目标 IP 地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通、时延是多少。在一台计算机上向远程主机发起 Ping 连接时,可能收到的返回信息(常见)有:

● 连接建立成功:Reply from 192.168.1.1:bytes=32 time<1ms TTL=128。

● 目标主机不可达:Destination host unreachable。

● 请求时间超时:Request timed out。

● 未知主机名:Unknown host abc。

2)Tracert

Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据包访问目标所采取的路径。Tracert 的工作原理是:用 IP 生存时间(TTL)字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。Tracert发送一个TTL是1的IP数据包到目的地,当路径上的第一个路由器收到这个数据包时,它将 TTL 减 1 变为 0,所以该路由器会将此数据包丢掉,并送回一个ICMP time exceeded的消息(包含IP包的源地址、IP包的所有内容及路由器的IP地址),Tracert收到这个消息后就可以确认这个路由器存在于该路径上,接着Tracert送出一个TTL是2的数据包,发现其他路由器,Tracert每次都将送出的数据包的 TTL 加 1,直到某个数据包抵达目的地。当数据包到达目的地后,该主机不会送回ICMP time exceeded消息,而会收到ICMP port unreachable的消息,这是因为Tracert通过UDP 数据包向不常见的大端口类似以骚扰式发送数据包,对端几乎不可能给出回应,所以只能回复ICMP port unreachable的消息。

2.3.3 传输层

1.传输层介绍

在 TCP/IP 模型中位于网络层上的一层通常称为传输层。其设计目标是允许源主机和目标主机上的对等实体进行对话,和OSI的传输层一样。这里定义了两个端到端的传输协议,分别是TCP和UDP(见表2-3)。

表2-3 TCP和UDP的特性对比

面向连接的传输将提供可靠传输,其传输速度相对慢,保证了数据的正确性。无连接传输则提供尽力传输,响应速度快,不能保证数据的正确性。

2.TCP

1)TCP介绍

TCP 位于 TCP/IP 栈的传输层,为应用程序访问的网络层,是面向连接的协议,其基于全双工模式运行,提供错误检查、数据包序列化、接收确认、数据恢复功能、流量控制功能。

如图2-29所示,源端口和目的端口字段各占2字节(1字节=8位)。端口是传输层与应用层的服务接口,传输层的复用和分用功能都要通过端口实现。序号字段占4字节,序号字段的值指的是本报文段所发送数据的第一个字节序号。确认号字段占4字节,是期望收到对方下一个报文段数据的第一个字节序号。数据偏移字段占 4 位,计算 TCP 报文段的数据起始处与 TCP 报文段起始处的距离。保留字段占 6 位,其保留的目的是为今后使用,但目前应置为0。

窗口字段:占 2 字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口上限。

校验和字段:占 2 字节。校验和字段的校验范围包括首部和数据两部分。在计算校验和时,还要在 TCP 报文段的前面加上 12 字节的伪首部(包含 IP 源地址和目的地址各4字节,保留字节1字节置零,1字节传输层协议号端口,TCP为6,还有2字节的报文长度,也就是首部和数据),实际校验计算工作包括 3 部分:TCP 首部+TCP 数据+TCP伪首部。

图2-29 TCP结构

紧急指针字段:占2字节。紧急指针指出在本报文段中紧急数据的最后一个字节序号。

选项(长度可变)字段:TCP 只规定了一种选项,即最大报文段长度 MSS (Maximum Segment Size)。MSS告诉对方TCP:“我的缓存所能接收报文段数据字段的最大长度是MSS个字节。”

填充字段:目的是为了使整个首部长度为4字节的整数倍。

紧急比特 URG:当 URG=1 时,表明紧急指针字段有效。其告诉系统此报文段中有紧急数据(相当于高优先级数据),应尽快传送。

确认比特ACK:只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。

推送比特 PSH(PuSH):接收 TCP 收到推送比特置 1 的报文段,就尽快交付给接收应用进程,而不是等到整个缓存填满后再向上交付。

复位比特 RST(ReSeT):当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后重新建立运输连接。

同步比特SYN:当SYN=1时,表示这是一个连接请求或连接接收报文。

终止比特FIN(FINal):用来释放一个连接。当FIN=1时,表明此报文段的发送端数据已被发送完毕,并要求释放运输连接。

2)TCP的三次握手

三次握手(Three-way Handshake)是指建立一个 TCP 连接时,需要客户端和服务器端发送3个包以确认连接的建立,如图2-30所示。

第一次握手:Client(客户)将标志位 SYN 置为 1,随机产生一个值 seq=x,并将该数据包发送给Server(服务器),Client进入SYN_SENT状态,等待Server确认。

第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位 SYN 和 ACK 都置为 1,ack=x+1,随机产生一个值 seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确,则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK 是否为 1,如果正确,则连接建立成功,Client 和 Server 进入 ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

图2-30 三次握手

3)TCP的四次挥手

四次挥手(Four-way Wave Hand)就是指断开一个 TCP 连接时,需要客户端和服务器端发送4个包以确认连接的断开,如图2-31所示。

图2-31 四次挥手

由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭,这一原则是当发送方完成数据发送任务后,发送一个 FIN 报文给接收方,来表示已完成对接收方的数据发送,接收方会回应一个确认信息告知发送方,它已知道发送方无数据发送。但是在这个TCP连接上接收方能够发送数据,直到接收方也发送了FIN。这时发送方回应确认信息,最终断开TCP连接。首先进行关闭的一方将执行主动关闭,另一方则执行被动关闭。

第一次挥手:Client 发送一个 FIN,用来关闭 Client 到Server 的数据传送,Client 进入FIN_WAIT_1状态。

第二次挥手:Server 收到 FIN 后,发送一个 ACK 给 Client,确认序号为收到序号+1 (与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

3.UDP

传输层的第二个协议是用户数据报协议(User Datagram Protocol,UDP),其是一个不可靠、无连接协议,适用于那些不想要 TCP 的有序性或流量控制功能,而宁可自己提供这些功能的应用程序,如图2-32所示。UDP被广泛应用于那些一次性的基于客户机/服务器类型的“请求/应答”查询应用(如 DNS 服务),以及那些及时交付比精确交付更加重要的应用,如传输语音或视频。

图2-32 UDP的结构

源端口号:发送端的UDP进程端口号。

目标端口号:接收端的UDP进程端口号。

UDP长度:包含数据的长度,可以算出数据的结束位置。

UDP校验和:UDP的差错控制(可选)。

由于缺乏可靠性且属于非连接导向协议,UDP 的应用通常必须允许一定量的丢包、出错和复制/粘贴,但有些应用,如 TFTP,需要可靠性保证,故必须在应用层增加根本的可靠机制。但是绝大多数 UDP 应用不需要可靠机制,甚至可能因为引入可靠机制而降低性能。流媒体、即时多媒体游戏和IP电话(VoIP)就是典型的UDP应用。如果某个应用需要很高的可靠性,则可以用传输控制协议(TCP)来代替UDP。

使用 UDP 的应用有域名系统(DNS)、简单网络管理协议(SNMP)、动态主机配置协议(DHCP)、路由信息协议(RIP)等。因为 UDP 不属于连接型协议,因而具有资源消耗少,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用 UDP 较多,因为对于它们来说即使偶尔丢失几个数据包,也不会对接收结果产生太大影响。

2.3.4 应用层

1.应用层介绍

应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程间的通信和交互规则。不同的网络应用需要不同的应用层协议。端口号的作用就是将应用层映射到传输层,如图2-33所示。DNS在进行区域传输的时候使用TCP,其他时候则使用 UDP,使用 TCP 的应用层协议有 SMTP、TELNET、HTTP、FTP、DNS。使用UDP的应用层协议有DNS、TFTP、RIP、BOOTP、DHCP、SNMP、IGMP。在互联网中应用层协议很多,如域名系统(DNS)、支持万维网应用的 HTTP,以及支持电子邮件的 SMTP 等。应用层协议是为了解决某一类应用问题,通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。这种通信必须遵守严格的规则,其定义如下:

● 应用进程交换的报文(应用层的数据单元是报文),如请求报文和响应报文。

● 各种报文类型的语法,如报文中的各个字段及其详细描述。

● 字段的语义,即包含在字段中的信息含义。

● 进程何时、如何发送报文,以及对报文进行响应的规则。

图2-33 将应用层映射到传输层

2.DHCP

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被用在大型的局域网络中,主要作用是集中地管理、分配 IP 地址,使网络环境中的主机动态获得 IP 地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率,如图2-34所示。

发现阶段:DHCP 客户机寻找 DHCP 服务器的阶段。DHCP 客户机以广播的方式发送“DHCP discover”发现信息来寻找DHCP服务器(因为DHCP服务器的IP地址对客户机来说是未知的),即向 255.255.255.255 发送特定的广播信息,网络上每一台安装了TCP/IP的主机都会接收到这种广播信息,但只有DHCP服务器会做出响应。

图2-34 DHCP的工作过程

提供阶段:DHCP 服务器提供 IP 地址的阶段。在网络中收到“discover”发现信息的DHCP 服务器会做出响应,从尚未出租的 IP 地址中挑选一个分配给 DHCP 客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的“offer”提供信息。

选择阶段:DHCP 客户机选择某台 DHCP 服务器所提供 IP 地址的阶段。如果有多台DHCP服务器向DHCP客户机发来“offer”,则客户机只接收第一个收到的“offer”,然后以广播的方式回答一个“request”请求信息。该信息中包含其所选定的 DHCP 服务器请求 IP 地址的内容,之所以要以广播的方式回答,其目的是为了通知所有的 DHCP 服务器,选择某台DHCP服务器所提供的IP地址。

确认阶段:DHCP服务器确认所提供IP地址的阶段。当DHCP服务器收到DHCP客户机的“request”请求后,便向 DHCP 客户机发送一个包含其提供的 IP 地址和其他设置的“ACK”确认信息,告诉DHCP客户机可以使用其所提供的IP地址。然后DHCP客户机便将其TCP/IP 与网卡绑定,除DHCP 客户机选择的服务器 IP 外,其他 DHCP 服务器都将收回曾提供的IP地址。

重新登录:DHCP 客户机每次登录网络时,不需要再发送“discover”发现信息了,而是直接发送前一次所分配 IP 地址的“request”请求信息。当 DHCP 服务器收到这一信息后,它会尝试让客户机继续使用原来的IP并回答一个“ACK”确认信息,如果此IP地址无法分配给原来的 DHCP 客户机(IP 分配给其他 DHCP 客户机使用),则 DHCP 服务器给 DHCP 客户机回答“NACK”否认消息,当 DHCP 客户机收到此消息后,其必须重新发送“discover”发现信息并重新请求新的IP地址。

更新租约:DHCP 服务器向 DHCP 客户机出租的 IP 地址有一个租借期限,期满后DHCP服务器会收回所出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其租约。DHCP 客户机启动时和 IP 租约期限过一半时,都会自动向 DHCP 服务器发送更新租约的信息。

DHCP有以下3种方式分配IP地址。

(1)自动分配方式:DHCP 服务器为主机指定一个永久性的 IP 地址,一旦 DHCP 客户端第一次成功地从DHCP服务器租用到IP地址,就可以永久使用该地址。

(2)动态分配方式:DHCP 服务器给主机指定一个有时间限制的 IP 地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。

(3)手工分配方式:客户端的 IP 地址是由网络管理员指定的,DHCP 服务器只是将指定的IP地址告诉客户端主机。

3种地址分配方式中,只有动态分配方式可以重复使用客户端不再需要的地址。

3.DNS

域名系统(Domain Name System,DNS)是互联网的一项服务。它是将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口。对于每一级域名长度的限制是 63 个字符,域名总长度则不能超过 253 个字符。简单来说就是一个将域名翻译成IP地址的系统。

DNS系统中,常见的资源记录类型有以下几种。

(1)A 记录:A(Address)记录用来指定主机名(或域名)对应的 IP 地址记录,用户可以将该域名下的网站服务器指向自己的 Web Server 上,同时可以设置域名的子域名。通俗来说,A记录就是服务器的IP,域名绑定A记录就是告诉DNS,A记录是指定域名对应的IP地址。

(2)NS 记录:NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。注册域名时,总有默认的DNS服务器,每个注册的域名都是由一个DNS 域名服务器来进行解析的,DNS 服务器的NS 记录地址一般以ns1.domain.com、ns2.domain.com等形式出现。简单来说,NS记录用来指定由哪个DNS服务器解析域名。

(3)MX记录:MX(Mail Exchanger)记录是电子邮件交换记录,其指向一个电子邮件服务器,用于发送电子邮件时系统根据收信人的地址后缀来定位电子邮件服务器。例如,当Internet上的某用户要发送一封电子邮件给user@mydomain.com时,该用户的电子邮件系统通过DNS查找mydomain.com域名的MX记录,如果MX记录存在,用户计算机就将电子邮件发送到MX记录所指定的电子邮件服务器上。

(4)CNAME 记录:CNAME(Canonical Name,别名记录)允许将多个名字映射到同一台计算机。通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为host.mydomain.com(A记录),其同时提供WWW和MAIL服务,为了便于用户访问服务,可以为该计算机设置两个别名(CNAME):WWW 和 MAIL,这两个别名的全称分别为www.mydomain.com和mail.mydomain.com,实际上它们都指向host.mydomain.com。