zoukankan      html  css  js  c++  java
  • Internet传输协议-TCP

    http://phei.eefocus.com/book/08-07/473781276058574.html

    http://www.eefocus.com/communication/210643

    传输协议的要素

    1215920879

    6.2.1寻址

    1215920963

    1215920970

    1215920977

    1215921025

    6.2.2 建立连接

    1215921033

    1215921083

    1215921090

    1215921101

    6.2.3 释放连接

    1215921160

    两军问题

    1215921168

    1215921209

    1215921216

    6.2.4 流控制和缓冲

    1215921272

    1215921278

    6.2.5多路复用

    1215921288

    TCP/IP体系中的传输层

    1215921435

    6.5.1TCP介绍

    1215921516

    1215921522

    TCP的序列号和确认号

    1215921580

    1215921587

    1215921658

    1215921631

    6.5.5 TCP的连接建立和释放

    1215921696

    三次握手的建立连接过程

    1215921742

    TCP 连接释放

    1215921768

    6.5.7 TCP连接的管理模型

    1215921815

    6.5.8 TCP的传输策略

    • 基于确认和可变窗口大小;
    • 窗口大小为0时,正常情况下,发送方不能再发送TCP段,但有两个例外:
            紧急数据可以发送;
            为防止死锁,发送方可以发送1字节的TCP段,以便让接受方重新声明确认号和窗口大小。

      1215921899

    TCP的传输效率

    • TCP/IP开销=20 字节TCP头 + 20字节IP头
    • 例如使用 TELNET连接, 每发送1个字节数据就要附加 40 字节的开销(41+40+40+41)

    提高TCP传输效率的方法

    • 策略1:发送方缓存应用程序的数据,等到形成一个比较大的段再发出;
    • 策略2:在没有可能进行“捎带”的情况下,接收方延迟发送确认段;
    • 策略3:使用Nagle算法:当应用程序每次向传输实体发出一个字节时,传输实体发出第一个字节并缓存所有其后的字节直至收到对第一个字节的确认;
            然后将已缓存的所有字节组段发出并对再收到的字节缓存,直至收到下一个确认;
            如果缓存的数据填满一半的窗口或是最大数据段时也可发送;

    愚笨窗口综合症(Silly window syndrome)

    1215921981

    Negle+Clark

    • 发送端:避免发送太小的数据段;
    • 接收端:避免请求太小的数据段。

    6.5.9 TCP的拥塞控制

    • 出现拥塞的情况
            快网络小缓存接收者;
            慢网络大缓存接收者
    • 导致网络拥塞的潜在因素:
            网络能力:拥塞窗口
            接收能力:接收窗口

      1215922075

    TCP拥塞管理策略

    • TCP处理第一种拥塞的措施
            在连接建立时声明最大可接受段长度;
            利用可变滑动窗口协议防止出现拥塞;
    • TCP处理第二种拥塞的措施
            发送端的主机在确定发送报文段的速率时,既要根据接收端的接收能力,又要从全局考虑不要使网络发生拥塞;
            拥塞窗口依照慢启动(slow start)算法和拥塞避免(congestion avoidance)算法变化。

    发送窗口的上限值

    • 发送端的发送窗口的上限值应当取为接收端窗口
    • rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定:
           发送窗口的上限值 = Min [rwnd, cwnd]
    • 当 rwnd < cwnd 时,是接收端的接收能力限制发送窗口的最大值。
    • 当 cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值。

    慢启动算法(slow start)

    • 连接建立时拥塞窗口(cwnd)初始值为该连接允许的最大段长,阈值(threshold)为64KB;
    • Start with cwnd = 1
      On each successful ACK increment cwnd: cwnd——cnwd + 1
    • Exponential growth of cwnd in
      each RTT: cwnd —— 2 x cwnd
    • Enter CA when cwnd >= ssthresh

      1215922251

    拥塞避免算法 congestion avoidance

    • 若拥塞窗口大于阈值,从此时开始,拥塞窗口线性增长,一个RTT周期增加一个最大段长,直至发生丢包超时事件;
    • 当超时事件发生后,阈值设置为当前拥塞窗口大小的一半,拥塞窗口重新设置为一个最大段长;
    • 执行慢启动算法。

    慢开始和拥塞避免算法的实现举例

    1215922299

           当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。
           慢开始门限的初始值设置为 16 个报文段,即 ssthresh = 16。

    1215922363

           发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。

    1215922396

           在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0

    1215922428

           发送端收到 ACK1 (确认 M0,期望收到 M1)后,将 cwnd 从 1 增大到 2,于是发送端可以接着发送 M1 和 M2 两个报文段。

    1215922493

           接收端发回 ACK2 和 ACK3。发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1。现在发送端的 cwnd 从 2 增大到 4,并可发送 M4 ~ M6共 4个报文段。

    1215922545

           发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输次数按指数规律增长。

    1215922589

           当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。

    1215922599

           假定拥塞窗口的数值增长到 24 时,网络出现超时(表明网络拥塞了)。

    1215922626

           更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢开始算法。

    1215922654

           当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。

    乘法减小 (multiplicative decrease)

    • “乘法减小“是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前的拥塞窗口值乘以 0.5。
    • 当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。

    加法增大 (additive increase)

    • “加法增大”是指执行拥塞避免算法后,当收到对所有报文段的确认就将拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。
  • 相关阅读:
    河北省重大技术需求征集系统(10)
    河北省重大技术需求征集系统(9)
    大三上学期周总结
    河北省重大技术需求征集系统(8)
    《代码大全》阅读笔记(三)
    河北省重大技术需求征集系统(7)
    河北省重大技术需求征集系统(6)
    河北省重大技术需求征集系统(5)
    【自动化】Aritest+python实现客户端UI自动化
    【自动化】Monkey自动化测试实现总结
  • 原文地址:https://www.cnblogs.com/jjkv3/p/3204810.html
Copyright © 2011-2022 走看看