TCP一文

作者: 风亡小窝 | 来源:发表于2019-05-31 17:35 被阅读0次

TCP

为了提供可靠的数据传输,TCP依赖很多底层原理,包括:错误检测,重传,累计确认,计时器,和头部域序号和确认号

1559025245343.png

1. TCP连接

TCP是一个面向连接的协议,因为在一个应用进程开始发送数据给另一个之前,两个进程必须首先相互 “握手” ,也就是,他们必须相互发送一些初步的段(segment)来确认用来建立可靠数据传输的参数,作为建立TCP连接的一部分,连接的双方将会初始化很多于TCP连接关联的TCP状态变量。

TCP连接能够提供全双工服务(full-duplex service)。如果一台主机上的进程A与另一台主机上的进程B有一条TCP连接,那么应用层的数据可以从进程A流动到进程B,与此同时应用层的数据也可以从进程B流动到进程A。

一条TCP连接也是点对点(point-to-point)的,也就是一个发送者和一个接收者。而被称为“多播”的则是数据传输从一个发送者到多个接收者在一个发送操作中完成。这对于TCP是不可能的,对于TCP来说两个正好,三个太多。

1559029698967.png

让我们来考虑从客户端进程向服务端进程发送数据。客户端进程通过套接字传递数据流,如图3.28所示,TCP将此数据定向到连接的发送缓冲区,该缓冲区是在三次握手期间初始化的缓冲区之一。 TCP将不时地从发送缓冲区中获取数据块并将数据传递到网络层。可以获取的并且放置在一个段中的最大数据量受 MSS(maximum segment size)的限制。 通常通过首先确定本地发送主机可以发送的最大链路层帧的长度(maximum transmission unit, MTU)来设置 MSS,然后设置MSS以确保TCP报文段(当封装在IP数据报中时)加上TCP / IP报头长度(通常为40个字节)能够装进单个链路层帧。 以太网和PPP链路层协议都具有1,500字节的MSS。 还有一种方法来发现路径MTU--可以在源到目的地的所有链路上发送的最大链路层帧[RFC 1191] - 并根据路径MTU值设置MSS。 请注意,MSS是段中应用层数据的最大数量,而不是包含标头的TCP报文段的最大大小。 (这个术语令人困惑,但我们必须忍受它,因为它根深蒂固。

TCP将客户端的每个数据块与TCP报文段头部配对,从而组从一个TCP报文段。TCP连接的双方都有自己发送缓冲区和接收缓冲区。

我们从这个讨论中看到,TCP连接由缓冲区,变量和到一个主机中的进程的套接字连接,以及另一组缓冲区,变量和到另一个主机中的进程的套接字连接组成。

2. TCP报文段的结构

TCP报文段由多个头部字段和一个数据字段组成,数据字段包含了一块应用层数据,上文提到过, MSS 限制了报文段的数据字段的最大大小。

1559031830150.png

3. 往返时间(RTT)估计和超时

在实现 超时/重传 机制时候有很多微妙的问题出现。可能最明显的问题是超时间隔的长度(the length of timeout intervals)。很明确的是,超时时常莺歌大于连接的往返时间(RTT),就是从一个报文段从被发送直到被确认的时间。

估计RTT

大多数TCP实现不是对每个传输的报文段都测量SampleRTT,而是一次只进行一次SampleRTT测量。 也就是说,在任何时间点,仅针对所发送但当前未确认的报文段段之一估计SampleRTT,从而在每个RTT大约一次得到SampleRTT的新值。 此外,TCP从不为已重新传输的段计算SampleRTT; 它仅测量已传输一次的段的SampleRTT。
EstimatedRTT = (1-x) * EstimatedRTT + SampleRTT

x 的推荐值是0.125(也就是1/8)[RFC 6298]

注意EstimatedRTT是SampleRTT的加权平均值

RTT的波动

DevRTT = (1 - x) * DevRTT + x*|SampleRTT - EstimatedRTT|

x 的推荐值是0.25

设置和管理重传超时间隔

TimeoutInterval = EstimatedRTT + 4 * DevRTT

TimeoutInterval 的初始值推荐是1 [RFC 6298]

4. 可靠数据传输

  • 加倍超时间隔
  • 快速重传(三个重复的ACK)
  • GBN和SR

5. TCP流量控制

调节发送者的发送速度

  • 接收缓冲区
  • 接收窗口rwnd

6. TCP连接管理

7. TCP拥塞控制

  • 慢启动
  • 拥塞避免
  • 快速恢复
  • AIMD

相关文章

  • TCP/IP

    引用 一文搞懂TCP与UDP的区别 TCP/UDP协议详解... TCP基础特性* TCP 1、 TCP特性: T...

  • TCP一文

    TCP 为了提供可靠的数据传输,TCP依赖很多底层原理,包括:错误检测,重传,累计确认,计时器,和头部域序号和确认...

  • TCP UDP 详解

    [转] 一文搞懂TCP与UDP的区别[https://www.cnblogs.com/fundebug/p/dif...

  • TCP/UDP的区别

    引用于:一文搞懂TCP与UDP的区别 引言 网络协议是每一个前端工程师都必须要掌握的知识,TCP/IP中有两个具有...

  • TCP序列号(Seq)与确认号(Ack)

    上一文章中我们讲到TCP/IP四层模型组分别有传输层,网络层,链路层,应用层。而传输层中存在两大协议分别为TCP协...

  • Android网络编程-TCP/IP协议

    在Android网络编程-计算机网络基础一文中得知,IP协议属于网络层,TCP、UDP协议属于传输层。IP协议是T...

  • 一文带你了解TCP/UDP协议

    你如何收到好友的QQ消息?   你有没有想过这个问题,当你和朋友使用QQ进行聊天的时候,你的消息是如何发送到好友的...

  • TCP那些事儿

    目录: TCP是什么TCP报文结构TCP连接过程TCP状态转移TCP流量控制 —— 滑动窗口TCP拥塞控制TCP可...

  • 计算机网络

    一、tcp/http 1、TCP首部。 IP数据报(IP首部+TCP报文段(TCP首部+TCP数据)) TCP首部...

  • TCP协议三次握手和四次挥手

    TCP协议 TCP/IP协议栈 由上图可知,TCP/IP协议栈包含很多的协议。 二. 什么是TCP TCP是TCP...

网友评论

      本文标题:TCP一文

      本文链接:https://www.haomeiwen.com/subject/fvqjtctx.html