第13章 TCP/IP和网络编程
本章论述了 TCP/P和网络编程,分两个部分。第一部分论述了TCPAIP协议及其应用,具体包括 TCP/IP栈、IP地址、主机名、DNS、IP 数据包和路由器;介绍了 TCP/IP网络中的UDP 和 TCP 协议、端口号和数据流;阐述了服务器-客户机计算模型和套接字编程接口;通过使用UDP和 TCP 套接字的示例演示了网络编程。第一个编程项目可实现一对通过互联网执行文件操作的 TCP服务器-客户机,可让用户定义其他通信协议来可靠地传输文件内容。
本章的第二部分介绍了 Web 和CGI编程,解释了 HTTP编程模型、Web 页面和Web 浏览器;展示了如何配置 Linux HTTPD 服务器来支持用户 Web 页面、PHP 和 CGI 编程;阐释了客户机和服务器端动态 Web 页面;演示了如何使用PHP和CGI创建服务器端动态 Web页面。第二个编程项目可让读者在Linux HTTPD 服务器上通过 CGI 编程实现服务器端动态Web 页面。
TCP是传输控制协议。IP是互联网协议。TCP/IP是互联网的基础。
软件体系结构
C/S:客户端/服务器
胖客户端,瘦服务器
B/S:浏览器/服务器
瘦客户端,胖服务器
优点:客户机软件只需浏览器,只需实现简单的逻辑
P2P:Peer to Peer
网络中的参与者既是资源(服务或内容)提供者(Server),也是资源获取者(Client)
IP地址:
标识主机,IPv4-32位,IPv6-128位
端口:
标识某主机上的某个应用进程
字节顺序:
小端:低位字节在内存的低地址端
大端:高位字节在内存的低地址端
TCP套接字通信过程(面向连接)
服务期先启动:
调用socket函数创建一个套接字s
调用bind函数绑定ip和端口
listen
accept
……
time/echo/http服务器
套接字编程
套接字地址
struct sockaddr_in{
sa_family_t sin_family; //AF_INET for TCP/IP
in_port_t sin_port; //port number
struct in_addr sin_addr; //IP address
};
struct in_addr{ //internet address
uint32_t s_addr; //IP address in network byte order
};
套接字API
int 套接字(int域,int类型,int协议);
int bind(int sockfd,struct sockaddr *addr,socklen_t addrlen);
UDP套接字
TCP套接字
send()/read()以及recv/write()