TCP/IP for IP version 4(IPv4)是一种网络协议,Microsoft Windows使用该协议通过internet与其他计算机进行通信。理想情况下,只要基于Windows的计算机通过网络进行通信,就会使用TCP/IP。
本文介绍TCP/IP协议的组成、协议体系结构、TCP/IP的核心协议及应用程序接口。
1 TCP/IP协议体系结构
TCP/IP协议映射到一个称为DARPA模型的四层概念模型,该模型以最初开发TCP/IP的美国政府机构命名。DARPA模型的四个层次是:应用程序、传输、互联网和网络接口。DARPA模型中的每一层对应于七层开放系统互连(OSI)模型的一个或多个层。
下图显示了TCP/IP协议体系结构。
网络接口层(Network Interface Layer)
网络接口层(也称为网络访问层)负责将TCP/IP数据包放置在网络介质上和从网络介质接收TCP/IP数据包。TCP/IP被设计为独立于网络访问方法、帧格式和介质。通过这种方式,TCP/IP可以用于连接不同类型的网络。其中包括局域网(LAN)介质,如以太网和令牌环,以及广域网技术,如X.25和帧中继。与任何特定网络介质的独立性允许TCP/IP适应诸如异步传输模式(ATM)之类的新介质。
网络接口层包括OSI模型的数据链路层(Data-Link Layer)和物理层(Physical Layer)。请注意,互联网(Internet Layer)没有利用网络接口层中可能存在的排序和确认服务。假设网络接口层不可靠,传输层(Transport Layer)的功能是通过会话建立、数据包的排序和确认进行可靠通信。
互联网层(Internet Layer)
Internet层处理寻址、打包和路由功能。互联网层的核心协议是IP、ARP、ICMP和IGMP。
- 互联网协议(IP)是一种可路由的协议,用于处理IP寻址、路由以及数据包的分段和重组。
- 地址解析协议(ARP)处理互联网层地址到网络接口层地址(例如硬件地址)的解析。
- 互联网控制消息协议(ICMP)处理提供诊断功能和报告由于IP数据包传递失败而导致的错误。
- 互联网组管理协议(IGMP)处理IP多播组成员的管理。
互联网层类似于OSI模型的网络层(Network Layer)。
传输层(Transport Layer)
传输层(也称为主机到主机传输层)负责为应用层( Application layer)提供会话和数据包通信服务。传输层的核心协议是传输控制协议(TCP)和用户数据报协议(UDP)。
TCP提供一对一、面向连接、可靠的通信服务。TCP处理TCP连接的建立、发送数据包的排序和确认,以及传输过程中丢失数据包的恢复。
UDP提供一对一或一对多、无连接、不可靠的通信服务。当要传输的数据量很小时(例如适合单个数据包的数据),当您不希望建立TCP连接的开销时,或者当应用程序或上层协议提供可靠的传输时,都会使用UDP。
TCP/IP传输层包含OSI传输层的职责。
应用层(Application Layer)
应用层允许应用程序访问其他层的服务,并定义应用程序用于交换数据的协议。有许多应用层协议,并且总是在开发新的协议。
最广为人知的应用层协议是那些用于交换用户信息的协议:
- 超文本传输协议(HTTP)用于传输构成万维网网页的文件。
- 文件传输协议(FTP)用于交互式文件传输。
- 简单邮件传输协议(SMTP)用于传输邮件和附件。
- Telnet是一种终端仿真协议,用于远程登录到网络主机。
此外,以下应用层协议有助于促进TCP/IP网络的使用和管理:
- 域名系统(DNS)用于将主机名解析为IP地址。
- 路由信息协议(RIP)是路由器用于在IP互联网上交换路由信息的路由协议。
- 简单网络管理协议(SNMP)用于网络管理控制台和网络设备(路由器、网桥、智能集线器)之间,以收集和交换网络管理信息。
TCP/IP应用程序的应用层接口示例有Windows Sockets和NetBIOS。Windows Sockets在Windows Server 2003下提供了一个标准的应用程序编程接口(API)。NetBIOS是用于访问协议服务(如会话、数据报和名称解析)的行业标准接口。
TCP/IP应用层包括OSI会话、表示和应用层的职责。
2 TCP/IP核心协议
安装在网络操作系统中的TCP/IP协议组件是一系列相互连接的协议,称为TCP/IP的核心协议。TCP/IP协议套件中的所有其他应用程序和其他协议都依赖于以下协议提供的基本服务:IP、ARP、ICMP、IGMP、TCP和UDP。
IP
IP是一种无连接、不可靠的数据报协议,主要负责主机之间的数据包寻址和路由。无连接意味着在交换数据之前不建立会话。不可靠意味着不能保证交货。IP总是尽“最大努力”传递数据包。IP数据包可能丢失、传送顺序错误、重复或延迟。IP不会尝试从这些类型的错误中恢复。对传送的数据包的确认和丢失数据包的恢复是更高层协议(如TCP)的责任。在RFC 791中定义了IP。
ARP
当IP数据包通过共享访问发送时,基于广播的网络媒体(如以太网或令牌环)必须解析与转发IP地址对应的媒体访问控制(MAC)地址。ARP使用MAC级别的广播将已知的转发或下一跳IP地址解析为其MAC地址。ARP是在RFC 826中定义的。
ICMP
Internet控制消息协议(ICMP)为无法传递的数据包提供故障排除功能和错误报告。例如,如果IP无法将数据包传递到目标主机,ICMP会向源主机发送一条destination Unreachable消息。
IGMP
互联网组管理协议(IGMP)是一种管理网段上IP多播组中主机成员资格的协议。IP多播组,也称为主机组,是一组主机,用于侦听指定IP多播地址的IP流量。IP多播流量被发送到单个MAC地址,但由多个IP主机处理。特定主机侦听特定的IP多播地址,并接收到该IP地址的所有数据包。
以下是IP多播的一些附加方面:
- 主机组成员身份是动态的,主机可以随时加入和离开该组。
- 主机组可以是任何大小。
- 主机组的成员可以跨越多个网络的IP路由器。这种情况需要IP路由器上的IP多播支持,以及主机向本地路由器注册其组成员资格的能力。主机注册是使用IGMP完成的。
- 主机可以向IP多播地址发送流量,而不属于相应的主机组。
对于要接收IP多播的主机,应用程序必须通知IP它将在指定的IP多播地址接收多播。如果网络技术支持基于硬件的多播,则网络接口被告知放弃特定IP多播地址的数据包。在以太网的情况下,网络适配器被编程为响应于与指定的IP多播地址相对应的多播MAC地址。
主机支持以下级别之一的IP多播:
- 级别0:不支持发送或接收IP多播流量。
- 级别1:支持发送但不接收IP多播流量。
- 级别2:支持发送和接收IP多播流量。Windows Server 2003、Windows 2000、Microsoft Windows NT 3.5版及更高版本,以及TCP/IP支持级别2的IP多播。
注册主机组信息的协议是IGMP,这在所有支持2级IP多播的主机上都是必需的。IGMP数据包使用IP报头发送。
IGMP消息有三种形式。
- 主机成员报告。当主机加入主机组时,它将IGMP主机成员身份报告消息发送到所有主机IP多播地址(224.0.0.1)或指定的IP多播位置,通过引用IP多播地点来声明其在特定主机组中的成员身份。主机还可以指定需要多播流量的特定来源。
- 主机成员身份查询。当路由器轮询网络以确保存在特定主机组的成员时,它会向所有主机的IP多播地址发送IGMP主机成员身份查询消息。如果在几次轮询之后没有接收到对轮询的响应,则路由器假定该网络在该组中没有成员资格,并停止向其他路由器通告该多播组信息。
- 集体休假。当主机不再对接收发送到特定IP多播地址的多播流量感兴趣,并且它发送了最后一个IGMP主机成员身份报告消息以响应IGMP主机会员身份查询时,它向特定IP多点播地址发送IGMP组离开消息。本地路由器验证发送IGMP Group Leave消息的主机是否是该子网上该多播地址的最后一个组成员。如果在多次轮询之后没有收到对轮询的响应,则路由器假定该子网在该组中没有成员资格,并停止向其他路由器通告该多播组信息。
对于跨互联网路由器的IP多播,路由器使用多播路由协议来传递主机组信息,以便每个支持多播转发的路由器都知道哪些网络包含哪些主机组的成员。IGMP是在RFC 1112和2236中定义的。
TCP(传输控制协议)
TCP是一种可靠的、面向连接的传递服务。数据是分段传输的。面向连接意味着必须先建立连接,然后主机才能交换数据。可靠性是通过为传输的每个段分配一个序列号来实现的。确认用于验证是否接收到数据。对于发送的每个段,接收主机必须在指定的时间段内返回接收字节的确认(ACK)。如果没有接收到ACK,则重新发送数据。TCP是在RFC 793中定义的。
TCP使用字节流通信,其中TCP段内的数据被视为没有记录或字段边界的字节序列。
TCP端口
TCP端口为TCP段的传递提供了一个特定的位置。1024以下的端口号是众所周知的端口,由互联网号码分配机构(IANA)分配。下表列出了一些众所周知的TCP端口。
TCP三方握手
TCP连接是通过三方握手初始化的。三方握手的目的是同步连接双方的序列号和确认号,并交换TCP窗口大小或使用大窗口大小或TCP时间戳。以下步骤概述了该过程:
- TCP连接的发起方(通常是客户端)向服务器发送TCP段,其中包含连接的初始序列号和指示客户端上用于存储来自服务器的传入段的缓冲区大小的窗口大小。
- TCP连接的响应方(通常是服务器)发回一个TCP段,该段包含其选择的初始序列号、对客户端序列号的确认以及指示服务器上用于存储来自客户端的传入段的缓冲区大小的窗口大小。
- 发起方向服务器发送一个TCP段,其中包含对服务器序列号的确认。
TCP使用类似的握手过程来结束连接。这保证了两个主机都已完成传输,并且已接收到所有数据。
UDP
UDP提供了一种无连接的数据报服务,它提供了不可靠的、尽最大努力传递消息中传输的数据。这意味着既不能保证数据报的到达,也不能保证所传递的数据包的正确排序。UDP不会通过重新传输从丢失的数据中恢复。UDP是在RFC 768中定义的。
UDP由不需要确认数据接收并且通常一次传输少量数据的应用程序使用。NetBIOS名称服务、NetBIOS数据报服务和SNMP是使用UDP的服务和应用程序的示例。
3 TCP/IP应用程序接口
对于以标准方式访问TCP/IP 核心协议提供的服务的应用程序,Windows Server 2003等网络操作系统提供了行业标准的应用程序编程接口(API)。API是由应用程序代码以编程方式调用以执行网络功能的函数和命令集。例如,连接到网站的Web浏览器应用程序需要访问TCP的连接建立服务。
Windows Sockets接口
Windows Sockets API是Windows Server 2003下的标准API,用于使用TCP和UDP的应用程序。写入Windows Sockets API的应用程序在许多版本的TCP/IP上运行。TCP/IP实用程序和SNMP服务是写入Windows Sockets接口的应用程序示例。
Windows Sockets提供的服务允许应用程序绑定到主机上的特定端口和IP地址,启动和接受连接,发送和接收数据,以及关闭连接。Sockets有两种类型:
- 流Sockets使用TCP提供双向、可靠、有序和不重复的数据流。
- 数据包Sockets使用UDP提供单向或双向数据流。
Sockets是由主机上的协议和地址定义的。地址的格式特定于每个协议。在TCP/IP中,地址是IP地址和端口的组合。两个Sockets(连接的每一端一个)形成双向通信路径。
要进行通信,应用程序指定协议、目标主机的IP地址和目标应用程序的端口。连接应用程序后,可以发送和接收信息。
NetBIOS接口
NetBIOS允许应用程序通过网络进行通信。NetBIOS定义了两个实体,一个会话级接口和一个会话管理和数据传输协议。
NetBIOS接口是用户应用程序向底层网络协议软件提交网络输入/输出(I/O)和控制指令的标准API。使用NetBIOS接口API进行网络通信的应用程序可以在支持NetBIOS接口的任何协议软件上运行。
NetBIOS还定义了一个在会话/传输级别起作用的协议。这是由底层协议软件(如NetBIOS帧协议NBFP——NetBEUI或TCP/IP上的NetBIOS(NetBT)的一个组件)实现的,它执行适应NetBIOS接口命令集所需的网络I/O。在RFC1001和1002中定义了TCP/IP上的NetBIOS。默认情况下启用NetBT,但是Windows Server 2003允许您在不包含基于NetBIOS的网络客户端或应用程序的环境中禁用NetBT。
NetBIOS为NetBIOS名称管理、NetBIOS数据报和NetBIOS会话提供命令和支持。