导图社区 CN-5 传输层
计算机网络第五章 传输层,内容包含 提供服务、UD P协议、TC P协议、T C P可靠,希望这份脑图会对你有所帮助。
编辑于2023-04-03 17:50:57传输层
提供服务
传输层功能
传输层概述
地位
传输层向应用层提供通信服务,属于面向通信部分的最高层,同时是用户功能中的最低层
传输层位于网络层之上
传输层为运行在不同主机上的进程之间提供逻辑通信(端到端)
网络层提供主机、路由之间的逻辑通信(点到点)
只有主机的协议栈才有传输层及以上
路由器在转发分组时都只使用下三层的功能
即,通信子网中没有传输层
传输层功能
传输层提供进程和进程之间的逻辑通信(即端到端的逻辑通信)
传输层提供的是两台主机应用进程之间的通信
逻辑通信:传输层之间的通信好似水平传送的,实际上没有物理的连接
复用和分用
复用
发送方不同的应用进程都可使用同一个传输层协议传送数据
分用
接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程
注意和网络层的复用分用区分
网络层的复用是指发送方不同协议的数据都可以封装成IP数据报发送出去
分用是指接收方的网络层在剥去首部后把数据交付给相应的协议
差错检测
传输层差错校验,包括首部和数据部分
网络层只检查IP数据报的首部,不校验数据部分是否出错
提供两种不同的传输协议TCP和UDP
网络层无法同时实现两种协议(要么面向连接,虚电路,要么无连接,数据报)
寻址和端口
端口及作用
端口是传输层服务访问点(TSAP)
服务访问点(Service Accessing point)SAP,即上层访问下层所提供服务的点
数据链路层的SAP是MAC地址,网络层的SAP是IP地址,传输层的SAP是端口
唯一标识主机中的应用进程,是软件端口
区分:软硬件端口
硬件端口
是不同硬件设备(路由器、交换机等)上进行交互的接口
软件端口
应用层的各种协议进程与传输实体进行层间交互的一种地址
端口号
应用进程通过端口号进行标识,端口号长度16bit,能表示65536个不同端口号
端口号2B、IP地址4B、MAC6B
特点:端口号只有本地意义
端口号只标识本计算机应用层中的各进程
在因特网中不同计算机的相同端口号是没有联系的
按范围分
服务器端使用的端口号
熟知端口号
0~1023
给TCP/IP的最重要的一些应用程序,让所有用户都知道
登记端口号
提供给没有熟知端口号的普通应用程序使用
1024~49151
需要在IANA(互联网地址指派机构)登记以免重复
客户端使用的端口号
仅在客户进程运行时才动态选择,又称为短暂端口号/临时端口
49152~65535
通信结束后就消失,供给其他客户进程使用
套接字
Socket
端口号拼接到IP地址即构成套接字Socket
即
套接字Socket=(IP地址:端口号)
实际上就是一个通信端点
它唯一地标识网络中的一台主机和其上的一个应用(进程)
有/无连接
无连接/有连接
面向连接服务
通信前,必须先建立连接
通信中,整个连接的情况一直被实时地监控和管理
通信后,应该释放这个连接
无连接服务
指两个实体之间的通信不需要先建立好连接
需要通信时,直接将信息发送到“网络”中,让该信息尽可能的送达
面向连接TCP
采用TCP时,传输层向上提供的是一条全双工的可靠逻辑信道
不提供广播和组播服务
特点
开销大:确认、流量控制、计时器、连接管理等
时延大,面向连接,可靠,适用于大文件
适用
如文件传输协议FTP;超文本传输协议HTTP;远程登陆TELNET
无连接的UDP
采用UDP时,传输层向上提供的是一条不可靠的逻辑信道
仅提供两个附加服务:多路复用和对数据的错误检查
特点
执行速度快,实时性好
不可靠,无连接,时延小,适用于小文件
适用
小文件传送协议(TFTP)、DNS、SNMP和实时传输协议(RTP)
区分两个概念
IP数据报和UDP数据报
IP数据报在网络层要经过路由的存储转发
UDP数据报在传输层的端到端的逻辑信道中传输,封装成IP数据报在网络层传输时,UDP数据报的信息对路由是不可见的。
TCP和网络层虚电路
TCP报文段在传输层抽象的逻辑信道中传输,对路由器不可见;
虚电路所经过的交换结点都必须保存虚电路状态信息
在网络层若采用虚电路方式,则无法提供无连接服务;而传输层采用TCP不影响网络层提供无连接服务
UD P协议
UDP数据报
UDP概述
UDP:用户数据报协议
UDP仅在IP的数据报服务之上增加了两个最基本的服务:复用和分用+差错检测
UDP的特点
UDP无需建立连接,开销和发送前的时延小
UDP无需维护连接状态,某些专用应用服务器使用UDP时,一般都能支持更多的活动客户机
不保证可靠交付
所有维护可靠性的工作由应用层完成
UDP分组首部开销小。TCP有20B的首部开销,而UDP仅有8B的开销
UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率,适合很多实时应用
UDP常用于
适合一次性传输少量数据的网络应用
如DNS、SNMP
支持一对一、一对多、多对一和多对多的交互通信。
如多媒体应用(IP电话、实时视频会议、流媒体等)
是面向报文的
报文不可分割,是UDP数据报处理的最小单位
发送方
对应用层交下来的报文,在添加首部后就向下交付给IP层,一次发送一个报文,既不合并,也不拆分
接收方
对IP层交上来UDP数据报,在去除首部后就原封不动地交付给上层,一次交付一个完整的报文
故,应用程序必须选择合适大小的报文,报文太长会导致分片;报文太短会使IP数据报的首部的相对长度太大,都会降低IP层的效率
UDP数据报
UDP数据报分为UDP首部和用户数据,首部8B,4字段,每字段2B16位
源端口
在需要对方回信时选用,不需要时可用全0
目的端口
在终点交付报文时须使用到
长度
UDP数据报的长度(首部+数据),其最小值是8(仅有首部)
校验和
检测UDP数据报(首部+数据)传输中是否有错。出错就丢弃
该字段可选,当源主机不需要计算校验和时,直接令该字段为全0
分用时,若找不到目的端口号就丢弃报文,并向发送方发送ICMP“端口不可达”差错报文
UDP的校验
伪首部12B
UDP校验和
校验:UDP数据报的首部+数据部分
校错能力不强,胜在简单,处理快
UDP校验需要在UDP数据报之前添加12B的伪首部
伪首部既不向下传送又不向上递交,而只是为了计算校验和
(伪IP首部)包括源IP地址、目的IP地址、UDP长度和其他信息
17
封装UDP报文的IP数据报首部协议字段是17
UDP长度
UDP首部8B+数据部分长度(不包括伪首部)
使用伪首部,不仅可以检查源端口、目的端口和数据部分,还可以检查IP数据包的源IP地址和目的地址
发送端处理
添加伪首部,用全0填充校验和字段
每16位拆分
若UDP数据报的数据部分不是偶数个字节
在数据部分末位添加一个全0字节(该字节不发送)
伪首部+首部+数据部分:采用16bit段二进制反码计算
再取反,填入校验和字段
去掉伪首部,发送
接收端处理
收到的UDP数据报加上伪首部(不为偶数个字节,补上一个全0字节)
按二进制反码求这些16位字的和
和的结果
结果为1
无差错
不为1
有差错
直接丢弃
交给上层(附上错误报告)
二进制反码计算
本质上就是,化为二进制反码再运算
0+0=0,产生一个进位1
0+1=1
1+1=0
实际运算
原码正常求和
若最高位产生了一次进位,则最后得到的结果要加1
TC P协议
TCP协议特点
TCP
是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠、有序,无丢失和不重复问题
TCP是面向字节流的
流:流入到进程或流出的字节序列
TCP把应用程序交下来的数据仅视为一连串的无结构的字节流
TCP报文长度不同于UDP由发送进程决定,取决于接收方给出的窗口值和当前网络的拥塞程度
特点
TCP是面向连接(虚连接,逻辑连接)的传输层协议
每条TCP连接只能有两个端点,每条TCP连接只能是端到端的(进程到进程)
TCP提供可靠交付的服务,无差错,不丢失,不重复,按序到达(可靠有序,不丢不重)
TCP提供全双工通信
两端设有
发送缓存
发送应用程序传送给发送方TCP准备发送的数据
已发送但尚未收到确认的数据
接收缓存
按序到达但尚未被接收的应用程序读取的数据
不按序到达的数据
TCP可靠传输
TCP提供可靠的数据传输服务:
校验和
确认应答/序列号
超时重传
流量控制
拥塞控制
滑动窗口控制
可靠传输即,保证接收方进程从缓存区读出的字节流与发送方发出的字节流完全一致
校验和同UDP校验
TCP报文段
TCP报文段
TCP的数据单元称为报文段,既可以用来运载数据、又可以用来建立连接、释放连接和应答
TCP报文段会作为IP数据报的数据部分封装,其首部前20B固定,后续4N字节可按需增加,长度为4B的整数倍
组成:首部和数据部分
首部格式
TCP连接管理
TCP连接概述
连接三阶段
连接建立
数据传送
连接释放
连接管理需要保证运输连接的建立和释放正常运行
建立连接的三个重点
接收方和发送方都知道对方的存在和在哪
允许双方协商参数(最大窗口值,是否窗口扩大,时间戳选项,服务质量等)
能够对运输实体资源(缓存大小,连接表中的项目)进行分配
TCP连接的两个端点是套接字/插口,即每条TCP连接唯一地被通信的两个端点(即两个套接字)确定
TCP连接的建立采用客户/服务器方式,主动发起连接建立的应用进程叫做客户client,而被动等待连接建立的应用进程叫服务器server
连接 建立
三次握手
连接建立前,服务器进程处于LISTEN(收听)状态,等待客户的连接请求
客户端TCP向服务器端TCP发送连接请求报文段
同步位SYN=1,ACK=0;随机一个初始序号seq=x
客户端进程进入SYN-SENT(同步已发送)状态
服务器TCP收到请求后,若同意建立连接,则返回确认报文段
并为该TCP连接的服务器端分配缓存和变量
SYN=1;ACK=1;确认号ack=x+1;seq=y(随机)
服务端进程进入SYN-RCVD(同步收到)状态
SYN报文段和确认报文段均不携带数据,但要消耗一个序号
客户端收到确认报文后,还要发送再确认报文
并为该TCP连接的客户端分配缓存和变量
SYN=0;ACK=1;seq=x+1;ack=y+1
客服端进程进入ESTABLISHED(已建立连接)状态
该报文段可以携带数据,若不携带数据则不消耗序号
建立连接后就可以全双工通信,传送应用层数据
SYN洪泛攻击
攻击者大量发送TCP SYN,当服务器返回ACK后,攻击者不确认,该TCP连接会挂起,即半连接状态
服务器收不到再确认的话,会重复发送ACK给攻击者。每一个都挂起,就会浪费服务器的CPU和内存,导致死机
解决:SYN cookie
连接 释放
参与TCP连接的两个进程都可以单方面主动终止该连接,连接结束后,主机中的缓存和变量就会被释放
四次挥手
客户端需要主动关闭TCP连接,发送连接释放报文段,并停止发送数据
FIN报文段不携带数据,但要消耗一个序号
FIN=1;seq=u(u为客户端已经传送过的数据的最后一个字节的序号+1)
TCP客户段进程进入FIN-WAIT-1(终止等待1)状态
服务器收到FIN报文段后,回送一个确认报文段
ACK=1;seq=v(v为服务端已经传送过的数据的最后一个字节的序号+1);ack=u+1;
服务器进入CLOSE-WAIT(关闭等待)状态
此时,客户端到服务器这个方向的连接就释放了
TCP连接处于半关闭状态
若服务器端仍在发送数据,客户端处于终止等待2阶段
服务器端发完数据,也发送释放连接报文段,主动关闭TCP连接
FIN=1;ACK=1;seq=w(半关闭状态下服务器发送的最后一个字节的序号+1);ack=u+1;
服务器进入LAST-ACK(最后确认)状态
客户端收到释放连接报文段后,回复一个确认报文段
ACK=1,ack=w+1;seq=u+1
此时,TCP连接尚未完全结束,需经过2 MSL后,客户机进入CLOSED(连接关闭阶段)
2 MSL
最长报文段寿命,由时间等待计时器设置
避免最后一个确认报文段丢失
小结和记忆
连接建立:
我请求同步,你同意同步,我再确认一次(双端确认)
SYN:第一和第二步都要同步,=1
除第一步外,其余均确认ACK=1
连接释放:
我释放连接,你同意释放,你释放连接,我也同意
FIN:第一个第三步主动释放,=1
除第一步外,其余均确认ACK=1
seq和ack是序号和确认号,和传输的数据相关
seq:谁发的谁定,即要发的下一个序号
建立连接前两个报文段不带数据,随机seq
ack:对方的seq+1
MSS
最大报文段长度(MSS)
用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度(不包括文段头
MSS不包含TCP及IP的协议头长度
只能在初始化连接请求(SYN=1)使用
发送方与接收方的MSS不一定相等
SMSS(发送端最大报文段长度)
MSS大小
对于IPv4
为了避免IP分片,主机一般默认MSS为536字节
576IP最大字节数-20字节TCP协议头-20字节IP协议头=536字节
对于IPv6
MSS为1220字节
1280IP最大字节数-20字节TCP协议头-40字节IP协议头=1220字节
MSS和MTU
MTU应用于数据链接层,并无具体针对的协议
限制了数据链接层上可以传输的数据包的大小,
也因此限制了上层(网络层)的数据包大小
MSS针对的是传输层的TCP协议
MSS会受到MTU的限制
T C P可靠
TCP确认重传
确认应答
序列号
TCP连接传送的数据流中会给每个字节都编上一个序号
序号字段的值是指本报文段所发送的数据的第一个字节的序号
A的发送缓存区中共有10B,序号从0开始标号,
第一个报文包含第0~2个字节,序号是0,第二个报文段的序号是3
一般确认
TCP首部的确认号ack是期望收到对方的下一个报文段的数据的第一个字节的序号
如图,若B已收到第一个报文段,此时B发给A的报文段中的ack=3(期望得到第二个报文段)
发送方缓存区会继续存储已发送但未收到确认的报文段,以便在需要时重传
TCP采用累计确认
即TCP只确认数据流中至第一个丢失字节为止的字节
GBN协议模型
链路层传输的是帧,TCP传的是报文段
例
B收到A发送的包含字节0~2和字节6~7的报文段,中间的第二个报文段丢失了
则B仍在等待字节3(和后面的字节)
B发出的确认报文的ack应为3
超时重传
超时重传
TCP每发送一个报文段,就对这个报文段设置一次计时器。计时器设置的重传时间到期但还未收到确认时,就要重传该报文段
(自适应算法)
由于数据传输的路由可能变化,以及其他网络情况,传输层的往返时延方差大,需采用自适应算法
记录一个报文段发出的时间,以及收到相应确认的时间,这两个时间之差称为报文段的往返时间(Round-Trip Time,RTT)
TCP 会保留了 RTT的一个加权平均往返时间RTTs,它会随新测量RTT样本值的变化而变化
重传时间的确定
超时计时器设置的超时重传时间(Retransmission Time-Out,RTO)应略大于RTTs,但不能太大,否则出错不能很快重传,时延更大
冗余ACK(冗余确认)
超时重传所等待的超时周期可能过长
一般发送方可以在超时时间发生前通过冗余ACK来检测丢包情况
冗余ACK
再次确认某个报文段的ACK,而发送方先前已经收到过该报文段的确认
每当比期望序号大的失序报文段到达时,接收端发送一个冗余ACK,指明下一个期待字节的序号
举例
发送方发送了12345报文段,中途2报文段丢失
接收方收到1,返回ack=2
接收方收到3,4,5,返回ack=2
这三个都不是接收方想要的,都是冗余ACK
当发送方接收到3个对于报文段1的冗余ACK——>就认为2号报文段丢失,立即重传2
快速重传技术
TCP流量控制
流量控制
消除发送方(发送速率太快)使接收方缓存区溢出的可能性(让发送方慢点)
流量控制是一个速度匹配服务(匹配发送方的发送速率与接收方的读取速率)
流量控制是两端间,拥塞控制是网络整体
TCP提供一种基于滑动窗口协议的流量控制机制(和第三章联系)
传输层是端到端,窗口可动态变化
链路层是点到点,窗口大小固定
发送方窗口
接收窗口rwnd
接收方根据自己目前接收缓存大小所许诺的最新窗口值,反映接收方的容量,动态地调整发送方的发送窗口大小
即通过调整TCP确认报文段首部中的“窗口”字段值(2B),来限制发送方向网络注入报文的速率
拥塞窗口cwnd
发送方根据其对当前网络拥塞程度的估计而确定的窗口值,反映网络的当前容量,这称为拥塞窗口cwnd
其大小与网络的带宽和时延密切相关
未出现拥塞,拥塞窗口就大一些,网络出现拥塞,拥塞窗口就减小
发送窗口的上限值=min{rwnd,cwnd}
发送方的发送窗口取rwnd和cwnd的最小值
单位是字节
发送方既要考虑接收方的接收能力,又要全局考虑不发生拥塞
流量控制过程
A向B发送数据,TCP连接建立时,发送端得知接收端的rwnd=400B,假设每一个报文段100B,报文段序号初始值为1
接收端
每次告诉发送端应该设置多大的发送窗口(rwnd)和从哪开始(ack)
即
告诉发送端需要哪一块的数据,在这范围之外的都不要发
发送端
发送端发完数据,都要根据最近收到的ACK计算还能发送多少数据
发送完减掉,窗口大小变为0了就不能再发送
超时重传
若超时还没有收到确认,需要重传
且发送窗口不为0,该数据还在发送窗口内,才能发送
要发且能发才发
为避免接收端发送的确认报文段丢失,造成互相等待的情况
TCP为每一个连接设有一个持续计时器
若持续计时器设置的时间到期就发送一个零窗口探测报文段
接收方收到探测报文段时会给出目前的窗口值
TCP拥塞控制
拥塞和拥塞控制
拥塞
拥塞产生的原因
对资源需求的总和>可用资源
网络中有许多资源同时呈现供应不足->网络性能变坏->网络吞吐量将随输入负荷增大而下降
是一个全局性的问题
端点并不了解拥塞发生的细节
对端点来说,拥塞往往表现为通信时延的增加
网络负载增大,吞吐量反而下降,可判断网络拥塞
拥塞控制
即防止过多的数据注入到网络中,保证网络中的路由器/链路不致过载
拥塞控制 流量控制
流量控制往往是指点对点的通信量的控制,是端到端的问题,抑制发送端发送数据的速率,以便接收
某链路1Gb/s,向一台PC以1Gb/s传输文件,没有拥塞,但需要流量控制
拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有主机、路由器和与降低网络传输性能有关的所有因素
100万台PC在此链路上以1Mb/s传输文件,网络负载可能会超过承受范围
它们都通过控制发送方发送数据的速率来达到控制效果
4种算法
这里假定只考虑一个方向发送数据,另一个方向主传输确认
假定接收方有足够大的缓存空间,不考虑流量控制,发送窗口大小只取决于cwnd
慢开始、拥塞避免、快重传、快恢复
慢开始 /拥塞避免
慢开始算法
算法描述
TCP连接刚建立,准备发送TCP报文段时,先令cwnd=1,即一个MSS
实际中初始窗口不超过2~4个SMSS
每收到一轮对新报文段的确认(对重传的确认不算在内),cwnd加倍
一开始cwnd=1,发送1个报文段
接收方收到并确认,发送端收到,cwnd=2,发送2个报文段
接收方收到并确认,发送端收到,cwnd=4,发送4个报文段
接收方收到并确认,发送端收到,cwnd=8,发送8个报文段
注意
“慢开始”不是指cwnd增长慢,是指数增长,指的是开始时设为1,先试探网络的拥塞情况,再逐步增大
每一轮不是等所有确认收齐了再加倍,每收到一个确认调整一次窗口,具体不讨论
每经过一个传输轮次(一个往返传输时延RTT),cwnd加倍
慢开始门限ssthresh
是一个阈值,一开始可以大些,达到发送窗口的最大容许值
拥塞避免算法
拥塞避免
指在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞,并不能完全避免拥塞
即,目的是让拥塞窗口cwnd缓慢增大
算法描述
每经过一个往返时延RTT,发送方的拥塞窗口cwnd加1
表明拥塞窗口cwnd按线性规律缓慢增长(即”加法增大“AI),这比慢开始算法的增长速率要慢得多
说明:
一个传输轮次
发送一批报文段并收到他们的所有确认的时间
一个往返时延RTT
开始发送一批报文段到开始下一批发送的时间
这里认为是一样的,RTT是自适应改变的,这里只讨论拥塞控制原理
网络拥塞处理
TCP连接建立后,cwnd设为1,这里慢开始门限设为16
慢开始阶段,每经过一个传输轮次,cwnd加倍,指数增长
增长到ssthresh后,改为执行拥塞避免算法,窗口大小线性增加
图中cwnd=24时,发现超时,可认为是网络拥塞的标志。 调整门限值减为cwnd的一半:ssthresh=cwnd/2=12, 重新慢开始:cwnd=1。
注意
在慢开始阶段,若2cwnd>ssthresh,则下一个RTT后的cwnd=ssthresh(不能超过门限值)
AI和MD
“加法放大”AI
拥塞避免阶段,cwnd按线性缓慢增大,以防止网络过早出现拥塞
“乘法减小”MD
无论在慢开始,还是拥塞避免阶段,只要超时(很可能拥塞)就减半门限值,并重新慢开始
快重传和快恢复
采用冗余ACK
是对慢开始和拥塞避免算法的改进
是当丢包的情况下的处理(也认为是拥塞)
TCP可靠传输中使用冗余ACK来检测丢包,冗余ACK也可用于网络拥塞的检测
快重传算法
思想
要求接收方不等待自己发送数据时捎带确认,而是立即发送确认
(收到失序报文段立刻发送对已收到报文段的重复确认)
当发送方连续收到三个重复的ACK报文(即,重复确认)时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时
注意
快重传并非取消重传计时器,而是在某些情况下可更早知道丢包情况,尽早地重传丢失的报文段
快恢复算法
思想
当发送方连续收到三个冗余ACK(即重复确认)时,执行“乘法减小”算法
慢开始门限ssthresh=cwnd/2,cwnd=ssthresh;
门限减半,窗口=门限,开始拥塞避免算法(加法增大)
注意
窗口=门限?
发送方可认为没有很严重的拥塞,不然收不到重复的确认
直接跳过了cwnd=1的慢开始阶段,故称为快恢复
小结
快重传,改进上面判断拥塞的方式(不用等超时就可提前重传)
快恢复,不从头开始,从当前门限的一半开始
在TCP连接建立和网络出现超时时,采用慢开始和拥塞避免算法;
当发送方接收到冗余ACK时,采用快重传和快恢复算法。