目录
一、传输层提供的服务
二、UDP协议
2.1UDP协议特点
2.2UDP的首部格式
三、TCP协议
3.1TCP协议的特点
3.2TCP报文段首部格式
3.3TCP连接管理
3.4TCP可靠传输
3.5TCP流量控制
3.6TCP拥塞控制
传输层上面向应用层提供通信服务,属于面向通信部分的最高层,同时也是用户功能的最低层。
作用:在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。网络层是为主机之间提供逻辑通信,而传输层为应用进程之间提供端到端的逻辑通信。传输层需要具有重要的复用和分用功能。
传输层向上层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),使应用进程看见的通信是:两个传输层实体之间有一条端到端的逻辑通信信道。
传输层功能:
- 提供应用层进程之间的端到端的逻辑通信
- 复用和分用(复用:应用层的进程可以通过传输层再传输到网络层 分用:传输层从网络层收到数据后交付指明的应用进程)
- 对报文进行差错检测(首部和数据部分)
- 根据应用程序的不同需求,传输层需要有两种不同的传输协议提供面向连接的TCP和无连接的UDP传输协议
传输层的特点:寻址于端口
端口:是传输层服务访问点。作用类似IP在网络层的作用或MAC地址在数据链路层的作用,但IP地址和MAC地址标识的是主机,而端口表示的是主机中的应用进程。
- 服务端:一类是熟知端口号,数值为0-1023,另一类是登记端口号,数值为1024-49151,如下是常用的数值端口号:
应用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP 熟知端口号 21 23 25 53 69 80 161
- 客户端:仅在客户进程运行时动态选择协议连接端点称为套接字socket:
套接字 =(主机IP地址,端口号)
它唯一标识网络的一台主机和其上的一个应用(进程)
常用于一次性传输较少数据的网络应用:如DNS、SNMP等。
校验和计算方法:二进制反码运算再求和
- 计算校验和时,在UDP用户数据报之前增加12个字节的伪首部(仅用于计算校验和,不是UDP真正的首部)
- IP数据报的检验和只检验IP数据报的首部,而UDP的检验和是把首部和数据部分一起都检验。
- 若UDP数据报部分的长度不是偶数个字节,需要填入一个全0字节。
每一条TCP连接唯一地被通信两端两个端点(两个套接字)表示
TCP 连接 = {socket1, socket2} = {(IP1: port1),(IP2: port2)}
TCP传送的数据单位是报文段,包括首部和数据两部分,首部最短为20B。
面向连接,采用客户机/服务器方式,三个阶段:建立连接(三次握手)、数据传输、释放连接(四次握手)
TCP连接的建立(三次握手)
- 第一步,客户机的首先向服务器的发送连接请求报文段
SYN(Synchronize)=1, seq (sequence)=x
- 第二步,服务器的收到请求后,同意连接向客户机反馈
SYN=1, ACK(acknowledge)=1, seq=y, ack=x+1
- 第三步,客户机收到确认报文后,向服务器给出确认
ACK=1, seq=x+1, ack=y+1
TCP连接的释放(四次握手)
- 第一步,客户端向发无端发送请求连接释放报文段,FIN=1,seq=u;
- 第二步,服务端收到报文后发出确认,ack=u+1,seq=v;
- 第三步,若服务器没有需要传送的数据后,向客户端发送连接释放报文段,ACK=1,seq=w,ack=u+1;
- 第四步,客户端收到报文后,必须发出确认,seq=u+1,ack=w+1
关于连接和释放的问题,ACK,SYN,FIN一定等于1
理想的传输条件有以下两个特点:(1) 传输信道不产生差错。(2) 不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。
在网络层不可靠时,TCP要尽可能建立可靠数据传输服务。
实现可靠传输的两个协议:
实现可靠传输的三个手段:
- 以字节为单位的滑动窗口
A传输层向B传输层发送数据。在连接建立时,B会告诉 A:B接收窗口rwnd = XXX(字节)。根据 B 给出的窗口值,A 构造出自己的发送窗口。
发送窗口表示:在没有收到 B 的确认的情况下,A 可以连续把窗口内的数据都发送出去。发送窗口面的序号表示:允许发送的序号。窗口越大,在收到对方确认之前连续发送更多的数据,因而可获得更高的传输效率。
注:若A 的发送窗口内的序号已用完,但还没有再收到确认,必须停止发送。发送窗口中的序号全是发送未确认的或未发送的。发送窗口只是发送缓存中的一部分。
收到确认后,发送窗口向前滑动(向右)
P3 – P1 = A发送窗口
P2 – P1 = 已发送但未收到确认的字节数
P3 – P2 = 允许发送但未发送的字节数(又称为可用窗口)发送缓存用来暂时存放:应用程序传给发送方TCP准备发送的数据,TCP 已发送出但尚未收到确认的数据。
接收缓存用来暂时存放:按序到达的、但尚未被接收应用程序读取的数据,不按序到达的数据。
注:(1)A发送窗口不总是和B接收窗口一样大(因为有一定的时间滞后)。
(2)TCP没有规定不按序到达的数据应如何处理。通常临时存放在接收窗口,等字节流中所缺字节收到后,再按序交付上层的应用进程。
(3)TCP要求接收方必须可累积确认,以减小传输开销。
- 超时重传
超时和冗余ACK会导致TCP对报文段进行重传。TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。TCP 采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间 RTT
- 冗余ACK(冗余确认)
TCP规定当发送方收到对同一个报文的3个冗余ACK时,表示跟在这个被确认报文段后的报文段已经丢失,这时需要重传丢失的报文段。
目的:让发送方的发送速率不要太快,确定接收方来得及接收。
方法:利用滑动窗接口来实现消除接收方缓存区溢出的可能性。
目的:防止过多的数据注入网络,保证网络中的路由器或链路不致过载,需要进行拥塞控制。
拥塞控制使用慢开始和拥塞避免和快重传和快回复算法实现。
发送窗口取决于接收窗口和拥塞窗口较小的一个,即min[rwnd,cwnd]
慢开始算法:
- 先令cwnd=1,即一个报文段长度MSS。
- 每收到一个对新报文段的确认后,将cwnd加1。
- 每经过一个传播轮次(RTT),拥塞窗口cwnd就会加倍,慢开始一直把拥塞窗口cwnd增大到一个规定的慢开始门限(阈值)。
- 然后改用拥塞避免算法。
拥塞避免算法:
- 发送端的拥塞窗口cwnd每经过一个往返时延RTT就增加一个MSS的大小,而不是加倍,使cwnd线性增长。
- 当出现一次超时(网络拥塞)时,令慢开始门限ssthresh等于当前cwnd的一半。
慢开始和拥塞避免:
慢开始门限ssthresh的用法如下:
当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。
快重传和快回复
快重传算法:当连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待这个报文段设置的重传计时器超时。
快回复算法:接收端收到三个冗余ACK时,把慢开始门限ssthresh设置为出现拥塞时候发送方cwnd的一半(与慢开始将cwnd设置为1不同),然后开始执行拥塞避免算法,使拥塞窗口线性增大。
例题:
设TCP的拥塞窗口的慢开始门限值初始是8(单位为报文段),当拥塞窗口上升到12时发生超时,TCP开始慢启动和拥塞避免,那么第13次传输时拥塞窗口的大小为(C)
A 5 B 6 C 7 D 8
次数 0 1 2 3 4 5 6 7 8 9 10 11 12 13 cwnd 1 2 4 8 9 10 11 12 1 2 4 5 6 7
习题:
假设图4中H3访问Web服务器S时,S为新建的TCP连接分配了20kB的接收缓存(rwnd=20kb),最大段长MSS=1kB(cwnd=1kb)。H3建立连接时的初始序号为100(seq=100),且持续以MSS大小的段向S发送数据,拥塞窗口初始阈值为32KB;S对收到的每个段进行确认,并通告新的接收窗口。假定TCP连接建立完成后,S端的TCP接收缓存仅有数据存入而无数据取出。
(1)若连接R2和R3链路的频率带宽为8kHz,信噪比S/N为1024,该链路实际数据传输速率约为理论最大数据传输速率的50%,试求该链路的实际数据传输速率。
(2)TCP建立过程中,H3收到第二次握手TCP段的SYN和ACK标志位值是多少?确认序号ack是多少?
(3)H3收到的第8个确认段所通告的接收窗口是多少KB?此时H3的拥塞窗口变成多少?H3的发送窗口是多少?答:
(1)根据香农定理,信道的极限数据传输速率 C = Wlog2(1+S/N) = 8k×log21024 = 80kb/s
实际数据传输速率为40kb/s(2)SYN和ACK标志位的值均是1,确认序号是101
(3)H3收到的第8个确认段所通告的接收窗口是12KB,此时H3的拥塞窗口变为9KB;H3的发送窗口变为9KB。
次数 0 1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 确认段 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cwnd 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 rwnd 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 twnd 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5