网络和现代通信技术基础 —— 传输层网络和现代通信技术基础 —— 传输层第 7章 传输层本章主要讲解有关传输层的一些概念和基础知识 。 通过本章的学习,读者要知道传输协议 ( Transport Protocol) 是整个网络体系结构中的关键技术之一,还要了解传输层位于网络层与应用层之间,其主要功能是负责应用程序之间的通信,主要有连接端口管理,流量控制,错误处理,数据重发等工作 。 本章应重点掌握和理解以下内容:
l 掌握有关端口和插口的概念,作用和使用方法
l 掌握关于 TCP协议的基础知识
l 了解 UDP协议的基础知识网络和现代通信技术基础 —— 传输层
7.1.1 传输层概述传输层位于网络体系结构的第四层,如果将其上的各层均作为应用层,则传输层直接与上层应用层进行数据通信,是整个网络体系结构的核心部分 。 需要注意的是在通信子网中没有传输层,它只存在于通信子网以外的各主机中,如果将整个网络体系结构从网络功能和用户功能角度来划分,传输层不包括在网络功能部分,而是属于用户功能层的最低层 。
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.1 传输层概述
7.1 传输层提供的服务应用层数据链路层网络层传输层物理层网络功能用户功能传输层的位置网络和现代通信技术基础 —— 传输层
7.1.2 提供给高层的服务传输层的最终目标是利用网络层提供的服务向其用户 ( 一般是应用层的进程 ),提供有效,可靠且价格合理的服务 。 其主要任务是:在优化网络服务的基础上,从源端机到目的端机提供可靠的,价格合理的数据传输,使高层服务用户在相互通信时不必关心通信子网实现的细节,即与所使用的网络无关 。 所以在通信子网内的各个交换节点以及连接各通信子网的路由器中,
都没有传输层 。
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.2 提供给高层的服务例如,设两台计算机主机 A和主机 B要进行数据通信,如图 7-2所示,在计算机 A和计算机 B上同时有两个应用程序在运行,每对应用程序需要通过两个互连的网络才能进行数据通信,如主机 A上的应用程序 AP1要和主机 B上的应用程序 AP3进行通信,数据传输的过程如图 7-3所示:
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.2 提供给高层的服务网 络 1 网 络 2
A P 1
A P 2
A P 3
A P 4
图 7-2 多进程通信情况
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.2 提供给高层的服务图 7-3 应用程序进行数据通信的过程应 用 层传 输 层网 络 层数 据 链 路 层物 理 层应 用 层传 输 层网 络 层数 据 链 路 层物 理 层物 理 介 质 物 理 介 质 物 理 介 质
A P 1 A P 3
端 到 端 通 信通信子网
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.2 提供给高层的服务由上图可以看出数据在两台主机间传送的整个过程,
在物理层上可以透明地传输数据的比特流;在数据链路层上使得各条链路能传送无差错的数据帧(数据帧按顺序、无丢失、不重复);在网络层上提供了路由选择和网络互连的功能,使得主机 A发送的数据段能够按照合理的路由到达主机 B。但是在这一过程中,到达主机 B的数据并不一定是最可靠的,为了提高网络服务的质量,
在传输层需要再次优化网络服务,并向高层用户屏蔽通信子网的细节,使高层用户看见的就好像在两个传输层实体之间有一条端到端的、可靠的、全双工的通信通路一样。
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.2 提供给高层的服务在整个通信的过程中,数据在传输层上,才是第一次实现真正意义的端到端的数据通信 。
要想实现传输层的功能,必须在主机中装有传输层协议,
此协议一般都可支持多个进程的连接。如上述例子中,
它同时支持了两对应用进程进行通信。在传输层中完成传输功能的硬件和软件被称为传输实体 TSAP( Transport
Service Access Point),通过传输实体,传输层可以向应用层提供传输服务
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.2 提供给高层的服务传 输 层 实 体 传 输 层 实 体应 用 层应 用 层
T S A PT S A P
N S A P N S A P
传 输 层 协 议主 机 A 主 机 B
传 输 层 服务 用 户传 输 服 务提 供 者图 7-4 传输层与其上下层之间的关系
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.3 TCP/IP协议中的传输层在 TCP/IP协议中有两个并列的协议,UDP和 TCP。
UDP( User Datagram Protocol,用户数据报协议 ) 是面向无连接的,即在进行数据传输之前不需要建立连接,
而目的主机收到数据报后也不需要发回确认 。 这种协议提供了一种高效的传输服务 。
TCP( Transmission Control Protocol,传输控制协议 ) 是面向连接的,即在进行数据传输之前需要先建立连接,
而且目的主机收到数据报后要发回确认信息 。 这种协议提供了一种可靠的传输服务 。 与 UDP相比提供了较多的功能,但是相对的报文格式和运行机制也较为复杂 。
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.4 端口
TCP/IP传输层可以通过协议端口 ( protocol port,简称端口 ) 来标识通信的应用进程 。 传输层就是通过端口与应用层的应用程序进行信息交互的,应用层各种用户进程通过相应的端口与传输层实体进行信息交互 。 端口实际上是一个 16Bit长的地址,范围可以从 0至 65535。 将 0至
1023端口号称为熟知端口 ( Well-Known Port),其余
1024至 65535端口号称为一般端口或 ( 动态 ) 连接端口
( Registered/Dynamic),在数据传输过程中,应用层中的各种不同的服务器进程不断地检测分配给它们的端口,
以便发现是否有某个应用进程要与它通信 。
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.4 端口各端口的意义
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.4 端口协议 端口号 关键字 描述
UDP 42 NAMESERVER 主机名字服务器
UDP 53 DOMAIN 域名服务器
UDP 67 BOOTP Client 客户端启动协议服务
UDP 68 BOOTP Server 服务器端启动协议服务
UDP 69 TFTP 简单文件传输协议
UDP 111 RPC 微系统公司 RPC
TCP 20 FTP Data 文件传输服务器 ( 数据连接 )
TCP 21 FTP Control 文件传输服务器 ( 控制连接 )
TCP 23 Telnet 远程终端服务器
TCP 25 SMTP 简单邮件传输协议
TCP 80 HTTP 超文本传输协议
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.4 端口
I P = 1 2 6,4 5,2 1,5 1
I P = 1 2 4,3 3,1 3,5 5
I P = 1 2 5,3 5,8 9,1 0
端 口
2 0 0
端 口
2 0 1
端 口
2 0 0
端 口
2 5
A
B
C
连 接 1
连 接 2
连 接 3
通过 SMTP进行通信的主机
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.1.4 端口 为了使得多主机多进程通信时,不至于发生上述的混乱情况,必须把端口号和主机的 IP地址结合起来使用,称为插口或套接字 ( Scoket) 。 由于主机的 IP地址是唯一的,这样目的主机就可以区分收到的数据报的源端机了 。
插口包括 IP地址( 32位)和端口号( 16位),共
48位。如上图 6-6所示:( 124.33.13.55,200)和
( 126.45.21.51,25)就是一对插口,在整个 Internet中,
在传输层上进行通信的一对插口都必须是唯一的。在上述的例子中,使用的是 TCP协议,若使用 UDP协议,
虽然在进行通信的进程间不需要建立连接,但是在每次传输数据时,都要给出发送端口和接收端口,因此同样也要使用插口。
7.1 传输层提供的服务网络和现代通信技术基础 —— 传输层
7.2 传输控制协议 TCP
TCP是 TCP/IP体系中的传输层协议,是面向连接的,因而可以提供可靠的全双工信息服务。在数据传输的过程中,
应用层的数据报传送到传输层后,加上 TCP首部,就构成了
TCP的数据传送单位,称为报文段( Segment),在发送的时候作为 IP数据报的数据。加上 IP首部后成为 IP数据报;在接收的时候,网络层将 IP数据报的 IP首部去掉后上交给传输层,
得到 TCP报文段,传输层再将 TCP首部去掉,然后上交给应用层,得到应用层所需要的报文段网络和现代通信技术基础 —— 传输层
7.2.1 TCP报文的格式
7.2 传输控制协议 TCP
网络和现代通信技术基础 —— 传输层
7.2.1 TCP报文的格式
7.2 传输控制协议 TCP
1.源端口号和目的端口号各占 16位,2个字节,分别标识连接两端的两个通信的应用进程
2.发送序号占 32位,4个字节,TCP的序号编号是对每一个字节进行编号,因此在这个字段中给出的数字是本报文段所发送的数据部分的第一个字节的序号
3.接收序号又称作确认序号,占 32位,4个字节,确认序号指的是期望收到对方下次发送的数据报的第一个字节的序号,也就是期望收到的下一个报文段的首部中的发送序号,同时确认以前收到的报文 。
网络和现代通信技术基础 —— 传输层
7.2.1 TCP报文的格式
7.2 传输控制协议 TCP
4.数据偏移占 4位,此字段指出在 TCP数据报内实际的数据到 TCP报文段的起始位置的距离,实际上就是整个 TCP报文段首部的长度 。 数据偏移字段存储的数值的单位是 32位的字 。
5.保留字段与标志位占 6位,设置的值为 0,供功能扩展使用,新的 TCP版本有些位已被启用 。
标志位,共有 6个,每个占 1位,
( 1)紧急比特位( URG),( 2)确认比特( ACK),( 3)紧迫比特
( PSH),( 4)重建比特( RST),( 5)同步比特( SYN),( 6)终止比特( FIN)
网络和现代通信技术基础 —— 传输层
7.2.1 TCP报文的格式
7.2 传输控制协议 TCP
6.窗口占 2字节,设置的值为发送方接收窗口的大小,单位为字节
7.检验和占 2字节,用来检验首部和数据部分以及伪首部之和
8.紧急指针与紧急比特配合使用处理紧急情况,指出在本报文段中的紧急数据的最后一个字节的序号网络和现代通信技术基础 —— 传输层
7.2.1 TCP报文的格式
7.2 传输控制协议 TCP
9.选项和填充
TCP首部可以有多达 40字节的可选信息。此字段为可变部分,它们用来将附加信息传递给目的站,或用来将其它选项对齐。 TCP定义了两类选项:
一字节选项和多字节选项网络和现代通信技术基础 —— 传输层
7.2.2 TCP的编号与确认在 TCP报文段首部含有确认序号字段,通过它可以完成
TCP报文的确认,具体的确认是对接收到的数据的最高序号进行确认,返回的确认序号是已经收到的数据的最高序号加 1。 由于 TCP采用全双工的通信方式,因此进行通信的每一方都不必专门发送确认报文段,可以在传送数据的同时进行确认,这种方式称为捎带确认 。
7.2 传输控制协议 TCP
网络和现代通信技术基础 —— 传输层
7.2.3 TCP的流量控制机制两用户进程间的流量控制和链路层两相邻结点间的流量控制类似,都要防止快速的发送数据时超过接收者的能力,采用的方法都是基于滑动窗口的原理 。 但是链路层常采用固定窗口大小,而传输层则采用可变窗口大小和使用动态缓冲分配 。
在 TCP报文段首部的窗口字段写入的数值就是当前设定的接收窗口的大小 。 假设发送端要发送的数据为 8个报文段,每个报文段的长度为 100个字节,而此时接收端许诺的发送窗口为 400个字节,
具体情况如下图所示:
7.2 传输控制协议 TCP
网络和现代通信技术基础 —— 传输层
7.2.3 TCP的流量控制机制滑动窗口机制
7.2 传输控制协议 TCP
网络和现代通信技术基础 —— 传输层
7.2.3 TCP的流量控制机制
7.2 传输控制协议 TCP
发送端 接收端网络和现代通信技术基础 —— 传输层
7.2.3 TCP的流量控制机制实际上实现流量控制并非仅仅为了使得接收方来得及接收而已,还要有控制网络拥塞的作用 。 比如接收端正处于较空闲的状态,而整个网络的负载却很多,
这时如果发送方仍然按照接收方的要求发送数据就会加重网络负荷,由此会引起报文段的时延增大,使得主机不能及时地收到确认,因此会重发更多的报文段,
更加剧了网络的阻塞,形成恶性循环 。 为了避免发生这种情况,主机应该及时地调整发送速率 。
7.2 传输控制协议 TCP
网络和现代通信技术基础 —— 传输层
7.2.3 TCP的流量控制机制发送端主机在发送数据时,既要考虑到接收方的接收能力,也要考虑网络目前的使用情况,发送方发送窗口大小应该考虑以下几点:
( 1) 通知窗口 ( advertised window),这是接收方根据自己的接收能力而确定的接收窗口的大小 。
( 2) 拥塞窗口 ( congestion window),这是发送方根据目前网络的使用情况而得出的窗口值,也就是来自发送方的流量控制 。
当中最小的一个最为适宜,即:
发送窗口 =Min[通知窗口,拥塞窗口 ]
进行拥塞控制,Internet标准推荐使用三种技术,即慢启动 ( slow-start),加速递减 ( multiplicative
decrease) 和拥塞避免 ( congestion avoidance) 。
网络和现代通信技术基础 —— 传输层
7.2.4 TCP的差错控制
7.2 传输控制协议 TCP
1.差错检测和纠正
TCP中的差错检测是通过三种简单工具来完成的:检验和、确认和超时。
每一个报文段都包括检验和字段,用来检查受到损伤的报文段;若报文段受到损伤,就由目的 TCP将其丢弃。 TCP使用确认的方法来证实收到了某些报文段,它们已经无损伤地到达了目的 TCP。 TCP不使用否认。
若一个报文段在超时截止期之前未被确认,则被认为是受到损伤或已丢失。
网络和现代通信技术基础 —— 传输层
7.2.4 TCP的差错控制
7.2 传输控制协议 TCP
2.受损伤的报文段图 7-15所示为一个受损伤的报文段到达目的站。
网络和现代通信技术基础 —— 传输层
7.2.4 TCP的差错控制
7.2 传输控制协议 TCP
3.丢失的报文段对于一个丢失的报文段。这与受损报文段的情况完全一样。
4.重复的报文段当含有同样序号的分组作为另一个收到的报文段到达时,目的 TCP丢弃这个分组。
5.失序的报文段对失序的报文段不确认,直到收到所有它以前的报文段为止网络和现代通信技术基础 —— 传输层
7.2.4 TCP的差错控制
7.2 传输控制协议 TCP
6.丢失的确认网络和现代通信技术基础 —— 传输层
7.2.5 TCP的重发机制
7.2 传输控制协议 TCP
在传输层中,TCP确认到达的时间概率分布不是很集中,所以确定超时重发的时间就很困难 。 TCP采用了一种自适应算法来计算重发超时时间 。 这种算法把每次每个报文段发出的时间和收到此报文段确认的时间都记录下来,两时间之差称为报文段的往返时延 。 针对所有发送正确的报文段的往返时延进行加权平均,得到报文段的平均往返时延
RT,而将 TCP测量该往返时延所用的时间设为 M,根据得到的时延,按照下列公式进行计算修正的 RT:
RT=α RT+( 1-α ) M
式中,α是修正因子,一般取值为 7/8。
网络和现代通信技术基础 —— 传输层
7.2.5 TCP的重发机制
7.2 传输控制协议 TCP
1988年,Jacobson提出一种动态的确定超时重发时间的方法,他提出 β
的变化要与确认到达时间的概率密度函数的标准偏差大致成比例,并建议采用平均偏差作为对标准偏差的粗略估计 。 在这种算法中,需要保存另一个修正因子 D( 偏差值 ),按照下列公式进行新的计算:
D=αD+( 1-α) |RT-M|
这时得到的 D值与上面的 RT值相比,更加令人满意 。 但是当数据段重发,
并确认到达后,不清楚确认是针对先发的数据段还是对重发的数据段进行的,如果只是进行凭空的猜测将导致对数据的严重破坏 。
网络和现代通信技术基础 —— 传输层
7.2.6 TCP的传输连接管理
1,TCP连接的建立第一次握手:源端机发送一个带有本次连接序号的请求 。
第二次握手:目的主机收到请求后,如果同意连接,
则发回一个带有本次连接序号和源端机连接序号的确认 。
第三次握手:源端机收到含有两次初始序号的应答后,
再向目的主机发送一个带有两次连接序号的确认。
7.2 传输控制协议 TCP
网络和现代通信技术基础 —— 传输层
7.2.6 TCP的传输连接管理
TCP协议中连接建立的过程网络和现代通信技术基础 —— 传输层
7.2.6 TCP的传输连接管理
2,连接的释放第一次握手:由进行数据通信的任意一方提出要求释放连接的请求报文段 。
第二次握手:接收端收到此请求后,会发送确认报文段,同时当接收端的所有数据也都已经发送完毕后,接收端会向发送端发送一个带有其自己序号的报文段 。
第三次握手:发送端收到接收端的要求释放连接的报文段后,发送反向确认 。
网络和现代通信技术基础 —— 传输层
7.2.6 TCP的传输连接管理主 机 A 主 机 B
F I N,S E Q = x ①
A C K = x + 1 ②
F I N,S E Q = y,A C K = x + 1 ③
A C K = y + 1 ④
TCP连接的释放过程网络和现代通信技术基础 —— 传输层
*7.3 一个 TCP/IP数据包实例为了读者便于理解,我们在网上捕获了一个数据包,学习时可以对照曾经讲过的 TCP/IP各层数据报的格式来阅读下面的数据例子 。 在分析这个例子的时候,请注意以下几个方面:
( 1) 网络上传输的数据包是逐层封装的
( 2) 数据包是从最底层开始分析的
( 3) 数据的下面,是分层对协议报头各字段的分析 。
网络和现代通信技术基础 —— 传输层
*7.3 一个 TCP/IP数据包实例数据包实例:
00 03 0f ff ba f1 02 e0 3b e8 6c 13 08 00 45 00
05 a8 19 1b 40 00 77 06 ad f1 d3 61 a8 af d2 1f
e9 12 00 50 0c cc 20 d9 04 4c d6 20 e3 fe 50 10
fe f2 39 89 00 00
协议分析:
Frame 1 ( 1462 on wire,1462 captured)
Arrival Time,Apr 27,2004 15:37:08.310024000
Frame Number,1
Packet Length,1462 bytes
Capture Length,1462 bytes
网络和现代通信技术基础 —— 传输层
*7.3 一个 TCP/IP数据包实例
Ethernet II
00 03 0f ff ba f1 ;Destination,00:03:0f:ff:ba:f1
02 e0 3b e8 6c 13 ;Source,02:e0:3b:e8:6c:13
08 00 ;Type,IP ( 0x0800)
Internet Protocol,Src Addr,( 211.97.168.175),Dst Addr,lao-ji ( 210.31.233.18)
45 ;Version,4 ( 0100B);Header length,20 bytes ( 0101B)
00 ;Differentiated Services
Field,Default;
ECN,0x00) 0000 00.,= Differentiated Services Codepoint,Default ( 0x00)
....,.0,= ECN-Capable Transport ( ECT),0
....,..0 = ECN-CE,0
05 a8 ;Total Length,1448
19 1b ;Identification,0x191b
网络和现代通信技术基础 —— 传输层
*7.3 一个 TCP/IP数据包实例
4 ;Flags,0x04
.1.,= Don't fragment,Set
..0,= More fragments,Not set
0 00 ;Fragment offset,0
77 ;Time to live,119
06 ;Protocol,TCP ( 0x06)
ad f1 ;Header checksum,0xadf1 ( correct)
d3 61 a8 af ;Source,211.97.168.175 ( 211.97.168.175)
d2 1f e9 12 ;Destination,lao-ji ( 210.31.233.18)
网络和现代通信技术基础 —— 传输层
*7.3 一个 TCP/IP数据包实例
Transmission Control Protocol,Src Port,http ( 80),Dst Port,3276 ( 3276),Seq:
551093324,Ack,3592479742
00 50 ;Source port,http ( 80)
0c cc ;Destination port,3276 ( 3276)
20 d9 04 4c ;Sequence number,551093324;Next sequence number,551094732
d6 20 e3 fe ;Acknowledgement number,3592479742
5 ;Header length,20 bytes
网络和现代通信技术基础 —— 传输层
*7.3 一个 TCP/IP数据包实例
010 ;Flags,0x0010 ( ACK)
0...,..,= Congestion Window Reduced ( CWR),Not set
.0..,..,= ECN-Echo,Not set
..0.,..,= Urgent,Not set
...1,..,= Acknowledgment,Set
...,0..,= Push,Not set
....,0.,= Reset,Not set
....,.0,= Syn,Not set
....,..0 = Fin,Not set
fe f2 ;Window size,65266
39 89 ;Checksum,0x3989 ( correct)
00 00 ;Urgent
网络和现代通信技术基础 —— 传输层
*7.3 一个 TCP/IP数据包实例
Hypertext Transfer Protocol
Data ( 1408 bytes)
0000 e8 92 31 1e 01 18 5c 47 36 ff d3 a7 03 93 2a 42,.1...\G6.....*B
0010 19 db 4c 01 f8 8f 97 95 fe e6 ee c1 13 2f e0 ee,.L........../..
( 数据略 )
网络和现代通信技术基础 —— 传输层
7.4 用户数据协议 UDP
7.4.1 UDP数据报的格式数 据首 部数 据首 部源 端 口 号 目 的 端 口 号 长 度 检 验 和伪 首 部源 I P 地 址 目 的 I P 地 址 填 充 域 0 1 7 U D P 长 度字 节 4 4 1 1 2
U D P 数 据 报
I P 数 据 报字 节 22 2 21 2
网络和现代通信技术基础 —— 传输层
7.4 用户数据协议 UDP
7.4.2 UDP的工作原理由于 UDP提供的是一种面向无连接的服务,它并不保证可靠的数据传输,不具有确认、重发等机制,而是必须靠上层应用层的协议来处理这些问题。 UDP相对于 IP协议来说,
唯一增加的功能是提供对协议端口的管理,以保证应用进程间进行正常通信。它和对等的 UDP实体在传输时不建立端到端的连接,而只是简单地向网络上发送数据或从网络上接收数据。并且,UDP将保留上层应用程序产生的报文的边界,即它不会对报文合并或分段处理,这样使得接收方收到的报文与发送时的报文大小完全一致。
网络和现代通信技术基础 —— 传输层
7.4.2 UDP的工作原理此外,一个 UDP模块必须提供产生和验证检验和的功能,但是一个应用程序在使用 UDP服务时,
可以自由选择是否要求产生检验和 。 当一个 IP模块在收到由 IP传来的 UDP数据报后,首先检验 UDP
检验和 。 如果检验和为 0,表示发送方没有计算检验和 。 如果检验和非 0,并且检验和不正确,
则 UDP将丢弃这个数据报 。 如果检验和非 0,并且正确,则 UDP根据数据报中的目标端口号,将其送给指定应用程序等待排队 。
7.4 用户数据协议 UDP