zoukankan      html  css  js  c++  java
  • tcp一些要点

    三次握手建立

    1、客户端向服务端发送syn。
    2、服务端向客户端回复syn+ack。
    3、客户端向服务端确认ack。
     
    建立链接的阶段, 客户端/服务端会确认mss(maximum segment size)。
    客户端发送mssA,服务器响应mssB。二者之间小的那个作为MSS。
    建立的过程一边确认RTT
     

    四次挥手断开

    1、客户端向服务端发送fin。
    2、服务端向客户端回复ack。
    3、服务端关闭连接,并且发送fin给客户端。
    4、客户端向服务端发送ack确认。
     
     

    TCP传输要点

     
    tcp是被设计为有状态的,有连接的通讯协议。
    保证可靠性传输:校验和、序列号、确认应答、重发控制、连接管理、窗口控制等。
     
    先假设是有源头、目标这2个点。
     
    1、通过序列号与应答确保可靠性。
    目标需要一定时间段内,响应需要的结果给源头。否则重发。(源头重发次数也不能太多,否则目标受不了^_^)
    需要的结果用序号标记了。
     
    2、重发控制——RTT(round trip time)
    重发超时是指:重发数据之前,会等待的一段时间。
    每次数据包往返,都会计算往返时间(RTT)
    达到一定次数的重发,即表示异常。不再重发。
     
    3、连接管理。
    TCP是有连接的。数据传输之前做了通信两端的工作。3次握手建立,4次挥手断开。
    建立:
    源头请求syn
    目标响应syn+ack
    源头针对目标的syn响应ack。
    断开:
    源头请求fin
    目标响应ack
    目标向源头发出fin
    源头响应ack
     
    4、段、缓冲区、滑动窗口概念
    是TCP传输的最小单位。建立TCP链接,3次握手的时候,双方确认发送数据包的大小,MSS。(max segment size)
     
    (发送一个段就回复, 这样子太慢)以“窗口”大小表示无需等待应答就可以继续发送的数量。
    在缓冲区中存放窗口数量的(假设窗口大小4。序号是1,2,3,4),这些都发出去了,根据响应可以得知哪一些段需要重发。(假设3的应答有了即使没有1、2的应答,那么只需要重传4)这就是滑动窗口
     
    为了避免负荷过高。流量控制的机制,控制窗口大小。发送端不会发送大于窗口大小。发送端过了超时时间,则发送一个窗口探测的包。如果探测到接收端缓冲区满了(窗口放满),响应窗口需要调整。
     
    5、拥塞控制
    slow-start threshold(ssthresh):慢启动门限。
    congestion-window (cwnd):拥塞控制窗口。
     
    5.1慢启动
    避免网络拥塞。
    发送方在慢启动的基础上。有一个拥塞控制窗口(cwnd)。经过一个RTT,cwnd以2的次方变大,变大直到内核定义的ssthresh值为止。
     
    5.2拥塞避免
     
    减少网络拥塞。
    当出现网络拥塞,比如丢包时,将SSTHRESH设为原先的一半,然后将cwnd设为1,执行慢开始算法。
     
    5.3快重传
     
    一旦接收方发现数据丢失,就对该丢失的包做重传请求;
    发送方收到3次该包的重传请求,则重传该包;
    ssthresh 值减半;
    cwnd设置为减半后的ssthresh 值;
    执行拥塞避免算法。
     
     
    *1. cwnd < ssthresh, 继续使用慢开始算法;
    *2. cwnd > ssthresh,停止使用慢开始算法,改用拥塞避免算法;
    *3. cwnd = ssthresh,既可以使用慢开始算法,也可以使用拥塞避免算法;

    TCP定时器&定时器的作用

    重传计时器:Retransmission Timer
    超时则重传

     
    坚持计时器:Persistent Timer
    零窗口通知

     
    保活计时器:Keeplive Timer
    服务器收到请求,则复位这个timmer(通常2个小时)
    若服务器超过2小时还没有收到来自客户的信息,就发送探测报文段,若发送了10个探测报文段(没75秒发送一个)还没收到响应,则终止连接
     
     
    时间等待计时器:Time_Wait Timer
    处理重复fin请求。
     

    TCP首部

    SYN 表示建立连接,

    FIN 表示关闭连接,

    ACK 表示响应,

    PSH 表示有 DATA数据传输,

    RST 表示连接重置。

     
     
    PS:RST出现表明网络不通、不太好。
    TCP DUP xxx  传输的时候缺少了xxx
     
    tcp协议是在ip协议之上的,所以tcp协议有端口,没有ip是说得过去的。

    参考资料

    滑动窗口协议
    关键词:拥塞控制、滑动窗口、CWND、SSTHRESH
     
     
    重传(tcp retransmission)
    参考:
     
    wiki的慢启动:
     
    tcp定时器:
     
    三次握手 四次挥手:
    首部:
  • 相关阅读:
    ubuntu下 apt-get install 下载的文件存放的目录
    ubuntu 上更新安装 openoffice.org3的过程
    ubuntu中flash的中文乱码解决方法
    ubuntu 安装AMP环境的笔记 Prefork方式与fast-cgi方法
    socket 基础知识
    php 处理透明背景的图片时的问题
    RHEL 8 Speculation
    心之力
    (OK) 在内核中,获得 某目的地址的下一跳的数目,kernel 4.4
    Linux内核分析
  • 原文地址:https://www.cnblogs.com/ELMND/p/4550268.html
Copyright © 2011-2022 走看看