zoukankan      html  css  js  c++  java
  • 【计算机网络】第三章 传输层(3)

    五.滑动窗口协议

    1. 流水线机制:提高资源利用率

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

    2)需要更大的序列号范围

    3)发送方/接收方需要更大的存储空间以缓存分组

    2. 滑动窗口协议(Sliding-window protocol

    1)窗口:允许使用的序列号问题

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

    3)滑动窗口协议:GBNSR

    3. Go-Back-N协议

    1)发送方

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

      ·窗口尺寸为N,表示最多有N个等待确认的消息

      ·ACKn):确认到序列号n的分组均已被正确接收

      ·为空中的分组设置计时器

      ·超时事件:重传序列号大于等于n,还未收到ACK的全部分组

      ·发送方扩展FSM

    2)接收方

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

      ·乱序到达的分组:直接丢弃,重新确认序列号最大的、按序到达的分组

    4. Selective Repeat协议

    (1)GBN的缺陷:网络中产生许多重复分组,导致效率降低

    (2)解决办法

      ·接收方对每个分组单独确认,设置缓存机制,接收乱序到达的分组

      ·发送方只重传那些没收到ACK的分组,为每个分组设置定时器

      ·发送方窗口使用N个连续序列号,限制已发送且未确认的分组

    (3)困境:无法区分相同序列号是后续分组还是重传

    (4)若序列号位数为k,窗口尺寸需满足Ns + Nr <= 2^k

     

    六.TCP协议

    1. 概述

    1)点对点,可靠,按序

    2)流水线机制:TCP拥塞控制和流量控制机制设置窗口尺寸

    3)全双工:同一连接中传输双向数据流

    4)面向连接

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

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

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

    2. TCP段结构

     

    (1)序列号:segment中第一个字节的编号,建立TCP连接时,双方随机选择

    (2)ACK编号:希望接收到的下一个字节的序列号,累计确认

    (3)对乱序到达的segment,无规范规定,由TCP实现者决策

    3. TCP可靠数据传输

    (1)概述

      ·单一重传定时器

      ·触发重传的事件:超时、收到重复ACK

      ·渐进式:暂不考虑重复ACK、流量控制和拥塞控制

    (2)RTT和超时

      ·定时器的超时时间:大于RTT

      ·RTT的估计:测量从段发出去到收到ACK的时间,即SampleRTT,测量多个SampleRTT求平均值,形成RTT估计值EstimatedRTT

      ·指数加权移动平均:EstimatedRTT = (1 - α) * EstimatedRTT + α * SampleRTT (α通常为0.125

    (3)定时器超过时间的设置:EstimatedRTT + 安全边界

      ·RTT变化值:DevRTT = (1 - β) * DevRTT + β * |SampleRTT - EstimatedRTT| (β通常为0.25

      ·TimeoutInterval = EstimatedRTT + 4 * DevRTT

    4. TCP发送方事件

    (1)从应用层收到数据

      ·创建Segment,序列号是第一个字节的编号

      ·开启计时器,设置超时时间

    (2)超时:重传引起超时的Segment,重启定时器

    (3)收到ACK:如果确认此前未确认的Segment,更新SendBase,若窗口中还有未被确认的分组,重新启动定时器

    5. TCP接收方事件

    (1)ACK生成:RFC 1122RFC 2581

      ·到达按序段,在此段前所有segment都已确认:等待500ms后无后续段,确认

      ·到达按序段,在此段前有一个segment等待确认:立刻发送ACK,确认两个段

      ·到达乱序段:立刻发送重复ACK

    (2)快速重传机制

      ·TCP实现中,发生超时后,时间间隔会重新设置,等于加倍,重发分组要等待许久

      ·通过重复ACK检测分组丢失:发送方背靠背地发送多个分组,收到同一数据的三个ACK则假定该数据之后的段已丢失

    6. TCP流量控制

    (1)接收方为TCP连接分配buffer:由于上层应用可能处理数据较慢,发送方不会发送太快或太多

    (2)假定TCP receiver丢弃乱序的segmentsBuffer中的可用空间为:RcvWindow = RcvBuffer - |LastByteRcvd - LastByteRead|

    (3)接收方通过segment得头部字段将RcvWindow告诉发送方,即使RcvWindow0,也可以再发送一个极小段

    7. TCP连接管理

    (1)建立连接

      ·初始化TCP变量:Seq#Buffer和流量控制信息

      ·Client:连接发起者

      ·Server:等待客户连接请求

    (2)三次握手

      ·客户端发送SYN段:表示建立连接,无数据,初始化seq#

      ·服务器接收SYN,回复SYNACK,分配缓存,选择序列号,告知客户端

      ·客户端收到SYNACK,答复ACK,确认已收到同意连接的报文段

    (3)关闭连接:clientSocket.close()

      ·客户端向服务器发送TCP FIN控制段

      ·服务器收到FIN,回复ACK,关闭连接,发送FIN

      ·客户端收到FIN,回复ACK,进入等待(通常30s),如果收到FIN,重新发送ACK

      ·服务器收到ACK,连接关闭

  • 相关阅读:
    CentOS如何挂载U盘(待更新)
    CentOS6.8启动Tomcat无法访问
    CentOS7安装后连不上网络无法使用yum
    Android Studio 3.0找不到Android Device Monitor
    初识 ‘测试左移 测试右移’
    利用coverage工具进行Python代码覆盖率测试
    Charles抓包过滤的四种方式
    postman中添加cookie信息
    初始Activity启动模式
    MySQL数据库报错:Too many connection
  • 原文地址:https://www.cnblogs.com/zhangyushuqing/p/9795967.html
Copyright © 2011-2022 走看看