计网自顶向下第三章归纳
第三章 运输层
1.运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信;网络层提供主机之间的逻辑通信;运输层协议在端系统中而不是在路由器中实现。
2.运输层:负责获取全部信息。必须跟踪数据单元碎片、乱序到达的数据包和其它在传输过程中可能发生的危险。
3.运输层为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。透明的传输是指在通信过程中传输层对上层屏蔽了通信传输系统的具体细节。
4.传输层:位于网络层之上,依赖于网络层服务,对网络层服务进行可能的增强
IP服务模型:尽力而为交付服务,不可靠服务
5.将主机间交付扩展到进程间交付被称为运输层的多路复用和多路分解
多路复用:从多个socket收集数据封上首部信息生成报文段交给网络层
多路分解:将运输层报文段中的数据交付到正确的套接字
运输层对多路复用要求:1、套接字有唯一标识符;2、每个报文段有特殊字段来只是该报文段所要交付到的套接字 -- 源端口号字段、目的端口号字段
无连接-UDP套接字由二元组标识(目的IP,目的端口号) 面向连接-TCP四元组(源IP地址,源端口号,目的IP,目的端口号)
UDP 无连接运输 优点:1、关于何时发送什么数据的应用层控制更为精细;2、无需连接建立;3、无连接状态;4、分组首部开销小
UDP检验和
发送方的UDP对报文段中的所有16bit字的和进行反码运算,求和时遇到的任何溢出都被回卷。
为什么提供检验和:由于不能保证源和目的之间的所有链路都提供差错检测。在既无法确保逐链路的可靠性,又无法确保内存中的差错检测的情况下,如果端到端数据传输服务要提供差错检测,UDP就必须在端到端基础上在运输层提供差错检测。
3.4可靠数据传输原理
1.rdt_send()被上次应用调用,将数据交给rat以发给对方; 2.udt_send()被rat调用在不可靠信道上向接收方传数据; 3.rdt_rcv()当数据包到达接收方信道时被调用; 4.deliver_data被rat调用向上层应用交付数据。
3.4.1构造可靠信道传输协议 RDT1.0:可靠信道上的可靠数据传输;底层信道完全靠:no bit errors; no loss of packets。 RDT2.0(停等协议):经具有比特差错信道的可靠数据传输。新机制:差错检测,接收方反馈(ACK/NAK),重传(ARQ)。 缺点:ACK/NAK消息发生错误(解决:添加新字段,将发送数据分组的***放在该字段) RDT2.1:引入序号(状态数)保证按顺序接收消息且只接受一次。 RDT2.2:把NAK换成ACK+不正确序号。 RDT3.0(比特交替协议):经具有比特差错的丢包信道的可靠数据传输。解决包送出去可能会消失的问题:加一个计时器(等待合理时间)。发送方能:1.每发送一个分组,就启动一个定时器;2.响应定时器中断;3.终止定时器。
3.4.2流水线可靠数据传输协议 影响:1.必须增加***范围;2.两端必须缓存多个分组;3.解决流水线的差错回复办法(回传n步GBN;选择重传SR)滑动窗口协议。
停等协议发送方利用率:(L/R)/(RTT+(L/R))。
3.4.3回退N步 GBN重传没收到的ACK的分组,累计确认。窗口的组成:已发送但没被确认的分组,窗口长度N。 发送方需响应:上层的调用(窗口没满就产生分组,发送并更新变量;满了就将数据返回给上层);收到一个ACK(对序号为N的分组采取累计确认);超时事件(定时器可用作最早的已发送未确认的分组所用的定时器。收到一个ACK,还有已发送为确认的分组,定时器重启)。丢弃一个正确接收的分组:
优点:缓存简单,接收方不需要缓存失序分组。 缺点:随后对该分组的重传也许会出错或丢失。 GBN缺点:重传大量分组。
3.4.4选择重传 让发送方仅重传那些它怀疑在接收方出错的分组,从而避免不必要的重传。 SR缓存乱序到达分组,直到所有丢失分组皆被接收,才按序交付给上层。 为每个分组设定时器。
3.5.6 TCP连接管理
三次握手:
第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手。
四次挥手:
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
3.5.4 TCP可靠数据传输(设置定时器,其过期间隔是TimeoutInterval)
TCP发送方的主要事件:1.从应用层接收数据;2.定时器超时(重传);3.确认接收方的报文段(ACK)的到达。
流量控制:为应用程序产生的服务,来消除发送方使接收方缓存溢出的问题。
接收窗口用rwnd表示(接收缓存的剩余大小),由接收方把rwnd放在报文段中发给发送方。 UDP不提供流量控制(缓存会溢出,丢失报文段)
3.5.3 估计往返时间
RTT(往返时间):从一个报文发出到它被确认的时间
估计RTT:
EstimatedRTT=(1-α)*EstimatedRTT+α*sampleRTT (sampleRTT:样本RTT; α=0.125) 设置重传超时间隔(初始值为1s)TimeoutInterval=EstimatedRTT+4*DevRTT
RTT偏差:DevRTT=(1-β)*DevRTT+β*|sampleRTT-EstimatedRTT|(β=0.25)
3.6 拥塞控制原理
3.6.1 拥塞原因与代价
情况1:两个发送方和一台具有无穷大缓存的路由器 发送速率超过R/2时,吞吐量只能达到R/2 在时延角度看并不是一个理想状态。即:当分组的到达速率接近链路容量时,分组经历巨大的排队时延。
情况2:两个发送方和一台具有有限缓存的路由器:发送方必须执行重传以补偿因为缓存溢出而丢弃(丢失)的分组。另外,有可能提前发生超时并重传在还在队列中的分组:发送方在遇到大的时延时所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组副本。
情况3:4个发送方和具有有限缓存的多台路由器及多跳路径:当一个分组沿一条路径被丢弃时,每个上游路由器用于转发该分组到丢弃该分组而使用的传输容量最终被浪费掉了。
3.6.2 拥塞控制方法
端到端拥塞控制:IP层不会向端系统提供有关网络拥塞的反馈信息。TCP报文段的丢失被认为是网络拥塞的一个迹象,TCP会相应减小窗口长度。
网络辅助拥塞控制:网络层构件(路由器)向发送方提供关于网络中拥塞状态的显式反馈信息。(网络路由器发包给发送方或者标记分组中某个字段)
3.7 TCP拥塞控制
TCP通过维护拥塞窗口cwnd的大小来执行拥塞控制,tcp发送方需要保证下式成立:
LastByteSend-LastByteAcked <= min{cwnd,rwnd}
如何发现拥塞:一个丢失的报文段,三个冗余的ACK
如何发现网络有剩余带宽:正确回应的ack
MSS:cwnd增加的单位,是一个较小值。ssthresh:慢启动阈值,到达阈值的cwnd将进入拥塞避免模式。
拥塞控制cwnd的大小变化是线性增加,乘性减少。图案成锯齿状。TCP的平均吞吐量的高度简化模型的公式为: 一条连接的平均吞吐量 = (0.75*W)/RTT
W是cwnd的简写。
对于高速TCP连接,这个公式为: 一条连接的平均吞吐量 = (1.22*MSS)/RTT*根号L L为丢包率。
拥塞控制:慢启动-拥塞控制-快速恢复
AIMD:线性增,乘性减 控制发送速率
状态机: