第 8章 运输层
运输协议概述
TCP/IP体系中的运输层
用户数据报协议 UDP
传输控制协议 TCP
§ 8.1 运输协议概述运输层在网络体系结构中的地位和作用
运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
物理层数据链路层运输层网络层应用层用户功能网络功能面向通信面向信息处理运输层在层次体系结构中的地位运输层
Transport
运输层
Transport
OSI上三层 OSI上三层
OSI下三层 OSI下三层用户进程管理通信子网向上提供标准的传输服务向下屏蔽不同的通信子网运输层的功能,
1) 严格地讲,两个主机进行通信实际上就是两个主机中的应用进程互相通信 。 运输层用来标识主机中的应用进程 。 IP协议虽然能够把分组送到目的主机,但是无法交付给主机中的应用进程 。
2) 复用与分用,发送端应用层不同进程的报文通过不同的端口向下交到运输层,再向下共用网络层提供的服务;接收端则进行分用处理 。 运输层提供主机内进程间的,逻辑通信,;而网络层则提供网络中主机间的,逻辑通信,。 见书 P229 图 8- 2,8- 3。
3) 运输层要对收到的报文进行差错检测,而网络层只检查数据报的首部 。
运输层有两种不同的运输协议,即 面向连接的 TCP和 无连接的 UDP,而网络层无法同时实现这两种协议 。
运输层与其上下层之间的关系,见书 P230 图 8- 4。
运输层向高层屏蔽了下面通信子网的细节 ( 如拓扑结构,
所采用的协议等 ),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道,但这条逻辑信道因运输层使用的不同协议而有很大的差别 。
运输层向上提供可靠的和不可靠的逻辑通信信道
§ 8.2 TCP/IP体系中的运输层一、运输层中的两个协议
TCP/IP的传输层有 2个不同的协议
① 用户数据报协议 UDP(User Datagram Protocol)
② 运输控制协议 TCP(Transmission Control Protocol)
UDP在传送数据之前不需要建立连接,也不给出确认,
提供 不可靠服务,但 效率高 。如 DNS,NFS中采用。
TCP在传送数据之前需要建立连接,需给出确认,提供 可靠服务,但 效率低 。如 FTP,Telnet中采用。
与各种网络接口
IP
UDP TCP
应用层
强调两点:
( 1)运输层的 UDP用户数据报 与 网际层的 IP数据报 有很大的区别。 IP数据报要经过互联网中许多路由器的存储转发,但 UDP用户数据报是在运输层的端到端抽象的逻辑信道中传送的。 运输层看不见路由器,路由器也看不见
UDP用户数据报,因为路由器只有下三层协议而没有运输层。
( 2) TCP连接 也和网络层中的 虚电路 完全不同。 TCP报文段是在运输层的端到端抽象的逻辑信道中传送,但 TCP
连接是可靠的全双工信道,不涉及到互联网中的路由器。
这些 路由器根本不知道上面的运输层建立了多少个 TCP
连接 。然而在 X.25建立的虚电路所经过的交换结点中,
都 要保存 X.25虚电路的状态信息。
端口的概念什么是端口?
端口 是运输层的地址,用来标识应用层的进程。
当传输层收到 IP层交上来的数据(即 TCP报文段或
UDP数据报),就要根据其首部中的端口号来决定应当交给哪个应用进程。
端口在进程之间的通信中所起的作用如下图所示应用进程 应用进程 应用进程 应用进程应用层传输层网络层端口 端口… 端口 端口… 端口 端口… 端口 端口…
TCP复用 UDP复用
NSAP NSAP NSAP NSAP
UDP分用TCP分用
IP复用 IP分用
IP数据报 IP数据报端口是一个 16比特 的地址,并用 端口号 进行标识。
端口号分为两类,一类是 因特网指派名字和号码公司
ICANN负责分配给一些常用的应用层程序固定使用的 熟知端口,其数值一般为 0- 1023。如,FTP用 21,TELNET
用 23,SMTP用 25,DNS用 53,HTTP用 80等。
另一类则是 一般端口,用来随时分配给请求通信的客户进程。其数值大于 1023
端口
1500
端口
1501
IP=131.6.23.13
A
端口
1500
IP=128.36.1.22
B
端口
25
IP=130.42.85.15
C连接 1
连接 2
连接 3
① A与 C先建立第一个连接,端口 1500→ 端口 25
② A与 C后建立第二个连接,端口 1501→ 端口 25
③ 同样,B与 C建立第三个连接,端口 1500→ 端口 25
端口号与 IP地址结合使用
TCP使用,连接,作为最基本的抽象,一个连接由它的两个端点来标识,这样的端点称为 插口
(socket),就是我们常说的,套接字,。
插口 包括 IP地址( 32比特)和 端口号 ( 16比特),
共 48比特。
在整个因特网中,在传输层通信的 一对插口必须是唯一的 。
从上例可知:
使用面向连接的 TCP,就是建立一条端到端的虚连接。形成一对插口( 131.6.23.13; 1501)和
( 130.42.85.15; 25)。
§ 8.3 用户数据报协议 UDP
8.3.1、用户数据报的用途
UDP只在 IP的数据报服务之上增加了很少一点功能,就是 端口的功能和差错检测的功能 。
优点:
①发送数据之前 不需要建立连接,因而减少了开销和发送数据之前的时延;
② UDP没有拥塞控制,也不保证可靠交付,因此主机不需要维持具有许多参数的、复杂的连接状态;
③ UDP用户数据报 只有 8个字节的首部开销,比 TCP的 20
个字节的首部要短;
④由于 UDP没有拥塞控制,因此网络出现的 拥塞不会使源主机的发送速率降低 。这对某些实时应用是很重要的。
使用 UDP和 TCP协议的各种应用应用 应用层协议 传输层协议名字转换 DNS UDP
选路协议 RIP UDP
网络管理 SNMP UDP
远程文件服务器 NFS UDP
IP电话 专用协议 UDP
流式多媒体通信 专用协议 UDP
电子邮件 SMTP TCP
远程终端接入 TELNET TCP
万维网 HTTP TCP
文件传送 FTP TCP
源 IP地址 目的 IP地址 0 17 UDP长度伪首部 源端口 目的端口 长度 检验和首部 数据首部 数据协议字段
UDP数据报
IP数据报各字段意义
源端口 字段:源端口号。
目的端口 字段:目的端口号。
长度字段,UDP用户数据报的长度。
检验和 字段:防止 UDP用户数据报在传输中出错。
在计算检验和时在 UDP用户数据报之前要增加 12个字节的伪首部 。所谓,伪首部,是因为这种 伪首部并不是
UDP用户数据报真正的首部 。只是在计算检验和时,临时和 UDP用户数据报连接在一起,得到一个过渡的 UDP用户数据报。检验和就是按照这个过渡的 UDP用户数据报来计算的。 伪首部既不向下传送,也不向上递交 。
UDP检验和的计算 。(见书中 P237 图 8- 12)
153.19.8.104
171.3.14.11
全 0 17 15
1087 13
15 全 0
数据 数据 数据 数据数据 数据 数据 填充 0
12字节伪首部
8字节
UDP
首部
7字节数据
§ 8.4 传输控制协议 TCP
8.4.1,TCP报文段的首部源端口 目的端口序号确认号数据偏移保留
U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
窗口检验和 紧急指针选项(长度可变) 填充首部 数据
T
C
P
首部
20
字节的固定首部
32位各字段意义源端口和目的端口,各占 2个字节。
序号,占 4个字节,是本报文段所发送的数据部分第一个字节的序号。 TCP传送的报文可看成是连续的数据流,每一个字节都对应于一个序号。
例如,一报文段的序号为 300,而该数据共 100字节,则下一个报文段的序号就是 400。
确认序号,占 4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段首部中的序号值。
数据偏移,占 4比特,表示数据开始的地方离 TCP报文段的起始处有多远。这实际上就是 TCP报文段首部的长度。
由于首部长度不固定,因此数据偏移字段是必要的。
保留字段,6比特,供今后使用,目前臵为 0。
6个比特的 控制字段紧急比特 URGent:当 URG=1时,表明此报文应尽快传送,
而不要按原来的排队顺序来传送。与,紧急指针,字段配合使用,由于数据中既有普通数据又有紧急数据,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号,使接收方可以知道紧急数据共有多长。
确认比特 ACK:只有当 ACK=1时,确认序号字段才有意义。
推送比特 PSH:当 PSH=1时,表明尽快发送,不要等到整个缓存都填满了之后再发。
复位比特 ReSeT:当 RST=1时,表明出现严重差错,必须释放连接,然后再重建传输连接。
同步比特 SYN,在建立连接时使用,当 SYN=1而 ACK=0时,
表明这是一个连接请求报文段。对方若同意建立连接,
在发回的报文段中使 SYN=1和 ACK=1。因此,SYN=1表示这是一个连接请求或连接接受报文,而 ACK的值用来区分是哪一种报文。
终止比特 FINal:用来释放一个连接,当 FIN=1时,表明欲发送的字节串已经发完,并要求释放传输连接。
窗口 Window:占 2字节。此窗口告诉对方,,在未收到我的确认时,你能够发送的数据的字节数至多是此窗口的大小。,
检验和 覆盖了整个的 TCP报文段,TCP首部和 TCP
数据。
选项 字段:只规定了一种选项即最大报文段长度,
用以告诉对方:,我的缓存所能接收的报文段的数据字段的最大长度,,默认值为 536字节。
8.4.2 TCP的数据编号与确认
TCP协议是面向字节的,TCP整个报文看成是一个个字节流组成的数据流,并使每一个字节对应一个序号。
报文序号为报文段中第一字节的序号如:序号= x,长度= L的报文段,则:下一报文序号为 x+ L
确认序号表示接收端期望下次收到的数据中的第一个数据字节的序号。
TCP发送报文段的时机
TCP有三种基本机制来控制报文段的发送:
( 1) TCP维持一个变量,它等于最大报文段长度 MSS。只要 发送缓存从发送进程得到的数据到达 MSS字节 时,就组装成一个 TCP报文段,然后发送出去;( 按数量 )
( 2) 发送端的应用进程指明要求发送报文段,即 TCP支持的推送( push)操作;( 按紧迫度 )
( 3) 发送端的一个计时器时间到了,这时就把当前已有的缓存数据装入报文段发送出去。( 按时间 )
控制发送时机的相应算法
( 1) Nagle算法,发送端应用进程将欲发送的数据逐个字节地送到发送端的 TCP缓存。发送端将第一个字符先发送出去,将后面到达的字符都缓存起来。当发送端收到对第一个字符的确认后,再将缓存中的所有字符装成一个报文段发送出去,同时继续对随后到达的字符进行缓存。算法还规定,当到达的字符已达到窗口大小的一半或已达到报文段的最大长度时,就立即发送。
( 2)让接收端等待一段时间,使得或者缓存已能有足够的空间容纳一个较长的报文段,或者缓存已有一半的空间处于空的状态时,才向发送端发送确认。
通常将上述两种方法配合使用。使得在 发送端不发送很小的报文段的同时,接收端也不要在缓存刚刚有了一点空位臵就急忙将一个很小的窗口大小通知给发送端 。
8.4.3 TCP流量控制和拥塞控制
TCP采用可变发送窗口的技术进行流量控制,窗口大小的单位是字节。
在 TCP报文段首部的窗口字段写入的数值就是当前给对方设定的窗口数值。
发送窗口在连接建立时由双方商定,在通信过程中,接收端可根据自己的资源情况,随时动态地调整自己的接收窗口,并且告诉对方,使对方的发送窗口和自己的接收窗口一致。
HDLC中发送窗口和接收窗口是如何确定的?
1 100101 200 301 400401 500501 600601 700701 800801 900201 300
接收端许诺的发送窗口已发送并确认已发送未确认可连续发送 不可发送说明:
① 发送端要发送的数据共 9个报文段,每个报文段长
100字节,共 900个字节;
② 而接收端确定的发送窗口为 500字节;
③ 在当前情况下,发送方可连续发送 5个报文符,而不必收到时确认,(已发送了二个,还可发送三个报文符);
④发送方在收到确认后,就可将发送窗口向前移动。
利用可变窗口进行流量控制举例主机 A 主机 B
序号 =1
序号 =101
序号 =201
确认序号 =201 窗口 =300
序号 =201
序号 =301
序号 =401
确认序号 =501 窗口 =200
序号 =501
确认序号 =601 窗口 =0
丢弃
A还能发送 300字节
A还能发送 200字节允许 A再发送 300字节 (201-500)
A还能发送 200字节 (301-500)
A还能发送 100字节 (401-500)
A能超时重发,但不能发送序号 500以后的数据
A还能发送 100字节( 601- 700)
允许 A再发送 200字节( 501- 700)
不允许 A再发送主机 A向主机 B发送数据,双方商定的窗口值是 400,每一个报文段为 100字节,序号的初始值为 1。主机 B进行了 3次流量控制。
窗口大小为 400
发送窗口发送端在发送数据时,既要考虑到接收方的接收能力,又要使网络不要发生拥塞。
发送窗口的确定:
发送窗口 =Min[通知窗口,拥塞窗口 ]
上式表明:
发送窗口取二个窗口中的最小一个。
注:
①在未发生拥塞的稳定工作状态下,二个窗口是一致的。
② 通知窗口,是采用接收端的流量控制窗口,其窗口值放在
TCP报文首部中传送给发送端;
③ 拥塞窗口,是发送端根据网络拥塞情况(如超时重传)得出的窗口值,来自发送端的流量控制。
拥塞控制拥塞控制的三种技术
① 慢启动 ( slow-start)
② 加速递减 ( multiplicative decrease)
③ 拥塞避免 ( congestion avoidance)
发送端的发送窗口不能超过 拥塞窗口 和 通知窗口中的最小值,现在假定接收端不进行流量控制,
只考虑 拥塞窗口 。
实现拥塞控制的步骤当一个连接初始化时,将 拥塞窗口 设置为 1。并设置慢启动的 门限窗口值 。
发送端若收到了对所有发出的报文段的确认,就在下一次发送时将 拥塞窗口 加倍。可见 拥塞窗口 从 1开始,按指数规律增长。
当增长到 门限窗口值 时,就每次只将 拥塞窗口 加 1,使拥塞窗口 按线性规律增长。
若出现了超时,则将当时的 拥塞窗口 值减半,作为新的门限窗口值,同时 拥塞窗口 再次变为 1。
当网络出现超时,仍重复上述过程。
慢启动,每出现一次超时,拥塞窗口都降都降低到 1,
使报文段慢慢注入网络中。
加速递减,每出现一次超时,门限窗口值减半。
拥塞避免,当拥塞窗口增大到门限窗口值时,
拥塞窗口的增长将变为线形增长,避免网络出现拥塞。
设门限窗口值为 500,设 拥塞窗口为 600时出现超时,说明拥塞窗口的变化过程。拥塞窗口为 400时呢?
8.4.4,TCP的重传机制
TCP的报文重发是根据所设臵的定时器决定的。
当定时器的重发时间到而还没有收到确认,就要重发这一报文段。
由于路由可能发生变化,TCP采用了一种自适应算法确定超时定时器的重发时间。
平均往返时延 T= α(旧的往返时延 T)+( 1- α )
(新的往返时延样本)
0=< α< 1,分析 α取不同值时的效果?
重传时间 = β ( 平均往返时延 )
β > 1,分析 β 取不同值时的效果?
一般 β = 2
往返时延的测量,实现起来很复杂,例超时重传:
发送第一个 TCP报文超时重传
TCP报文 收到 ACK
往返时延=?
往返时延=?
Karn提出了一个算法,在计算往返时延时,只要报文段重传了,就不采用其往返时延样本。但如果报文段的时延突然增大了很多,重传时间得不到更新,会连续重传。
修正方法,新的重传时间= γ (旧的重传时间),
γ > 1,一般取 γ = 2
8.4.5 TCP的传输连接管理
TCP是面向连接的协议,传输连接的建立和释放是每次通信中必不可少的过程。传输连接的管理就是使传输连接的建立和释放都能正常地进行。
TCP连接的建立采用客户服务器方式,主动发起连接建立的进程称之为 客户,被动等待连接建立的进程称之为服务器 。
为了确保连接的建立和释放都是可靠的,TCP使用三次握手的方式,其中交换了三个报文。
用三次握手建立 TCP连接主机 A 主机 B
主动打开 被动打开确认确认主机 A的 TCP向主机 B的 TCP发出连接请求报文段,其首部中 SYN=1,同时选择一个序号 x,表明在后面传送数据时的第一个数据字节的序号是 x。
主机 B的 TCP收到连接请求报文段后,如同意,则发回确认,在确认报文段中,SYN=1,确认序号为 x+1,同时也为自己选择一个序号 y。
主机 A的 TCP收到此报文段后,还要向主机 B给出确认,
其确认序号为 y+1。
运行客户进程的主机 A的 TCP通知上层应用进程,连接已经建立。
运行服务器进程的主机 B的 TCP在收到主机 A的确认后,
也通知其上层应用进程,连接已经建立。
为什么要采用三次握手呢?
主要是为了 防止已失效的连接请求报文段突然又出现传送到主机 B,而产生错误。
主机 A发出连接请求后,超时重传,进行传输后释放。但超时的连接请求报文并未丢失,后来又到达主机 B,主机 B发出确认后,
但主机 A不会响应 B的确认,因此连接建立不起来。
释放 TCP连接主机 A 主机 B
应用进程释放连接 通知主机应用进程确认确认应用进程释放连接主机 A的应用进程先向其 TCP发出连接释放请求,并且不再发送数据。 TCP通知对方要释放从 A到 B这个方向的连接,将首部中 FIN=1,序号 x等于前面已传送过的数据的最后一个字节的序号加 1。
主机 B的 TCP收到释放连接通知后即发出确认,确认序号为 x+1,同时通知自己的应用进程。这样,从 A到 B的连接就释放了。
在主机 B向主机 A的数据发送结束后,其应用进程就通知
TCP释放连接。主机 B发出的连接释放报文段中,FIN=1,
确认序号重复为 x+1,序号 y等于前面已传送过的数据的最后一个字节的序号加 1 。
主机 A的 TCP收到此报文段后,还要向主机 B给出确认,
其确认序号为 y+1。
主机 A通知上层应用进程,连接已经释放。
8.4.6TCP的有限状态机作业:
P251 1,4
运输协议概述
TCP/IP体系中的运输层
用户数据报协议 UDP
传输控制协议 TCP
§ 8.1 运输协议概述运输层在网络体系结构中的地位和作用
运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
物理层数据链路层运输层网络层应用层用户功能网络功能面向通信面向信息处理运输层在层次体系结构中的地位运输层
Transport
运输层
Transport
OSI上三层 OSI上三层
OSI下三层 OSI下三层用户进程管理通信子网向上提供标准的传输服务向下屏蔽不同的通信子网运输层的功能,
1) 严格地讲,两个主机进行通信实际上就是两个主机中的应用进程互相通信 。 运输层用来标识主机中的应用进程 。 IP协议虽然能够把分组送到目的主机,但是无法交付给主机中的应用进程 。
2) 复用与分用,发送端应用层不同进程的报文通过不同的端口向下交到运输层,再向下共用网络层提供的服务;接收端则进行分用处理 。 运输层提供主机内进程间的,逻辑通信,;而网络层则提供网络中主机间的,逻辑通信,。 见书 P229 图 8- 2,8- 3。
3) 运输层要对收到的报文进行差错检测,而网络层只检查数据报的首部 。
运输层有两种不同的运输协议,即 面向连接的 TCP和 无连接的 UDP,而网络层无法同时实现这两种协议 。
运输层与其上下层之间的关系,见书 P230 图 8- 4。
运输层向高层屏蔽了下面通信子网的细节 ( 如拓扑结构,
所采用的协议等 ),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道,但这条逻辑信道因运输层使用的不同协议而有很大的差别 。
运输层向上提供可靠的和不可靠的逻辑通信信道
§ 8.2 TCP/IP体系中的运输层一、运输层中的两个协议
TCP/IP的传输层有 2个不同的协议
① 用户数据报协议 UDP(User Datagram Protocol)
② 运输控制协议 TCP(Transmission Control Protocol)
UDP在传送数据之前不需要建立连接,也不给出确认,
提供 不可靠服务,但 效率高 。如 DNS,NFS中采用。
TCP在传送数据之前需要建立连接,需给出确认,提供 可靠服务,但 效率低 。如 FTP,Telnet中采用。
与各种网络接口
IP
UDP TCP
应用层
强调两点:
( 1)运输层的 UDP用户数据报 与 网际层的 IP数据报 有很大的区别。 IP数据报要经过互联网中许多路由器的存储转发,但 UDP用户数据报是在运输层的端到端抽象的逻辑信道中传送的。 运输层看不见路由器,路由器也看不见
UDP用户数据报,因为路由器只有下三层协议而没有运输层。
( 2) TCP连接 也和网络层中的 虚电路 完全不同。 TCP报文段是在运输层的端到端抽象的逻辑信道中传送,但 TCP
连接是可靠的全双工信道,不涉及到互联网中的路由器。
这些 路由器根本不知道上面的运输层建立了多少个 TCP
连接 。然而在 X.25建立的虚电路所经过的交换结点中,
都 要保存 X.25虚电路的状态信息。
端口的概念什么是端口?
端口 是运输层的地址,用来标识应用层的进程。
当传输层收到 IP层交上来的数据(即 TCP报文段或
UDP数据报),就要根据其首部中的端口号来决定应当交给哪个应用进程。
端口在进程之间的通信中所起的作用如下图所示应用进程 应用进程 应用进程 应用进程应用层传输层网络层端口 端口… 端口 端口… 端口 端口… 端口 端口…
TCP复用 UDP复用
NSAP NSAP NSAP NSAP
UDP分用TCP分用
IP复用 IP分用
IP数据报 IP数据报端口是一个 16比特 的地址,并用 端口号 进行标识。
端口号分为两类,一类是 因特网指派名字和号码公司
ICANN负责分配给一些常用的应用层程序固定使用的 熟知端口,其数值一般为 0- 1023。如,FTP用 21,TELNET
用 23,SMTP用 25,DNS用 53,HTTP用 80等。
另一类则是 一般端口,用来随时分配给请求通信的客户进程。其数值大于 1023
端口
1500
端口
1501
IP=131.6.23.13
A
端口
1500
IP=128.36.1.22
B
端口
25
IP=130.42.85.15
C连接 1
连接 2
连接 3
① A与 C先建立第一个连接,端口 1500→ 端口 25
② A与 C后建立第二个连接,端口 1501→ 端口 25
③ 同样,B与 C建立第三个连接,端口 1500→ 端口 25
端口号与 IP地址结合使用
TCP使用,连接,作为最基本的抽象,一个连接由它的两个端点来标识,这样的端点称为 插口
(socket),就是我们常说的,套接字,。
插口 包括 IP地址( 32比特)和 端口号 ( 16比特),
共 48比特。
在整个因特网中,在传输层通信的 一对插口必须是唯一的 。
从上例可知:
使用面向连接的 TCP,就是建立一条端到端的虚连接。形成一对插口( 131.6.23.13; 1501)和
( 130.42.85.15; 25)。
§ 8.3 用户数据报协议 UDP
8.3.1、用户数据报的用途
UDP只在 IP的数据报服务之上增加了很少一点功能,就是 端口的功能和差错检测的功能 。
优点:
①发送数据之前 不需要建立连接,因而减少了开销和发送数据之前的时延;
② UDP没有拥塞控制,也不保证可靠交付,因此主机不需要维持具有许多参数的、复杂的连接状态;
③ UDP用户数据报 只有 8个字节的首部开销,比 TCP的 20
个字节的首部要短;
④由于 UDP没有拥塞控制,因此网络出现的 拥塞不会使源主机的发送速率降低 。这对某些实时应用是很重要的。
使用 UDP和 TCP协议的各种应用应用 应用层协议 传输层协议名字转换 DNS UDP
选路协议 RIP UDP
网络管理 SNMP UDP
远程文件服务器 NFS UDP
IP电话 专用协议 UDP
流式多媒体通信 专用协议 UDP
电子邮件 SMTP TCP
远程终端接入 TELNET TCP
万维网 HTTP TCP
文件传送 FTP TCP
源 IP地址 目的 IP地址 0 17 UDP长度伪首部 源端口 目的端口 长度 检验和首部 数据首部 数据协议字段
UDP数据报
IP数据报各字段意义
源端口 字段:源端口号。
目的端口 字段:目的端口号。
长度字段,UDP用户数据报的长度。
检验和 字段:防止 UDP用户数据报在传输中出错。
在计算检验和时在 UDP用户数据报之前要增加 12个字节的伪首部 。所谓,伪首部,是因为这种 伪首部并不是
UDP用户数据报真正的首部 。只是在计算检验和时,临时和 UDP用户数据报连接在一起,得到一个过渡的 UDP用户数据报。检验和就是按照这个过渡的 UDP用户数据报来计算的。 伪首部既不向下传送,也不向上递交 。
UDP检验和的计算 。(见书中 P237 图 8- 12)
153.19.8.104
171.3.14.11
全 0 17 15
1087 13
15 全 0
数据 数据 数据 数据数据 数据 数据 填充 0
12字节伪首部
8字节
UDP
首部
7字节数据
§ 8.4 传输控制协议 TCP
8.4.1,TCP报文段的首部源端口 目的端口序号确认号数据偏移保留
U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
窗口检验和 紧急指针选项(长度可变) 填充首部 数据
T
C
P
首部
20
字节的固定首部
32位各字段意义源端口和目的端口,各占 2个字节。
序号,占 4个字节,是本报文段所发送的数据部分第一个字节的序号。 TCP传送的报文可看成是连续的数据流,每一个字节都对应于一个序号。
例如,一报文段的序号为 300,而该数据共 100字节,则下一个报文段的序号就是 400。
确认序号,占 4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段首部中的序号值。
数据偏移,占 4比特,表示数据开始的地方离 TCP报文段的起始处有多远。这实际上就是 TCP报文段首部的长度。
由于首部长度不固定,因此数据偏移字段是必要的。
保留字段,6比特,供今后使用,目前臵为 0。
6个比特的 控制字段紧急比特 URGent:当 URG=1时,表明此报文应尽快传送,
而不要按原来的排队顺序来传送。与,紧急指针,字段配合使用,由于数据中既有普通数据又有紧急数据,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号,使接收方可以知道紧急数据共有多长。
确认比特 ACK:只有当 ACK=1时,确认序号字段才有意义。
推送比特 PSH:当 PSH=1时,表明尽快发送,不要等到整个缓存都填满了之后再发。
复位比特 ReSeT:当 RST=1时,表明出现严重差错,必须释放连接,然后再重建传输连接。
同步比特 SYN,在建立连接时使用,当 SYN=1而 ACK=0时,
表明这是一个连接请求报文段。对方若同意建立连接,
在发回的报文段中使 SYN=1和 ACK=1。因此,SYN=1表示这是一个连接请求或连接接受报文,而 ACK的值用来区分是哪一种报文。
终止比特 FINal:用来释放一个连接,当 FIN=1时,表明欲发送的字节串已经发完,并要求释放传输连接。
窗口 Window:占 2字节。此窗口告诉对方,,在未收到我的确认时,你能够发送的数据的字节数至多是此窗口的大小。,
检验和 覆盖了整个的 TCP报文段,TCP首部和 TCP
数据。
选项 字段:只规定了一种选项即最大报文段长度,
用以告诉对方:,我的缓存所能接收的报文段的数据字段的最大长度,,默认值为 536字节。
8.4.2 TCP的数据编号与确认
TCP协议是面向字节的,TCP整个报文看成是一个个字节流组成的数据流,并使每一个字节对应一个序号。
报文序号为报文段中第一字节的序号如:序号= x,长度= L的报文段,则:下一报文序号为 x+ L
确认序号表示接收端期望下次收到的数据中的第一个数据字节的序号。
TCP发送报文段的时机
TCP有三种基本机制来控制报文段的发送:
( 1) TCP维持一个变量,它等于最大报文段长度 MSS。只要 发送缓存从发送进程得到的数据到达 MSS字节 时,就组装成一个 TCP报文段,然后发送出去;( 按数量 )
( 2) 发送端的应用进程指明要求发送报文段,即 TCP支持的推送( push)操作;( 按紧迫度 )
( 3) 发送端的一个计时器时间到了,这时就把当前已有的缓存数据装入报文段发送出去。( 按时间 )
控制发送时机的相应算法
( 1) Nagle算法,发送端应用进程将欲发送的数据逐个字节地送到发送端的 TCP缓存。发送端将第一个字符先发送出去,将后面到达的字符都缓存起来。当发送端收到对第一个字符的确认后,再将缓存中的所有字符装成一个报文段发送出去,同时继续对随后到达的字符进行缓存。算法还规定,当到达的字符已达到窗口大小的一半或已达到报文段的最大长度时,就立即发送。
( 2)让接收端等待一段时间,使得或者缓存已能有足够的空间容纳一个较长的报文段,或者缓存已有一半的空间处于空的状态时,才向发送端发送确认。
通常将上述两种方法配合使用。使得在 发送端不发送很小的报文段的同时,接收端也不要在缓存刚刚有了一点空位臵就急忙将一个很小的窗口大小通知给发送端 。
8.4.3 TCP流量控制和拥塞控制
TCP采用可变发送窗口的技术进行流量控制,窗口大小的单位是字节。
在 TCP报文段首部的窗口字段写入的数值就是当前给对方设定的窗口数值。
发送窗口在连接建立时由双方商定,在通信过程中,接收端可根据自己的资源情况,随时动态地调整自己的接收窗口,并且告诉对方,使对方的发送窗口和自己的接收窗口一致。
HDLC中发送窗口和接收窗口是如何确定的?
1 100101 200 301 400401 500501 600601 700701 800801 900201 300
接收端许诺的发送窗口已发送并确认已发送未确认可连续发送 不可发送说明:
① 发送端要发送的数据共 9个报文段,每个报文段长
100字节,共 900个字节;
② 而接收端确定的发送窗口为 500字节;
③ 在当前情况下,发送方可连续发送 5个报文符,而不必收到时确认,(已发送了二个,还可发送三个报文符);
④发送方在收到确认后,就可将发送窗口向前移动。
利用可变窗口进行流量控制举例主机 A 主机 B
序号 =1
序号 =101
序号 =201
确认序号 =201 窗口 =300
序号 =201
序号 =301
序号 =401
确认序号 =501 窗口 =200
序号 =501
确认序号 =601 窗口 =0
丢弃
A还能发送 300字节
A还能发送 200字节允许 A再发送 300字节 (201-500)
A还能发送 200字节 (301-500)
A还能发送 100字节 (401-500)
A能超时重发,但不能发送序号 500以后的数据
A还能发送 100字节( 601- 700)
允许 A再发送 200字节( 501- 700)
不允许 A再发送主机 A向主机 B发送数据,双方商定的窗口值是 400,每一个报文段为 100字节,序号的初始值为 1。主机 B进行了 3次流量控制。
窗口大小为 400
发送窗口发送端在发送数据时,既要考虑到接收方的接收能力,又要使网络不要发生拥塞。
发送窗口的确定:
发送窗口 =Min[通知窗口,拥塞窗口 ]
上式表明:
发送窗口取二个窗口中的最小一个。
注:
①在未发生拥塞的稳定工作状态下,二个窗口是一致的。
② 通知窗口,是采用接收端的流量控制窗口,其窗口值放在
TCP报文首部中传送给发送端;
③ 拥塞窗口,是发送端根据网络拥塞情况(如超时重传)得出的窗口值,来自发送端的流量控制。
拥塞控制拥塞控制的三种技术
① 慢启动 ( slow-start)
② 加速递减 ( multiplicative decrease)
③ 拥塞避免 ( congestion avoidance)
发送端的发送窗口不能超过 拥塞窗口 和 通知窗口中的最小值,现在假定接收端不进行流量控制,
只考虑 拥塞窗口 。
实现拥塞控制的步骤当一个连接初始化时,将 拥塞窗口 设置为 1。并设置慢启动的 门限窗口值 。
发送端若收到了对所有发出的报文段的确认,就在下一次发送时将 拥塞窗口 加倍。可见 拥塞窗口 从 1开始,按指数规律增长。
当增长到 门限窗口值 时,就每次只将 拥塞窗口 加 1,使拥塞窗口 按线性规律增长。
若出现了超时,则将当时的 拥塞窗口 值减半,作为新的门限窗口值,同时 拥塞窗口 再次变为 1。
当网络出现超时,仍重复上述过程。
慢启动,每出现一次超时,拥塞窗口都降都降低到 1,
使报文段慢慢注入网络中。
加速递减,每出现一次超时,门限窗口值减半。
拥塞避免,当拥塞窗口增大到门限窗口值时,
拥塞窗口的增长将变为线形增长,避免网络出现拥塞。
设门限窗口值为 500,设 拥塞窗口为 600时出现超时,说明拥塞窗口的变化过程。拥塞窗口为 400时呢?
8.4.4,TCP的重传机制
TCP的报文重发是根据所设臵的定时器决定的。
当定时器的重发时间到而还没有收到确认,就要重发这一报文段。
由于路由可能发生变化,TCP采用了一种自适应算法确定超时定时器的重发时间。
平均往返时延 T= α(旧的往返时延 T)+( 1- α )
(新的往返时延样本)
0=< α< 1,分析 α取不同值时的效果?
重传时间 = β ( 平均往返时延 )
β > 1,分析 β 取不同值时的效果?
一般 β = 2
往返时延的测量,实现起来很复杂,例超时重传:
发送第一个 TCP报文超时重传
TCP报文 收到 ACK
往返时延=?
往返时延=?
Karn提出了一个算法,在计算往返时延时,只要报文段重传了,就不采用其往返时延样本。但如果报文段的时延突然增大了很多,重传时间得不到更新,会连续重传。
修正方法,新的重传时间= γ (旧的重传时间),
γ > 1,一般取 γ = 2
8.4.5 TCP的传输连接管理
TCP是面向连接的协议,传输连接的建立和释放是每次通信中必不可少的过程。传输连接的管理就是使传输连接的建立和释放都能正常地进行。
TCP连接的建立采用客户服务器方式,主动发起连接建立的进程称之为 客户,被动等待连接建立的进程称之为服务器 。
为了确保连接的建立和释放都是可靠的,TCP使用三次握手的方式,其中交换了三个报文。
用三次握手建立 TCP连接主机 A 主机 B
主动打开 被动打开确认确认主机 A的 TCP向主机 B的 TCP发出连接请求报文段,其首部中 SYN=1,同时选择一个序号 x,表明在后面传送数据时的第一个数据字节的序号是 x。
主机 B的 TCP收到连接请求报文段后,如同意,则发回确认,在确认报文段中,SYN=1,确认序号为 x+1,同时也为自己选择一个序号 y。
主机 A的 TCP收到此报文段后,还要向主机 B给出确认,
其确认序号为 y+1。
运行客户进程的主机 A的 TCP通知上层应用进程,连接已经建立。
运行服务器进程的主机 B的 TCP在收到主机 A的确认后,
也通知其上层应用进程,连接已经建立。
为什么要采用三次握手呢?
主要是为了 防止已失效的连接请求报文段突然又出现传送到主机 B,而产生错误。
主机 A发出连接请求后,超时重传,进行传输后释放。但超时的连接请求报文并未丢失,后来又到达主机 B,主机 B发出确认后,
但主机 A不会响应 B的确认,因此连接建立不起来。
释放 TCP连接主机 A 主机 B
应用进程释放连接 通知主机应用进程确认确认应用进程释放连接主机 A的应用进程先向其 TCP发出连接释放请求,并且不再发送数据。 TCP通知对方要释放从 A到 B这个方向的连接,将首部中 FIN=1,序号 x等于前面已传送过的数据的最后一个字节的序号加 1。
主机 B的 TCP收到释放连接通知后即发出确认,确认序号为 x+1,同时通知自己的应用进程。这样,从 A到 B的连接就释放了。
在主机 B向主机 A的数据发送结束后,其应用进程就通知
TCP释放连接。主机 B发出的连接释放报文段中,FIN=1,
确认序号重复为 x+1,序号 y等于前面已传送过的数据的最后一个字节的序号加 1 。
主机 A的 TCP收到此报文段后,还要向主机 B给出确认,
其确认序号为 y+1。
主机 A通知上层应用进程,连接已经释放。
8.4.6TCP的有限状态机作业:
P251 1,4