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

简介: 传输控制协议(Transmission Control Protocol)。TCP是一个面向连接的协议,为用户进程提供可靠的全双工字节流。TCP套接字是一种流套接字(stream socket)。TCP关心确认、超时和重传之类的细节。

本节书摘来自异步社区《UNIX网络编程 卷1:套接字联网API(第3版)》一书中的第2章,第2.2节,作者:【美】W. Richard Stevens , Bill Fenner , Andrew M. Rudoff著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.2 总图

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

screenshot

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

相关文章
|
5月前
|
网络协议 安全 网络安全
Python网络编程详解:Socket套接字的使用与开发
探索Python网络编程:本文详述Socket套接字,关键组件用于设备间通信。理解Socket类型(TCP/UDP),学习创建、绑定、监听、发送/接收数据步骤。示例展示服务端和客户端实现,及Socket聊天室应用。了解并发处理、错误处理和网络安全。通过学习,提升网络应用开发技能。参考书籍深入学习。
160 2
|
1月前
|
网络协议 算法 网络性能优化
C语言 网络编程(十五)套接字选项设置
`setsockopt()`函数用于设置套接字选项,如重复使用地址(`SO_REUSEADDR`)、端口(`SO_REUSEPORT`)及超时时间(`SO_RCVTIMEO`)。其参数包括套接字描述符、协议级别、选项名称、选项值及其长度。成功返回0,失败返回-1并设置`errno`。示例展示了如何创建TCP服务器并设置相关选项。配套的`getsockopt()`函数用于获取这些选项的值。
|
2月前
|
网络协议 Java
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
这篇文章全面讲解了基于Socket的TCP网络编程,包括Socket基本概念、TCP编程步骤、客户端和服务端的通信过程,并通过具体代码示例展示了客户端与服务端之间的数据通信。同时,还提供了多个案例分析,如客户端发送信息给服务端、客户端发送文件给服务端以及服务端保存文件并返回确认信息给客户端的场景。
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
|
2月前
|
开发框架 Unix Linux
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
42 0
|
5月前
|
网络协议 算法 网络性能优化
网络编程:TCP/IP与套接字
网络编程:TCP/IP与套接字
|
5月前
|
网络协议 网络架构 Python
Python 网络编程基础:套接字(Sockets)入门与实践
【5月更文挑战第18天】Python网络编程中的套接字是程序间通信的基础,分为TCP和UDP。TCP套接字涉及创建服务器套接字、绑定地址和端口、监听、接受连接及数据交换。UDP套接字则无连接状态。示例展示了TCP服务器和客户端如何使用套接字通信。注意选择唯一地址和端口,处理异常以确保健壮性。学习套接字可为构建网络应用打下基础。
63 7
|
5月前
|
存储 网络协议 Java
[计算机网络]---网络编程套接字
[计算机网络]---网络编程套接字
|
4月前
|
网络协议 Java API
网络编程套接字(4)——Java套接字(TCP协议)
网络编程套接字(4)——Java套接字(TCP协议)
37 0
|
4月前
|
Java 程序员 Linux
网络编程套接字(3)——Java数据报套接字(UDP协议)
网络编程套接字(3)——Java数据报套接字(UDP协议)
39 0
|
4月前
|
网络协议 API
网络编程套接字(2)——Socket套接字
网络编程套接字(2)——Socket套接字
24 0