运输层为相互通信的应用程序提供逻辑通信
端口和套接字的意义
无连接UDP的特点
面向连接TCP的特点
在不可靠的网络上实现可靠传输的工作原理,停止等待协议和ARQ协议
TCP滑动窗口、流量控制、连接管理
5.1运输层协议概述
5.1.1运输层之间的通信
运输层向它上面的应用层提供通信服务,只有主机协议栈才有运输层,网络核心部分中的路由器转发分组时只有下三层功能。
真正进行通信的实体时在主机中的进程,从运输层角度看,通信的真正端点并不是主机而是主机中的进程。运输层有一个很重要的功能-“复用”和“分用”,不用进程使用同一个运输层协议传送数据。网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(best-effort),但这种逻辑信道相当于一条全双工的可靠信道;采用无连接的UDP协议时,认识不可靠信道。
运输层对报文进行差错控制,IP数据报之检验首部而不检验数据部分差错。
5.1.2运输层两个主要协议
用户数据报协议UDP User Datagram Protocol
不需要建议连接,收到UDP报文后,不需给出确认。
传输控制协议TCP Transmission Control Protocol
TCP提供面向连接服务,要建立连接、释放连接,TCP不提供广播多播服务,由于TCP提供可靠的运输服务,增加了许多开销,如确认、流量控制、计时器、连接管理,占用处理及资源、数据单元首部增大。
5.1.3运输层的端口
通信的一方无法识别对方机器进程,往往需要利用目的主机提供的功能来识别终点,不需要知道具体实现这个功能的进程是哪一个。
运输层使用协议端口号(protocol port number)简称端口,软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。端口号只具有本地意义,是为了标志本计算机应用层中哥各个进程在和运输层交互的层间接口。
服务端使用的端口号 系统端口号 熟知端口号
客户端是通的端口号 短暂端口号
5.2用户数据报协议UDP
相比IP增加了复用分用、差错检测功能
1、无连接
2、尽最大努力交付
3、面向报文 保留应用层报文边界
4、没有拥塞控制
5、支持一对一、一对多、多对一通信
6、首部开销小
如果UDP发现报文中目睹端口号不正确,就丢弃并由网际控制协议ICMP发送端口不可达报文给源主机(traceroute)。
UDP把首部和数据部分一起检验,简单,处理快。
5.3传输控制协议TCP概述
5.3.1TCP主要特点
1、TCP是面向连接协议,应用程序使用TCP协议之前必须先建立连接,传送数据后需释放连接。应用程序通信过程好像在打电话。
2、每一条TCP连接只能有两个端点,每一条TCP连接是点对点的。
3、TCP提供可靠交付的服务,通过TCP连接传送的数据,无差错、不丢失、不重复、按序到达。
4、全双工通信
5、面向字节流 TCP中流Stream指流入到进程或从进程流出的字节序列,虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅看成是一连串的无结构字节流。
TCP并不关心应用进程一次把多长的报文发送打TCP缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少字节。
TCP的连接
TCP把连接作为最基本的抽象,TCP连接的端点叫做套接字(socket)或端口。端口号拼接到IP地址即构成套接字。
套接字socket=IP地址:端口号
每一条TCP连接被通信两端的端口确定
5.4可靠传输原理
TCP必须采取适当的措施才能使得两个运输层之间的通信变得可靠:传送信道不产生差错、不管发送发以多块的速度发送数据,接收方总时来得及处理收到的数据。
5.4.1停止等待协议
无差错情况
A发送分组M1,发完暂停发送,等待B的确认,B收到M1向A发送确认,A收到对M1确认发送下一个分组M2.
出现差错
A没有收到确认需要超时重传,设置超时计时器。
1、发送完分组后必须暂时保留已发送的分组
2、分组确认分组需要编号
3、重传时间应比分组往返时间长
确认丢失和确认迟到
B又收到了重传分组M1,则丢弃分组M1,再次向A发送确认。
上述可靠传输协议称为自动重传请求ARQ Automatic Repeat erQuest
信道利用率
停止等待协议信道利用率太低,使用流水线传输,连续发送多个分组,不必每发完一个分组就停顿下来吨袋对方确认。
流水线传输时,用连续ARQ协议和滑动窗口协议
5.4.2连续ARQ协议
滑动窗口协议是TCP协议精髓所在,唯一窗口内的分组可连续发送出去,不许等待对方确认。连续ARQ协议规定发送发每收到一个确认,九八发送窗口向前滑动一个分组。
接收方一般采取累计确认的方式:对按序到达的最后一个分组发送确认,到这个分组为止的所有分组已经正确收到了。
优点:容易实现
缺点:不能反映接收方已经全部正确接收到所有的信息。发送5个分组,丢失中间第3个分组,接收方只能对前两个分组确认,发送方只能重传后面3个分组。
5.5TCP报文的首部格式
TCP是面向字节流的,但TCP传送的数据单元确实报文段。
源端口和目的端口
序号
在一个TCP连接中传送的字节流的每一个字节都顺序编号,整个要传送的字节流的起始序号必须在连接建立时设置。
!首部中的序号字段值指本报文段所发送的数据的第一个字节的序号。
确认号
!期望收到对方下一个报文段的第一个数据字节的额序号。
若确认号=N,则表示到序号N-1为止的所有数据都已正确收到。
数据偏移
指出TCP 报文的数据起始距离TCP报文的起始处有多远。
保留
占6位 目前置0
控制位
1、紧急URG URGent 当URG=1时紧急指针字段有效,告诉系统有紧急数据,优先级高。
2、确认ACK ACKnowledgement 连接建立后所有传送的报文段ACK必须置1。
3、推送PSH push 当两个应用进程进行交互式通信时,优势一端的应用进程希望在键入一个命令后就能够收到对方的响应,TCP可以使用推送操作,对方并不用等到缓存填满了再交付。
4、复位RST reset 当RST=1时,表明TCP连接中出现严重差错,必须释放连接。
5、同步SNY SNYchronization 在连接建立的时候用来同步序号,当SYN=1,ACK=0时表明这是个连接请求或连接接受报文。
6、种植FIN finish 用来释放一个连接,当FIN=1表明此报文段的发送方数据已经发送完毕,要求释放连接。
窗口
窗口值告诉对方:从本报文段首部中的确号开始算起,接收方目前允许对方发送的数据量。窗口值作为接收方让发送方设置其发送窗口的依据。
检验和
检验首部数据两部分
紧急指针
当UEG=1时,指出紧急数据的字节数
选项
最大报文MSS Maximum Segment Size 尽可能大,在IP层传输不分片。
窗口增大 时间戳、选择确认
5.6TCP可靠传输实现
5.6.1 以字节为单位的滑动窗口
TCP滑动窗口是以字节为单位的
A收到了B发来的报文段,窗口时20字节,确认号31
A发送序号为31~41的数据,发送窗口有位置未改变
从上述看出描述一个窗口需要三个指针P1\P2\P3
小于P1的是已发送并收到确认的部分,大于P3不允许发送;
P3-P1=A的发送窗口;
P2-P1=已发送尚未收到确认的字节收;
P3-P2=允许发送但当前未发送的字节收 可用窗口
没有收到B的车确认时,A经过一段时间(由超时控制器控制)就重传数据。
缓存空间和序号空间有限,缓存或窗口字节数很大。
发送缓存:发送应用程序传送给发送方TCP准备发送的数据,TCP已发送出但尚未收到确认的数据。
就收缓存:按序到达的、但尚未被接收应用程序读取的数据,未按序到达的数据。
1、发送窗口并不总时和接收窗口一样大。
2、TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流所缺少的字节收到后,在按序交付上次应用程序。
3、TCP要求接收方必须要求累计确认功能,接收方可以在自己有数据要发送时把确认信息捎带上,确认推迟时间一般不超过0.5s。
5.6.2超时重传时间的选择
TCP采用自适应算法,记录报文段发出的时间,以及收到相应的确认的时间。报文段往返时间RTT,TCP保留了RTT的加权平均往返时间RTTS。
报文段每重传一次,就把超时重传时间加大一些。
选择确认SACK
只传送缺少的数据而不重传已经正确接收的数据。
5.7TCP流量控制
流量控制flow control让发送方发送速率不要太快,让接收方来得及接收。
利用滑动窗口实现流量控制
发送方的发送窗口不能超过接收方给出的接收窗口的数值,TCP窗口单位是字节。
死锁:B向A发送零窗口报文后接受缓存有空间,向A发送rwnd=400报文段,然而报文段在传送过程丢失了,A一直在等待B非零窗口通知,B也一直等待A发送数据。
设置持续计时器,TCP连接收到对方零窗口通知,启动持续计时器,时间到期发送零窗口探测报文段(即使设置为零窗口也必须接收零窗口报文段,确认报文段,接待紧急数据报文段)。
5.7.2TCP传输效率
如何控制TCP报文发送时机,Nagle算法如下:若发送应用进程把要发送的数据逐个字节地送到TCP发送缓存,则发送发就把第一个数据字节先发送出去,把后面到达的所有数据字节都缓存起来,当发送方收到对第一个字节的确认后,再把发送缓存中的所有数据组装成一个报文发送,同时对随后到达的数据进行缓存。
糊涂窗口综合征 silly widown syndrom
让接收方等待一段时间,使得就收缓存已有足够空间容纳一个最长报文,或等到接受缓存由一般空闲。
5.8TCP拥塞控制
一般原理
拥塞:在某段时间,若对网络中某一资源的需求超过了该资源做能提供的可用部分,网络的性能就要变坏。
拥塞控制:防止过多的数据注入到网络当中,这样可以使网络中路由器或链路不致过载。是一个全局性过程。
拥塞控制是一个动态的问题,分为开环、闭环控制。
开环控制:在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不发生拥塞。
闭环控制基于反馈环路概念,检测网络系统以便检测到拥塞在何时、何处发生;把拥塞发生的信息传送到可采取行动的地方;调整网络系统的运行已解决问题。
5.8.2TCP拥塞控制的方法
满开始slow-start,拥塞避免congestion avoidance,快重传fast retransmit和快恢复fast recovery
慢开始和拥塞避免
基于窗口的拥塞控制,发送方外吃一个叫拥塞窗口cwnd congest window的状态变量。发送方让自己的发送窗口等于拥塞窗口。
原则:只要网络没有出现拥塞,拥塞窗口就可以在增大一一些,以便把更多的分组发送出去;网络出现拥塞或可能出现拥塞,就必须把拥塞窗口减小一些。判断网络拥塞的依据时出现超时。
慢开始:由小到大逐渐增大发送窗口。把出事拥塞窗口设置1~2个最大报文段SMSS Sender Maximum Segment Size的数值。
为了防止拥塞窗口cwnd增长过大 慢开始门限ssthresh
拥塞避免:每经过一个往返时间RTT把拥塞窗口cwnd加1,在拥塞避免阶段,拥塞窗口cwnd线性缓慢增长。
有时候个别报文会在网络中丢失,但实际上并未发生拥塞,采用快重传可以让发送方尽早知道发生了个别报文的丢失。算法要求接收方立即发送确认,即使收到失序报文段。发送方只要一连收到3个重复确认,立即重传。不启动慢开始,而是执行快恢复算法,调整门限值ssthresh=cwnd/2,并开始执行拥塞避免算法。
拥塞避免阶段拥塞窗口是按照线性规律增大的,假发增大Additive Increase,快恢复乘减小MD Multiplicative Decrease 。AIMD算法。
5.8.3主动管理队列AQM
假定路由器对某些分组处理时间长,引起发送方对这些报文重传,误认为发生拥塞。路由器分组策略FIFO First In First Out的规则处理到来的分组。尾部丢弃策略。发生路由器尾部丢弃,可能会影响很多条TCP连接,使它门同一时间进入到慢开始状态,这称为全局同步 global syncronization。
主动管理队列AQM Active Queue Management 不要等到路由器队列长出已经到达某个值才不得不丢弃后面到达分组,应当在网络有了拥塞征兆时丢弃。实际上是对路由器中的分组排队进行智能管理,而不是简单地把队列尾部丢弃。
5.9TCP运输的连接管理
TCP时面向连接的协议:建立连接、数据传输、连接释放。
解决问题:
1、要使每一方能够确知对方存在
2、要允许每一方协商一些参数如窗口最大值、窗口扩大选项、时间戳选项、服务质量。
3、能够对运输实体资源(如缓存大小、连接表中项目)进行分配。
主动发起连接建立的进程叫客户client,被动等待的应用进程叫服务器server
5.9.1TCP连接的建立
三报文握手
A最后一次确认:防止已失效的连接请求报文突然又传送到了B,浪费资源。
5.9.2TCP连接的释放
四报文握手
时间等待计时器TIME-WAIT timer设置时间2MSL
最长报文寿命MSL Maximum Segment Lifetime
A在TIME-WAIT等待2MSL时间原因:
1、保证A发送的最后一个ACK报文能够到达B,这个ACK报文有可能丢失,B会超时重传FIN+ACK报文段,而A就能在2MSL时间收到重传的FIN+ACK报文段。
2、防止已失效的莲姐姐请求报文段。
保活计时器keepalive timper主机出现故障,使服务器不要白白等待。
5.9.3TCP有限状态机
粗实线:客户进程正常变迁
粗虚线:服务器进程正常变迁
细线:异常变迁
网友评论