传输层的基本服务
传输层功能
传输层的核心任务:应用进程之间提供端到端的逻辑通信服务。
回顾:
只有主机才有传输层;
网络核心中的路由器结点等只用到下三层的功能。
传输层功能:
1)对应用层报文进行分段和重组
2)面向应用层实现复用与分解(第二节)
3)实现端到端的流量控制(第五节)
4)拥塞控制 (第五节)
5)传输层寻址
6)对报文进行差错检测
7)实现进程间的端到端可靠数据传输控制
传输层寻址与端口
单个计算机中,不同应用进程用进程标识符(进程ID)来区分。
网络环境下,不同计算机之间怎么区分应用进程?
TCP/IP体系结构网络的解决方法:
在传输层使用协议端口号,通常简称为端口(port),在全网范围内利用 “IP 地址+端口号”唯一标识一个通信端点。
应用层和传输层间抽象的协议端口是软件端口。
传输层端口号为16位整数,可以编号65536个(2的16次方)
0——1023 | 熟知端口号 |
---|---|
1024——49151 | 登记端口号 |
49152——65535 | 客户端口号,或短暂端口号 |
端口号小于256的端口为常用端口
传输层端口号:
1、服务器端使用的端口号:熟知端口号和登记端口号
例如:FTP服务器默认端口号21;
HTTP服务器默认端口号是80;
2、客户端使用的端口号:临时性,在客户进程运行是由操作系统随机选取唯一未被使用的端口号。
0——1023 | 熟知端口号 | 服务器端口号 |
---|---|---|
1024——49151 | 登记端口号 | |
49152——65535 | 客户端口号,或短暂端口号 | 客户端口号 |
无连接服务与面向连接服务
无连接服务 | 面向连接服务 |
---|---|
数据传输之前:无需与对端进行任何信息交换,直接构造传输层报文段并向接收端发送。 | 数据传输之前:需要双方交换一些控制信息,建立逻辑连接,然后再传输数据,传输结束后还需要拆除连接 |
类似于信件通信 | 类似于电话通信 |
传输层的复用与分解
{
什么是复用与分解
无连接的多路复用与多路分解
面向连接的多路复用与多路分解
}
复用与分解
支持众多应用进程共用同一个传输层协议,并能够将接收到的数据准确交付给不同的应用进程,是传输层需要实现的一项基本功能,称为传输层的多路复用与多路分解(简称为复用与分解,也称为为复用与分用)
多路复用:在源主机,传输层协议从不同的套接字收集应用进程发送的数据块,并为每个数据块封装上首部信息(包括用于分解的信息)构成报文段,然后将报文段传递给网络层。(一个邮局可以接收很多人的信件。)
多路分解:在接收端,传输层协议读取报文段中的这些字段,标识出接收套接字,进而通过该套接字,将传输层的报文段中的数据交付给正确的套接字。 (一个邮局可以给很多人送信。 )
UDP
Internet传输层提供无连接服务的传输层协议是UDP。
UDP (User Datagram Protocol):用户数据报协议。
UDP将应用层的数据块封装成一个UDP报文段。
包括应用数据,源端口号,目的端口号等。
UDP套接字二元组:<目的IP地址,目的端口号>
TCP
nternet传输层提供面向连接服务的是TCP。
TCP(Transmission Control Protocol): 传输控制协议)
nternet传输层提供面向连接服务的是TCP。 TCP(Transmission Control Protocol): 传输控制协议)
UDP | TCP |
---|---|
基于目的IP地址和目的端口号二元组唯一标识一个UDP套接字 | 基于源IP地址、目的IP地址、源端口号、目的端口号四元组唯一标识一个TCP套接字 |
停-等协议与滑动窗口协议
{
可靠数据传输基本原理
停-等协议
滑动窗口协议
}
可靠数据传输基本原理
不可靠传输信道在数据传输中可能发生:
1、比特差错:1001——1000
2、乱序:1001——1010
3、数据丢失:1001——????
很多网络应用希望传输层提供可靠的数据传输服务。
传输层主要由两个协议:TCP和UDP。
TCP提供可靠数据传输服务,TCP的报文段是交给IP传送的,IP只提供“尽力”服务。
基于不可靠信道实现可靠数据传输采取的措施:
差错检测:利用差错编码实现数据包传输过程中的比特差错检测。
确认:接收方向发送方反馈接收状态。ACK(肯定确认);NAK(否定确认)
肯定确认:Positive Acknowledgement,正确接收数据。
否定确认:Negative Acknowledgement,没有正确接收数据。
重传:发送方重新发送接收方没有正确接收的数据。
序号:确保数据按序提交。
计时器:解决数据丢失问题。
可靠数据传输协议:停-等协议 滑动窗口协议
停-等协议
停-等协议工作流程:
滑动窗口协议
允许发送方在没有收到确认前连续发送多个分组,在发送方向接收方传送的系列分组可以看成是填充到一条流水线(或一条管道)中,所以称这种协议为流水线协议或者管道协议。最典型的流水线协议就是滑动窗口协议。
发送方的发送窗口(Ws):发送方可以发送未被确认分组的最大数量;
接收方的接收窗口(Wr):接收方可以缓存的的正确到达的分组的最大数量;
滑动窗口协议,根据接收窗口的大小,可以具体分为:
回退N步协议:GBN协议(Go-Back-N)
选择重传协议: SR协议(Selective Repeat)
用户数据报协议(UDP)
{
UDP特点
UDP数据报结构
UDP校验和
}
UDP特点
1、用户数据协议(User Datagram Protocol UDP):Ineternet传输层协议,提供无连接、不可靠、数据报尽力传输服务。
特点:
- 应用进程更容易控制发送什么数据以及何时发送,会出现分组的丢失和重复。
- 无需建立连接。
- 无连接状态。
- 首部开销小,只有8个字节。
UDP数据报结构
1、UDP首部四个字段:每个字段长度都是2个字节。
源端口号和目的端口号:用于UDP实现复用和分解
长度:指示UDP报文段中的字节数(首部和数据的总和)。
校验和:接收方使用来检测报文段是否出现差错
UDP校验和
UDP校验和:提供了差错检测功能。
UDP的校验和用于检测UDP报文段从源到目的地传送过程中,其中的数据是否发生了改变(由于链路噪声干扰等引起)。
UDP校验和计算规则:
1、所有参与运算的内容(包括UDP报文段)按16位对齐求和。
2、求和过程中遇到任何溢出(即进位)都被回卷(即进位与和的最低为再加),最后得到的和取反码,就是UDP的校验和,填入UDP数据报的校验和字段。
3、UDP在生成校验和时,校验和字段全取0。
源IP地址、目的IP地址、协议号:均是封装对应UDP数据报的IP分组的对应字段。
UDP长度字段:是该UDP数据报的字段,该字段参与计算两次。
UDP协议号:17。
UDP校验和计算的内容包括3部分:UDP伪首部、UDP首部、应用数据 。
传输控制协议(TCP)
{
TCP报文段结构
连接管理
可靠数据传输
流量控制
拥塞控制
}
TCP报文段结构
1、传输控制协议(Transmission Control Protocol ,TCP):Internet传输层协议。提供面向连接、可靠、有序、字节流 传输服务。
TCP 特点:
第一、应用进程好似在”打电话“要先建立连接。
第二、每一条TCP连接只有两个端点。
第三、可靠交付:无差错,不丢失,不重复,按序到达
第四、全双工通信。
第五、面向字节流。
流:字节序列。应用程序和TCP的交互是一个个数据块,TCP把他们看做是无结构字节流。
应用层数据块进行封装成为TCP报文段。 最大报文段长度(Maximum Segment Size,MSS):报文段中封装的应用层数据的最大长度。
1、源端口号字段,目的端口号字段分别占16位。多路复用/分解来自或送到上层应用的数据。
2、序号字段、确认序号字段分别占32位。
序号字段:TCP的序号是对每个应用层数据的每个字节进行编号;
确认序号字段:是期望从对方接收数据的字节序号,即该序号对应的字节尚未收到;
3、首部长度字段占4位。指出TCP段的首部长度,以4字节为计算单位。 最短是20字节;最长是60字节。
4、保留字段占6位。保留为今后使用,目前值为0。
5、URG、ACK、PSH、RST、SYN、FIN各占1位。为标志位字段;
各占1位,取值为0或1;
紧急URG=1,紧急指针字段有效,优先传送。
确认ACK=1,确认序号字段有效;ACK=0时,确认序号字段无效。
推送PSH=1,尽快将报文段中的数据交付接收应用进程,不要等缓存满了再交付。
复位RST=1,TCP连接出现严重差错,释放连接,再重新建立TCP连接。
同步SYN=1,该TCP报文段是一个建立新连接请求控制段或者同意建立新连接的确认段。
终止FIN=1,TCP报文段的发送端数据已经发送完毕,请求释放连接。
6、接收窗口字段占16位。向对方通告我方接收窗口的大小。
7、校验和字段占16位。校验和字段检验的范围类似于UDP,计算方法与UDP校验和的计算方法相同。
TCP协议号是6。
8、紧急指针字段占16位。 URG=1时,才有效。指出在本TCP报文段中紧急数据共有多少个字节。
9、选项字段长度可变,基本不用。最短为0字节,最长为40字节。
例如:发送方告诉接收方其缓存能够接收的数据段的最大长度是MSS个字节。
10、填充字段,取值全为0,目的是为了整个首部长度是4字节的整倍数。
TCP连接管理
1、TCP连接管理:连接建立与连接拆除。
以主机A上的一个应用进程与主机B上的一个应用进程建立一条TCP连接为例。
第一次握手:
客户向服务器发送连接请求段:SYN报文段:(SYN=1,seq=x)
SYN=1:建立连接请求控制段
seq=x:表示传输的报文段的第1个数据字节的序列号是x,并以此序列号代表整个报文段的序号 (补充:sequence number,序号的意思。)
客户端进入SYN_SEND(同步发送)
第二次握手:服务器收到TCP连接请求段后,如同意,则发回确认报文段: (SYN=1,ACK=1,seq=y, ack_seq=x+1) SYN=1:同意建立新连接的确认段 ack_seq=x+1:表示已经收到了序列号为x的报文段,准备接收序列号为x+1的报文段。 seq=y:服务器告诉客户确认报文段的第1个数据字节的序列号是y。 服务器由LISTEN进入SYN_RCVD(同步收到)
第三次握手:客户对服务器的 同意连接报文段 进行确认:
(ACK=1,seq=x+1,ack_seq=y+1)
seq=x+1:客户传输的报文段的第一个数据字节的序列号是x+1
ack_seq=y+1:客户期望接收服务器序列号为y+1的报文段。
当客户发送ACK时,客户端进入ESTABLISHED状态;
当服务收到ACK后,也进入ESTABLISHED状态;
只有第三次握手可携带数据。
TCP连接拆除: 四次挥手
第一次挥手:客户向服务器发送释放连接报文段:(FIN=1,seq=u)
首部的FIN=1:TCP报文段的发送端数据发送完毕,请求释放连接。
序号seq=u:表示传输的第一个数据字节的序号是u
客户端状态由ESTABLISHED进入FIN_WAIT_1(终止等待1状态)
第二次挥手:服务器向客户发送确认段:(ACK=1,seq=v,ack_seq=u+1)
ACK=1:标识确认字号段有效。
确认序号ack_seq=u+1:表示服务器期望接收客户数据包序号为u+1的包
序号seq=v:表示服务器传输的第一个数据字节的序号是v
服务器状态由ESTABLISHED进入CLOSE_WAIT(关闭等待)
客户端收到ACK段后,由FIN_WAIT_1进入FIN_WAIT_2
第三次挥手:服务器向客户发送释放连接报文段:(FIN=1,ACK=1,seq=w,ack_seq=u+1)
FIN=1:请求释放连接
ACK=1:标识确认字号段有效。
确认序号ack_seq=u+1:表示服务器期望接收客户数据包序号为u+1的包
序号seq=w:表示自己传输的第一个数据字节的序号是w
服务器状态由CLOSE_WAIT进入LAST_ACK(最后确认状态)
第四次挥手:客户向服务器发送确认段:(ACK=1,seq=u+1,ack_seq=w+1)
ACK=1:标识确认字号段有效。
确认序号ack_seq=w+1:表示客户期望接收服务器数据包序号为w+1的包
序号seq=u+1:表示客户传输的第一个数据字节的序号是u+1
客户端状态由FIN_WAIT_2进入TIME_WAIT,等待2MSL时间,进入CLOSED状态,释放连接
服务器在收到最后一次ACK段后,由LAST_ACK进入CLOSED,释放连接
TCP可靠数据传输
一、TCP实现可靠数据传输服务的工作机制:
1)应用数据被分割成TCP认为最适合发送的数据块。
2)TCP发出一个段后,启动一个计时器,等待目的端确认收到这个报文段。
3)TCP首部中设有校验和字段,用于检测数据在传输过程中是否发生差错。
4)TCP报文段的到达也可能会失序。如果必要,TCP会重新排序。
5)存在网络延迟和重传机制,接收端可能会收到多个重复的报文段,这时接收端需要根据序号把重复的报文段丢弃。
6)TCP能够提供流量控制。
保证接收方进程从缓冲区读出的字节流与发送方发出的字节流是完全一样的。
1、校验:与UDP一样 2、序号 3、确认
4、重传
TCP生成ACK的策略:
1、具有所期望序号的报文段按序到达,所有在期望序号及以前的报文段都已被确认。TCP延迟发送ACK,约500ms。
2、具有所期望序号的报文段按序到达、且另一个按序报文段在等待ACK传输,TCP接收方立即发送单个累计ACK,确认以上两个按序到达报文段。
3、拥有序号大于期望序号的失序报文段到达,TCP接收方立即发送重复ACK,只是下一个期望接收字节的序号。
4、收到一个报文段,部分或完全填充接收数据间隔。
TCP的发送方在规定时间内没有收到确认就要重传已发送的报文段。 TCP采用字是用算法,动态改变重传时间RTTS(加权平均往返时间)。
定时器超时时间设置: TimeoutInerval=EstimatedRTT+4×DevRTT
SampleRTT:抽样RTT 方法:指数加权移动平均的方法:α指数加权系数,典型值是0.125 EstimatedRTT=(1-α)·EstimatedRTT+ α·SampleRTT
DevRTT:偏差RTT RTT变化剧烈,网络不稳定;RTT变化小,网络平稳; 方法:加权系数β,推荐值是0.25 DevRTT=(1- β) ·DevRTT+ β ·|SampleRTT-EstimatedRTT|
TCP拥塞控制
拥塞控制的定义: 通过合理调度、规范、调整向网络中发送数据的主机数量、发送速率、数据量,以避免拥塞的发生 ,就称为拥塞控制。
拥塞控制的算法: TCP拥塞控制的算法包括:慢启动、拥塞避免、快速重传、快速恢复4部分。
窗口机制 :拥塞窗口(CongWin):连接开始,值为1。 阈值(Threshold):临界值
阈值之前的阶段我们称之为慢启动阶段, 慢启动阶段每经过RTT,拥塞窗口大小加倍。
阈值之后的阶段我们称之为拥塞避免阶段, 拥塞避免阶段每经过RTT,拥塞窗口大小增加1。
窗口调整的基本策略 :
窗口调整的基本策略AIMD(Additive Increase,Multiplicative Decrease):
网络未发生拥塞时,逐渐“加性”增大窗口。
网络拥塞时“乘性”快速减小窗口大小。
拥塞控制的分类 :
拥塞消除策略:先拥塞检测,再采取措施 。
拥塞预防策略:流量整形技术,规范主机像网络发送数据的流量。
TCP流量控制
流量控制:是协调协议发送方与接收方的数据发送与接收速度。
在通信过程中,接收方根据自己接收缓存的大小,动态的调整发送窗口大小 (接收方设置确认报文段的接收窗口字段来将窗口大小通知给发送方)。