TCP/IP和DoD模型
TCP/IP和DoD模型的比较
DoD 模型是 OSI 模型的精简版,它包含4层(而不是7层):
- 进程/应用层;
- 主机到主机层;
- 因特网层;
- 网络接入层。
图3-1 DoD 模型和 OSI 参考模型进行了比较。正如你看到的,这两个模型在概念上是相似的,但它们包含的层数不同,各层的名称也不同。
- 讨论IP栈中的各种协议时, OSI 和DoD模型的层可互换。换句话说,因特网层和网络层是一回事,而主机到主机层和传输层是一回事。
DoD 模型的进程/应用层包含大量的协议,以集成分布在 OSI 上三层(应用层、表示层和会话层)的各种活动和职责,本章后面将深入介绍这些协议。
进程/应用层定义了用于节点间应用程序通信的协议,还定义了用户界面规范。
主机到主机层的功能与 OSI 模型的传输层相同,定义了用于为应用程序提供传输服务的协议,它负责解决的问题包括进行可靠的端到端通信和确保正确地传输数据,还对分组进行排序,并确保数据的完整性。
因特网层对应 OSI 模型的网络层,指定了与通过整个网络对分组进行逻辑传输相关的协议。它负责对主机进行编址一一给它们分配 IP (因特网协议)地址,还在多个网络之间路由分组。
网络接入层对应 OSI 模型的数据链路层和物理层,它在主机和网络之间交换数据,负责硬件编址,并定义了用于实际传输数据的协议。
DoD 模型和 OSI 模型在设计和概念上相似,且对应层的功能也类似。图 3-2 显示了 TCP/IP 协议簇以及其中协议对应的 DoD 模型层。
进程/应用层协议(5-6-7层)
网络中使用的各种应用程序和服务,包括如下协议和应用程序。
略。。。
主机到主机层协议(传输层-4层)
主机到主机层的主要功能是对上层应用程序隐藏网络的复杂性,它告诉上层:“只需将你的数据和说明给我,我将对你的信息进行处理,为发送做好准备。”
接下来的几节将介绍该层的两种协议:
- 传输控制协议 (TCP);
- 用户数据报协议 (UDP)。
TCP
TCP ( Transmission Control Protocol ,传输控制协议) 接收来自应用程序的大型数据块,并将其划分成数据段。它给每个数据段编号,让接收主机的 TCP 栈能够按应用程序希望的顺序排列数据段。发送数据段后,发送主机的 TCP 等待来自接收端 TCP 的确认,并重传未得到确认的数据段。
TCP 是一种可靠的精确协议,它采用全双工模式,且面向连接,但需要就所有条款和条件达成一致,还需进行错误检查。大多数程序员都使用TCP ,因为它消除了大量的编程工作,但 TCP 很复杂,且网络开销很大。实时视频和 VoIP 使用 UDP ,它们无法承受额外的开销。
TCP 数据段的格式
鉴于上层只将数据流发送给传输层的协议,下面将说明 TCP 如何将数据流分段,为因特网层准备好数据。
因特网层收到数据段后,将其作为分组在互联网络中路由。随后,数据段被交给接收主机的主机到主机层协议,而该协议重建数据流,并将其交给上层应用程序或协议。
图3-4 说明了 TCP 数据段的格式,其中列出了 TCP 报头中的各种字段。
TCP 报头长 208 (在包含选项时为 248 ),你必须理解 TCP 数据段中的每个字段。
- 源端口 发送主机的应用程序的端口号。
- 目标端口 目标主机的应用程序的端口号。
- 序列号 一个编号,TCP 用来将数据按正确的顺序重新排列(称为排序) 重传丢失或受损的数据。
- 确认号 TCP 期待接下来收到的数据段。
- 报头长度 TCP 报头的长度,以 32 位字为单位。它指出了数据的开始位置, TCP 报头的长度为 32 位的整数倍,即使包含选项时亦如此。
- 保留 总是设置为零。
- 编码位/标志 用于建立和终止会话的控制功能。
- 窗口大小 发送方愿意接受的窗口大小,单位为字节。
- 校验和 CRC (Cyclic Redundancy Check ,循环冗余校验),由于 TCP 不信任低层,因此检查所有数据。CRC 检查报头和数据字段。
- 紧急 仅当设置了编码位中的紧急指针字段时,该字段才有效。如果设置了紧急指针,该字段表示非紧急数据的开头位置相对于当前序列号的偏移量,单位为字节。
- 选项 长度为 32 位的整数倍。也就是说,没有选项时,长度为 0 。然而,如果包含选项时导致该字段的长度不是 32 位的整数倍,必须填充零,以确保该字段的长度为 32 位的整数倍。
- 数据 传递给传输层的 TCP 协议的信息,包括上层报头。
从报头包含的字段数量可知, TCP 的开销很大。为节省开销,应用程序开发人员可能优先考虑效率而不是可靠性,因此作为一种替代品,在传输层还定义了 UDP。
UDP
UDP 未提供 TCP 的全部功能,但对于不需要可靠传输的信息,它在传输信息方面做得相当好,且占用的网络资源更少。(RFC 768 详细介绍了 UDP)。
UDP 不对数据段排序,也不关心数据段到达目的地的顺序。相反, UDP 将数据段发送出去后就不再管它们了。它不检查数据段,也不支持表示安全到达的确认,而是完全放手。有鉴于此, UDP称为不可靠的协议。这并不意味着 UDP 效率低下,而只意味着它根本不会处理可靠性问题。
另外, UDP 不建立虚电路,也不在发送信息前与接收方联系。因此,它也被称为无连接的协议。
因为假定应用程序会使用自己的可靠性方法,所以 UDP 不使用。这给应用程序开发人员在开发因特网协议栈时提供了选择机会:使用 TCP 确保可靠性,还是使用 UDP 提高传输速度。因此,牢记 UDP 的工作原理至关重要,因为如果数据段未按顺序到达(这在IP网络中很常见),它们将被按收到的顺序传递给 OSI (DoD) 模型的下一层,这可能使数据极其混乱。另一方面, TCP 给数据段排序,以便能够按正确的顺序重组它们,而 UDP 根本没有这样的功能。
UDP 数据段的格式
图3-5 清楚地表明, UDP 的开销明显比 TCP 低。请仔细查看该图,你会注意到 UDP 在其格式中既没有使用窗口技术,也没有在 UDP 头中提供确认应答。
了解 UDP 数据段中的每个字段至关重要,如下。
- 源端口号发送主机的应用程序的端口号。
- 目标端口号 目标主机上被请求的应用程序的端口号
- 长度 UDP 报头和 UDP 数据的总长度。
- 校验和 UDP 报头和 UDP 数据的校验和。
- 数据 上层数据。
有关主机到主机层协议的重要概念
端口号
TCP和UDP 必须使用端口号与上层通信,因为端口号跟踪通过网络同时进行的不同会话。据端口
号是源主机动态分配的,其值范围 1024-65535。
为何要这样做呢?
在区分与不同主机建立的会话。如果发送主机不使用不同端口号,服务器如何知道信息来自何方呢?数据链路层和网络层协议分别使用硬件地址(MAC)和逻辑地址(IP)标识发送主机,但 TCP 和上层协议不这样做,它们使用端口号。
知名端口号
- 注意, DNS 可使用 TCP或UDP ,具体使用哪个取决于要做什么。虽然它并非使用这两种协议的唯一一种应用程序,但你必须记住它。
因特网层协议(网络层-3层)
作用
DoD 模型中,因特网层的作用有两个:路由选择以及提供单个到上层的网络接口。
- 其他层的协议都没有提供与路由选择相关的功能,这个复杂而重要的任务完全由因特网层完成。
- 因特网层的第二项职责是提供单个到上层协议的网络接口。如果没有这一层,应用程序开发人员将需要在每个应用程序中编写到各种网络接入协议的"钩子"。这不仅麻烦,还将使应用程序需要有多个版本一一以太网版本、无线版本等。为避免这个问题,IP 提供了单个到上层协议的网络接口。这样,IP 将和各种网络接入协议协同工作。
详情
因特网层协议:
- 因特网协议 (IP);
- 因特网控制消息协议 (ICMP);
- 地址解析协议 (ARP);
- 逆向地址解析协议 (RARP);
- 代理 ARP;
- 免费 ARP;
IP
IP (Intemet Protocol ,因特网协议) 就相当于因特网层,该层的其他协议都只是为它提供支持。掌控全局,可以说"一切尽收它眼底",从这种意义上说,它了解所有互联的网络。它之所以能够这样,是因为网络中的所有机器都有一个软件(逻辑)地址,这种地址称为IP地址。
查看每个分组的地址,然后使用路由选择表判断接下来应将分组发送到哪里,从而选择最佳路径。在 DoD 模型底部的网络接入层协议不像 IP 那样胸怀整个网络,它们只处理物理链路(本地网络)。
要标识网络中的设备,需要回答两个问题:
设备位于哪个网络中? 它在该网络中的 ID 是多少?
对于第一个问题,答案是软件(逻辑)地址(正确的街道);对于第二个问题,答案是硬件地址(正确的邮箱)。
网络中的所有主机都有一个逻辑 ID ,称为IP地址,它属于软件(逻辑)地址,包含宝贵的编码信息,极大地简化了路由选择这种复杂的任务。
IP 接收来自主机到主机层的数据段,并在必要时将其划分成数据报(分组)。在接收端, IP 将数据报重组成数据段。每个数据报都包含发送方和接收方的地址,路由器(第3层设备)收到数据报后,将根据分组的目标 IP 地址做出路由选择决策。
图3-7 显示了 IP 报头,这可让你对如下方面有大概认识:每当上层发送用户数据时, IP 协议都将如何做,为将数据发送到远程网络做好准备。
IP报头包含如下字段。
- 版本 IP 版本号。
- 报头长度 报头的长度,单位为 32 位字。
- 优先级和服务类型 服务类型指出应如何处理数据报。前3位为优先级位,当前称为区分服务位。
- 总长度 整个分组的长度,包括报头和数据。
- 标识 唯一的IP分组值,用于区分不同的数据报。
- 标志 指出是否进行了分段。
- 分段偏移 在分组太大,无法放入一个帧中时,提供了分段和重组功能。它还使得因特网上可有不同的 MTU (Maximum Transmission Unit ,最大传输单元)。
- 存活时间 生成分组时给它指定的存活时间。如果分组到达目的地之前就已到期,分组将被丢弃。这可避免 IP 分组因寻找目的地不断在网络中传输。
- 协议上层协议的端口 (TCP 为端口 6 ,UDP 为端口 17)。还支持网络层协议,如 ARP 和 ICMP (在有些分析器中,该字段称为类型字段)。
- 报头校验和 对报头执行 CRC 的结果。
- 源 IP 地址 发送方的 32 位 IP 地址。
- 目标 IP 地址 接收方的 32 位 IP 地址。
- 选顶 用于网络测试、调试、安全等。
- 数据 位于选项字段后,为上层数据。