第 四 章
TCP/IP协议
Zhang Dongyan TCP/IP Protocols 2
TCP/UDP协议
?传输层协议
– TCP/IP协议栈中独立的一层
– 在概念上位于应用层和 IP层之间
?传输层协议的功能
– 标识发送和接收数据的应用程序
– 选择性的提供如下功能
? 可靠性
? 流量控制
? 拥塞控制
– 并不是所有的传输协议都提供上述功能
Zhang Dongyan TCP/IP Protocols 3
网络层协议与传输层协议对比
?IP
– 提供的是主机之间的通信
– 源地址和目的地址是主机的地址
– 称为, machine-to-machine”
?传输协议
– 提供应用程序之间的通信
– 需要有扩展的寻址机制来标识应用程序
– 称为, end-to-end”
Zhang Dongyan TCP/IP Protocols 4
TCP/UDP协议
?两个传输协议
– Transmission Control Protocol (TCP)
– User Datagram Protocol (UDP)
?User Datagram Protocol (UDP)
– 一种不可靠的、以数据报为中心的传输协

?Transmission Control Protocol (TCP)
– 为应用程序提供了可靠的面向连接的传输
服务
Zhang Dongyan TCP/IP Protocols 5
?用户数据报协议
?为那些不需要 (或不使用 )TCP所提供的
面向连接服务的应用协议提供了低开销
的传输服务
?经常使用广播或多播的应用程序以及
那些需要快速的请求和查询周转时间的
应用程序使用 UDP
User Datagram Protocol (UDP)
Zhang Dongyan TCP/IP Protocols 6
User Datagram Protocol (UDP)
?一种不可靠的、以数据报为中心的传
输协议
– 类似于发明信片
?具有最小的
– 费用
– 计算量
– 通信量
?可以同时给多个应用程序发送信息
– TCP只能是两个
Zhang Dongyan TCP/IP Protocols 7
有限的可靠性
?不可靠的无连接是 UDP的, 特性, 而不是
,问题,
– 相对 TCP,具有低的开销
? 发送广播信息
? 需要轻便的请求和响应的程序
– 自身不提供任何纠错和重发服务
? 使用 UDP的应用程序具有一定的错误纠正功能
? 继承底层协议 (数据链路协议 )所提供的现有的可靠性
? 目前大部分网络拓扑非常可靠
? 提供了校验和服务 (可选的 )
– 仍然是不可靠的,应用层协议需要有相应的可靠
性机制,如 TFTP
Zhang Dongyan TCP/IP Protocols 8
UDP数据区UDP头部
0 63
控制码源端口 目的端口
0 15 16 31 32 63
长度 校验和
32 47 48 63
服务端口号,如
Email 为 25,DNS为 53
数据报的长度
UDP报文段
Zhang Dongyan TCP/IP Protocols 9
UDP端口
?UDP必须提供两个基本的服务
– 为应用程序提供在 IP软件上发送数据的方法
– 为它从 IP接收到的数据提供返回到需要这个信息
的应用程序的方法
?通过一种 multiplexing/demultiplexing(多
路技术 )的概念来实现
– 16位端口号
– 每个应用程序从 UDP分配专门的端口号,以便在输
入和输出数据时使用
Zhang Dongyan TCP/IP Protocols 10
协议端口
?服务器
– 一般使用 well-known端口
– 通常相同的服务有相同的端口
– 端口号数字较低
?客户端
– 从协议软件获得没有使用的端口
– 端口号数字较高
Zhang Dongyan TCP/IP Protocols 11
协议端口的例子
?域名服务器使用端口 53提供域名解析服务
?应用程序使用端口 28900访问服务器
?从应用程序发往 DNS服务器的 UDP数据报中
– 源端口号 28900
– 目的端口号 53
?DNS 服务器返回的应答 UDP数据报中
– 源端口号 53
– 目的端口号 28900
Zhang Dongyan TCP/IP Protocols 12
Multiplexing与端口号
Zhang Dongyan TCP/IP Protocols 13
TFTP客户发送到 TFTP服务器的数据
Zhang Dongyan TCP/IP Protocols 14
Zhang Dongyan TCP/IP Protocols 15
UDP的应用
Zhang Dongyan TCP/IP Protocols 16
Transmission Control Protocol (TCP)
?为应用程序提供可靠的面向连接的传输服务
?在一个 TCP连接中,仅有两方进行彼此通信,
?两个应用程序通过 TCP连接交换 8bit字节构
成的字节流。 TCP不在字节流中插入记录标
识符。
?TCP对字节流的内容不作任何解释。 TCP不知
道传输的数据字节流是二进制数据、还是
ASCII字符或者其他类型数据。
?对字节流的解释由 TCP连接双方的应用层解
释。
Zhang Dongyan TCP/IP Protocols 17
TCP报文段
?TCP把数据流看作字节序列,传输时把这个字
节序列分为若干段 (Segment),每个段被放入
IP数据报中传送
?是 TCP软件之间传输的数据单元,用来
– 建立连接
– 传输数据
– 发出确认、通告窗口的大小
– 关闭连接
– 等等
Zhang Dongyan TCP/IP Protocols 18
TCP报文段
TCP数据区TCP头部
控制码源端口 目的端口
0 15 16 31 32 159
顺序号 应答号 段头长 码位 校验和 紧急指针
32 63 64 95 96 99 100 127 128 143 144 159
窗口保留 标志
100 105 106 111 112 127
服务端口号,如
Email 为 25,Web为 80
分组序号,用于
还原时指示顺序
指示下一个要接
收的分组号,其表明
在此之前接收均成功
指示 TCP报头长
度,以 32位为单位
指示后续哪
个字节开始
是紧急数据1、紧急指针域有效
2、确认域有效
3,PUSH位有效
4、用于复位
5、同步序号
6、释放连接
指示接收方的
接收缓冲区可
接收的分组数
Zhang Dongyan TCP/IP Protocols 19
Transmission Control Protocol (TCP)
?可靠传输的必要性
– 可靠性是计算机系统的基础
– IP协议提供不可靠的无连接的数据包传
递服务
? 数据包可能丢失、乱序、重复
– 如何提供可靠性?–带重发的肯定确认
(Positive acknowledgement
retransmission)
? 要求接收方收到数据后向源站返回确认信息
ACK,如果发送方计时器超时没有收到 ACK,则
重发数据包
Zhang Dongyan TCP/IP Protocols 20
重发和确认
发信息 1
设定时器 收信息 1
发确认 1
收确认 1
发信息 2
设定时器
超时
重发信息 2
设定时器
发确认 2
收信息 2
主机 2主机 1
包丢失
Zhang Dongyan TCP/IP Protocols 21
重发和确认的一些问题
?确认的种类
– 肯定的确认 -ACK
– 否定的确认 -NAK
?重发
– 由延迟引起
– 数据包和 ACK都可能重复 !
? 需要利用序号加以区分
?计时器的等待时间
– LAN和 WAN延迟不同,延迟始终在变化中
– 为确定一个包的丢失等待足够长的时间,但决不
会比必须等待的时间长
Zhang Dongyan TCP/IP Protocols 22
重发计时器的动态变化
Zhang Dongyan TCP/IP Protocols 23
可靠传输服务的特性 (1)
?面向数据流
– 把两个应用程序之间传输的数据看作字节

?虚电路连接
– 通信的两端建立虚电路
? 可靠的连接建立
? 完美的连接终止
– 与打电话类似
Zhang Dongyan TCP/IP Protocols 24
可靠传输服务的特性 (2)
?带缓冲的传送
– 应用程序可以使用各种大小的数据片来发送
– 接收端接收次序与发送次序相同
– 协议软件可以将数据片根据需要分成若干段 (与
数据片大小无关 )并负责组装成合适大小的数据
报发送
– Push机制用来实现强迫的发送
Zhang Dongyan TCP/IP Protocols 25
可靠传输服务的特性 (3)
?无结构的数据流
?全双工的连接
– 包括两个独立的、方向相反的数据流
Zhang Dongyan TCP/IP Protocols 26
TCP特性总结
?TCP提供了一个完全可靠的、面向连接
的、全双工的流传输服务,允许两个应
用程序建立一个连接,并在任何一个方
向上发送数据,然后终止连接。
?每一个 TCP连接可靠地建立、完美地终
止,在终止发生前所有数据都会被可靠
地传送。
Zhang Dongyan TCP/IP Protocols 27
滑动窗口
?简单的带重发的肯定确认浪费大量的带宽
?滑动窗口 (slide window)技术
– 允许发送方在等待一个确认返回之前可以发送多
个包
– 为了区分,需要为发出的每一个包编号
– 发送窗口,发送方可以一次连续发送的包的个数
– 接收窗口,接收方可以一次连续接收的包的个数
发送方
接收方
Zhang Dongyan TCP/IP Protocols 28
滑动窗口示意图
Zhang Dongyan TCP/IP Protocols 29
端口、连接和端点
?TCP使用端口号来标识主机上的多个目的进程
?TCP连接
– 用一对端点来表示
– 端点,一对整数 (IP地址,端口号 ),如
(128.10.2.3,25),也称为套接字 (Socket)
– 如两台计算机的 TCP连接可以定义成
(18.26.0.36,1069)和 (128.10.2.3,25)
– 多个连接可以共享一个端点,如 HTTP服务
– 与 UDP的端口多路复用不同,TCP可以通过套接字对
区分发送到相同端口的不同连接
Zhang Dongyan TCP/IP Protocols 30
端口、连接的例子
Zhang Dongyan TCP/IP Protocols 31
TCP超时与重发
?TCP面对互联网的环境
– 报文段送到目的地的时间和确认信息返回
所需的时间存在显著变化
– 如何设定确认计时器?
– 太短导致频繁的重发
?早期的缺省计时器为 200ms,对于卫
星线路太短
– 太长则延迟太大
?Modem缺省为 3000ms,对于 LAN来说延
迟太大
Zhang Dongyan TCP/IP Protocols 32
TCP的自适应重发算法
?估计平均往返时间 (Round Trip Time)
– 收集每个报文段的 RTT,得到平均往返时
间 RTT
– 利用新的样本 SampleRTT逐步修改
RTTRTT = x*OLD_RTT + (1-x)*
SampleRTT
– x,代表了对延迟变化的敏感程度
?RTT=0.875*OLD_RTT+0.125*SampleRTT
?设置超时时间
– Timeout=β *RTT,β >1,最初推荐 β =2
Zhang Dongyan TCP/IP Protocols 33
快速重传- fast retransmit
?收到一个失序的报文段,TCP立即产生一个
ACK(一个重复的 ACK)。
?重复的 ACK的目的在于让对方知道收到一个
失序的报文段,并告诉对方自己希望收到的
序号。
?如果是一些报文段的重新排序,则只可能产
生 1-2个重复的 ACK。
?若一连串收到 3个或 3个以上的重复 ACK,就
非常可能是一个报文段丢失。
?应该重传丢失的报文段,而无需等待超时定
时器溢出。
Zhang Dongyan TCP/IP Protocols 34
快速重传- fast retransmit
Zhang Dongyan TCP/IP Protocols 35
TCP的拥塞控制
?端对端的拥塞控制
?通过拥塞窗口来限制主机发送到连接上的流量样本
?任何时候主机发送的数据量 ≤ min(CongWin,RcvWin)
?基本策略
– 理想情况下用尽可能快的速度发送报文段
– 同时增加拥塞窗口的大小直到出现报文段丢失
– 出现丢失后,减少拥塞窗口大小,正常后再重复上
述过程
?有以下几种技术
– 慢启动 slow-start
– 拥塞避免 congestion avoidance
– 加速递减 multiplicative decrease
Zhang Dongyan TCP/IP Protocols 36
慢启动 slow-start
?每次开始新的连接或
拥塞之后增加流量时
– 拥塞窗口初始为 1
个报文段,1个 RTT
后增加为 2个段 ;2
个 RTT后增加为 4个
段,等等
?实际上并不慢
?建议初始拥塞窗口为
2个报文段
Zhang Dongyan TCP/IP Protocols 37
拥塞避免 congestion avoidance
?当拥塞窗口增加到一
个阈值 (threshold)时,
其增长速度由指数级
变为线性增长
– 此后每收到一个
ACK,拥塞窗口只增
加一个段
– 假定窗口到 16个报
文段会发生拥塞,
因此,设定阈值为
8,拥塞窗口初始
值为 1
Zhang Dongyan TCP/IP Protocols 38
加速递减 multiplicative decrease
?一旦发现丢失报文段,立即将拥塞窗口大小
减少一半 (最小值为 1个报文段 ),同时对于保
留在发送窗口的报文段,重发计时器时限加

?用来迅速而显著地减少流量
Zhang Dongyan TCP/IP Protocols 39
提高 TCP的性能
?慢启动、加速递减、拥塞避免、对延
迟变化的测量、快速重传等技术结合在
一起可以在不明显增加协议软件开销的
情况下显著提高 TCP的性能,2-10倍
Zhang Dongyan TCP/IP Protocols 40
TCP连接的建立与中止
?三次握手 3way handshake
– 通信双方彼此之间交换三次信息
– 已经证明
?在存在包丢失、重复和延迟的情况下。
确保通信双方信息交换确定性的充要条
件是三次握手 !
Zhang Dongyan TCP/IP Protocols 41
建立连接
? 说明
– CR建立连接的请求
– ACC同意建立连接
– REJ拒绝连接
? 目的:不会出现过时的 CR,ACC、或其他可能引起协议失败的
组合,也不会无故地建立无人要求的连接
Zhang Dongyan TCP/IP Protocols 42
释放连接
?两种方式
– 对称释放,将连接
按照两个独立的单
向连接来处理,要
求每一方分别释放
连接
– 非对称释放,一方
结束后,连接即告
中断,类似于打电
话,但是可能导致
数据丢失。
Zhang Dongyan TCP/IP Protocols 43
对称释放的问题 -两军问题
?蓝军之间只能通过派人步行通过白军阵地传
递消息
– 该人可能牺牲、被俘、叛变、顺利通过等等
?是否存在使蓝军获胜的协议?
蓝军 A 蓝军 B
白军 B
Zhang Dongyan TCP/IP Protocols 44
对称释放的问题 -两军问题
?如果连接的双方在确信对方也准备释放连接之前都
不准备断开连接,那么连接永远得不到释放 !
Zhang Dongyan TCP/IP Protocols 45
释放连接的设计 (1)
Zhang Dongyan TCP/IP Protocols 46
释放连接的设计 (2)
Zhang Dongyan TCP/IP Protocols 47
TCP的连接建立
?请求端 (客户 )发送一
个 SYN段指明打算连接
的服务器的端口以及
初始序列号
(ISN,1415531521)
?服务器发回包含服务
器初始序列号的 SYN段
作为应答,同时将确认
序列号设置为客户的
ISN+1
?客户必须将确认序号
设置为服务器的 ISN+1,
用来对服务器的 SYN报
文段确认
Zhang Dongyan TCP/IP Protocols 48
Zhang Dongyan TCP/IP Protocols 49
Zhang Dongyan TCP/IP Protocols 50
Zhang Dongyan TCP/IP Protocols 51
Zhang Dongyan TCP/IP Protocols 52
TCP的连接终止
?4次握手
?全双工连接,每个方向必须单独进行关闭
Zhang Dongyan TCP/IP Protocols 53
Zhang Dongyan TCP/IP Protocols 54
Zhang Dongyan TCP/IP Protocols 55
Zhang Dongyan TCP/IP Protocols 56
Zhang Dongyan TCP/IP Protocols 57
TCP的半关闭
? TCP提供了连接的
一端在结束它的
发送后还能接收
来自另一端数据
的能力
? 当收到半关闭的
一端在完成它的
数据传送后,将
发送一个 FIN关闭
这个方向的连接,
当对第二个 FIN进
行确认后,连接
彻底关闭。
Zhang Dongyan TCP/IP Protocols 58
TCP的半连通
?一方已经关闭或异常终止连接而另一方还不知道,称
之为半连通 (half-open)
?只要不打算在半连通的连接上传输数据,仍处于连
接的一方就不会去监测另一方已经出现异常
?原因
– 主机异常
– 客户机掉电
?模拟的例子 --服务器异常
– 用 telnet连接,输入字符
– 断开 server的电缆,重新启动
– 客户端继续输入命令,此时服务器将以复位段应答
–, Conectionclosed by foreign host”
Zhang Dongyan TCP/IP Protocols 59
TCP的同时打开与同时关闭
?两个应用程序同时彼此执行主动打开
?仅为此建立一条连接