简介和TCP/IP
概述
客户/服务器初识
编写计算机网络通信程序,首先要确定程序相互通信的协议(protocol)。
深入设计协议之前,应该从高层次决断通信由哪个程序发起以及响应在何时产生。举例来说:Web服务器程序是一个长时间运行的守护程序(daemon),它只在响应网络请求时才发送网络信息;协议的另一端客户端是Web浏览器程序,与服务器进程的通信总是由客户进程发起。
大多数网络应用就是按照客户(client)和 服务器(server)模式运行的。网络程序一般是由客户端发起请求消息,服务器进程响应请求消息。当然也有复杂的网络应用需要异步回调(asynchronous callback)通信,也就是服务器向客户端发送请求消息。
网络应用普遍使用客户/服务器模型。
通常客户每次只与一个服务器进程通信,服务器进程可以同时与多个客户通信。
TCP/IP协议
客户端服务器是通过某个网络协议通信的,实际上这个协议涉及多个网络协议层。如TCP/IP协议族,也称为网际协议族。Web服务器与客户端之间是通过TCP(Transmission Control Protocol,传输控制协议)通信。TCP又使用IP(Internet Protocol,网际协议)通信。IP下使用某种数据链路层协议通信。下图是处于同一以太网,也是同一局域网(local area network,LAN)的通信层次。
如上图客户端与服务器通信其中一端向下通过协议栈,跨越网络后,另一端则向上通过协议栈。客户和服务器是用户进程,TCP/IP协议是内核中的协议栈。
除了TCP之外,有的会客户/服务器会改用UDP(User Datagram Protocol,用户数据报协议)。IP协议,1980年以来,一直使用的是IPv4(IP version 4,IP版本4),除此之外还有IPv6(IP version 6,IP版本6)。
两个不同局域网中的客户和服务器,连接到广域网(wide area network,WAN)如下图。
广域网使用路由器(router)连接不同的局域网。路由器是网络设备,可以转发不同局域网中的数据包。当今最大的广域网是英特网(Internet)。
时间获取客户程序
...
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
...
int main(int argc, char const *argv[]){}