SCTP流控制进行数据传输控制的协议协议在IPv4中的协议号是134

本节详细介绍了 TCP/IP 中包括的协议雖然是一些概念性信息,但是您应该了解协议的名称还应该了解每种协议的作用。

"TCP/IP" 是一组网络协议常用的首字母缩略词这些协议组成叻 Internet 协议套件。许多文章都使用术语 "Internet" 来描述协议套件和全局广域网在本书中,"TCP/IP" 专指 Internet 协议套件"Internet" 是指广域网以及管理 Internet 的机构。

如果要将网络Φ的主机加入 Internet 域名系统 (Domain Name System, DNS)则必须获取并注册唯一的域名。InterNIC 通过一系列全球注册机构来协调域名注册有关 DNS 的更多信息,请参阅

协议层和開放系统互连模型

大多数网络协议套件的结构都由一系列层组成,有时统称为协议栈每一层都针对特定用途而设计,并且同时存在于发送系统和接收系统上一个系统上的某个特定层发送或接收的对象与另一个系统上的对等进程发送或接收的对象完全相同。这些活动的发苼与所考虑的层的上下层中的活动无关实际上,系统上每一层的活动都独立于同一系统上的其他层并且与其他系统上的同一层并行执荇操作。

模型介绍了网络活动的七层结构每个层都与一个或多个协议关联。对于协作网络间所有类型的数据传送这些层执行的数据传送操作相同。

OSI 模型列出了从顶层(第 7 层)到底层(第 1 层)的协议层下表显示了此模型。

表 1–1 开放系统互连参考模型

由每个人均可使用的標准通信服务和应用程序组成 

确保将信息以系统可识别的形式传送到接收系统。 

管理协作系统之间的连接和终止 

管理数据的传送,同時还确保收到的数据与传送的数据完全相同 

管理网络间的数据寻址和传送。 

处理网络介质间的数据传送 

定义网络硬件的特征。 

OSI 模型定義了并不特定于任何网络协议套件的概念性操作例如,OSI 网络协议套件可实现 OSI 模型的所有七个层TCP/IP 使用 OSI 模型的一些层,并且还会组合其他層其他网络协议(如 SNA)会添加第八层。

TCP/IP 协议体系结构模型

OSI 模型通过一系列协议描述了理想的网络通信TCP/IP 并不直接对应于此模型。TCP/IP 或者将幾个 OSI 层组合为一个层或者根本不使用某些层。下表显示了 Oracle Solaris : 实现的 TCP/IP 层该表列出了从最顶层(应用层)到最底层(物理网络层)的各层。

应用、会话、表示 

该表显示了 TCP/IP 协议层和 OSI 模型中的等效层另外,还显示了可用于 TCP/IP 协议栈各级别的协议的示例通信事务中涉及的每个系統都运行协议栈的唯一实现。

物理网络层指定要用于网络的硬件的特征例如,物理网络层可指定通信介质的物理特征TCP/IP 的物理层介绍了┅些硬件标准,如作为以太网网络介质规范的 IEEE 802.3 以及作为标准管脚连接器规范的 RS-232

数据链路层标识包的网络协议类型,在此实例中为 TCP/IP数据鏈路层还提供了错误控制和“成帧”。数据链路层协议的示例包括以太网 IEEE 802.2 成帧和点对点协议 (Point-to-Point Protocol, PPP) 成帧

协议及其关联的路由协议可能是整个 TCP/IP 套件中最重要的部分。IP 负责以下操作:

  • IP 寻址-IP 寻址约定是 IP 协议的一部分介绍了 IPv4 寻址,介绍了 IPv6 寻址

  • 主机到主机通信-根据接收系统的 IP 地址,IP 确定包必须采用的路径

  • 包格式设置-IP 将包组装到称为数据报的单元中。中全面介绍了数据报

  • 分段-如果包太大而无法通过网络介质進行进行数据传输控制的协议,则发送系统上的 IP 会将包分为较小的段然后,接收系统上的 IP 会将这些段重构为原始包

Oracle Solaris : 同时支持 IPv4 和 IPv6 寻址格式,这两种格式都在本书中进行了介绍为避免对 Internet 协议进行寻址时出现混淆,请使用以下约定之一:

  • 如果说明中使用了术语 "IP"则此说明既适用于 IPv4 又适用于 IPv6。

  • 如果说明中使用了术语 "IPv4"则此说明仅适用于 IPv4。

  • 如果说明中使用了术语 "IPv6"则此说明仅适用于 IPv6。

地址(长度为 32 位)协助 IP 將数据报定向到相应的接收系统。

可检测并报告网络错误情况ICMP 将报告以下情况:

  • 丢弃的包-到达速度太快而无法处理的包

  • 连接故障-无法连接到目标系统

  • 重定向-重定向发送系统,以便使用其他路由器

进行数据传输控制的协议层通过交换数据接收的确认信息并重新传送丢夨的包可确保包按顺序到达且不会出现错误。这种通信类型称为端对端此级别的进行数据传输控制的协议层协议栈包括进行数据传输控制的协议控制协议 (Transmission Control Protocol, TCP)、用户数据报协议 (User Datagram Protocol, UDP) 以及流控制进行数据传输控制的协议协议 (Stream Control

使用 TCP,应用程序可以像通过实际线路连接一样进行相互通信TCP 发送数据的形式类似于逐个字符进行传送,而不是以独立的包进行发送这种进行数据传输控制的协议由以下各项组成:

  • 按字节顺序進行的完整进行数据传输控制的协议

  • 结束点,用于关闭连接

TCP 会向传送的数据中附加一个头。此头包含许多参数可帮助发送系统上的进程连接到接收系统上的对等进程。

TCP 通过在发送主机和接收主机之间建立端对端连接确认包是否已到达其目的地。因此TCP 被视为一种“可靠的、面向连接的”协议。

SCTP 是一种可靠的、面向连接的进行数据传输控制的协议层协议它为应用程序提供的服务与 TCP 提供的服务相同。此外SCTP 还可以支持在具有多个地址或多宿主系统之间建立连接。发送系统和接收系统之间的 SCTP 连接称为关联关联中的数据组织成多个块。由於 SCTP 支持多宿主因此,某些应用程序(尤其是电信行业使用的应用程序)需要通过 SCTP 而不是 TCP 运行

可提供数据报传送服务,并且不会检验接收主机和发送主机之间的连接由于 UDP 不需要建立和验证连接,因此发送少量数据的应用程序可使用 UDP。

应用层定义了任何用户均可使用的標准 Internet 服务和网络应用程序这些服务与进行数据传输控制的协议层协同工作以发送和接收数据。存在多种应用层协议以下列表显示了应鼡层协议的示例:

  • 文件服务,如 NFS 服务

  • ftp 命令和 in.ftpd 守护进程使用 FTP,用户可以在本地主机的命令行中指定远程主机名和文件传送命令选项然后,远程主机上的 in.ftpd 守护进程会处理来自本地主机的请求与 rcp 不同,即使远程计算机没有运行基于 UNIX 的操作系统 ftp 仍会正常工作。除非远程系统巳配置为允许匿名 FTP否则,用户必须登录到远程系统以建立 ftp 连接

    服务器获取大量资料。大学和其他机构都设置了这些服务器以便向公囲域提供软件、研究论文和其他信息。登录到此类型的服务器时您可以使用登录名 anonymous,因此就有了术语“匿名 FTP 服务器”

    使用匿名 FTP 以及设置匿名 FTP 服务器并不在本手册的介绍范围之内。但是许多书籍(如《The Whole Internet User's Guide & Catalog》等)都详细介绍了匿名 FTP。有关使用 FTP 的说明请参见。 手册页介绍了通过命令解释程序调用的所有 ftp 命令选项 手册页介绍了由 in.ftpd 守护进程提供的服务。

  • Telnet-使用 Telnet 协议终端和面向终端的进程可以在运行 TCP/IP 的网络上進行通信。此协议在本地系统上作为 telnet 程序实现在远程计算机上则作为 in.telnetd 守护进程实现。Telnet 提供了一个用户界面通过此界面两台主机可进行逐字符或逐行通信。Telnet 包括一组命令 手册页对这些命令进行了全面介绍。

  • ftp 的功能但此协议不会建立 ftp 的交互式连接。因此用户无法列出目录内容或更改目录。用户必须知道要复制的文件的全名 手册页介绍了 tftp 命令集。

使用 UNIX "r" 命令用户可以在其本地计算机上发出将在远程主機上运行的命令。这些命令包括:

有关使用这些命令的说明请参见 、 和 手册页。

  • 地址服务提供主机名另外还可用作数据库进行邮件管悝。有关此服务的完整说明请参见。另请参见 手册页

  • /etc 文件-最初的基于主机的 UNIX 名称系统是为独立的 UNIX 计算机开发的,后来逐步演变为可鉯用于网络许多旧的 UNIX 操作系统和计算机仍在使用此系统,但是此系统并不适用于大型的复杂网络

  • NIS-网络信息服务 (Network Information Service, NIS) 是独立于 DNS 开发的,并苴其侧重点也稍有不同DNS 侧重于使用计算机名称而不是数字 IP 地址来简化通信,而 NIS 侧重于对各种网络信息进行集中控制来更好地管理网络NIS 存储有关计算机名称和地址、用户、网络本身以及网络服务的信息。NIS 名称空间信息存储在 NIS 映射中有关 NIS 体系结构和 NIS 管理的更多信息,请参見

目录服务器一起使用。名称服务和目录服务之间的区别在于功能范围不同目录服务不仅提供与名称服务相同的功能,而且还提供其怹功能请参见。

服务的完整信息请参见。

本章的焦点是进行数据传输控制嘚协议层:包括TCP、UDP、和SCTP(流控制进行数据传输控制的协议协议)SCTP是一个较新的协议,最初设计用于跨因特网进行数据传输控制的协议电話信令

应用层数据可以直接绕过进行数据传输控制的协议层直接使用IPv4或者IPv6,但这种技术(原始套接字)很少使用,不过在后续章节中还是會讲到

UDP是一个简单的、不可靠的数据报协议。TCP是一个复杂、可靠的字节流协议SCTP与TCP类似之处在于它也是一个可靠的数据报协议,但它还提供消息边界、进行数据传输控制的协议级别多宿支持以及将头端阻塞减少到最小的一种方法需要关注的几点:TCP的三路握手、TCP的链接终圵序列和TCP的TIME_WAIT状态,SCTP的思路握手和SCTP的链接终止加上由套接字层提供的TCP、UDP和SCTP缓冲区机制。

TCP/IP协议簇并不仅仅只有TCP、IP两种协议还有别的协议存茬,从右向左查看该图最右边的5个网络应用在使用IPv6,


最右边的tcpdump的网络应用可能是使用数据链路提供者接口直接与数据链路进行通信。从上圖可以看出来上层的应用程序,不管是自己写的应用程序还是系统提供的程序几乎所有(tcpdump除外)都是通过中间层(已经处于内核里)嘚不同协议和底层的数据链路层进行交互。中间层的协议有TCP UDP ICMP IGMP 这也就照应了概述中说的TCP/IP协议簇不仅仅只有TCP和UDP协议。

TCP是中面向链接的协议為用户进程提供可靠的全双工字节流。TCP套接字是一种流套接字TCP关心确认、超时和重传之类的细节。TCP既可以使用IPv4,又可以使用IPv6

UDP是一种无连接嘚协议UDP套接字是一种数据报套接字。UDP数据报不能保证最终到达他们的目的地IPv4和IPv6都可以使用。

SCTP是一个提供可靠全双工关联的面向连接的協议SCTP是多宿的,从而每个关联的两端均涉及一组IP地址和一个端口号TCP既可以使用IPv4,又可以使用IPv6

ICMP处理在路由器和主机之间流通的错误和控制消息。这些消息通常有TCP/IP网络支持软件本身(而不是用户进程)产生和处理不过图中展示的ping和tracerroute程序同样适用ICMP。

ARP把一个IPv4地址映射成一个硬件哋址(如以太网地址)ARP通常用于注入以太网、令牌环网和FDDI等广播网络,在点到点网络上并不需要

三、用户数据报协议(UDP)

应用进程往┅个UDP套接字写入一个消息,该消息随后被封装到一个UDP数据报该UDP数据报进而被封装到一个IP数据报,然后发送到目的地UDP不保证UDP数据会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保证不变也不保证每个数据报只到达一次。它的重要特点就是缺乏可靠性如果數据报到达了其最终目的地,但是校验和检测发现有错误或者改数据报在网络进行数据传输控制的协议中被丢弃了,它就无法被投递给UDP套接字也不会被源端自动重传。如果想保证一个数据报到达其目的地可以往应用程序中添加特性:来自对端的确认、本段的超时与重傳等。

每个UDP数据报都有一个长度如果一个数据报正确到达目的地,那么数据报的长度将随数据一道传递给接受端的应用进程而TCP是一个芓节流协议,没有任何记录边界这一点不同与UDP.

UDP提供无连接服务,因为UDP客户与服务器之间不必存在任何长期的关系举例说明,一个UDP客户鈳以创建一个套接字并发送一个数据报给一个给定的服务器然后立即用同一个套接字大宋另一个数据报给另一个服务器。同样一个UDP服務器可以用通一个UDP套接字从若干个不用的客户接受数据报,每个客户一个数据报

四、进行数据传输控制的协议控制协议(TCP)

TCP首先和服务器建立连接,还提供了可靠性当TCP向另一端发送数据时,它要求对端但会一个确认如果没有确认,TCP就自动重传数据并等待更长时间在數次重传失败后,TCP才放弃如此尝试发送数据上所化的总时间一般为4~10分钟。

1) TCP的几个能力首先能够估算客户和服务器之间的往返时间(RTT)

TCP给进行数据传输控制的协议的数据加上序号,并对所发送的数据进行排序如果接收端TCP接受到雷子对端的重复数据,它可以判定数据时充当的从而丢弃。如果数据非顺序到达接收端TCP将先根据他们的需要重新排序。还提供流量控制TCP总是告知对端在任何时刻它一次能够從对端接受对少字节的数据,称为通告窗口任何时刻,该窗口指出接受缓冲区当前可用的空间量从而保证发送端发送数据不会使接受緩冲区溢出。该窗口时刻动态变化也有可能为0

3) TCP连接是全双工的,意味着在一个给定的连接上应用可以在任何时刻在进入方向上既可以發送数据由接受数据建立一个全双工连接后,需要的话可以把它转换成一个单工连接

4) UDP可以是全双工的

五、流控制进行数据传输控制嘚协议协议(SCTP)

SCTP在客户和服务器之间提供关联,并像TCP那样给应用提供可靠性、排序、流量控制以及全双工的数据传送SCTP中使用“关联”一詞取代“连接”是为了避免这样的的内涵:一个连接只涉及两个IP地址之间的通信。一个关联指代两个系统之间的一次通信它可鞥因为SCTP支歭多宿而涉及不止两个地址。

与TCP不同的是SCTP是面向消息的(TCP是面向字节的)。和UDP一样由发送端写入的每条记录的长度随数据一道传递给接受端应用。

SCTP能够在所连接的端点之间提供多个流每个流各自可靠地按序递送消息。一个流上某个消息的丢失不会阻塞通一个关联其他鋶上消息的投递这个做法和TCP相反,TCP字节丢失将阻塞连接上其后所有数据的递送直到该丢失被恢复为止。

六、TCP连接的建立和终止

1) 服务器准备好接受外来的连接使用socket、bind、listen这三个函数使套接字称为被动套接字,称为被动打开

2) 客户通过connect连接固定IP固定端口的套接字这导致愙户TCP发送一个SYN分节,它告诉服务器客户讲在连接中发送的数据的初始序列号通常SYN分节不携带数据。

3) 服务器确认(ACK)客户的SYN同时自己吔得发送一个SYN分节,它含有服务器在同一连接中发送的数据的初始化序列号服务器在单个分节中发送SYN和对客户SYN的ACK(确认)。

4) 客户必须確认服务器的SYN

客户的初始序列号为J,服务器的初始序列为KACK中的确认号是发送这个ACK的一端所期待的下一个序列号。

一个例子很好的说明TCP建立连接的过程:

建立TCP连接就好比一个电话系统socket函数等同于有电话可用、bind函数是在告诉别人你的电话号码,这样他们可以呼叫你listen函数昰打开电话振铃,这样当有一个外来呼叫到达时你就可以听到。connect函数要求我们知道对方的电话号码并拨打它accept函数发生在被呼叫的人应答电话之时,由accept返回客户的表示(既客户的IP地址和端口号)类似于让电话机的呼叫者ID功能部件显示呼叫者的电话号码然而两者的不同之處在于accept只在连接建立之后返回客户的标识,而呼叫者ID功能部件却在我们选择应答或不应答电话之前显示呼叫者的电话号码

每一个SYN可以含囿多个TCP选项:

1)MSS选项。发送SYN的TCP一端使用本选项通告对端它的最大分节大小也就是他在本连接的每个TCP分节中愿意接受的最大数据量。发送端TCP使用接收端的MSS作为所发送分节的最大大小

2)窗口规模选项。TCP连接任何一端能够通告对端的最大窗口大小为65535因为在TCP首部中响应的字段棧16位。

3)时间戳选项这个选项对于高速网络是必要的,它可以防止由失而复得的分组可能造成的数据损坏

1)TCP建立一个连接需要3个分节,终止一个连接则需要4个字节某个应用进程首先调用close,我们称该端执行主动关闭,该端的TCP于是发送一个FIN分节表示数据发送完毕。

2)接受箌这个FIN的对端执行被动关闭这个FIN有TCP确认。它的接受也作为一个文件结束符传递给接受端应用进程(放在已排队等候该应用进程接受的任哬其他数据之后)因为FUN的接受一位这接受端应用进程在响应连接上再无额外数据可接受。

3)接受待这个文件结束符的应用进程将调用close关閉它的套接字这道指它的TCP也发送一个FIN。

4)接受这个最终FIN的原发送端TCP(既执行主动关闭的那一端)确认这个FIN

既然每个方向都需要一个FIN和┅个ACK,因此通常需要4个分节


在步骤2与步骤3之间,从执行别动关闭一端到执行主动关闭一端流动数据时可能的这称为半关闭,使用函数shutdown

当套接字被关闭时,其所在端TCP各自发送一个FIN上图指出,这是由应用进程调用close而发生的不过需要认识到,当一个UNIX进程无论资源帝(调鼡exit或从main函数返回)还是非自愿地(收到一个终止本进程的信号)终止时所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也發出一个FIN

无论是客户还是服务器,任何一端都可以执行主动关闭通常情况是客户执行主动关闭,但是某些协议却由服务器执行主动关閉

TCP为一个连接定义11种状态。


例如:当某个应用进程在CLOSED状态下执行主动打开时TCP将发送一个SYN,且新的状态是ESTABLISHED

自ESTABLISHED状态引出的两个箭头处理連接的终止。如果某个应用进程在接受到一个FIN之前调用close(主动关闭)那就转换到FIN_WAIT_1状态。如果某个应用进程在ESTABLISHED状态期间接受到一个FIN(被动關闭)那就转换到CLOSE_WAIT状态。

我们用粗线实线表示通常的客户状态转换用粗虚线表示通常的服务器状态转换。

在讲解着个重要的状态之前需要看下TCP连接的到断开的全部过程。这个过程和上图结合之后可以更深入了解

从上图得知的东西,本例中的客户通告一个值为536的MSS(表奣客户只实现了最小重组缓冲区大小)服务器通告一个值为1460的MSS(以太网上IPv4的典型值),不同方向上MSS值不相同不成问题一旦建立练级额,客户就构造一个请求并发送给服务器这里假设该请求适合于单个TCP分节(既请求大小小于服务器通告的值为1460字节的MSS)服务器处理请求并發送一个应答,假设该应答适合于单个分节(小于536字节)

服务器对客户的请求的确认是伴随其应答发送的,这种做法称为捎带

随后展礻的是终止连接的4个分节。执行主动关闭的那一端(本例中为客户)就是下面讨论的TIME_WAIT状态

1) 此状态存在的理由

可靠地实现TCP全双工连接的終止

允许老的重读分节在网络中消失

假设上图中最后一个ACK丢失。服务器将重新发送它的最终那个FIN因此客户必须维护状态信息,以允许他偅新发送最中那个ACK说明了为什么执行主动关闭的那一端是处于TIME_WAIT状态的那一端,因为可能不得不重传最终那个ACK的就是那一端

对于第二个悝由,我们假设通一个IP和端口之间有一个TCP连接我们关闭这个连接,过一端时间后在相同的IP地址和端口号之间建立另一个连接后一个连接成为前一个连接的化身,因为他们的IP地址和端口号相同TCP必须防止来自某个连接的老的重复分组在该连接已经中国知网后再现,从而被誤解成同一个连接的某个新的化身为做到这一点,TCP将不给处于TIME_WAIT状态的链接发起新的化身既然TIME_WAIT状态的持续时间是MSL的2倍,这就足以让某个方向上的分组最多存货MSL秒被丢弃另一个方向上的应答最多存货MSL秒也被丢弃。

其实这个状态存在的原因在为了上述所说的两个理由可以归結为两句话:

万一在最中确认连接中断时服务器的ACK回应丢失怎么办这样就必须再次重传FIN。

万一在极短的时间内从新有一个相同套接字连接建立怎么办这样就必须为刚才的数据做处理

IPV4数据报的最大大小事65535字节,包括IPV4首部关于其首部在后续章节讲述。

许多网络有一个可由硬件规定的MTU举例来说,以太网的MTU是1500字节

两个主机之间的路径中最小的MTU称为路径MTU。1500字节的以太网MTU是当今常见的路径MTU

当一个IP数据报将从某个接口送出时,如果它的大小超过相应链路的MTUIPV4和IPV6都将执行分片

TCP有一个MSS,用于向对端TCP通告对端在每个分节中能发送的最大TCP数据量看到過SYN分解上的MSS选项。MSS的目的是告诉对端其重组缓冲区大小的实际值从而避免分节。MSS经常设置成MTU减去IP和TCP首部的固定长度在以太网中使用IPV4的MSS徝为1460,使用IPV6的MSS值为1440(两者的TCP首部都是20资金额但是IP首部相差20字节)。在TCP的MSS选项中MSS值是一个16位的字段,限定其最大值为65535.额对于IPV4是适合的洇为IPV4数据报中的最大TCP数据量为减去IPV4首部的20字节和TCP首部的20字节)

每一个TCP套接字有一个发送缓冲区,我们可以使用SO_SNDBUF套接字选项来更改穿冲去的大尛当某个应用进程调用write时,内核从该应用进程的缓冲区中复制所有数据到缩写套接字的发送缓冲区如果该套接字的发送缓冲区容不下該应用进程的所有数据(或是应用进程的缓冲区大于套接字的发送缓冲区,或是套接字的发送缓冲区已有其他数据)该应用进程将被投叺睡眠。这里假设该套接字时阻塞的它是通常的默认设置。内核将不从write系统调用返回直到应用进程缓冲区中的所有数据都复制到套接芓发送缓冲区。从写一个TCP套接字的write或应用进程成功返回仅仅表示我们可以重新使用原来的应用缓冲区并不表明对端的TCP或应用进程已接收箌数据。

其实UDP套接字没有发送缓冲区任何UDP套接字都有发送缓冲区大小,不过它仅仅是可写到该套接字的UDP数据报的大小的上限如果一个應用进程写一个大于套接字发送缓冲区大小的数据报,内核将返回进程一个EMSGSIEZE错误既然UDP是不可靠的,它不必保存应用进程数据的一个副本因此无需一个真正的发送缓冲区。如果某个UDP应用进程发送大数据报(比如2000字节的数据报)那么他们相比TPC应用数据更有可能被分片,因為TCP会把应用数据划分成MSS大小的块而UDP却没有对等的手段。

从写一个UDP套接字的WRITE调用成功返回表示所写的数据报或其所有片段已被加入数据链蕗层的输出队列如果该对垒没有足够的空间存放该数据报或它的某个片段,内核通常会返回一个ENOBUFS错误给他的应用进程

这个的输出和TCP的輸出相似

我要回帖

更多关于 进行数据传输控制的协议 的文章

 

随机推荐