• 计算机网络4_传输层


    1、传输层

    协议栈层次:application   transport    network    link    physical

    理解传输层服务的基本理论和基本机制

    多路复用/分用

    可靠数据传输机制

    流量控制机制

    拥塞控制机制

     

    掌握Internet的传输层协议

    UDP:无连接传输服务

    TCP:面向连接的传输服务

    TCP拥塞控制

    ================================================================== 

    2、传输层概述

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

    逻辑通信机制:两个通信进程之间仿佛是直接连接的,不需要关心之间多远的物理距离,到底经过多少路由器,到底经过多少物理层。

    端系统运行传输层协议:

    发送方:将应用递交的消息分成一个或多个的Segment,并向下传给网络层。

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

    传输层可以为应用提供多种协议

             Internet上的TCP

             Internet上的UDP

    网络层:提供主机之间的逻辑通信机制

    传输层:提供应用进程之间的逻辑通信机制

             位于网络层之上

                       依赖于网络层服务

                       对网络层服务进行(可能性)增强

             可靠、按序的交付服务(TCP)

                       拥塞控制

                       流量控制

                       连接建立

             不可靠的交付服务(UDP)

                       基于“尽力而为”的网络层,没有做(可靠性方面的)扩展

             两种服务都不保证

                       延迟

                       带宽

    ==================================================================

    3、多路复用/分用

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

             接收端进行多路分用:

                       传输层依据头部信息将收到的Segment交给正确的Socket即不同的进程。

             发送端进行多路复用:

                       从多个Socket接收数据,为每块数据封装上头部信息,生产Segment,交给网络层。

             分用如何工作?

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

                                每个数据报携带源IP地址、目的IP地址。

                                每个数据报携带一个传输层的段(Segment)。

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

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

                                TCP做更多处理

                                网络层不关心报文中的端口号信息

             无连接分用:

                       利用端口号创建Socket

                       UDP的Socket用二元组标识

                                (目的IP地址,目的端口号)

                       主机收到UDP段后

                                检查段中的目的端口号

                                将UDP段导向绑定在该端口号的Socket

                       来自不同源IP地址和或源端口号的IP数据包被导向同一个Socket

             面向连接的分用

                       TCP的Socket用四元组标识

                                源IP地址

                                源端口号

                                目的IP地址

                                目的端口号

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

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

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

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

    ================================================================== 

    4、UDP协议   User Datagram Protocol

             基于Internet IP协议

                       复用/分用

                       简单的错误校验

             “Best Effort” 服务,UDP段可能

                       丢失

                       非按序到达

             无连接

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

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

             UDP为什么存在?

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

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

                       头部开销少

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

             常用于流媒体应用

                       容忍丢失

                       速率敏感

             UDP还用于

                       DNS

                       SNMP

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

                       在应用层增加可靠性机制

                       应用特定的错误恢复机制

             UDP校验和(checksum)

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

    ==================================================================  

    5 、可靠数据传输原理

    什么是可靠?

             不错、不丢、不乱

    可靠数据传输协议

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

             网络Top-10问题

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

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

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

             只考虑单向数据传输

                       但控制信息双向流动

             利用状态机刻画传输协议

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

             底层信道完全可靠

                       不会发生错误

                       不会丢弃分组

             发送方和接收方的FSM独立                 

             有限状态机  刻画网络协议

     

    Rdt 2.0 产生位错误的信道

             底层信道可能翻转分组中的位(bit)

                       利用校验和检测位错误

             如何从错误中恢复?

                       确认机制:接收方显式地告知发送方分组已正确接收

                       NAK:接收方显式地告知发送方分组有错误

                       发送方收到NAK后,重传分组

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

             Rdt 2.0 中引入的新机制

                       差错检测

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

                       重传

     

    Rdt 2.1 和 2.2

             如果ACK/NAK消息发生错误/被破坏会怎么样?

                       为ACK/NAK增加校验和,检错并纠错

                       添加额外的控制消息

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

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

             如何解决重复分组问题

                       序列号:发送方给每个分组增加序列号

                       接收方丢弃重复分组

     

    Rdt 2.2 无NAK消息协议

     

    Rdt 3.0

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

                       校验和+序列号+ACK+重传   够用吗?

             方法:发送方等待“合理”时间

                       如果没收到ACK,重传

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

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

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

                       需要定时器

             性能分析:

                       能够正确工作,但性能很差

                       网络协议限制了物理资源的利用

                       软硬件协同设计

                       停等操作是主要原因

    ==================================================================   

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

             流水线协议

                       允许发送方在收到ACK之前连续发送多个分组

                                更大的序列号范围

                                发送方和或接收方需要更大的存储空间以缓存分组

             滑动窗口协议

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

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

                       滑动窗口协议:GBN  SR

             GO-Back-N协议

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

                       窗口尺寸为N,最多允许N个分组未确认

             ACK(n):确认到序列号n(包含n)的分组均已被正确接收,累计确认

                       可能收到重复ACK

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

             超时Timer(n)事件:重传序列号大于等于n,还未收到ACK的所有分组(潜在的资源浪费)

             接收方:乱序到达的分组直接丢弃,接收方只接受序列号最大的,按序到达的分组。

                                ACK机制,发送拥有最高序列号的,已被正确接收的分组的ACK。

                                可能产生重复ACK,只需要记住唯一的expectedseqnum。

     

             Selective Repeat (SR)协议

                      GBN的缺陷:

    会重传很多分组,导致网络中充斥着很多重传的分组。

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

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

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

    为每个分组设置定时器

    发送方窗口

    N个连续的序列号

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

                       SR存在的问题:

                                序列号空间大小与窗口尺寸关系

    分组分为:窗口发送方 窗口结构

             已经确认的分组

             已经发送了但未确认的分组

             可用的序列号,可以用来发送的

             不能使用的序列号,窗口还未滑动到

            

    可靠数据传输原理与协议回顾

    信道的(不可靠)特性

    可靠数据传输的需求

    Rdt 1.0

    Rdt 2.0 rdt 2.1  rdt 2.2

    Rdt 3.0

    流水线与滑动窗口协议

    GBN

    SR

    ==================================================================   

    7、TCP概述

    点对点:一个发送方,一个接收方

    可靠的、按序的字节流

    流水线机制

    TCP拥塞控制和流量控制机制动态调整窗口尺寸。

    设置窗口尺寸

    发送方/接收方缓存

    全双工

    同一连接中能够传输双向数据流

    面向连接

    通信双方在发送数据之前必须建立连接

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

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

    流量控制机制

     

    7.1TCP段结构

    序列号

    序列号指的是segment中的第一个字节的编号

    而不是segment的编号

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

    ACKs

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

    累计确认:该序列号之前的所有字节均已被正确接收到

     

    7.2TCP可靠数据传输

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

    流水线机制:

    累积确认:像GBN

    TCP使用单一重传定时器

    触发重传的事件

    超时

    收到重复ACK

    渐进式

    暂不考虑重复ACK

    暂不考虑流量控制

    暂不考虑拥塞控制

     

    TCP RTT和超时

             如何设置定时器的超时时间?

                       大于RTT:但是RTT是变化的

                       过短:不必要的重传

                       过长:对段丢失时间反应慢

     

     

    TCP发送方事件:

             从应用层收到数据

                       创建Segment

                       序列号是Segment的第一个字节的编号

                       开启计时器

                       设置超时时间:TimeOutInterval

             超时

                       重传引起超时的Segment

                       重启定时器

             收到ACK

                       如果确认此前未确认的Segment

                                更新SendBase

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

    TCP重传示例:

    快速重传机制:

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

             通过重复ACK检测分组丢失        

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

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

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

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

     

    为什么是3次?

     

    3.7.3TCP流量控制

             接收方为TCP连接分配buffer

                       上层应用可能处理buffer中数据的速度较慢

    流量控制就是:发送方不会传输的太多、太快以至于淹没接收方(buffer溢出)

     

    速度匹配机制

     

    (假定TCP Receiver 丢弃乱序的 segments)

    Buffer中的可用空间     

    Receiver通过在Segment的头部字段将RcvWindow告诉Sender

    Sender限制自己已经发送的但还未收到ACK的数据不超过接收方的空闲RcvWindow尺寸

    Receiver告知Sender Rcvwindow=0, 会出现什么情况?

     

    7.4TCP连接管理

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

             初始化TCP变量

                       Seq.#

                       Buffer和流量控制信息

             Client:连接发起者

             Server:等待客户连接请求

     

             3次握手:

                       Step 1: client host sends TCP SYN segment to server

                                Specifies initial seq.#

                                No data

                       Step 2: server host receives SYN, replies with SYNACK segment

                                Server allocates buffers 分配缓存

                                Specifies server initial seq.#   选择自己初始序列号,告知客户端

                       Step 3: client receivers SYNACK, replies with ACK segment, which may contain data

     

     

    为什么要3次握手?

             TCP是双向传递的,必须保证双方都能收发,且保证互相知道对方都能收发

     

    7.5拥塞控制   更像是社会问题

             太多发送主机发送了太多数据或者发送速度太快,以至于网络无法处理

    表现:

             分组丢失(路由器缓存溢出)

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

    拥塞控制 vs 流量控制

             流量控制是发送方不要发送得太快,让接收方承受不了

             拥塞控制室让网络承受不了

    拥塞的另一个代价

             当分组被drop时,任何用于该分组的“上游”传输能力全都被浪费掉。

    如何进行拥塞控制:在传输层在做,为什么,要思考一下

             控制网络负载:管制发送方的发送速率

             端到端拥塞控制

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

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

                       TCP采用这种方法

             网络辅助的拥塞控制

                       路由器向发送方显式地反馈网络拥塞信息

                      简单的拥塞指示

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

    ABR:available bit rate

             弹性服务

             如果发送方路径

                       Underloaded

                       使用可用带宽

             如果发送方路径拥塞

                       将发送速率降到最低保障速率

    RM (resource management) cells

             发送方发送

             交换机设置 RM cell 位 (网络辅助)

                       NI bit : rate不许增长

                       CI bit : 拥塞指示

             RM cell 由接收方返回给发送方

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

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

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

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

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

     

    7.6 TCP拥塞控制机制

           TCP拥塞控制面临3个问题:

             如何控制发送速率?

             Sender限制发送速率:

             CongWin: 拥塞窗口 是一个变量   LastByteSent-LastByteAcked<=CongWin

                       Rate=CongWin/RTT

                       动态调整以改变发送速率

                       反映所感知到的网络拥塞

             如何感知网络拥塞?

             Loss事件=timeout或3个重复ACK

             发生loss时间后,发送方降低速率

            

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

             加性增-乘性减:AMID

             慢启动:SS

             AMID

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

                      方法:AIMD

                                Additive Increase: 每个RTT将CongWin增大一个MSS,拥塞避免

                                Multiplicative Decrease: 发生loss后将CongWin 减半

             TCP慢启动:SS

                       TCP连接建立时,CongWin=1

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

                                希望快速增长

                       原理:

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

                       指数性增长:

                                每个RTT将CongWin翻倍

                                收到每个ACK进行操作

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

             Threshold变量:

                       如何从指数性增长变成线性增长(拥塞避免)?

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

                       实现方法:

                                变量Threshold

                                Loss事件发生时,Threshold被设为Loss事件前CongWin值得1/2.

             Loss事件的处理:

                       3个重复ACKs

                                CongWin切到一半

                                然后线性增长

                       Timeout事件          

                                CongWin直接设为1个MSS(Maximum Segment Size)

                                然后指数增长

                                达到threshold后,再线性增长

                      3个重复ACKs表示网络还能够传输一些segment

                       Timeout事件表明拥塞更为严重

             TCP拥塞控制算法

            

    7.7 TCP性能

             TCP throughput 吞吐率

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

                                忽略掉Slow start

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

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

                       平均吞吐率为:0.75W/RTT

             吞吐率和丢包率的关系

                       高速网络下,需要重新设计TCP

             TCP的公平性

                       如果K个TCP Session 共享相同的瓶颈带宽R,那么每个Session的平均速率为R/K。

                       多媒体应用通常不适用TCP,以免被拥塞控制机制限制速率,使用UDP:以恒定速率发送,能够容忍丢失

                       产生了不公平

             公平性与并发TCP连接

                       某些应用会打开多个并发连接

                       Web浏览器

                       产生公平性问题

     

     

    UDP的分组称为 用户数据报

    TCP的分组称为报文段 segment

    Packet 分组

    一个数据包切割成很多段segment

     

    确认机制 Acknowledgement ACK

    ACK NAK

    利用校验和检测底层信道可能产生的位错误

     

     

    可靠数据传输 RDT:不错、不丢、不乱

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

    Rdt_send()

    Udt_send()

    Rdt_rcv()

    Deliver_data()

     

    状态机 (Finite State Machine FSM) 刻画传输协议

    状态表明当前发送方的分组序列号

    接收方的所处状态提供了期望收到的分组序列号

     

    Rdt1.0:

    Rdt2.0: 增加了ACK/NAK机制

    Rdt2.1: 序列号(Sequence number)解决重复分组的问题

    Rdt2.2 无NAK消息协议

    (以上是信道可能发生错误的假设,ACK出错)

    Rdt3.0:(丢失分组可能,或者分组或ACK只是延迟而不是丢了),发送方要设置等待合理时间,这个时间不好设置,需要定时器

    流水线机制:停-等协议效率太低,允许发送方在收到ACK之前连续发送多个分组

    滑动窗口协议:允许使用序列号的范围,窗口在序列号空间内向前滑动。

  • 相关阅读:
    spring mvc---web.xml
    javascript:;与javascript:void(0)使用介绍
    JVM的内存区域划分
    获取配置文件内容
    spring获取webapplicationcontext,applicationcontext几种方法详解
    Spring MVC 中 HandlerInterceptorAdapter的使用(拦截器)
    google开发工具指南
    深克隆
    IO优化
    UML类图
  • 原文地址:https://www.cnblogs.com/grooovvve/p/12251944.html
Copyright © 2020-2023  润新知