Internet 传输层协议 snmp使用的传输层协议
3.1 引言
Internet 在传输层有两种主要的协议:一种是面向连接的协议 TCP ,一种是无连接的协议 UDP 。由于 UDP 基本上是在 IP 的基础上增加一个短的报头而得到的,比较简单,因此本章将先介绍 UDP ,然后再重点介绍 TCP 。
在TCP/IP 协议簇中, IP 提供在主机之间传送数据报的能力,每个数据报根据其目的主机的 IP 地址进行在 Internet 中的路由选择。传输层协议为应用层提供的是进程之间的通信服务。为了在给定的主机上能识别多个目的地址,同时允许多个应用程序在同一台主机上工作并能独立地进行数据报的发送和接收, TCP/UDP 提供了应用程序之间传送数据报的基本机制,它们提供的协议端口能够区分一台机器上运行的多个程序。
也就是说, TCP/UDP 使用 IP 地址标识网上主机,使用端口号来标识应用进程,即 TCP/UDP 用主机 IP 地址和为应用进程分配的端口号来标识应用进程。端口号是 16 位的无符号整数, TCP 的端口号和 UDP 的端口号是两个独立的序列。尽管相互独立,如果 TCP 和 UDP 同时提供某种知名服务,两个协议通常选择相同的端口号。这纯粹是为了使用方便,而不是协议本身的要求。利用端口号,一台主机上多个进程可以同时使用 TCP/UDP 提供的传输服务,并且这种通信是端到端的,它的数据由 IP 传递,但与 IP 数据报的传递路径无关。网络通信中用一个三元组可以在全局唯一标志一个应用进程:
(协议,本地地址,本地端口号)
这样一个三元组,叫做一个半相关( half-association ),它指定连接的每半部分。一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,不可能通信的一端用 TCP 协议,而另一端用 UDP 协议。因此一个完整的网间通信需要一个五元组来标识:
(协议,本地地址,本地端口号,远地地址,远地端口号)
这样一个五元组,叫做一个相关( association ),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。
端口号的分配是一个重要问题。有两种基本分配方式:第一种叫全局分配,这是一种集中控制方式,由一个公认的中央机构根据用户需要进行统一分配,并将结果公布于众。第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回一个本地唯一的端口号,进程再通过合适的系统调用将自己与该端口号联系起来(绑扎)。 TCP/UDP 端口号的分配中综合了上述两种方式。 TCP/UDP 将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。因此,每一个标准服务器都拥有一个全局公认的端口(即周知口, well-known port ),即使在不同机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。表 3-1 列出了常用的 TCP/UDP 周知端口号。
表 3-1 常用周知端口号列表
端口号
协议
关键词
UNIX 关键词
描述
1
TCP
TCPMUX
-
TCP 复用器
7
TCP/UDP
ECHO
echo
回送
9
TCP/UDP
DISCARD
discard
丢弃
15
TCP/UDP
-
netstat
网络状态程序
20
TCP
FTP-DATA
ftp-data
文件传输协议(数据)
21
TCP
FTP
ftp
文件传输协议
22
TCP/UDP
SSH
ssh
安全 Shell 远程登录协议
23
TCP
TELNET
telnet
远程登录
25
TCP
SMTP
smtp
简单邮件传输协议
37
TCP/UDP
-
time
时间
42
TCP/UDP
NAMESERVER
name
主机名字服务器
43
TCP/UDP
NICNAME
whois
是谁
53
TCP/UDP
DOMAIN
nameserver
域名服务器
67
UDP
BOOTPS
bootps
引导协议服务器
68
UDP
BOOTPC
bootpc
引导协议客户
69
UDP
TFTP
tftp
简单文件传送协议
79
TCP
FINGER
finger
Finger
80
TCP
HTTP
http
超文本传输协议
88
TCP
KERBEROS
kerberos
Kerberos 协议
93
TCP
DCP
-
设备控制协议
101
TCP
HOSTNAME
hostnames
NIC 主机名字服务器
110
TCP
POP3
pop3
邮局协议版本 3
111
TCP/UDP
SUNRPC
sunrpc
Sun Microsystems RPC
119
TCP
NNTP
nntp
USENET 新闻传送协议
123
UDP
NTP
ntp
网络时间协议
139
TCP
NETBIOS-SSN
-
NETBIOS 会话协议
161
UDP
-
snmp
简单网络管理协议
162
UDP
-
snmp-trap
SNMP 陷阱
389
TCP
LDAP
ldap
轻量目录访问协议
443
TCP
HTTPS
https
安全 HTTP 协议
513
UDP
-
who
UNIX rwho daemon
514
UDP
-
syslog
系统日志
525
UDP
-
timed
UNIX time daemon
546
TCP
DHCP-CLIENT
dhcp-client
动态主机配置协议客户
547
TCP
DHCP-SERVER
dhcp-server
动态主机配置协议服务器
TCP 是一种有连接的传输服务,它提供可靠的传输,是大部分 Internet 应用的基础。 UDP 提供的是一种无连接服务,每个数据包独立传输,在传统的应用中因为不能像 TCP 那样保证数据的可靠传输而应用较少。但是对于新的实时视频、音频数据的传输来说,因为不能容忍 TCP 重传带来的时延,常常建立在 UDP 之上。 UDP 为互联网上实时视频、音频服务提供了极好的实验环境。
3.2 用户数据报协议 UDP
UDP(User Datagram Protocol) 是一个简单的面向数据报的传输层协议,进程的每个输出操作都正好产生一个 UDP 数据报,并组装成一份待发送的 IP 数据报。 UDP 不提供可靠性,它把应用程序传给 IP 层的数据发送出去,但是并不保证它们能到达目的地。应用程序必须关心 IP 数据报的长度。如果它超过网络的 MTU ,那么就要对 IP 数据报进行分片。 RFC 768 [Postel 1980] 是 UDP 的正式规范。
3.2.1 UDP 报文格式
每个 UDP 报文成为一个用户数据报,分 UDP 报头和 UDP 数据区两部分。报头由四个 16 位长的字段组成,分别说明该报文的源端口、目的端口、报文长度以及校验和。 UDP 报文格式如图 3-1 所示。
0
16 31
UDP 源端口
UDP 目的端口
UDP 报文长度
UDP 校验和
数据
…
图 3-1 UDP 报文格式
UDP 源端口字段和目的端口字段包含了 16 位的 UDP 协议端口号,表示发送进程和接收进程。 UDP 长度字段指的是 UDP 报头和 UDP 数据的字节长度,该字段的最小值为 8 字节(发送一份 0 字节的 UDP 数据报是可以的)。 UDP 检验和覆盖 UDP 报头和 UDP 数据。 UDP 和 TCP 在报头中都有覆盖它们报头和数据的检验和。 UDP 的检验和是可选的,如果该字段值为 0 表明不进行校验。一般来说,使用校验和字段是必要的。
3.2.2 UDP 的封装与协议的分层
在第 1 章介绍的 TCP/IP 协议层次结构模型中(参见图 1-3 ), UDP 位于 IP 层之上。应用程序访问 UDP 层,然后使用 IP 层传送数据报,如图 3-2 所示。
将 UDP 层放在 IP 层之上,表示一个 UDP 报文在 Internet 中传输时要封装到 IP 数据报中。最后,网络接口层将数据包封装到一个帧中再进行物理传输通道上的传输。封装过程如图 3-3 所示。
概念性层次
UDP 报头
UDP 数据区
应用
用户数据报( UDP )
IP 报头
IP 数据区
互联网( IP )
网络接口
帧头
帧数据区
图 3-2 分层模型中的 UDP 层
图 3-3 UDP 的封装
由图可知, IP 层的报头指明了源主机和目的主机的地址,而 UDP 层的报头指明了主机上的源端口和目的端口。 IP 层和 UDP 层之间的职责是清楚而明确的: IP 层指负责在 Internet 上的一对主机之间进行数据传输,而 UDP 层只负责对一台主机上的复用的多个源端口或目的端口进行区分。
3.2.3 UDP 的复用、分解与端口
UDP 也提供复用和分解的功能。它接收多个应用程序送来的数据报,把它们送给 IP 层区传输,同时它接受 IP 层送来的 UDP 数据报,把它们送给对应的应用程序。
从概念上讲,所有的 UDP 软件与应用程序之间的复用和分解都要通过端口机制来实现。实际上每个应用程序在发送数据报之前必须与操作系统进行协商以获得协议端口和相应的端口号。凡是利用指定的端口发送数据报的应用程序都要把端口号放入 UDP 报文中的源端口字段中。
UDP 的分解操作如图 3-4 所示, UDP 从 IP 层接收了数据报之后,根据 UDP 的目的端口号进行分解操作。
3.3 传输控制协议 TCP
TCP(Transfer Control Protocol) 是专门设计用于在不可靠的 Internet 上提供可靠的、端到端的字节流通信的协议。 Internet 不同于一个单独的网络,不同部分可能具有不同的拓扑结构、带宽、延迟、分组大小以及其它特性。 TCP 被设计成能动态满足 Internet 的要求,并且足以健壮地面对多种出错。 RFC 793 [Postel 1981] 是 TCP 的正式规范。
3.3.1 可靠的数据流传输
UDP 提供的服务是不可靠的数据传送服务,当传送过程中出现差错、网络软件发生故障或网络负载太重时,分组可能会丢失,数据可能被破坏。这就需要应用程序负责进行差错检测和恢复工作,对传输数据量很大的应用来说,采用这种不可靠的数据传输是不合适的。因此需要有一种可靠的数据流传输方法,这就是 TCP 。 TCP 提供的可靠传输服务有如下五个特征:面向数据流:当两个应用程序传输大量数据时,将这些数据当作一个可划分为字
节的比特流。在传输时,在接收方收到的字节流与发送方发出的完全一样。 虚电路连接:在传输开始之前,接收应用程序和发送应用程序都要与操作系统进行交互,双方操作系统的协议软件模块通过在互联网络上传送报文来进行通信,进行数据传输的准备与建立连接。通常用“虚电路”这个术语来描述这种连接,因为对应用程序来说这种连接好像是一条专用线路,而实际上是由数据流传输服务提供的可靠的虚拟连接。 有缓冲的传输:使用虚电路服务来发送数据流的应用程序不断地向协议软件提交以字节为单位的数据,并放在缓冲区中。当累积到足够多的数据时,将它们组成大小合理的数据报,再发送到互联网上传输。这样可提高传输效率,减少网络流量。当应用程序传送特别大的数据块时,协议软件将它们划分为适合于传输的较小的数据块,并且保证在接收端收到的数据流与发送的顺序完全相同。 无结构的数据流: TCP/IP 协议并未区分结构化的数据流。使用数据流服务的应用程序必须在传输数据前就了解数据流的内容,并对其格式进行协商。 全双工连接: TCP/IP 流服务提供的连接功能是双向的,这种连接叫做全双工连接。对一个应用程序而言,全双工连接包括了两个独立的、流向相反的数据流,而且这两个数据流之间不进行显式的交互。全双工连接的优点在于底层协议软件能够在与送来数据流方向相反方向的数据流中传输控制信息,这种捎带的方式降低了网络流量。 TCP 采用一种名为“带重传功能的肯定确认( positive acknowledge with retransmission )”的技术作为提供可靠数据传输服务的基础。这项技术要求接收方收到数据之后向源站回送确认信息 ACK 。发送方对发出的每个分组都保存一份记录,在发送下一个分组之前等待确认信息。发送方还在送出分组的同时启动一个定时器,并在定时器的定时期满而确认信息还没有到达的情况下,重发刚才发出的分组。图 3-5 表示带重传功能的肯定确认协议传输数据的情况,图 3-6 表示分组丢失引起超时和重传。为了避免由于网络延迟引起迟到的确认和重复的确认,协议规定在确认信息中稍带一个分组的序号,使接收方能正确将分组与确认关联起来。
3.3.2 滑动窗口概念
从图 3-5 可以看出,虽然网络具有同时进行双向通信的能力,但由于在接到前一个分组的确认信息之前必须推迟下一个分组的发送,简单的肯定确认协议浪费了大量宝贵的网络带宽。为此, TCP 使用滑动窗口的机制来提高网络吞吐量,同时解决端到端的流量控制。
滑动窗口技术是简单的带重传的肯定确认机制的一个更复杂的变形,它允许发送方在等待一个确认信息之前可以发送多个分组。如图 3-7 所示,发送方要发送一个分组序列,滑动窗口协议在分组序列中放置一个固定长度的窗口,然后将窗口内的所有分组都发送出去;当发送方收到对窗口内第一个分组的确认信息时,它可以向后滑动并发送下一个分组;随着确认的不断到达,窗口也在不断的向后滑动。
图 3-7 (a) 窗口内包括 8 个分组的滑动窗口协议
(b) 收到对 1 号分组的确认信息后,窗口滑动,使得 9 号分组也能被发送
滑动窗口协议的效率与窗口大小和网络接收分组的速度有关。图 3-8 表示了一个窗口大小为 3 的的滑动窗口协议软件的动作示意图。发送方在收到确认之前就发出了三个分组,在收到第一个分组的确认 ACK1 后,又发送了第四个分组。比较图 3-5 和图 3-8 ,就可以看出使用滑动窗口后网络吞吐量的提高。实际上,当窗口大小等于 1 时,滑动窗口协议就等同于简单的肯定确认协议。通过增加窗口大小,可以完全消除网络的空闲状态。在稳定的情况下,发送方能以网络传输分组的最快能力来发送分组。
图 3-8 使用窗口大小为 3 的滑动窗口协议传输分组示例
3.3.3 TCP 报文格式
两台计算机上的 TCP 软件之间传输的数据单元称为报文段。 TCP 通过报文段的交互来建立连接、传输数据、发出确认、通告窗口大小以及关闭连接。 TCP 报文分为两部分,前面是报头,后面是数据。报头的前 20 个字节格式是固定的,后面是可能的选项,数据长度最大为 65535 – 20 – 20 = 65495 字节,其中第一个 20 指 IP 头,第二个 20 指 TCP 头。不带任何数据的报文也是合法的,一般用于确认和控制报文。图 3-9 给出了 TCP 报文的布局格式。每个字段的意义简介如下:
0
31
源端口( source port )号
目的端口( destination port )号
顺序号( sequence number )
确认号( acknowledgement number )
TCP 报头长度
保留
URG
ACK
PSH
RST
SYN
FIN
窗口大小( window size )
校验和( checksum )
紧急指针( urgent pointer )
选项+填充( 0 或多个 32 位字)
数据( 0 或多个字节)
图 3-9 TCP 报头格式
源端口号( 16 位):它(连同源主机 IP 地址)标识源主机的一个应用进程。 目的端口号( 16 位):它(连同目的主机 IP 地址)标识目的主机的一个应用进程。这两个值加上 IP 报头中的源主机 IP 地址和目的主机 IP 地址唯一确定一个 TCP 连接。 顺序号( 32 位):用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。如果将字节流看作在两个应用程序间的单向流动,则 TCP 用顺序号对每个字节进行计数。序号是 32bit 的无符号数,序号到达 2 32 - 1 后又从 0 开始。当建立一个新的连接时, SYN 标志变 1 ,顺序号字段包含由这个主机选择的该连接的初始顺序号 ISN ( Initial Sequence Number )。 确认号( 32 位):包含发送确认的一端所期望收到的下一个顺序号。因此,确认序号应当是上次已成功收到数据字节顺序号加 1 。只有 ACK 标志为 1 时确认序号字段才有效。 TCP 为应用层提供全双工服务,这意味数据能在两个方向上独立地进行传输。因此,连接的每一端必须保持每个方向上的传输数据顺序号。 TCP 报头长度( 4 位):给出报头中 32bit 字的数目,它实际上指明数据从哪里开始。需要这个值是因为任选字段的长度是可变的。这个字段占 4bit ,因此 TCP 最多有 60 字节的首部。然而,没有任选字段,正常的长度是 20 字节。 保留位( 6 位):保留给将来使用,目前必须置为 0 。 控制位( control flags , 6 位):在 TCP 报头中有 6 个标志比特,它们中的多个可同时被设置为 1 。依次为: URG :为 1 表示紧急指针有效,为 0 则忽略紧急指针值。 ACK :为 1 表示确认号有效,为 0 表示报文中不包含确认信息,忽略确认号字段。 PSH :为 1 表示是带有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。 RST :用于复位由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1 的报文,那么一定发生了某些问题。 SYN :同步序号,为 1 表示连接请求,用于建立连接和使顺序号同步( synchronize )。 FIN :用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流。 窗口大小( 16 位):数据字节数,表示从确认号开始,本报文的源方可以接收的字节数,即源方接收窗口大小。窗口大小是一个 16bit 字段,因而窗口大小最大为 65535 .. 字节。 校验和( 16 位):此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。 紧急指针( 16 位):只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。 选项:最常见的可选字段是最长报文大小,又称为 MSS(Maximum Segment Size) 。每个连接方通常都在通信的第一个报文段(为建立连接而设置 SYN 标志的那个段)中指明这个选项,它指明本端所能接收的最大长度的报文段。选项长度不一定是 32 位字的整数倍,所以要加填充位,使得报头长度成为整字数。 数据: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。
3.4 TCP 连接建立与关闭
TCP 是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本节将详细讨论一个TCP 连接是如何建立的以及通信结束后是如何终止的。
3.4.1 建立一个 TCP 连接
TCP使用三次握手 ( three-way handshake ) 协议来建立连接,图 3-10 描述了三次握手的报文序列。这三次握手为:
请求端(通常称为客户)发送一个 SYN 报文段( SYN 为 1 )指明客户打算连接的服务器的端口,以及初始顺序号( ISN )。 服务器发回包含服务器的初始顺序号的 SYN 报文段( SYN 为 1 )作为应答。同时,将确认号设置为客户的 ISN 加 1 以对客户的 SYN 报文段进行确认( ACK 也为 1 )。 客户必须将确认号设置为服务器的 ISN 加 1 以对服务器的 SYN 报文段进行确认( ACK 为 1 ),该报文通知目的主机双方已完成连接建立。
发送第一个 SYN 的一端将执行主动打开( active open ),接收这个 SYN 并发回下一个 SYN 的另一端执行被动打开( passive open )。另外, TCP 的握手协议被精心设计为可以处理同时打开( simultaneous open ),对于同时打开它仅建立一条连接而不是两条连接。因此,连接可以由任一方或双方发起,一旦连接建立,数据就可以双向对等地流动,而没有所谓的主从关系。
三次握手协议
更多阅读
鼠标右键无法使用的解决方法 鼠标右键无法复制粘贴
我们在操作电脑的时候经常会发现我们的鼠标右键无法使用,遇到这种情况大多数网友会采取更换鼠标来解决,但是问题依旧存在。这多数是由于我们的鼠标右键被锁死导致的。鼠标右键无法使用的解决方法——工具/原料系统注册表鼠标右键无
WIN7系统下1394采集卡无法使用的解决方法 1394采集卡win10驱动
WIN7系统下1394采集卡无法使用的解决方法——简介 DV摄像机一般采用1394采集卡来进行采集,使用软件会声会影居多,当然同三维系列1394采集卡都能直接兼容EDUIS、PR等软件。1394采集卡是无需手动安装驱动即插即用。 但是WIN7系统下
mp4视频格式转换器怎么使用的? xv视频格式转换器mp4
mp4视频格式转换器怎么使用的?——简介mp4格式作为当下非常流行的主流视频格式,被众多数码设备及播放器所兼容,但视频格式何其多,所以视频格式转换就成为多媒体应用中不可或缺的部分。我们既然要花时间来转换视频格式,当然希望转换之后的
迅游加速怎么免费用 迅游无限免费使用的方法 迅游加速器无限体验
迅游加速怎么免费用 迅游无限免费使用的方法——简介迅游如何免费领取激活码实现免费使用资格呢?相信各位网络游戏玩家对于迅游这款网游加-速-器并不陌生。对于网络环境极差或网游高-峰期,利用迅游可实现良好的网游加速功能。可是该款
Internet信息服务找不到的解决办法 精 找不到internet时间
Internet信息服务找不到的解决办法 精——简介最近我的电脑也出现了Internet信息服务找不到的情况,在网络上查了很多方法都没一个正确的,后面通过下面的方法我成功了,故此我把这个经历也分享给大家,希望能够帮到您。控制面板里“->添加