1,网络编程
-
每个网络应用程序都是基于 客户端 - 服务器 模型的,一个应用是由一个服务器进程和一个或多个客户端进程组成
-
客户端-服务器模型中的基本操作是 事务 ,一个客户端-服务器事务由四步组成
- 客户端需要服务的时候,向服务器发送请求,发送一个事务
- 服务器收到请求后,解释它,并以适当方式操作它的资源
- 服务器给客户端发送一个响应,并等待下一个请求
- 客户端收到响应并处理它
- 一个客户端运行在主机A上,主机A与LAN1相连,它发送了一串数据字节到运行在主机B上的服务器端,主机B则连接在LAN2上,步骤如下
-
运行在主机A上的客户端进行系统调用,从客户端的虚拟地址空间拷贝到内核缓冲区
-
主机A上的协议软件通过在数据前附加互联网络 包头 和 LAN1帧头 ,创建了一个LAN1的帧(互联网包头寻址到互联网主机B,LAN1帧头寻址到路由器,LAN1帧的有效载荷是互联网络包,互联网络包的有效载荷是实际的用户数据)
-
LAN1适配器拷贝该帧到网络上
-
帧到达路由器,路由器的LAN1适配器从电缆上读取它,并传送到协议软件中
-
路由器从互联网包头中提取处目的互联网络地址,用它作为路由器的索引,确定向哪里转发这个包(路由器剥落旧的LAN1的帧头,加上寻址到主机B的新的LAN2帧头,并把得到的帧传送到适配器)
-
路由器的LAN2适配器拷贝该帧到网络
-
帧到达主机B时,它的适配器从电缆上读到此帧,并将它传送到协议软件
-
主机B上的协议软件剥落包头和帧头。服务器进行一个读取这些数据的系统调用
2.TCP/IP
- IP
- 基本的命名方法和递送机制
- IPv4和IPv6
- 最初的互联网协议使用32位地址,称位IPv4,而IPv6有128位地址
- IP地址通常以一种点分十进制来表示
- UDP
- 不可靠数据报协议
- 使得包可以在进程间而不是主机间传递
- TCP
- 提供进程间可靠的双向链接
- 域名
- 从后往前解析
- 通过DNS分布式数据库来维护
- 将IP地址与域名映射
- 一个IP地址可以映射到多个域名,一个域名也可以映射到多个IP地址
- 每个主机都有本地域名localhost
3.Socket
- 套接字 是连接的一个端点,每个套接字都有相应的套接字地址
-
是由一个IP地址和一个16位的整数端口组成的,用地址:端口来表示。
-
当客户端发起一个连接请求时,客户端套接字地址中的端口由内核自动分配的,称为临时端口
-
服务器套接字地址中的端口通常是某个知名的端口,和这个服务相对应
-
例如:Web服务器通常使用端口80,电子邮件服务器使用端口25
-
在Unix机器上,文件/etc/services 包含一张这台机器提供的服务和他们的知名端口号的综合列表
-
一个连接是由它两端的套接字地址唯一确定的,这对套接字地址叫做套接字对,由下列元组来表示:(cliaddr:cliport,servaddr:servport)

- 服务器和客户端都调用socket函数创建文件描述符
- 服务器调用bind函数准备连接
- 由于默认socket描述符用于客户端,服务器调用listen函数将其转变为监听描述符,这个描述符服务器自开机运行只创建一次
- 服务器调用accept函数等待请求到达,返回已连接描述符,这个描述符每当一个服务器和客户端连接就创建一个 ,区分监听和已连接的目的是创建并发服务器,同时处理多个客户端
- 客户端调用connect函数准备连接,打开clientfd描述符
- 当客户端断开后,将会向服务器发送EOF结束符,服务器收到后关闭,EOF实质上不是一个字符,而是一个内核检测的条件
4.HTTP事务
- 一个 HTTP请求 由:一个请求行、后跟随0个或多个请求报文,再跟随空文本行终止报头列表
- 首先要连接服务器和客户端
- 格式:method URI version
- method一般为 GET
- URI为URL端口后面的部分
- version为HTTP版本
| 状态代码 | 状态消息 | 描述 |
|---|---|---|
| 200 | 成功 | 处理请求无误 |
| 301 | 永久移动 | 内容已移动在location头指名的主机 |
| 400 | 错误请求 | 服务器不能理解请求 |
| 403 | 禁止 | 服务器无权访问所请求文件 |
| 404 | 未发现 | 服务器不能找到所请求文件 |
| 501 | 未实现 | 服务器不支持请求方法 |
| 505 | HTTP版本不支持 | 服务器不支持请求版本 |
- Tiny Web服务器