目录

计算机网络——传输层

目录​​​​​​​

一、传输层提供的服务

二、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地址,端口号)
它唯一标识网络的一台主机和其上的一个应用(进程)

二、UDP协议

2.1UDP协议特点
  1. 无须建立连接
  2. 无连接状态
  3. 尽最大能力交付,但传输层采用UDP协议是不可靠交付
  4. 面向报文,交付完整报文(不合并、不拆分)
  5. 分组首部开销小:仅有8B的开销,TCP有20B的首部开销
  6. 没有拥塞控制:网络出现的拥塞不会使源主机的发送速率降低
  7. 首部开销小,只有 8 个字节
  8. 支持一对一、一对多、多对一和多对多交互通信

常用于一次性传输较少数据的网络应用:如DNS、SNMP等。

2.2UDP的首部格式
  1. 源端口:源端口号
  2. 目的端口:目的端口号
  3. 长度:UDP数据报的长度
  4. 校验和:检验UDP数据报在传输中是否有错

校验和计算方法 :二进制反码运算再求和

  • 计算校验和时,在UDP用户数据报之前增加12个字节的伪首部(仅用于计算校验和,不是UDP真正的首部)
  • IP数据报的检验和只检验IP数据报的首部,而UDP的检验和是把首部和数据部分一起都检验。
  • 若UDP数据报部分的长度不是偶数个字节,需要填入一个全0字节。

三、TCP协议

3.1TCP协议的特点
  1. TCP是面向连接的传输层协议
  2. 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)。
  3. TCP提供可靠交付的服务:传输信道总无差错、总能及时接受并处理数据
  4. TCP提供全双工通信
  5. 面向字节流

每一条TCP连接唯一地被通信两端两个端点(两个套接字)表示

TCP 连接 = {socket1, socket2} = {(IP1: port1),(IP2: port2)}

  • 同一个 IP 地址可以有多个不同的 TCP 连接。
  • 同一个端口号也可以出现在多个不同的 TCP 连接中。
3.2TCP报文段首部格式

TCP传送的数据单位是报文段,包括首部和数据两部分,首部最短为20B。

  1. 源端口和目的端口
  2. 序号:报文段序号,每一个字节按顺序编号
  3. 确认号:期望收到对方下一个报文段的第一个数据字节的序号
  4. 数据偏移:占4位,首部长度
  5. 保留:占6位
  6. 紧急URG:为1时,表示紧急
  7. 确认ACK:为1时确认号字段有效
  8. 推送PSH:PSH=1,需要尽快交付给接收应用进程
  9. 复位RST:RST=1表示TCP连接出现严重差错
  10. 同步SYN:同步SYN=1表示一个连接请求或连接接收报文
  11. 终止FIN:FIN=1表示报文发送方数据以发送完毕,请求释放传输连接
  12. 窗口:占2B,窗口值作为接收方让发送方设置器发送窗口的依据
  13. 检验和:校验首部和数据两部分
  14. 紧急指针:占16位,指出紧急数据共有多少字节
  15. 选项:最大报文段长度MSS,每一个TCP报文段中的数据字段的最大长度
3.3TCP连接管理

面向连接,采用客户机/服务器方式,三个阶段:建立连接(三次握手)、数据传输、释放连接(四次握手)

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

3.4TCP可靠传输

理想的传输条件有以下两个特点:(1) 传输信道不产生差错。(2) 不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。

在网络层不可靠时,TCP要尽可能建立可靠数据传输服务。

实现可靠传输的两个协议:

  1. 停止等待协议:每发完一个分组通知发送,等待对方的确认后再发送下一组。若无回应,超时重传。
  2. 连续ARQ协议:①位于发送窗口内的分组都可连续发送出去,无需等待确认,可以提高信道利用率。②接收方采用累积确认方式,不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。

实现可靠传输的三个手段:

  • 以字节为单位的滑动窗口

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时,表示跟在这个被确认报文段后的报文段已经丢失,这时需要重传丢失的报文段。

3.5TCP流量控制

目的:让发送方的发送速率不要太快,确定接收方来得及接收。

方法:利用滑动窗接口来实现消除接收方缓存区溢出的可能性。

  • 接受窗口rwnd:接收方根据自己接受缓存的大小,动态地调整发送方的发送窗口大小。
  • 拥塞窗口cwnd:发送方根据对当前网络拥塞程序的估计而确定的窗口值。
  • 死锁(B发送允许A发送的报文丢失):TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器的时间到就发送一个零窗口探测报文,对方在确认探测报文给出现在的窗口值:若仍然是零,则重新设置持续计时器。若不是零,则可以打破死锁的僵局。
3.6TCP拥塞控制

目的:防止过多的数据注入网络,保证网络中的路由器或链路不致过载,需要进行拥塞控制。

拥塞控制使用慢开始和拥塞避免和快重传和快回复算法实现。

发送窗口取决于接收窗口和拥塞窗口较小的一个,即min[rwnd,cwnd]

慢开始算法:

  1. 先令cwnd=1,即一个报文段长度MSS。

  2. 每收到一个对新报文段的确认后,将cwnd加1。

  3. 每经过一个传播轮次(RTT),拥塞窗口cwnd就会加倍,慢开始一直把拥塞窗口cwnd增大到一个规定的慢开始门限(阈值)。

  4. 然后改用拥塞避免算法。
    拥塞避免算法:

  5. 发送端的拥塞窗口cwnd每经过一个往返时延RTT就增加一个MSS的大小,而不是加倍,使cwnd线性增长。

  6. 当出现一次超时(网络拥塞)时,令慢开始门限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 |

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
左灯右行的爱情2 小时前
计算机网络-TCP流量控制与拥塞控制
网络·tcp/ip·计算机网络
落——枫3 小时前
网络互连与互联网
网络
熙曦Sakura4 小时前
【Linux】基础开发工具
linux·运维·服务器
rainFFrain8 小时前
网络基础2
服务器·网络
小南家的青蛙8 小时前
Linux的网络配置的资料
linux·运维·网络
兴达易控9 小时前
Profibus DP主站转ModbusTCP网关通讯秘籍
网络
海滩上的那乌克丽丽9 小时前
通过websocket给服务端发送订单催单提醒消息
网络·websocket·网络协议
爱的叹息11 小时前
Spring Boot 支持的内嵌服务器(Tomcat、Jetty、Undertow、Netty(用于 WebFlux 响应式应用))详解
服务器·spring boot·tomcat
GalaxyPokemon11 小时前
LINUX基础 [二] - Linux常见指令
linux·运维·服务器
小冯的编程学习之路11 小时前
【HTTP】:应用层协议HTTP(1)
linux·网络·网络协议·http