美文网首页
3传输层

3传输层

作者: 龟龟51 | 来源:发表于2017-11-03 17:20 被阅读0次

    3.1传输层服务

    3.1.1传输层服务概述

    传输层服务和协议

    ■传输层协议为运行在不同Host上的进程提供了一种逻辑通信机制

    ■端系统运行传输层协议§ 发送方:将应用递交的消息分成一个或多个的Segment,并向下传给网络层。

    § 接收方:将接收到的segment组装成消息,并向上交给应用层。

    ■传输层可以为应用提供多种协议§Internet上的TCP§Internet上的UD

    传输层vs.网络层

    v■网络层:提供主机之间的逻辑通信机制v■传输层:提供应用进程之间的逻辑通信机制§ 位于网络层之上

    § 依赖于网络层服务§ 对网络层服务进行(可能的)增强

    Internet传输层协议

    v■可靠、按序的交付服务(TCP)§ 拥塞控制§ 流量控制§ 连接建立v■不可靠的交付服务(UDP)§ 基于“尽力而为(Best-effort)”的网络层,没有做(可靠性方面的)扩展■v两种服务均不保证§ 延迟§ 带宽

    3.2多路复用和多路分用

    Why?v 如果某层的一个协议对应直接上层的多个协议/实体,则需要复用/分用


    分用如何工作?

    v■主机接收到IP数据报(datagram)

    § 每个数据报携带源IP地址、目的IP地址。§ 每个数据报携带一个传输层的段(Segment)。

    § 每个段携带源端口号和目的端口号

    v■主机收到Segment之后,传输层协议提取IP地址和端口号信息,将Segment导向相应的Socket

    `TCP做更多处理


    无连接分用

    ■利用端口号创建

    SocketDatagramSocket mySocket1 = new DatagramSocket(99111);

    DatagramSocket mySocket2 = new DatagramSocket(99222);

    ■UDP的Socket用二元组标识§(目的IP地址,目的端口号)

    ■主机收到UDP段后§ 检查段中的目的端口号§ 将UDP段导向绑定在该端口号的Socket

    ■来自不同源IP地址和/或源端口号的IP数据包被导向同一个Socket (源端口号提供返回地址)


    面向连接的分用

    ■TCP的Socket用四元组标识

    § 源IP地址

    § 源端口号

    § 目的IP地址

    § 目的端口号

    ■接收端利用所有的四个值将Segment导向合适的Socketv

    ■服务器可能同时支持多个TCP Socket

    § 每个Socket用自己的四元组标识

    ■Web服务器为每个客户端开不同的Socket


    面向连接的分用:多线程Web服务器


    3.3无连接传输协议-UDP

    UDP: User Datagram Protocol [RFC 768]

    v ■基于Internet IP协议§ 复用/分用§ 简单的错误校验

    (端到端的原则:不能保证下面各层都有错误检测机制,也不能保证在各层传输过程中不会出错,所以需要在靠近应用层做一个错误校验。)

    ■“Best effort”服务,UDP段可能

    § 丢失

    § 非按序到达

    ■无连接

    §UDP发送方和接收方之间不需要握手

    § 每个UDP段的处理独立于其他段

    UDP为什么存在?

    无需建立连接(减少延迟)

    实现简单:无需维护连接状态

     头部开销少

    没有拥塞控制:应用可更好地控制发送时间和速率

    v■常用于流媒体应用

    § 容忍丢失

    § 速率敏感

    v■UDP还用于

    §DNS

    §SNMP

    v■在UDP上实现可靠数据传输?

    § 在应用层增加可靠性机制§ 应用特定的错误恢复机制


    UDP校验和(checksum)

    目的:检测UDP段在传输中是否发生错误(如位翻转)

    v■发送方

    § 将段的内容视为16-bit整数

    § 校验和计算:计算所有整数的和,进位加在和的后面,将得到的值按位求反,得到校验和

    § 发送方将校验和放入校验和字段

    v■接收方§ 计算所收到段的校验和

    § 将其与校验和字段进行对比

    • 不相等:检测出错误

    • 相等:没有检测出错误(但可能有错误)


    3.4可靠数据传输的原理

    ■什么是可靠?

    § 不错、不丢、不乱

    ■可靠数据传输协议

    § 可靠数据传输对应用层、传输层、链路层都很重要

    § 网络Top-10问题

    § 信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性

    可靠数据传输协议基本结构:接口


    可靠数据传输协议

    v■渐进地设计可靠数据传输协议的发送方和接收方

    v■只考虑单向数据传输

    § 但控制信息双向流动

    v■利用状态机(Finite State Machine, FSM)刻画传输协议


    Rdt 1.0:可靠信道上的可靠数据传输

    v■底层信道完全可靠

    Ø不会发生错误(bit error)

    Ø不会丢弃分组

    v■发送方和接收方的FSM独立


    Rdt 2.0:产生位错误的信道(会有位错误)

    v ■底层信道可能翻转分组中的位(bit)§ 利用校验和检测位错误

    v■如何从错误中恢复?

    § 确认机制(Acknowledgements, ACK):接收方显式地告知发送方分组已正确接收

    §NAK:接收方显式地告知发送方分组有错误§ 发送方收到NAK后,重传分组

    v ■基于这种重传机制的rdt协议称为ARQ(Automatic Repeat reQuest)协议

    v ■Rdt 2.0中引入的新机制

    § 差错检测

    § 接收方反馈控制消息: ACK/NAK

    § 重传


    停等协议:发送方没有收到接收方的确认ACK不会发送下一个分组。

    Rdt 2.0有什么缺陷?

    v ■如果ACK/NAK消息发生错误/被破坏(corrupted)会怎么样?Ø 为ACK/NAK增加校验和,检错并纠错(花销较大)

    Ø 发送方收到被破坏ACK/NAK时不知道接收方发生了什么,添加额外的控制消息(额外消息任然可能会坏掉)

    Ø 如果ACK/NAK坏掉,发送方重传

    Ø 不能简单的重传:产生重复分组

    v ■如何解决重复分组问题?

    §序列号(Sequence number):发送方给每个分组增加序列号§ 接收方丢弃重复分组



    Rdt 2.1 vs. Rdt 2.0

    v■发送方:·p为每个分组增加了序列号·p两个序列号(0, 1)就够用,为什么?(因为使用了停等协议)·p需校验ACK/NAK消息是否发生错误·p状态数量翻倍p状态必须“记住”“当前”的分组序列号v■接收方p·需判断分组是否是重复p当前所处状态提供了期望收到分组的序列号p·注意:接收方无法知道ACK/NAK是否被发送方正确收到

    Rdt 2.2:无NAK消息协议

    v ■与rdt 2.1功能相同,但是只使用ACK

    v ■如何实现?

    Ø 接收方通过ACK告知最后一个被正确接收的分组Ø 在ACK消息中显式地加入被确认分组的序列号(发送确定收到最后一个分组的序列号)

    v ■发送方收到重复ACK之后,采取与收到NAK消息相同的动作Ø 重传当前分组


    Rdt 3.0

    ■如果信道既可能发生错误,也可能丢失分组,怎么办?

    § “校验和+序列号+ ACK +重传”够用吗?加定时器

    v■方法:发送方等待“合理”时间§ ·如果没收到ACK,重传

    § ·如果分组或ACK只是延迟而不是丢了

    •重传会产生重复,序列号机制能够处理

    •接收方需在ACK中显式告知所确认的分组

    § ·需要定时器


    Rdt 3.0性能分析

    v■Rdt 3.0能够正确工作,但性能很差

    v■示例:1Gbps链路,15ms端到端传播延迟,1KB分组


    § 发送方利用率:发送方发送时间百分比


    § 在1Gbps链路上每30毫秒才发送一个分组è33KB/sec§ 网络协议限制了物理资源的利用

    3.5流水线机制与滑动窗口协议



    流水线协议

    ■允许发送方在收到ACK之前连续发送多个分组§ 更大的序列号范围§ 发送方和/或接收方需要更大的存储空间以缓存分组


    滑动窗口协议


    v■滑动窗口协议: Sliding-window protocol

    v■窗口§ 允许使用的序列号范围§ 窗口尺寸为N:最多有N个等待确认的消息

    v■滑动窗口

    § 随着协议的运行,窗口在序列号空间内向前滑动

    v■滑动窗口协议:GBN, SR

    Go-Back-N(GBN)协议:发送方

    ■分组头部包含k-bit序列号

    v■窗口尺寸为N,最多允许N个分组未确认(累积N确认,N之前的全部都确认收到了)


    v■ACK(n):确认到序列号n(包含n)的分组均已被正确接收§ 可能收到重复ACK

    ■为空中的分组设置计时器(timer)

    v■超时Timeout(n)事件:重传序列号大于等于n,还未收到ACK的所有分组



    ■ACK机制:发送拥有最高序列号的、已被正确接收的分组的ACK§ 可能产生重复ACK

    § 只需要记住唯一的expectedseqnum

    v■乱序到达的分组:

    § 直接丢弃

    è接收方没有缓存

    § 重新确认序列号最大的、按序到达的分组


    Selective Repeat协议

    v■GBN有什么缺陷?

    v■接收方对每个分组单独进行确认

    § 设置缓存机制,缓存乱序到达的分组

    v■发送方只重传那些没收到ACK的分组

    § 为每个分组设置定时器

    v■发送方窗口

    §N个连续的序列号

    § 限制已发送且未确认的分组


    SR协议

    ■发送方的时间和动作

    从上层收到数据:检查下一个可用分组的序号,如果序号是在窗口内则打包发送,

    超时:重发分组,重新定时

    收到ACK(n),在窗口内,就会将已确认的分组标记为已接收。如果这个分组是该窗内最小分组即send_base就挪动窗口,发送窗口内为发送的分组。

    ■接收方的时间和动作

    分组序号在[rcvbase, rcvbase+N-1]:发送ACK(n),超过则缓冲,在序号内,滑动窗口,并且将已经确认有序的分组交付给上层。

    序号在[rcvbase-N,rcvbase-1]:发送ACK(n)。

    ■其他情况:忽略


    问题:序列号空间大小与窗口尺寸需满足什么关系?§N_send+N_recv<=2k

    3.6面向连接传输协议-TCP

    TCP概述: RFCs-793, 1122, 1323, 2018, 2581

    v■点对点§ 一个发送方,一个接收方

    v■可靠的、按序的字节流v■流水线机制

    §TCP拥塞控制和流量控制机制设置窗口尺寸

    v■发送方/接收方缓存

    v■全双工(full-duplex)§ 同一连接中能够传输双向数据流

    v■面向连接§ 通信双方在发送数据之前必须建立连接。

    § 连接状态只在连接的两端中维护,在沿途节点中并不维护状态。

    §TCP连接包括:两台主机上的缓存、连接状态变量、socket等

    v■流量控制机制

    TCP段结构


    TCP:序列号和ACK

    序列号:§ 序列号指的是segment中第一个字节的编号,而不是segment的编号

    § 建立TCP连接时,双方随机选择序列号ACKs:

    § 希望接收到的下一个字节的序列号

    § 累计确认:该序列号之前的所有字节均已被正确接收到Q:接收方如何处理乱序到达的Segment?

    §A: TCP规范中没有规定,由TCP的实现者做出决策

    TCP可靠数据传输概述

    v■TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务

    v■流水线机制

    v■累积确认

    v■TCP使用单一重传定时器

    v■触发重传的事件

    § 超时

    § 收到重复ACK

    v■渐进式

    § 暂不考虑重复ACK

    § 暂不考虑流量控制

    § 暂不考虑拥塞控制

    TCP RTT和超时

    v■问题:如何设置定时器的超时时间?

    v■大于RTT§ 但是RTT是变化的

    v■过短:

    § 不必要的重传

    v■过长:

    § 对段丢失时间反应慢

    v■问题:如何估计RTT?

    v■SampleRTT:测量从段发出去到收到ACK的时间

    § 忽略重传

    v■SampleRTT变化

    § 测量多个SampleRTT,求平均值,形成RTT的估计值EstimatedRTT



    TCP发送方事件

    v■从应用层收到数据§ 创建Segment§ 序列号是Segment第一个字节的编号

    § 开启计时器§ 设置超时时间:TimeOutInterval

    v■超时

    § 重传引起超时的Segment

    § 重启定时器(只重传一个超时的那个)

    v■收到ACK

    § 如果确认此前未确认的Segment

    • 更新SendBase

    • 如果窗口中还有未被确认的分组,重新启动定时器

    TCP发送端程序 (伪码)





    快速重传机制

    v■TCP的实现中,如果发生超时,超时时间间隔将重新设置,即将超时时间间隔加倍,导致其很大

    § 重发丢失的分组之前要等待很长时间

    v■通过重复ACK检测分组丢失

    §Sender会背靠背地发送多个分组

    § 如果某个分组丢失,可能会引发多个重复的ACK

    v■如果sender收到对同一数据的3个ACK,则假定该数据之后的段已经丢失

    § 快速重传:在定时器超时之前即进行重传


    TCP流量控制



    TCP连接管理

    v■TCP sender和receiver在传输数据前需要建立连接

    v■初始化TCP变量

    §Seq. #

    §Buffer和流量控制信息

    v■Client:连接发起者Socket clientSocket = new Socket("hostname","port number");

    v■Server:等待客户连接请求Socket connectionSocket = welcomeSocket.accept();

    三次握手协议:

    (1)[endif]第一次握手:Client将标志位SYN置为1,随机产生一个值seq=client_isn,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

    (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=client_isn+1,随机产生一个值seq=server_isn,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。(3)第三次握手:Client收到确认后,检查ack是否为client_isn+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=server_isn+1,并将该数据包发送给Server,Server检查ack是否为server_isn+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

    TCP为什么是三次握手,为什么不是两次或四次?

    如果两次握手的话,客户端有可能因为网络阻塞等原因会发送多个请求报文,这时服务器就会建立连接,浪费掉许多服务器的资源.如果四次握手:三次已经互相确认了可以进行连接了,在来一次确认浪费资源


    TCP连接管理:关闭

    Step 1: client向server发送TCP FIN控制segment

    Step 2: server收到FIN,回复ACK.关闭连接,发送FIN.

    Step 3: client收到FIN,回复ACK.

    § 进入“等待” –如果收到FIN,会重新发送ACK

    Step 4: server收到ACK.连接关闭




    3.7拥塞控制原理

    拥塞(Congestion)

    v■非正式定义:“太多发送主机发送了太多数据或者发送速度太快,以至于网络无法处理”

    v■表现:§ 分组丢失(路由器缓存溢出)

    § 分组延迟过大(在路由器缓存中排队)

    v■拥塞控制vs.流量控制






    拥塞控制的方法

    v■端到端拥塞控制:

    § 网络层不需要显式的提供支持

    § 端系统通过观察loss,delay等网络行为判断是否发生拥塞

    §TCP采取这种方法

    v■网络辅助的拥塞控制:

    § 路由器向发送方显式地反馈网络拥塞信息§ 简单的拥塞指示(1bit):SNA,DECbit, TCP/IP ECN, ATM)

    § 指示发送方应该采取何种速率

    案例:ATM ABR拥塞控制

    v■ABR:available bit rate

    § ·“弹性服务”

    §· 如果发送方路径“underloaded”•使用可用带宽

    § ·如果发送方路径拥塞•将发送速率降到最低保障速率

    v■资源管理单元RM(resource management cells)

    § 发送方发送§ 交换机设置RM cell位(网络辅助)

    •NI bit: rate不许增长

    •CI bit:拥塞指示§RM cell由接收方返回给发送方


    v ■在RM cell中有显式的速率(ER)字段:两个字节

    § 拥塞的交换机可以将ER置为更低的值

    § 发送方获知路径所能支持的最小速率

    v ■数据cell中的EFCI位:拥塞的交换机将其设为1

    § 如果RM cell前面的data cell的EFCI位被设为1,那么发送方在返回的RM cell中置CI位

    3.8TCP拥塞控制

    TCP拥塞控制的基本原理

    v■Sender限制发送速率LastByteSent-LastByteAcked<= CongWin.


    v■CongWin:§ 动态调整以改变发送速率§ 反映所感知到的网络拥塞

    ■问题:如何感知网络拥塞?

    Loss事件=timeout或3个重复ACKv发生loss事件后,发送方降低速率

    ■如何合理地调整发送速率?

    加性增—乘性减: 

    AIMDv慢启动: SS

    加性增—乘性减: AIMD

    v■原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生lossv

    ■方法: AIMD§Additive Increase:每个RTT将CongWin增大一个MSS——拥塞避免

    §Multiplicative Decrease:发生loss后将CongWin减半


    TCP慢启动: SS

    v■TCP连接建立时,CongWin=1

    § 例:MSS=500 byte,RTT=200msec

    § 初始速率=20k bps

    ■可用带宽可能远远高于初始速率:

    § 希望快速增长

    v■原理:

    § 当连接开始时,指数性增长


    v■指数性增长§ 每个RTT将CongWin翻倍

    § 收到每个ACK进行操作v

    ■初始速率很慢,但是快速攀升


    Threshold变量

    ■Q:何时应该指数性增长切换为线性增长(拥塞避免)?

    A:当CongWin达到Loss事件前值的1/2时.

    ■实现方法:v 变量ThresholdvLoss事件发生时, Threshold被设为Loss事件前CongWin值的1/2。


    Loss事件的处理

    v ■3个重复ACKs:

    §CongWin切到一半

    § 然后线性增长v

     ■Timeout事件:

    §CongWin直接设为1个MSS

    § 然后指数增长

    § 达到threshold后,再线性增长

    注:3个重复ACKs表示网络还能够传输一些segments,timeout事件表明拥塞为严重

    TCP拥塞控制:总结

    ■当congwin小于Threadhold,发送方处于满启动状态,congwin以指数增长。

    ■当congwin在Threadhold以上,发送方处于拥塞避免阶段,congwin以线性增长

    ■当出现拥塞事件的时候,Threadhold更新为congwin/2,congwin为Threadhold大小

    ■当出现超时事件时,Threadhold更新为congwin/2,congwin设置为1



    TCP性能分析

    TCP throughput:吞吐率

    v■给定拥塞窗口大小和RTT,TCP的平均吞吐率是多少?

    § 忽略掉Slow start

    ■假定发生超时时CongWin的大小为W,吞吐率是W/RTT

    v■超时后,CongWin=W/2,吞吐率是W/2RTT

    v■平均吞吐率为:0.75W/RTT



    TCP的公平性


    TCP是公平的


    连接1,2的速率增加到拥塞时同时减半,然后有增加,最终会收敛于45°斜线

    v■公平性与UDP

    § 多媒体应用通常不使用TCP,以免被拥塞控制机制限制速率

    § 使用UDP:以恒定速率发送,能够容忍丢失

    § 产生了不公平

    v■公平性与并发TCP连接

    § 某些应用会打开多个并发连接§Web浏览器§ 产生公平性问题v

    ■例子:链路速率为R,已有9个连接

    § 新来的应用请求1个TCP,获得R/10的速率

    § 新来的应用请求11个TCP,获得R/2的速率

    相关文章

      网友评论

          本文标题:3传输层

          本文链接:https://www.haomeiwen.com/subject/xsntmxtx.html