7.3传(运)输层

时光怂恿深爱的人放手 提交于 2020-01-31 05:46:24

在这里插入图片描述

引入传输层的原因:

消除网络层的不可靠性;
向上层屏蔽通信子网的实现细节
弥补上次提出要求和下层提供服务间的差异

资源子网
传输层
通信子网
在这里插入图片描述

传输层的作用范围

提供从源端主机到目的端主机的可靠传输。主机进程间(进程端口到进程端口)的通信,IP协议考虑的是协议。
在这里插入图片描述
应用进程之间的通信:
运输层提供进程级的访问能力
两个主机进行通信实际上就是两个主机中的应用进程互相通信
应用进程之间的通信又称为端到端的通信
运输层的另一个重要功能就是复用和分用

传输服务

传输实体:完成传输层功能的硬软件;
传输层实体利用网络层提供的服务向高层提供有效、可靠的服务,用服务质量QoS来衡量;
传输层提供两种服务
面向连接的传输服务:连接建立,数据传输,连接释放;
无连接的传输服务:不可靠的传输。

Internet传输协议

在这里插入图片描述

传输服务原语

在这里插入图片描述

传输服务的要素

寻址方法:定义传输服务访问点TSAP,将应用进程与这些TSAP相连。

在Internet中,TSAP内容如下:
(IP address, local port)
**服务访问点TSAP:
在这里插入图片描述

传输层常用端口号

在这里插入图片描述

远方客户程序如何获得服务程序的TSAP?

TSAP(Transport Service Access Point) 传输服务访问点
方法1:预先约定、广为人知的(Well-known),比如telnet是(IP地址,端口23);
方法2:从名字服务器(name server)或目录服务器(directory server)获得TSAP
传输层寻址(Addressing):
当服务程序很多时,使用初始连接协议(initial connection protocol)。
一个称为进程服务器(process server)的进程(inetd)同时在多个端口上监听;
远方客户程序向它实际想访问的服务程序的TSAP发出连接建立请求;
如果没有服务程序在此TSAP上监听,则远方客户和进程服务器建立连接;
进程服务器产生所请求的服务进程,并使该进程继承和远程客户的连接;
进程服务器返回继续监听;
远方客户程序与所希望的服务程序进行数据传输。
在这里插入图片描述

面向连接传输层协议的设计

分段和组装
网络层PDU长度小于传输层PDU
对传输层PDU进行分段
拼接和分割
对传输层PDU进行拼接
多路复用和分流
多个传输连接映射到一个网络连接上
流量控制和缓冲管理
在这里插入图片描述

建立连接与释放连接

连接的建立和释放是面向连接的传输层服务要解决的一个重要问题

释放连接是通过断连请求及断连确认实现的。

如果断连的时机选择不当而突然发出断连请求或断连指示有可能造成丢失数据。
两种连接释放方法
非对称式:一方释放连接,整个连接断开,存在丢失数据的危险;

对称式:每个方向的连接单独关闭,双方都执行DISCONNECT才能关闭整条连接。
释放连接的三次握手协议(四种):
在这里插入图片描述
在这里插入图片描述

用户数据报协议UDP

User Data Protocol
为什么要设计UDP?
不需要建立连接(减少延时)
无拥塞控制:UDP可按需发送
经常用于流媒体数据传输
低负载
速率敏感

UDP报头格式

在这里插入图片描述
UDP源端口号:指示发送方的UDP端口号。
UDP目的端口号:指示接收方的UDP端口号。
UDP报文长度:指示数据报总长度,包括报头及数据区总长度。
UDP校验和:为0表示未选校验和,全l表示校验和为0
伪报头位于UDP报头之前,用于验证UDP数据报是否被送到正确的目的节点。
在这里插入图片描述

传输控制协议TCP

传输控制协议
Transmission Control Protocol
TCP用于在各种网络上提供有序可靠的面向连接的数据传输服务。
TCP数据报长度要求小于64K字节。
TCP协议是面向字节流的,为每个字节分配一个序号。

TCP报头格式

在这里插入图片描述
源端口和目的端口:各16位。
序号和确认号:以字节为单位编号,各32位。
TCP 每次发送的报文段的首部中的序号字段数值表示该报文段第一个字节的序号。
TCP 确认号表示接收端期望下次收到的数据中的第一个数据字节的序号。
TCP头的长度:4位,长度单位为32位字;
6位的保留域;
6位的标识位:置1表示有效
URG:和紧急指针配合使用,发送紧急数据;
ACK:确认号是否有效;
PSH:指示发送方和接收方将数据不做缓存,立刻发送或接收;
RST:由于不可恢复的错误重置连接;
SYN:用于连接建立指示;
FIN:用于连接释放指示。
窗口大小:用于基于可变滑动窗口的流控,指示发送方从确认号开始可以再发送窗口大小的字节流;
校验和:为增加可靠性,对TCP头,数据和伪头计算校验和;
可选项域。

TCP链接管理

三次握手建立连接:
服务器方执行LISTEN和ACCEPT原语,被动监听;
客户方执行connect原语,产生一个SYN为1和ACK为0的TCP段,表示连接请求;
服务器方检查是否有服务进程在所请求的端口上监听,若没有,回答RST置位(重新建立传输连接)的TCP段;
若有服务进程监听,发出一个SYN置1和ACK置1的TCP段表示连接确认,并请求与对方的连接;
发起方收到确认后,发出一个SYN置0和ACK置1的TCP段表示给对方的连接确认。
在这里插入图片描述
半连接:
当A接收到B的确认,从 A 到 B 的连接就释放了,
连接处于半关闭状态。
即 A已经没有数据要发送了。
但如果B还发送数据,A仍接收。
在这里插入图片描述
在这里插入图片描述

TCP流量控制

TCP的窗口管理机制:
基于确认和可变窗口大小;
窗口大小为0时,正常情况下,发送方不能再发TCP段
但有两个例外:
紧急数据可以发送;
为防止死锁,发送方可以发送1字节的TCP段,以便让接收方重新声明确认号和窗口大小。
在这里插入图片描述
如何改进传输层的性能?

策略1:发送方缓存应用程序的数据,等到形成一个比较大的段再发出;
策略2:在没有可能进行“捎带”的情况下,接收方延迟发送确认段;
策略3:使用Nagle算法
当应用程序每次向传输实体发出一个字节时,传输实体发出第一个字节并缓存所有其后的字节直至收到对第一个字节的确认
适用于数据发送速度快,而网速较慢的情况
策略4:使用Clark算法解决傻窗口症状(silly window syndrome)
傻窗口症状:当应用程序一次从传输层实体读出1个字节时,传输层实体会产生一个1字节的窗口更新段,使得发送方只能发送1个字节;
解决办法:限制接收方只有在具备一半的空缓存或最大段长的空缓存时,才产生一个窗口更新段。

TCP拥塞控制

出现拥塞的两种情况:
快网络小缓存接收者
慢网络大缓存接收者
导致网络拥塞的两个潜在因素
网络能力
接收能力

TCP处理第一种拥塞的措施
(快网络小缓存)

在连接建立时声明最大可接受段长度;
利用可变滑动窗口协议防止出现拥塞。

TCP处理第二种拥塞的措施
(慢网络大缓存)

发送方维护两个窗口:接收方和拥塞窗口,发送方窗口按两个窗口的最小值发送;
拥塞窗口依照慢启动(slow start)算法和拥塞避免(congestion avoidance)算法变化。

接收端窗口 rwnd (receiver window)
接收端根据其目前的接收缓存大小所许诺的最新的窗口值,是来自接收端的流量控制。
接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。

拥塞窗口 cwnd (congestion window)
发送端根据自己估计的网络拥塞程度而设置的窗口值,是来自发送端的流量控制。

发送窗口的上限值  Min [rwnd, cwnd]
当 rwnd < cwnd 时,是接收端的接收能力限制发送窗口的最大值。
当 cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值。
慢启动(slow start)算法
连接建立时拥塞窗口(cwnd)初始值为该连接允许的最大段长,不超过64K;
发出一个最大段长的TCP段,若正确确认,拥塞窗口变为两个最大段长;
发出( 拥塞窗口/最大段长)个最大长度的TCP段,若都得到确认,则拥塞窗口加倍;
重复上一步,直至发生丢包超时事件,或拥塞窗口大于阈值。
拥塞避免(congestion avoidance)算法
若拥塞窗口大于阈值,从此时开始,拥塞窗口线形增长,一个RTT周期增加一个最大段长,直至发生丢包超时事件;
当超时事件发生后,阈值设置为当前拥塞窗口大小的一半,拥塞窗口重新设置为一个最大段长;
执行慢启动算法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!