TCP基础知识 复习

 

前言

说来惭愧,大二时候学的计算机网络好多都不太记得了,不过还好有认真学过,捡起来也挺快的,就是对于现在业界中使用的网络算法的不是很懂;

1 TCP报文段结构

1.1 序号和确认号

序号,是报文段首字节的字节流编号;
确认号,是发送端期望从接收端收到的下一个字节的序号;

TCP只接受数据流中国至第一个丢失字节为止的字节,所以TCP被称为累积确认;

2 可靠数据传输

怎么样才能算是对数据进行可靠传输呢?这就要求确保一个进程从其接收缓存中读出 非损坏的、无间隔的、非冗余的、按序的数据流;

2.1 重传

  • 如果发生超时的现象,则TCP通过重传引起超时的报文段来响应超时事件,再重启定时器,每次重传都会将下一次的超时间隔设为先前值的两倍;

  • 因为发送方经常连续发送大量的报文段,所以如果一个报文段丢失,就很可能引起许多一个接着一个的冗余ACK,如果TCP发送方接收到相同数据的3个冗余ACK,TCP就执行快速重传,即在报文段的定时器过期之前重传丢失的报文段;

2.2 选择确认

  • TCP接收方有选择的确认失序报文段(会将正确接收但失序的报文段缓存起来),而不是累计的确认最后一个正确接收的有序的报文段;

3 流量控制

流量控制服务是为了消除发送方使接受方缓存溢出的可能性,因为有可能应用程序读取数据时相当缓慢,而发送方发送数据太多、太快,会很容易造成该连接的接受缓存溢出;

3.1 滑动窗口

接收窗口用于告诉发送方,该接受方还有多少可用的缓存空间;因为TCP是全双工通信,在连接两端的发送方都各自维护一个接受窗口;

  1. 窗口左边沿向右边移动时称为窗口合拢,这种现象发生在数据被发送和确认时,如果左边到达右边的时候,则认为其是一个零窗口,此时发送方不能够发送任何数据;
  2. 窗口右边沿向右边移动时称为窗口张开,则允许发送更多的数据,这种现象发生在另一端的接收进程读取已经确认的数据后释放掉TCP的接收缓存;
  3. 窗口右边向左边移动时称为窗口收缩,如果接收到一个指示窗口左边沿向左移动的ACK,则他被认为是一个重复ACK,并被丢弃;

例子1:

窗口大小为6,窗口向右移动;


例子2:

设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是 rwnd = 400 ”(这里的 rwnd 表示 receiver window) 。假设每一个报文段为100字节长,而数据报文段序号的初始值设为1。大写ACK表示首部中的确认位ACK,小写ack表示确认字段的值ack。

上面的图中经历了三次流量控制;

  • 发送方的发送窗口不能超过接收方给出的接收窗口的数值(TCP的窗口单位是字节,不是报文段)
  • 只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,若持续计时器设置的时间到期,就周期性的发送一个零窗口探测报文段(仅仅携带1个字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值;
  • 持续计时器的出现是为了解决这么一种特殊的情况:接收方若没有缓存足够使用,就会发送零窗口大小的报文,此时发送放将发送窗口设置为0,停止发送数据。之后接收方有足够的缓存,发送了非零窗口大小的报文,但是这个报文在中途丢失的,那么发送方的发送窗口就一直为零导致死锁。

4 连接管理

4.1 三次握手

4.2 四次挥手

5 拥塞控制

拥塞发生的主要原因是因为网络能够提供的资源不足以满足用户的需求,这些资源包括缓存空间、链路带宽容量和中间节点的处理能力。

TCP的拥塞退避由4个核心的算法组成:慢启动、拥塞避免、快速重传和快速恢复

5.1 慢启动

从小到大逐渐指数增加拥塞窗口的大小;

5.2 拥塞避免

如果超过某个阀值后,慢启动则结束,进入到拥塞避免阶段;拥塞避免的思想就是将指数增加转变为线性增加,这样就可以避免增长过快而导致网络阻塞,慢慢的增加调整到网络的最佳值;

如果当前的cwnd达到慢启动的阈值,则试探性的发送一个segment,如果服务器没有响应,TCP认为网络能力下降,必须降低慢启动阈值,同时为了避免形式继续恶化,有可能将窗口降低为1

5.3 快速重传

快速重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置重传计时器时间到期。

除了经典的三次ACK,还包括ER、FACK,以及最新的基于时间序的RACK的包丢失快速重传算法,做出了很多改良。

5.4 快速恢复

在经历过快速重传后,如果依然接收到重复的ACK,说明网络没有阻塞,这里并不会进入到慢启动的状态,而是直接进入到拥塞避免的状态;

5.5 其它

  • 基于丢包反馈:通过ACK所带回来的丢包信息来调整源端的拥塞窗口;
  • 基于路径延时反馈:RTT相对于丢包信息反应更加灵敏,更能及时反映出一般网络的拥塞情况,适用于小缓存的中间节点,效率较理想。但是对于路由器经常缓存数据促使RTT延长调节拥塞窗口,实际上没有发生拥塞情况。
  • 基于显示拥塞反馈:典型的ECN利用中间节点自己检测本身的拥塞状态,如路由器的反馈状态,直接反馈给TCP源端,以此调节源端的窗口值和发送速率。

参考文章:
TCP协议拥塞控制算法(Reno、HSTCP、BIC、Vegas、Westwood)

TCP基础的更多相关文章

  1. 快速学习C语言三: 开发环境, VIM配置, TCP基础,Linux开发基础,Socket开发基础

    上次学了一些C开发相关的工具,这次再配置一下VIM,让开发过程更爽一些. 另外再学一些linux下网络开发的基础,好多人学C也是为了做网络开发. 开发环境 首先得有个Linux环境,有时候家里机器是W ...

  2. TCP基础知识

    TCP/IP网络协议栈分为应用层(Application).传输层(Transport).网络层(Network)和链路层(Link)四层.如下图所示 两台计算机通过TCP/IP协议通讯的过程如下所示 ...

  3. TCP基础知识(三)重传、流量控制、拥塞控制

    TCP详解(3):重传.流量控制.拥塞控制…… 数据传输 在TCP的数据传送状态,很多重要的机制保证了TCP的可靠性和强壮性.它们包括:使用序号,对收到的TCP报文段进行排序以及检测重复的数据:使用校 ...

  4. TCP基础概念

    定义 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议 特点 TCP是一种面向广域网的通信协议,目的是在跨越多个网 ...

  5. TCP基础知识 复习

    前言 说来惭愧,大二时候学的计算机网络好多都不太记得了,不过还好有认真学过,捡起来也挺快的,就是对于现在业界中使用的网络算法的不是很懂: 1 TCP报文段结构 1.1 序号和确认号 序号,是报文段首字 ...

  6. 网络编程中TCP基础巩固以及Linux打开的文件过多文件句柄的总结

    1.TCP连接(短链接和长连接) 什么是TCP连接?TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. 当网络通信 ...

  7. TCP 基础知识

    参考 朱小厮-一文详解TCP 博客园-"三次握手,四次挥手"你真的懂吗? 博客园-深度解密HTTP通信细节

  8. TCP基础知识(二)三次握手与四次挥手

    TCP详解(2):三次握手与四次挥手 TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接,就好像你 ...

  9. TCP基础知识(一)简介与数据包

    TCP详解(1):简介与数据包 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议 应用层向TCP层发送用于网间传输 ...

随机推荐

  1. Altium Designer导入pcb原件之后都是绿的

  2. Java ThreadLocal Example(java中的ThreadLocal例子)

    Java ThreadLocal is used to create thread local variables. We know that all threads of an Object sha ...

  3. WPF学习笔记——概述

    如果你选择WPF,多半原因是因为折服于它那震撼性的用户体验.纵观WPF整个知识体系,其内容并不复杂,但却比较细碎,不易理清.以下内容是对WPF部分内容的简单概括,希望读者能够对WPF框架有个大体认识. ...

  4. ios根据字体大小设置

    , , , , , , , , , , , }; //这么多字体,从大到小挨个尝试 ; UIFont *font; ; i < array_length; i++) { font = [font ...

  5. ios获取系统时间

    //获取系统时间 NSDate * date=[NSDate date]; NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init]; ...

  6. [Nuxt] Update State with Vuex Actions in Nuxt.js

    You can conditionally add classes to Vue.js templates using v-bind:class. This will help display the ...

  7. OAM配置代理手冊

     创建webgate与ohs共享实例,copy文件到ohs实例文件夹. 1)进入webgage部署工具文件夹       Cd  /%webgate_home%/webgate/ohs/tools ...

  8. ZOJ 1796 Euchre Results 数学水题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1796 题意: 四个人玩游戏,已知三个人的输赢情况,求第四个人的输赢情况. ...

  9. CComboBox自动匹配

    void CLoadPhotoDlg::OnCbnEditchangeCombo1() {  // TODO: 在此添加控件通知处理程序代码  UpdateData(TRUE);  CComboBox ...

  10. 数据类型总结——Number(数值类型)

    相关文章 简书原文:https://www.jianshu.com/p/9fb573ef10da 数据类型总结——概述:https://www.cnblogs.com/shcrk/p/9266015. ...