文章目录
- 网络、数据包和协议
- 网络
- 数据包
- 协议
- TCP、UDP
- 地址
- 客户端和服务器
- 套接字
网络、数据包和协议
计算机网络通过通信通道互连的机器组成,通常把这些机器称为主机和路由器,主机是是运行应用程序(如 Web 浏览器)的计算机。路由器是其工作是将信息从一个通信通道中继或转发到另一个通信通道的机器。而通信通道是一种将字节序列从一个主机传送到另一个主机的技术。它可能包括了以太网,广播技术、拨号调制解调器连接或更复杂的技术。
网络
路由器很重要,仅仅是因为将每台主机直接连接到其他每台主机是不切实际的。相反,一些主机连接到路由器,路由器连接到其他路由器,依此类推以形成网络。
数据包
我们可以通过网络发送一些信息,这些信息是由程序构造和解释的字节序列。在计算机网络的上下文中,这些字节序列通常称为数据包。数据包包含网络用于执行其工作的控制信息,有时还包括用户数据。
协议
协议是关于通过通信程序交换的数据包及其含义的协议。协议说明数据包的结构(例如,目标信息在数据包中的位置和大小)以及如何解释信息。协议通常旨在使用给定的功能解决特定问题。
实现一个有用的网络需要解决大量问题,为了保持可管理和模块化,设计了不同的协议来解决不同的问题集。而大名鼎鼎的TCP/IP就是这样一种解决方案集合,也叫协议套件。TCP/IP 系列中的主要协议是 Internet 协议 (IP)、传输控制协议 (TCP) 和用户数据报协议 (UDP)。
图1显示了主机和路由器中的协议、应用程序和套接字 API 之间的关系,以及从一个应用程序(使用 TCP)到另一个应用程序的数据流。
在TCP/IP中,底层由底层通信组成,例如以太网或拨号调制解调器连接。这些通道由网络层使用,网络层处理将数据包转发到目的地的问题(即路由器的作用)。TCP/IP 系列中的单个网络层协议是 Internet 协议;它解决了使任意两台主机之间的通道和路由器序列看起来像单个主机到主机通道的问题。
Internet协议提供数据报服务:每个数据包都由网络独立处理和传递,就像通过邮政系统发送的电报或包裹一样。每个 IP 数据包都必须包含其目的地的地址,就像您邮寄的每个包裹都是寄给某人的一样。
TCP、UDP
IP之上的层称为传输层。它提供两种协议之间的选择:TCP和UDP。每个 IP 都建立在 IP 提供的服务之上,但它们以不同的方式提供不同类型的通道,这些通道由具有不同需求的应用程序协议使用。TCP和UDP有一个共同的功能:寻址。
TCP 和 UDP 都使用称为端口号的地址,以便可以识别主机中的应用程序。它们被称为端到端传输协议,因为它们将数据从一个程序一直传输到另一个程序。TCP 旨在检测 IP 提供的主机到主机通道中可能发生的丢失、重复和其他错误,并从中恢复。TCP 提供了一个可靠的字节流通道,因此应用程序不必处理这些问题。它是一个面向连接的协议:在使用它进行通信之前,两个程序必须首先建立 TCP 连接,这涉及在两台通信计算机上的 TCP 实现之间完成握手消息的交换。UDP 不会尝试从 IP 遇到的错误中恢复;它只是扩展了 IP 尽力而为的数据报服务。因此在使用UDP的应用程序要准备好处理丢失、重新排序等问题。
 总得来说TCP是一种安全可靠的传输协议,而UDP是一种快速但可能会丢失数据等错误的传输协议。
地址
邮寄信件时需要收件人的地址。同样,在一个程序与另一个程序通信之前,它必须告诉网络在哪里可以找到另一个程序。在TCP/IP中,也需要这样的地址信息,地址由两部分构成:IP地址和端口号。
IP地址是32位二进制数。我们通常将它们显示为一个由句点分隔的四个十进制数字的字符串(例如,10.1.2.3);这称为点分四边形表示法。点分四元组字符串中的四个数字表示 IP地址的四个字节的内容,因此每个数字都是介于 0 和 255 之间的数字。
如果说IP地址是酒店地址,端口号就是酒店的房间号,两个者组合则可以精准得找到你。端口号是 16 位无符号二进制数,因此每个端口号都在 1 到 65,535 的范围内(保留 0)
客户端和服务器
客户端程序启动通信,而服务器程序被动等待然后响应与其联系的客户端。
一旦建立连接,服务器和客户端之间的区别就会消失。
套接字
套接字是一种抽象,应用程序可以通过它发送和接收数据,其方式与打开的文件允许应用程序将数据读写到稳定存储的方式大致相同。目前 TCP/IP 中的主要套接字类型是流套接字和数据报套接字。流套接字使用 TCP 作为端到端协议(底层有 IP),从而提供可靠的字节流服务。数据报套接字使用 UDP(同样,端到端,底层为 IP),因此提供尽力而为的数据报服务,应用程序可以使用该服务发送长度高达 65,500 字节的单个消息。其他协议套件也支持 Stream 和 Datagram 套接字,