TCP
为了提供可靠的数据传输,TCP依赖很多底层原理,包括:错误检测,重传,累计确认,计时器,和头部域序号和确认号
1559025245343.png1. 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.png3. 往返时间(RTT)估计和超时
在实现 超时/重传 机制时候有很多微妙的问题出现。可能最明显的问题是超时间隔的长度(the length of timeout intervals)。很明确的是,超时时常莺歌大于连接的往返时间(RTT),就是从一个报文段从被发送直到被确认的时间。
估计RTT
大多数TCP实现不是对每个传输的报文段都测量SampleRTT,而是一次只进行一次SampleRTT测量。 也就是说,在任何时间点,仅针对所发送但当前未确认的报文段段之一估计SampleRTT,从而在每个RTT大约一次得到SampleRTT的新值。 此外,TCP从不为已重新传输的段计算SampleRTT; 它仅测量已传输一次的段的SampleRTT。
x 的推荐值是0.125(也就是1/8)[RFC 6298]
注意EstimatedRTT是SampleRTT的加权平均值
RTT的波动
x 的推荐值是0.25
设置和管理重传超时间隔
TimeoutInterval 的初始值推荐是1 [RFC 6298]
4. 可靠数据传输
- 加倍超时间隔
- 快速重传(三个重复的ACK)
- GBN和SR
5. TCP流量控制
调节发送者的发送速度
- 接收缓冲区
- 接收窗口rwnd
6. TCP连接管理
- 三次握手
- 四次挥手
- SYN泛洪攻击
7. TCP拥塞控制
- 慢启动
- 拥塞避免
- 快速恢复
- AIMD
网友评论