客户端 - 服务器网络编程模型
TCP, UDP 间的区别很简单:
- TCP 中连接是谁发起的,在 UDP 中报文是谁发送的
- TCP 通信中,建立连接是一个非常重要的环节。区别出客户端和服务器,本质上是因为二者编程模型是不同的。
IP 和端口
一个连接可以通过客户端 - 服务器端的 IP 和端口唯一确定,这叫做套接字对,按照下面的四元组表示:
(clientaddr:clientport, serveraddr: serverport)
保留网段
国际标准组织在 IPv4 地址空间里面,专门划出了一些网段,这些网段不会用做公网上的 IP,而是仅仅保留作内部使用,我们把这些地址称作保留网段。
子网掩码
- 网络
- 主机
- 网络地址位数由子网掩码(Netmask)决定
全球域名系统
全球域名按照从大到小的结构,形成了一棵树状结构。实际访问一个域名时,是从最底层开始写起:
数据报和字节流
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 也可以做到更高的可靠性,只不过这种可靠性,需要应用程序进行设计处理