24-总结
59.16 总结
Internet domain socket允许位于不同主机上的应用程序通过一个TCP/IP网络进行通信。一个Internet domain socket地址由一个IP地址和一个端口号构成。在IPv4中,一个IP地址是一个32位的数字,在IPv6中则是一个128位的数字。Internet domain数据报socket运行于UDP上,它提供了无连接的、不可靠的、面向消息的通信。Internet domain流socket运行于TCP上,它为相互连接的应用程序提供了可靠的、双向字节流通信信道。
不同的计算机架构使用不同的方式来表示数据类型。如整数可以以小端形式存储也可以以大端形式存储,并且不同的计算机可能使用不同的字节数来表示诸如int和long之类的数值类型。这些差别意味着当在通过网络连接的异构机器之间传输数据时需要采用某种独立于架构的表示。本章指出了存在多种信号编集标准来解决这个问题,同时还描述了被很多应用程序所采用的一个简单的解决方案:将所有传输的数据编码成文本形式,字段之间使用预先指定的字符(通常是换行符)分隔。
本章介绍了一组用于在IP地址的(数值)字符串表示(IPv4是点分十进制,IPv6是十六进制字符串)和其二进制值之间进行转换的函数,然而一般来讲最好使用主机和服务名而不是数字,因为名字更容易记忆并且即使在对应的数字发生变化时也能继续使用。此外,还介绍了用于将主机和服务名转换成数值表示及其逆过程的各种函数。将主机和服务名转换成socket地址的现代函数是getaddrinfo(),但读者在既有代码中会经常看到早期的gethostbyname()和getservbyname()函数。
对主机名转换的思考引出了对DNS的讨论,它实现了一个分布式数据库提供层级目录服务。DNS的优点是数据库的管理不再是集中的了。相反,本地区域管理员可以更新他们所负责的数据库层级部分,并且DNS服务器可以与另一台服务器进行通信以便解析一个主机名。