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

image.png

TCP, UDP 间的区别很简单:

  • TCP 中连接是谁发起的,在 UDP 中报文是谁发送的
  • TCP 通信中,建立连接是一个非常重要的环节。区别出客户端和服务器,本质上是因为二者编程模型是不同的。

IP 和端口

一个连接可以通过客户端 - 服务器端的 IP 和端口唯一确定,这叫做套接字对,按照下面的四元组表示:

  1. clientaddr:clientport, serveraddr: serverport)

image.png

保留网段

国际标准组织在 IPv4 地址空间里面,专门划出了一些网段,这些网段不会用做公网上的 IP,而是仅仅保留作内部使用,我们把这些地址称作保留网段。

image.png

子网掩码

  • 网络
  • 主机
  • 网络地址位数由子网掩码(Netmask)决定

全球域名系统

全球域名按照从大到小的结构,形成了一棵树状结构。实际访问一个域名时,是从最底层开始写起:

image.png

数据报和字节流

TCP,又被叫做字节流套接字(Stream Socket),注意我们这里先引入套接字 socket,套接字 socket 在后面几讲中将被反复提起,因为它实际上是网络编程的核心概念。当然,UDP 也有一个类似的叫法, 数据报套接字(Datagram Socket),一般分别以“SOCK_STREAM”与“SOCK_DGRAM”分别来表示 TCP 和 UDP 套接字。

Datagram Sockets 有时称为“无连接的 sockets”(connectionless sockets)。

使用 UDP 的原因,第一是速度,第二还是速度。

事实上,UDP 在很多场景也得到了极大的应用,比如多人联网游戏、视频会议,甚至聊天室。如果你听说过 NTP,你一定很惊讶 NTP 也是用 UDP 实现的。

还有一种叫做广播多播的技术,就是向网络中的多个节点同时发送信息,这个时候,选择 UDP 更是非常合适的。

UDP 也可以做到更高的可靠性,只不过这种可靠性,需要应用程序进行设计处理