1,网络编程

  • 每个网络应用程序都是基于 客户端 - 服务器 模型的,一个应用是由一个服务器进程和一个或多个客户端进程组成

  • 客户端-服务器模型中的基本操作是 事务 ,一个客户端-服务器事务由四步组成

  1. 客户端需要服务的时候,向服务器发送请求,发送一个事务
  2. 服务器收到请求后,解释它,并以适当方式操作它的资源
  3. 服务器给客户端发送一个响应,并等待下一个请求
  4. 客户端收到响应并处理它
  • 一个客户端运行在主机A上,主机A与LAN1相连,它发送了一串数据字节到运行在主机B上的服务器端,主机B则连接在LAN2上,步骤如下
  1. 运行在主机A上的客户端进行系统调用,从客户端的虚拟地址空间拷贝到内核缓冲区

  2. 主机A上的协议软件通过在数据前附加互联网络 包头LAN1帧头 ,创建了一个LAN1的帧(互联网包头寻址到互联网主机B,LAN1帧头寻址到路由器,LAN1帧的有效载荷是互联网络包,互联网络包的有效载荷是实际的用户数据)

  3. LAN1适配器拷贝该帧到网络上

  4. 帧到达路由器,路由器的LAN1适配器从电缆上读取它,并传送到协议软件中

  5. 路由器从互联网包头中提取处目的互联网络地址,用它作为路由器的索引,确定向哪里转发这个包(路由器剥落旧的LAN1的帧头,加上寻址到主机B的新的LAN2帧头,并把得到的帧传送到适配器)

  6. 路由器的LAN2适配器拷贝该帧到网络

  7. 帧到达主机B时,它的适配器从电缆上读到此帧,并将它传送到协议软件

  8. 主机B上的协议软件剥落包头和帧头。服务器进行一个读取这些数据的系统调用

2.TCP/IP

  • IP
  1. 基本的命名方法和递送机制
  2. IPv4和IPv6
  3. 最初的互联网协议使用32位地址,称位IPv4,而IPv6有128位地址
  4. IP地址通常以一种点分十进制来表示
  • UDP
  1. 不可靠数据报协议
  2. 使得包可以在进程间而不是主机间传递
  • TCP
  1. 提供进程间可靠的双向链接
  • 域名
  1. 从后往前解析
  2. 通过DNS分布式数据库来维护
  3. 将IP地址与域名映射
  4. 一个IP地址可以映射到多个域名,一个域名也可以映射到多个IP地址
  5. 每个主机都有本地域名localhost

3.Socket

  • 套接字 是连接的一个端点,每个套接字都有相应的套接字地址
  1. 是由一个IP地址和一个16位的整数端口组成的,用地址:端口来表示。

  2. 当客户端发起一个连接请求时,客户端套接字地址中的端口由内核自动分配的,称为临时端口

  3. 服务器套接字地址中的端口通常是某个知名的端口,和这个服务相对应

  4. 例如:Web服务器通常使用端口80,电子邮件服务器使用端口25

  5. 在Unix机器上,文件/etc/services 包含一张这台机器提供的服务和他们的知名端口号的综合列表

  6. 一个连接是由它两端的套接字地址唯一确定的,这对套接字地址叫做套接字对,由下列元组来表示:(cliaddr:cliport,servaddr:servport)

SocketInterface

  1. 服务器和客户端都调用socket函数创建文件描述符
  2. 服务器调用bind函数准备连接
  3. 由于默认socket描述符用于客户端,服务器调用listen函数将其转变为监听描述符,这个描述符服务器自开机运行只创建一次
  4. 服务器调用accept函数等待请求到达,返回已连接描述符,这个描述符每当一个服务器和客户端连接就创建一个 ,区分监听和已连接的目的是创建并发服务器,同时处理多个客户端
  5. 客户端调用connect函数准备连接,打开clientfd描述符
  6. 当客户端断开后,将会向服务器发送EOF结束符,服务器收到后关闭,EOF实质上不是一个字符,而是一个内核检测的条件

4.HTTP事务

  • 一个 HTTP请求 由:一个请求行、后跟随0个或多个请求报文,再跟随空文本行终止报头列表
  1. 首先要连接服务器和客户端
  2. 格式:method URI version
  3. method一般为 GET
  4. URI为URL端口后面的部分
  5. version为HTTP版本
状态代码 状态消息 描述
200 成功 处理请求无误
301 永久移动 内容已移动在location头指名的主机
400 错误请求 服务器不能理解请求
403 禁止 服务器无权访问所请求文件
404 未发现 服务器不能找到所请求文件
501 未实现 服务器不支持请求方法
505 HTTP版本不支持 服务器不支持请求版本
  • Tiny Web服务器