Unix/Linux系统编程第十三章学习笔记

Unix/Linux系统编程第十三章学习笔记

作者:20191322wyl

知识点总结

本章论述了TCP/IP和网络编程,分为两个部分。第一部分论述了TCP/IP协议及其应用,具体包括TCP/IP栈、IP地址、主机名、DNS、IP数据包和路由器;介绍了TCP/IP网络中的UDP和TCP协议、端口号和数据流;闸述了服务器-客户机计算模型和套接字编程接口;通过使用UDP和TCP套接字的示例演示了网络编程。第一个编程项目可实现一对通过互联网执行文件操作的TCP服务器-客户机,可让用户定义其他通信协议来可靠地传输文件内容。
本章的第二部分介绍了Web和CGI编程,解释了HTTP编程模型、Web页面和Web浏览器;展示了如何配置LinuxHTTPD服务器来支持用户Web页面、PHP和CGI编程:闸释了客户机和服务器端动态Web页面;演示了如何使用PHP和CGI创建服务器端动态Web页面。第二个编程项目可让读者在LinuxHTTPD服务器上通过CGI编程实现服务器端动态Web页面。

TCP/IP协议

TCP/IP(Comer1988,2001;RFC11801991)是互联网的基础。TCP代表传输控制协议。IP代表互联网协议。目前有两个版本的IP,即IPv4和IPv6。IPv4使用32位地址,IPV6则使用128位地址。本节围绕IPv4进行讨论,它仍然是目前使用最多的IP版本。TCP/IP的组织结构分为几个层级,通常称为TCP/IP堆栈。图13.1所示为TCP/IP的各个层级以及每一层级的代表性组件及其功能。

顶层是使用TCPIP的应用程序。用于登录到远程主机的ssh、用于交换电子邮件的mail、用于Web页面的htp等应用程序需要可靠的数据传输。通常,这类应用程序在传输层使用TCP。另一方面,有些应用程序,例如用于查询其他主机的ping命令,则不需要可靠性。这类应用程序可以在传输层使用UDP来提高效率(RFC7681980;Comer1988)。传输层负责以包的形式向IP主机发送/接收来自IP主机的应用程序数据。进程与主机之间的传输层或其上方的数据传输只是逻辑传输。实际数据传输发生在互联网(IP)和链路层,这些层将数据包分成数据,以便在物理网络之间传输。图13.2所示为TCP/IP网络中的数据流路径。

IP主机和IP地址

  • ip地址是32位的
  • 32位的IP地址通常用点记法表示
  • 应用程序通常使用主机名
  • DNS可以将ip地址转换为主机名
  • IP数据包由IP头、发送方IP 地址和接收方IP 地址以及数据组成
  • UDP(用户数据报协议)在IP上运行,用于发送/接收数据报
  • TCP(传输控制协议)是一种面向连接的协议,用于发送/接收数据流。

网络编程

服务器-客户机计算模型

大多数网络编程任务都基于服务器-客户机计算模型。在服务器-客户机计算模型中。我们首先在服务器主机上运行服务器进程。然后,我们从客户机主机运行客户机。在UDP中,服务器等待来自客户机的数据报,处理数据报并生成对客户机的响应。在TCP中,服务器等待客户机连接。客户机首先连接到服务器,在客户机和服务器之间建立一个虚拟电路。建立连接后,服务器和客户机可以交换连续的数据流。下面,我们将展示如何使用UDP和TCP进行网络编程。

套接字编程

UDP回显服务器-客户机程序

TCP回显服务器-客户机程序

主机名和IP地址

如果在不同的主机上运行服务器和客户机,服务器端口号由操作系统内核分配,则需要知道服务器的主机名或IP地址及其端口号。如果某台计算机运行TCP/IP,它的主机名通常记录在/etc/hosts文件中。库函数gethostname(char *name, sizeof(name))在name数组中返回计算机的主机名字符串。struct hostent *gethostbyname(void *addr, socklen_t len, int typo)可以用来获取计算机的全名及其IP地址。

原文地址:https://www.cnblogs.com/BillGreen/p/15616433.html