TCP-IP详解笔记8

TCP超时与重传

  • 下层网络层(IP)可能出现丢失, 重复或丢失包的情况, TCP协议提供了可靠的数据传输服务.

    • TCP启动重传操作, 重传尚未确定的数据.
    • 基于时间重传.
    • 基于确认信息. --- 比较高效.
  • TCP在发送数据时会设置一个计时器, 若计时器超时仍未收到数据确认信息, 则会引起相应的超时或基于计时器的重传操作, 计时器超时称为重传超时(RTO).
    • 快速重传推断出丢包.
  • 经典方法:
    • 平滑的RTT估计值. (加权移动平均, 低通滤波器)
    • RTO超时重传时间.
  • 快速重传机制基于接收端的反馈信息来引发重传, 而非重传计时器的超时.
  • TCP接收端可提供SACK功能, 通过TCP头部积累的ACK号字段来描述其接收到的数据.

TCP数据流与窗口管理

  • TCP的动态数据传输, 交互连接, 流量控制, 窗口管理.
  • 流量控制通过动态调节窗口大小来控制发送端的操作, 确保接收端不会溢出.
  • 延迟确认可以允许TCP延迟一段时间发送ACK, 以便将ACK和相同方向上需要传输的数据结合发送.
    • 可以减少ACK传输数目, 可以一定程度地减轻网络负载.
  • Nagle算法:
    • 当一个TCP连接中有在传输数据, 小的报文段就不能被发送, 直到所有的在传输数据都被ACK.
  • 采用滑动窗口来实现流量控制.
  • 每个TCP活动连接的两端都维护一个发送窗口结构(send window)和接收窗口结构(receive window structure).
  • TCP是通过接收端的通告窗口来实现流量控制的, 通告窗口指示了接收端可接收的数据量. 接收端会传输一个窗口更需你(window update).

TCP 拥塞控制

  • TCP拥塞控制是批量数据中最重要的. 防止网络因为大规模的数据通信而瘫痪.
  • 路由去因无法处理高速率到达的流量而被迫丢弃数据信息的现象称为拥塞.
  • 没有一个精准的方法知晓中间路由器的状态.
  • 在TCP中丢包被用作判断是否拥塞的一个指标, 用来衡量是否实施相应的响应措施.
    • 延时测量和显示拥塞通知(ECN).
  • 减缓TCP发送, 慢启动.
    • 当一个新的TCP连接建立或检测到由重传超时(RTO)导致的丢包时, 需要执行慢启动.
    • TCP发送端长时间处于空闲状态也可能调用慢启动算法.
  • 拥塞避免:
    • TCP实现了拥塞避免算法, 一旦确定慢启动阈值, TCP会进入拥塞避免阶段, cwnd每次的增长值近似于成功传输的数据段大小.
    • 拥塞避免算法假设由比特错误导致包丢失的概率很小(远小于1%), 因此有丢包发生就表明从源端到目的端必有某处出现了拥塞.
  • TCP连接时是选择运行慢启动和拥塞避免中的一个, 不会出现两个同时出现的情况.

TCP保活机制

  • 在一个空闲的TCP连接中不会有任何数据交换.
  • TCP保活机制为了让客户端和服务器了解什么时候终止进程或者对方断开连接, 虽然连接没有数据交换,但仍然需要通过连接保持一个最小的数据流.
  • 它是由一个保活计时器实现的, 当计时器被激发, 连接一段将发送一个报货探测(简称保活)报文, 另一端接收报文的同时会发送一个ACK作为响应.
  • 保活功能一般是为服务器应用程序提供的, 服务器应用程序希望知道客户机是否崩溃或离开, 从而决定是否为客户端绑定资源.
  • 当某个连接长时间(2小时)处于空闲状态, 在该连接的一端会发送一个探测数据包, 从而实现保活功能, 可能有4种情况:
    1. 另一端仍在工作;
    2. 另一端崩溃;
    3. 另一端已经崩溃并且已经重新启动;
    4. 另一端无法到达.

TCP-IP详解笔记8的更多相关文章

  1. TCP/IP详解 笔记十四

    TCP/IP协议(二)  连接的建立与终止 tcpdump -S输出TCP报文的格式 格式: 源>目的:标志 (标志就是tcp头部).标识首字符意义如下: 例如:telnet 某服务的输出(包括 ...

  2. TCP/IP详解 笔记一

    概述: Tcp-ip让网络上的计算机进行通信,而不管计算机和操作系统是否一样. 分层结构: Tcp/ip协议族是多层协议的组合,而tcp和ip只是其中的两个协议而已. 一个通信举例: 注意图的右上方: ...

  3. TCP/IP详解 笔记十三

    TCP协议(一) 概述 特点 1,  面向连接可靠的字节流服务 2,  只有两方通信,不能用于广播或多播 3,  应用数据被TCP分隔为最合适发送的数据段,传给IP协议栈 4,  发送端并启动定时器, ...

  4. TCP/IP详解 笔记十一

    域名服务系统(DNS) DNS:名字到IP转换:电子邮件选路信息:分布式数据库 解析器:是通过gethostbyname(3)和gethostbyaddr(3)来实现的 最常用的名字服务器是BIND ...

  5. TCP/IP详解 笔记九

    广播和多播 多播和广播只能用于UDP包,TCP明确在两个进程间建立连接. 多播:帧只传送给属于多播组的多个接口 主机对帧的过滤过程: 通常网卡只接收那些目的地址为本物理接口地址或广播地址的帧:设置为混 ...

  6. TCP/IP详解 笔记八

    UDP协议 UDP是传输层协议,提供无连接不可靠的数据传输,其优点失效率高,确定确定是无序不可靠. 报文格式 UDP头部 TCP和UDP的端口号是独立的 UDP长度是指UDP数据报的总长度 UDP的校 ...

  7. TCP/IP 详解笔记

    最早的 TCP 协议文档是 RFC793. TCP 提供一种面向连接的.可靠的字节流服务. 面向连接容易理解,那么什么是字节流服务呢? 答:两个应用程序通过 TCP 连接交换 8 bit 字节构成的字 ...

  8. TCP/IP详解 笔记十二

    简单文件传送协议 TFTP 1)         初衷是为了引导无盘系统 2)         使用UDP 3)         代码都能适合只读存储器 无盘主机通过RARP获得ip地址后进行一个TF ...

  9. TCP/IP详解 笔记十

    IGMP Internet组管理协议 IGMP的作用:让一个物理网络上的所有系统知道主机所在的多播组: 让路由器知道多播数据报应该向哪个端口转发. IGMP有固定长度,没有可选数据,在ip头部的协议值 ...

  10. TCP/IP详解学习笔记

    TCP/IP详解学习笔记(1)-基本概念 TCP/IP详解学习笔记(2)-数据链路层 TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 TCP/IP详解学习笔记(4)-ICMP协议, ...

随机推荐

  1. C#、WPF中如何自定义鼠标样式

    需求:在C#中如何自定义鼠标样式?在这里可以分两种情况,一种是在winForm,另一种是在WPF中(注意使用的Cursor对象不一样) 解决办法如下: a.首先针对WinForm中,我们可以采用图标加 ...

  2. MySQL-悲观锁和乐观锁

    引言  悲观锁和乐观锁指的并不是一种锁,而是一种思想,一种并发控制的方法. 在事务并发执行的情景中,可能存在多个用户同时更新同一条数据的情况,这可能会产生冲突导致丢失更新或者脏读. 丢失更新是指一个事 ...

  3. CodeForces 1151F Sonya and Informatics

    题目链接:http://codeforces.com/problemset/problem/1151/F 题目大意: 给定长度为 n 的 01 序列,可以对该序列操作 k 次,每次操作可以交换序列中任 ...

  4. Python基础:数据类型-字符串(7)

    1.字符串基本操作 字符串是由字符组成的一串字符序列,字符串是有顺序的,从左到右,索引从0开始,依次递增. Python中字符串类型:str. Python中字符串的三种表示方式: (1)普通字符串: ...

  5. 使用systemback制作Ubuntu自定义系统镜像和系统备份(抄)

    使用systemback制作Ubuntu自定义系统镜像和系统备份 2017年06月23日 16:17:51 BWBOT 阅读数:10714   原链接:https://community.bwbot. ...

  6. 【简】题解 AWSL090429 【噪音】

    因为每次加上一头奶牛 是什么不重要 牛棚之间贡献除清空操作外无影响 就只要考虑 每个牛棚清空分x次 的贡献 x之和为k       求贡献和最小 一个牛棚清空x次 显然平均清空贡献最小 再用等差数列的 ...

  7. Django视图

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  8. POJ-2926-Requirements&&Educational Codeforces Round 56G. Multidimensional Queries 【哈夫曼距离】

    POJ2926 先学会这个哈夫曼距离的处理才能做 cf 的G #include <iostream> #include <stdio.h> #include <algor ...

  9. JavaScript开发中常用的代码规范配置文件

    一.jsconfig.json { compilerOptions: { target: 'es6', experimentalDecorators: true, allowSyntheticDefa ...

  10. prometheus 集群

    思路一 统一区域的监控目标,prometheus server两台监控相同的目标群体. 改变后 上面这个变化对于监控目标端,会多出一倍的查询请求,但在一台prometheus server宕机的情况下 ...