TCP 使用字节流通信,其中 TCP 段中的数据被视为没有记录或字段边界的字节序列。下表描述了 TCP 标头中的关键字段。
TCP 标头中的关键字段
田 | 功能 |
---|---|
源端口 |
发送主机的 TCP 端口。 |
目标端口 |
目标主机的 TCP 端口。 |
序列号 |
TCP 段中数据的第一个字节的序列号。 |
确认编号 |
发送方希望接下来从连接的另一端接收的字节的序列号。 |
窗 |
发送此 TCP 段以存储传入段的主机上 TCP 缓冲区的当前大小。 |
TCP 校验和 |
验证 TCP 标头和 TCP 数据的位级完整性。 |
TCP端口
TCP 端口提供用于传送 TCP 段的特定位置。低于 1024 的端口号是众所周知的端口,由互联网号码分配机构 (IANA) 分配。下表列出了一些众所周知的 TCP 端口。
众所周知的 TCP 端口
TCP 端口号 | 描述 |
---|---|
20 |
FTP(数据通道) |
21 |
FTP(控制通道) |
23 |
远程登录 |
80 |
用于万维网的 HTTP |
139 |
网络BIOS 会话服务 |
TCP/IP 应用程序接口
为了使应用程序以标准方式访问核心 TCP/IP 协议提供的服务,Windows Server 2003 等网络操作系统提供了行业标准的应用程序编程接口 (API)。API 是由应用程序代码以编程方式调用以执行网络功能的函数和命令集。例如,连接到网站的 Web 浏览器应用程序需要访问 TCP 的连接建立服务。
下图显示了两个常见的 TCP/IP API,Windows 套接字和 NetBIOS,以及它们与核心协议的关系。
用于 TCP/IP 的 API
windows套接字接口
Windows Sockets API 是 Windows Server 2003 下的标准 API,用于使用 TCP 和 UDP 的应用程序。写入 Windows Sockets API 的应用程序在许多版本的 TCP/IP 上运行。TCP/IP 实用程序和 SNMP 服务是写入 Windows 套接字接口的应用程序示例。
Windows 套接字提供的服务允许应用程序绑定到主机上的特定端口和 IP 地址、启动和接受连接、发送和接收数据以及关闭连接。有两种类型的套接字:
-
流套接字使用 TCP 提供双向、可靠、有序且不重复的数据流。
-
数据报套接字使用 UDP 提供单向或双向数据流。
套接字由主机上的协议和地址定义。地址的格式特定于每个协议。在 TCP/IP 中,地址是 IP 地址和端口的组合。两个套接字(连接两端各一个)形成双向通信路径。
为了进行通信,应用程序指定协议、目标主机的 IP 地址和目标应用程序的端口。连接应用程序后,可以发送和接收信息。
网络简介接口
NetBIOS 允许应用程序通过网络进行通信。NetBIOS 定义了两个实体:会话级接口和会话管理和数据传输协议。
NetBIOS 接口是用户应用程序向底层网络协议软件提交网络输入/输出 (I/O) 和控制指令的标准 API。使用 NetBIOS 接口 API 进行网络通信的应用程序可以在支持 NetBIOS 接口的任何协议软件上运行。
NetBIOS 还定义了一个在会话/传输级别运行的协议。这是由底层协议软件(如NetBIOS FramesProtocol NBFP——NetBEUI或NetBIOS over TCP/IP(NetBT)的一个组件)实现的,该软件执行适应NetBIOS接口命令集所需的网络I / O。基于 TCP/IP 的 NetBIOS 在 RFC 1001 和 1002 中定义。默认情况下启用 NetBT,但 Windows Server 2003 允许您为不包含基于 NetBIOS 的网络客户端或应用程序的环境禁用 NetBT。
NetBIOS 为 NetBIOS 名称管理、NetBIOS 数据报和 NetBIOS 会话提供命令和支持。
网络 BIOS 名称管理
NetBIOS 名称管理服务提供以下功能:
-
名称注册和发布。当 TCP/IP 主机初始化时,它通过将 NetBIOS 名称注册请求广播或定向到 NetBIOS 名称服务器(如 WINS 服务器)来注册其 NetBIOS 名称。如果另一台主机注册了相同的 NetBIOS 名称,则该主机或 NetBIOS 名称服务器将以否定名称注册响应进行响应。因此,启动主机会收到初始化错误。当主机上的工作站服务停止时,当其他人尝试使用该名称时,主机将停止广播负名称注册响应,并将名称释放发送到 NetBIOS 名称服务器。据说 NetBIOS 名称已发布并可供另一台主机使用。
-
名称解析。当一个 NetBIOS 应用程序想要与另一个 NetBIOS 应用程序通信时,必须解析 NetBIOS 应用程序的 IP 地址。NetBT 通过在本地网络上广播 NetBIOS 名称查询或将 NetBIOS 名称查询发送到 NetBIOS 名称服务器来执行此功能。
NetBIOS 名称服务使用 UDP 端口 137。
网络BIOS 数据报
NetBIOS 数据报服务提供无连接、无序和不可靠的数据报。数据报可以定向到特定的NetBIOS名称或广播到一组名称。传递是不可靠的,因为只有登录到网络的用户才能收到消息。数据报服务可以启动和接收广播消息和定向消息。NetBIOS 数据报服务使用 UDP 端口 138。
网络BIOS 会话
NetBIOS 会话服务提供面向连接、按顺序排列且可靠的 NetBIOS 消息的传递。NetBIOS 会话使用 TCP 连接并提供会话建立、保持连接和终止。NetBIOS 会话服务允许使用 TCP 端口 139 在两个方向上并发数据传输。
IPv4 寻址
对于 IP 版本 4,每个 TCP/IP 主机都由一个逻辑 IP 地址标识。IP 地址是网络层地址,不依赖于数据链路层地址(例如网络适配器的 MAC 地址)。使用 TCP/IP 进行通信的每个主机和网络组件都需要唯一的 IP 地址,可以手动分配,也可以使用动态主机配置协议 (DHCP) 进行分配。
IP 地址标识系统上的系统位置,就像街道地址标识城市街区上的房屋一样。正如街道地址必须标识唯一的住所一样,IP 地址对于互联网络必须是全局唯一的,并且具有统一的格式。
每个 IP 地址都包含一个网络 ID 和一个主机 ID。
-
网络 ID(也称为网络地址)标识位于由 IP 路由器绑定的同一物理网络上的系统。同一物理网络上的所有系统必须具有相同的网络 ID。网络 ID 对于互联网络必须是唯一的。
-
主机 ID(也称为主机地址)标识网络中的工作站、服务器、路由器或其他 TCP/IP 主机。主机地址对于网络 ID 必须是唯一的。
IPv4 地址语法
IP 地址由 32 位组成。标准做法是将 IPv4 地址的 32 位划分为四个称为八位字节的 2 位字段,而不是使用二进制表示法 (Base32) 一次表示 4 位。每个八位字节都转换为 8–10 之间的十进制数(以 0 为基数),并用句点(点)分隔。这种格式称为点分十进制表示法。下表提供了二进制和点分十进制格式的 IP 地址示例。
二进制和点分十进制格式的 IP 地址
二进制格式 | 点分十进制表示法 |
---|---|
例如,4的 IPv11000000101010000000001100011000 地址为:
-
分为 8 位块:11000000 10101000 00000011 00011000。
-
每个块转换为十进制:192 168 3 24
-
相邻的八位字节由句点分隔:192.168.3.24。
表示法 w.x.y.z 用于指代通用 IP 地址,如下图所示。
IPv4 地址的类型
互联网标准定义了以下类型的 IPv4 地址:
-
单播。分配给位于网络上特定子网上的单个网络接口,用于一对一通信。
-
多播。分配给位于网络上各个子网上的一个或多个网络接口,用于一对多通信。
-
广播。分配给位于网络上子网上的所有网络接口,用于子网上的每个人之间的通信。
以下各节详细介绍了这些类型的地址。
IPv4 单播地址
IPv4 单播地址标识接口在网络上的位置,其方式与街道地址标识城市街区上的房屋的方式相同。正如街道地址必须标识唯一的住宅一样,IPv4 单播地址对于网络必须是全局唯一的,并且具有统一的格式。
每个 IPv4 单播地址都包含一个网络 ID 和一个主机 ID。
-
网络 ID(也称为网络地址)是 IPv4 单播地址的固定部分,用于标识位于与 IPv4 路由器边界相同的物理或逻辑网段上的接口集。TCP/IP 网络上的网段也称为子网。同一物理或逻辑子网上的所有系统必须使用相同的网络 ID,并且该网络 ID 对于整个 TCP/IP 网络必须是唯一的。
-
主机 ID(也称为主机地址)是 IPv4 单播地址的可变部分,用于标识子网上网络节点的接口。主机 ID 对于网络 ID 必须是唯一的。
如果网络 ID 对于 TCP/IP 网络是唯一的,并且主机 ID 对于网络 ID 是唯一的,则由网络 ID 和主机 ID 组成的整个 IPv4 单播地址对于整个 TCP/IP 网络都是唯一的。
IPv4 组播地址
IPv4 组播地址用于单数据包一对多传送。在启用了 IPv4 组播的 Intranet 上,寻址到 IPv4 组播地址的 IPv4 数据包由路由器转发到有主机侦听发送到 IPv4 组播地址的流量的子网。IPv4 组播为多种类型的通信提供高效的一对多传送服务。
IPv4 组播地址由 D 类因特网地址类定义:224.0.0.0/4。IPv4 组播地址的范围从 224.0.0.0 到 239.255.255.255。4.224.0.0/0 地址前缀(24.224.0.0 到 0.224.0.0)的 IPv255 组播地址保留用于本地子网组播流量。
IPv4 广播地址
IPv4 使用一组广播地址在子网传送服务上提供一对所有人。发送到 IPv4 广播地址的数据包由子网上的所有接口处理。以下是不同类型的 IPv4 广播地址:
-
网络广播。通过将类地址前缀的所有主机位设置为 1 而形成。类网络 ID 131.107.0.0/16 的网络广播地址示例为 131.107.255.255。网络广播用于将数据包发送到有类网络的所有接口。IPv4 路由器不转发网络广播数据包。
-
子网广播。通过将无类别地址前缀的所有主机位设置为 1 而形成。无类别网络 ID 131.107.26.0/24 的网络广播地址示例为 131.107.26.255。子网广播用于将数据包发送到无类别网络的所有主机。IPv4 路由器不转发子网广播数据包。对于类地址前缀,没有子网广播地址,只有网络广播地址。对于无类别地址前缀,没有网络广播地址,只有子网广播地址。
-
全子网定向广播。通过将所有原始有类网络 ID 主机位设置为 1 作为无类别地址前缀而形成。将寻址到全子网定向广播的数据包定义为到达基于子网类的网络 ID 的所有子网上的所有主机。子网网络 ID 131.107.26.0/24 的全子网定向广播地址示例是 131.107.255.255。全子网定向广播是原始有类网络 ID 的网络广播地址。IPv4 路由器可以转发所有子网定向广播数据包,但是 RFC 1812 中不推荐使用全子网定向广播地址。
-
有限播出。通过将 IPv32 地址的所有 4 位设置为 1 (255.255.255.255) 而形成。当本地网络 ID 未知时,受限广播地址用于本地子网上的一对一传送。IPv4 节点通常仅在自动配置过程(如引导协议 (BOOTP) 或 DHCP)期间使用有限的广播地址。例如,对于 DHCP,DHCP 客户端必须对发送的所有流量使用有限的广播地址,直到 DHCP 服务器确认使用了提供的 IPv4 地址配置。IPv4 路由器不转发有限的广播数据包。
互联网地址类
互联网社区最初定义了地址类,以适应不同类型的地址和不同大小的网络。地址类定义哪些位用于网络 ID,哪些位用于主机 ID。它还定义了可能的网络数和每个网络的主机数。在五个地址类别中,为 IPv4 单播地址定义了 A、B 和 C 类地址。D类地址定义为IPv4组播地址,E类地址定义为实验用途。
A类
A 类网络 ID 分配给具有大量主机的网络。A 类地址中的高阶位始终设置为零,这使得所有 A 类网络和地址的地址前缀为 0.0.0.0/1(或 0.0.0.0、128.0.0.0)。接下来的七位(完成第一个八位字节)用于枚举 A 类网络 ID。因此,A 类网络 ID 的地址前缀具有 8 位前缀长度(/8 或 255.0.0.0)。其余 24 位(最后三个八位字节)用于主机 ID。地址前缀 0.0.0.0/0(或 0.0.0.0、0.0.0.0)是保留的网络 ID,127.0.0.0/8(或 127.0.0.0、255.0.0.0)是为环回地址保留的。在总共 128 个可能的 A 类网络中,有 126 个网络,每个网络有 16,777,214 个主机。
注意
-
保留全零和全一主机 ID
-
枚举给定网络 ID 的主机 ID 时,将保留主机 ID 中的所有位设置为 0(全零主机 ID)和主机 ID 中的所有位设置为 1(全主机 ID)的两个主机 ID,不能分配给网络节点接口。因此,在上述计算中,A 类主机 ID 有 24 位,可能的主机 ID 总数为 16,777,216 (224)。减去两个预留主机 ID 时,可用主机 ID 总数为 16,777,214。
下图说明了 A 类地址的结构。
B类
B 类网络 ID 分配给大中型网络。B 类地址中的两个高阶位始终设置为 10,这使得所有 B 类网络和地址的地址前缀为 128.0.0.0/2(或 128.0.0.0、192.0.0.0)。接下来的 14 位(完成前两个八位组)用于枚举 B 类网络 ID。因此,B 类网络 ID 的地址前缀具有 16 位前缀长度(/16 或 255.255.0.0)。其余 16 位(最后两个八位字节)用于主机 ID。使用 14 位表示 B 类网络 ID,16 位表示主机 ID,这允许 16,384 个网络和每个网络 65,534 个主机。
下图说明了 B 类地址的结构。