0x01TCPIP网络编程基础
TCP/IP网络编程基础
由源端建立一条连接到目的端,需要的信息包括:源IP、源端口、目的IP和目的端口共四个参数,这四个参数又称为套接字对(socket pair),它标识了通过TCP/IP协议通信的双方。
客户端/服务器编程模型
客户端是指运行于本地主机上的一个程序,该程序请求服务器程序提供某种服务。客户端程序使用远端主机的IP地址和对应的众所周知的端口号与远端主机上的服务器程序进行通信,这一过程称为主动打开(active open)。客户端程序根据用户需要启动,获得所请求的服务后就结束运行,此时客户端主动结束通信(active close)。
服务器是指运行在远端主机上的一个程序,该程序向客户端提供某种服务。当服务器程序启动后,将一直等待客户端发来请求,服务器自身并不会主动发起请求,这一过程称为被动打开(passive open)。另外,通常服务器程序一旦启动后,将一直运行下去,除非有异常情况发生而导致其终止。
循环式服务器
所谓循环式服务器,指服务器一次只能处理一个请求,当处理结束向客户端发回应答之后,才能接受下一个客户端请求。通常使用UDP协议的服务器工作于循环模式。
并发式服务器
所谓并发式服务器,指服务器可以同时处理多个客户端发来的请求,常用于TCP协议服务器。
并发式服务器不能仅靠使用一个众所周知端口来完成连接过程,因为服务器需要为每个连接都分配一个端口,而并发式服务器又要同时服务于多个客户端。因此除了一个众所周知的端口用于监听客户端的连接请求外,还必须为每一个已经建立连接的客户端分配临时端口用于进行数据交换。通常TCp服务器在众所周知的端口上工作于被动打开模式,当收到客户端发来的连接请求后,服务器为次连接分配一个临时端口,于是用于监听的端口将被释放出来继续监听下一个请求。Linux下通常采用父子进程实现次工作方式,负责接收客户端请求的称为父进程,它工作于众所周知的端口,子进程工作在临时端口。