《UNIX网络编程 卷1:套接字联网API(第3版)》——第1章 简介 1.1概述

简介: 要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议(protocol)。在深入设计一个协议的细节之前,应该从高层次决断通信由哪个程序发起以及响应在何时产生。举例来说,一般认为Web服务器程序是一个长时间运行的程序(即所谓的守护程序,daemon),它只在响应来自网络的请求时才发送网络消息。

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

第一部分 简介和TCP/IP

第1章 简介

1.1 概述

要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议(protocol)。在深入设计一个协议的细节之前,应该从高层次决断通信由哪个程序发起以及响应在何时产生。举例来说,一般认为Web服务器程序是一个长时间运行的程序(即所谓的守护程序,daemon),它只在响应来自网络的请求时才发送网络消息。协议的另一端是Web客户程序,如某种浏览器,与服务器进程的通信总是由客户进程发起。大多数网络应用就是按照划分成客户(client)和服务器(server)①来组织的。在设计网络应用②时,确定总是由客户发起请求往往能够简化协议和程序③本身。当然一些较为复杂的网络应用还需要异步回调(asynchron-ous callback)通信,也就是由服务器向客户发起请求消息。然而坚持采纳图1-1所示的基本客户/服务器模型的网络应用毕竟要普遍得多。

screenshot

通常客户每次只与一个服务器通信,不过以使用Web浏览器为例,我们也许在10分钟内就可以与许多不同的Web服务器通信。从服务器的角度来看,一个服务器同时与多个客户通信并不稀奇,见图1-2。本书后面将介绍若干种让一个服务器同时处理多个客户请求的方法。

screenshot

可认为客户与服务器之间是通过某个网络协议通信的,但实际上,这样的通信通常涉及多个网络协议层。本书的焦点是TCP/IP协议族,也称为网际协议族。举例来说,Web客户与服务器之间使用TCP(Transmission Control Protocol,传输控制协议)通信。TCP又转而使用IP(Internet Protocol,网际协议)通信,IP再通过某种形式的数据链路层通信。如果客户与服务器处于同一个以太网,就有图1-3所示的通信层次。
screenshot

尽管客户与服务器之间使用某个应用协议通信,传输层却使用TCP通信。注意,客户与服务器之间的信息流在其中一端是向下通过协议栈的,跨越网络后,在另一端则是向上通过协议栈的。另外注意,客户和服务器通常是用户进程,而TCP和IP协议通常是内核中协议栈的一部分。我们在图1-3右边标出了4个层。

本书讨论的协议不限于TCP和IP。有些客户和服务器改用UDP(User Datagram Protocol,用户数据报协议)而不是TCP,第2章将详细介绍这两个协议。此外,本书使用术语“IP”来称谓的那个协议,自20世纪80年代早期以来一直在使用,其实其正式名称是IPv4(IP version 4,IP版本4)。IPv4的一个新版本IPv6(IP version 6,IP版本6)是在20世纪90年代中期开发出来的,将来会取代IPv4。本书既讨论使用IPv4的网络应用程序的开发,也讨论使用IPv6的网络应用程序的开发。附录A会给出IPv4和IPv6的一个比较,同时介绍正文中将讨论的其他协议。

同一网络应用的客户和服务器无需如图1-3所示处于同一个局域网(local area network,LAN)。例如,图1-4展示了处于不同局域网中的客户和服务器,而这两个局域网是使用路由器(router)连接到广域网(wide area network,WAN)的。

screenshot

路由器是广域网的架构设备。当今最大的广域网是因特网④(Internet)。许多公司也构建自己的广域网,而这些私用的广域网既可以连接到因特网,也可以不连接到因特网。

本章其余部分将概述多个主题,这些主题在后续章节中还会具体介绍。我们从一个尽管简单却完整的TCP客户程序开始,它展示了全书都会遇到的许多函数调用和概念。这个客户程序只能在IPv4上运行,不过我们会给出让它在IPv6上运行所需进行的修改。更好的办法是编写独立于协议的客户和服务器程序,这在第11章中会讨论。本章同时展示一个与该TCP客户程序配合工作的完整的TCP服务器程序。

为了简化代码,我们对本书中要调用的大多数系统函数定义了各自的包裹函数。多数情况下我们可以使用这些包裹函数来检查错误,输出适当的消息,以及在出错时终止程序的运行。我们还给出了本书中大多数例子所用的测试网络、主机、路由器以及它们的主机名、IP地址和操作系统。

如今讨论Unix时经常使用POSIX一词,它是一种被多数厂商采纳的标准。我们将介绍POSIX的历史以及它对本书所讲述的API的影响,并介绍该领域的其他主要标准。

相关文章
|
13天前
|
JSON 缓存 API
淘系商品详情API接口概述,API文档说明
在成长的路上,我们都是同行者。这篇关于API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 淘宝API接口文档是淘宝开放平台为开发者提供的一套详细的技术规范和使用指南,旨在帮助开发者通过API接口与淘宝平台进行交互,获取商品详情等数据。以下是对淘宝商品详情数据解析的详细说明:
|
15天前
|
网络协议 算法 网络性能优化
C语言 网络编程(十五)套接字选项设置
`setsockopt()`函数用于设置套接字选项,如重复使用地址(`SO_REUSEADDR`)、端口(`SO_REUSEPORT`)及超时时间(`SO_RCVTIMEO`)。其参数包括套接字描述符、协议级别、选项名称、选项值及其长度。成功返回0,失败返回-1并设置`errno`。示例展示了如何创建TCP服务器并设置相关选项。配套的`getsockopt()`函数用于获取这些选项的值。
|
1月前
|
存储 网络协议 安全
|
1月前
|
数据采集 移动开发 Python
六:《智慧的网络爬虫》— 正则表达式概述
【8月更文挑战第7天】本文介绍了正则表达式的基本概念、用途,如表单验证和爬虫,以及Python中re模块的使用,包括match(),match()函数、元字符、预定义字符集、重复匹配、位置匹配、非贪婪模式和re模块的常用方法如compile(),search(),findall(),split(),sub()等。
53 1
六:《智慧的网络爬虫》— 正则表达式概述
|
10天前
|
Linux 调度 Docker
容器网络概述
【9月更文挑战第9天】容器技术利用如命名空间(namespace)和控制组(cgroup)等技术创建隔离环境,实现资源限制与独立运行。命名空间避免命名冲突,cgroup则能对CPU、内存等资源进行限制。容器状态可通过镜像保存并标准化,确保在任何环境中都能复现相同状态。
|
1月前
|
网络协议 Java
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
这篇文章全面讲解了基于Socket的TCP网络编程,包括Socket基本概念、TCP编程步骤、客户端和服务端的通信过程,并通过具体代码示例展示了客户端与服务端之间的数据通信。同时,还提供了多个案例分析,如客户端发送信息给服务端、客户端发送文件给服务端以及服务端保存文件并返回确认信息给客户端的场景。
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
|
1月前
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
55 8
|
1月前
|
网络协议 安全 网络安全
网络术语、接口和协议简介
网络术语、接口和协议简介
37 1
|
1月前
|
存储 NoSQL MongoDB
八:《智慧的网络爬虫》— MongoDB概述
【8月更文挑战第14天】本篇文章简单介绍了MongoDB的下载和安装以;其基本的操作语法,并附上每个语法的代码示例,为后续的爬虫学习打下基础
28 0
八:《智慧的网络爬虫》— MongoDB概述
|
1月前
|
SQL 数据采集 关系型数据库
七:《智慧的网络爬虫》— MySQL概述
【8月更文挑战第11天】本篇文章详细的介绍了MySQL数据库的安装与使用;并讲述了MySQL的基本操作及其应用语法
34 0
七:《智慧的网络爬虫》— MySQL概述