tcp 详解一书tcp部分笔记

 


the first: build a connection need three times  handshake ,but end aconnection need four wave
既然一个tcp连接是全双工的,即数据在两个方向上能够同时传播,因此每个方向必须单独的进行关闭。责原则就是当一方完成它的数据发送任务后就能发送一个fin来终止这个方向的连接,当一端收到一个fin,它必须通知应用层另一端哪儿终止那个方向的数据传送,发送fin通常是应用层进行关闭的结果。


异常终止---abortive release
 它有2个优点:
     1:丢弃任何待发数据并立即发送复位报文段
    2:RST 的接受方会区分另一端执行的是异常关闭还是正常关
        闭。
    使用sock程序能够观察这种异常关闭的过程,通过 “linger
    on close  ”选项SO_LINGER 提供了这种异常关闭能力

    sock -L0 端口 命令

第十九章 tcp的交互数据流

nagle 算法:要求一个tcp连接上最多只能有一个未被确认的未完成小分组,在该分组确认到达之前不能发送其他小分组。

指数退避--exponential backoff
    为重发的倍乘关系。
tcp 超时与重传中最重要的部分就是对一个给定连接的往返时间的测量

kam算法:
 当一个超时和重传发生时,在重传数据的确认最后到达之前,布恩了更新RTT估计器,因为我们并不知道ack对应那次传输。



 判断包丢失有2种方法:
                     1:收到重复的应答包,一般是观察收到3个重复应答信令
                    2:TCP重传超时(RTO),RTO 是指发送端将一个报文段发送出去
                       到发送端认为该报文断已经丢失而重传该报文断的时间间隔
发送端发出报文段后,在规定的时间内没有能够收到接收端返回的ACK信号,从而使得
发送端认为该报文段丢失,触发其拥塞控制策略,当报文段发出后,重传计时器启动并
开始记时,如果发送端在计时器超时前得到ACK,则timer 停止。




tcp 的流量控制与拥塞控制
    1:滑动窗口的概念
        为了提高报文段的传输效率,tcp采用大小可变的滑动窗口进行流量控制,窗口的大小是字节,在tcp报文段首部窗口写入的数值就是当前给对方设置的发送窗口数值的上限。
    2:four analyse algorithmic
        慢开始,拥塞避免,快重传,快恢复。
    3:慢开始和拥塞控制
        1:接收端窗口--通知窗口
        2:拥塞窗口,这是发送端根据自己估计的网络拥塞程度而设置的窗口值,是来自发送端的流量控制。
        3:发送窗口的上限值=min[rwnd,cwnd];
        4:慢开始算法原理
            由小到大逐渐增大发送端的拥塞窗口数值,通常在刚刚开始发送报文段时可先将拥塞窗口cwnd设置位一个最大的报文段mss的数值,而在每收到一个报文段的确认后,将拥塞窗口增大至多一个mss值。
            1:为了防止cwnd窗口的增长引起网络拥塞,设置了一个门阀值,慢开始门限---ssthresh,用法如下:
            当cwnd<ssthresh,使用上述的慢开始算法。
            当cwnd>ssthresh,停止使用慢开始算法,而改用拥塞避免算法。
            当cwnd=ssthresh,既可以使用慢开始算法,也可以使用拥塞避免算法。
            拥塞避免算法具体做法是:
                使发送端的cwnd窗口,每经过一个往返时延RTT 就增加一个Mss的大小,而不管在该时间内收到几个ACK。
            2:网络出现拥塞的判断依据:
                发送端没有按时收到ACK或者收到来重复的ACK,在这时,要将慢开始的门限ssthresh设置为出现拥塞时的发送窗口值的一半,同时将cwnd设置位1,并开始慢开始算法。
    4:快重传和快恢复
        快重传算法:发送端只要一连收到3个重复的ack即可断定有分组丢失来,就应立即重传丢失的报文段而不必继续等待为该报文段设置的重传计时器的超时。
        快恢复算法:
            1:当发送端收到连续3个重复的ACK,就按照前面的乘法减小,重新设置慢开始门限ssthresh。
            2:将cwnd值设置位ssthresh+3*MSS。
            3:若发送窗口还容许发送报文段,就按照拥塞避免算法继续发送报文段
            4:若收到来确认新的报文段的ACK ,就将cwnd缩小到ssthresh


TCP时钟
    tcp协议需要定时器来维护发送端的状态,虽然这些定时器可以在一个定时器中实
    现,但是,linux还是使用了不同的定时器,当timer被init时,给他么指定来不同
    的相关函数,在定时器到时时调用该函数。
    函数tcp_init_xmit_timers()初始化所有的tcp定时器。

    1:tcp写定时器
        目的:
            1:重传定时,发送数据后等待收到确认的最大时间。
            2:窗口探测。
            上面的两个定时器不会同时发生,因此可以用一个定时器来实现。
            重传定时器是在发送包含数据的报文段之后设置,当定时时间到的时候,
            调用函数tcp_write_timer(),如果要重传的话,继续调用函数tcp_retran
            smit_timer().

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值