本節書摘來自異步社群《unix網絡程式設計 卷1:套接字聯網api(第3版)》一書中的第2章,第2.2節,作者:【美】w. richard stevens , bill fenner , andrew m. rudoff著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
雖然協定族被稱為“tcp/ip”,但除了tcp和ip這兩個主要協定外,還有許多其他成員。圖2-1展示了這些協定的概況。

圖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。