网络编程模型之客户端-服务器模型

客户端-服务器模型

双十一购物中,手机上的每次操作,实际上都是客户端向服务器发送请求,并得到响应的例子。

  • 对于服务器端来说,一开始就需要监听在一个固定的端口上,等待客户端连接,一旦连接建立,服务端就会消耗一定的计算机资源为其服务,服务器是为众多的客户端服务的。如何去保证服务器端在巨大的客户端访问下,仍然有效率和稳定去提供服务,是高性能网络编程的目的。
  • 对于客户端来说,向服务端监听的端口发起请求,建立连接后,进行通信。

在客户端和服务端中,运行的单位都是进程,而不是机器。

IP和端口

  • IP是网络世界的地址,可以类比为酒店地址
  • 端口号是区分不同连接的,可以类比为具体的房间号,端口为16位的整数,最多65536。当客户端发起连接后,操作系统内部会分配一个临时端口。服务器的端口是固定的。

客户端的IP和端口和服务器的IP和端口组成了一个四元组,叫做套接字对。

网络编程模型之客户端-服务器模型

子网掩码

网络IP划分中需要区分两个概念

网络和主机

  • 网络:一组IP的共同部分。例如192.168.1.1~192.168.1.255 这个区间里,它们共同的部分是 192.168.1.0。
  • 主机:一组IP的不同部分。例如192.168.1.1~192.168.1.255 这个区间里,有255个可用的IP。

子网的分类

一个 IPv4 地址的第一个,前两个或前 三个 字节是属于网络的一部分。一个IPV4地址192.0.2.12,我们可以说前3个byte是子网,最后一个byte是host,能说host为8位,子网掩码为192.0.2.0/24(255.255.255.0)。
网络编程模型之客户端-服务器模型

  • 表格第一行就是这样的一个 A 类网络,10 是对应的网络字 节部分,主机的字节是 3,我们将一个字节的子网记作 255.0.0.0。
  • Class B”(B 类)的网络,网络有两个字节,而 host 只有两个字节,也就是说 拥有的主机个数为 65536。
  • “Class C”(C 类)的网络,网络有三个 字节,而 host 只有 一个 字节,也就是说拥有的主机个数为 256。

注意

  • 网络地址位数是由子网掩码决定的,子网掩码可以接收任意个数,用于去切分网络。
  • 子网掩码的格式永远都是二进制,前面一连串的1,后面跟着0
  • 主机地址和子网掩码的与操作得到的就是网络的值。

域名系统

域名DNS系统记录了网站和IP的对应关系。全球域名按照从大到小的结构,形成了一棵树状结构。从底层向*问
网络编程模型之客户端-服务器模型

TCP和UDP

TCP

字节流套接字(Stream Socket),是有连接的Socket,可靠的双向连接的通讯串流,有连接管理,拥塞控制,数据流与窗口管理,超时和重传等一系列 精巧而详细的设计,提供了高质量的端到端的通信方式。

UDP

数据报套接字(Datagram Socket),是无连接的Socket,追求速度的场景,可以做广播或多播。UDP也可以通过应用程序设计,对报文编号和Request-ASK机制,加重传,变为一定程度上可靠。