天天看点

《UNIX网络编程 卷1:套接字联网API(第3版)》——2.2 总图

本节书摘来自异步社区《unix网络编程 卷1:套接字联网api(第3版)》一书中的第2章,第2.2节,作者:【美】w. richard stevens , bill fenner , andrew m. rudoff著,更多章节内容可以访问云栖社区“异步社区”公众号查看

虽然协议族被称为“tcp/ip”,但除了tcp和ip这两个主要协议外,还有许多其他成员。图2-1展示了这些协议的概况。

《UNIX网络编程 卷1:套接字联网API(第3版)》——2.2 总图

图2-1中同时展示了ipv4和ipv6。从右向左查看该图,最右边的5个网络应用在使用ipv6;我们将在第3章中随sockaddr_in6结构讲解af_inet6常值。随后的6个网络应用使用ipv4。

最左边名为tcpdump的网络应用或者使用bsd分组过滤器(bsd packet filter,bpf),或者使用数据链路提供者接口(datalink provider interface,dlpi)直接与数据链路进行通信。处于其右边所有9个应用下面的虚线标记为api,它通常是套接字或xti。访问bpf或dlpi的接口不使用套接字或xti。

这种情况存在一个例外:linux使用一种称为sock_packet的特殊套接字类型提供对于数据链路的访问。我们将在第28章中详细讲述这个例外。

图2-1中还标明traceroute程序使用两种套接字:ip套接字用于访问ip,icmp套接字用于访问icmp。在第28章中,我们将开发ping和traceroute这两个应用的ipv4和ipv6版本。

下面我们讲解一下图2-1中的每一个协议框。

ipv4 网际协议版本 4(internet protocol version 4)。ipv4(通常称之为ip)自20世纪80年代早期以来一直是网际协议族的主力协议。它使用32位地址(见a.4节)。ipv4给tcp、udp、sctp、icmp和igmp提供分组递送服务。

pv6 网际协议版本 6(internet protocol version 6)。ipv6是在20世纪90年代中期作为ipv4的一个替代品设计的。其主要变化是使用128位更大地址(见a.5节)以应对20世纪90年代因特网的爆发性增长。ipv6给tcp、udp、sctp和icmpv6提供分组递送服务。

当无需区别ipv4和ipv6时,我们经常把“ip”一词作为形容词使用,如ip层、ip地址等。

tcp 传输控制协议(transmission control protocol)。tcp是一个面向连接的协议,为用户进程提供可靠的全双工字节流。tcp套接字是一种流套接字(stream socket)。tcp关心确认、超时和重传之类的细节。大多数因特网应用程序使用tcp。注意,tcp既可以使用ipv4,也可以使用ipv6。

udp 用户数据报协议(user datagram protocol)。udp是一个无连接协议。udp套接字是一种数据报套接字(datagram socket)。udp数据报不能保证最终到达它们的目的地。与tcp一样,udp既可以使用ipv4,也可以使用ipv6。

sctp 流控制传输协议(stream control transmission protocol)。sctp是一个提供可靠全双工关联的面向连接的协议,我们使用“关联”一词来指称sctp中的连接,因为sctp是多宿的,从而每个关联的两端均涉及一组ip地址和一个端口号。sctp提供消息服务,也就是维护来自应用层的记录边界。与tcp和udp一样,sctp既可以使用ipv4,也可以使用ipv6,而且能够在同一个关联中同时使用它们。

icmp 网际控制消息协议(internet control message protocol)。icmp处理在路由器和主机之间流通的错误和控制消息。这些消息通常由tcp/ip网络支持软件本身(而不是用户进程)产生和处理,不过图中展示的ping和traceroute程序同样使用icmp。有时我们称这个协议为icmpv4,以便与icmpv6相区别。

igmp 网际组管理协议(internet group management protocol)。igmp用于多播(见第21章),它在ipv4中是可选的。

arp 地址解析协议(address resolution protocol)。arp把一个ipv4地址映射成一个硬件地址(如以太网地址)。arp通常用于诸如以太网、令牌环网和fddi等广播网络,在点到点网络上并不需要。

rarp 反向地址解析协议(reverse address resolution protocol)。rarp把一个硬件地址映射成一个ipv4地址。它有时用于无盘节点的引导。

icmpv6 网际控制消息协议版本6(internet control message protocol version 6)。icmpv6综合了icmpv4、igmp和arp的功能。

bpf bsd分组过滤器(bsd packet filter)。该接口提供对于数据链路层的访问能力,通常可以在源自berkeley的内核中找到。

dlpi 数据链路提供者接口(datalink provider interface)。该接口也提供对于数据链路层的访问能力,通常随svr4内核提供。

所有网际协议由一个或多个称为请求评注(request for comments,rfc)的文档定义,这些rfc就是它们的正式规范。习题2.1的答案说明如何获得这些rfc。

我们使用术语“ipv4/ipv6主机”或“双栈主机”表示同时支持ipv4和ipv6的主机。

tcp/ip协议的其他细节参见tcpv1。tcp/ip在4.4bsd上的实现参见tcpv2。

继续阅读