计算机网络之传输层四

TCP协议

概述

TCP协议有以下几个特点:

  1. 点对点,只有一个发送方和一个接收方;
  2. 可靠的、按序的字节流;
  3. 流水线机制,TCP拥塞控制和流量控制机制动态设置窗口尺寸;
  4. 发送方/接收方缓存,既类似于GBN,也类似于SR;
  5. 全双工,即同一连接中,能够双向传输数据流;
  6. 面向连接,通信双方在发送数据之前必须建立连接;因为是端到端连接,连接状态只在连接两端中维护,在沿途的节点中并不维护状态;TCP连接包括:两台主机上的缓存、连接状态变量、socket等
  7. 流量控制机制

段结构

1

序列号

初始序列号是根据算法随机选择的,为啥呢?
目前知道两个原因:

  1. 防止在网络中滞留的失效报文段被新的连接错误接收
    假定A、B主机间频繁地建立连接,并且每一次建立连接时,都选择相同的、固定的初始序列号,然后在一次连接中,A给B发送了一些报文段,但是这些报文段在网络中滞留了,而本次连接在一段时间后已经断掉,并且新的连接已经建立,但是这些报文段又发给了B,那就有可能导致在新的连接里接收到了旧的连接所发送的无效的数据报文段,导致出错,所以TCP在建立新的连接时所选择的初始序号一定要和前面的一些连接所使用过的序号不一样
  2. 防止黑客易于伪造序列号攻击,称为tcp序列号欺骗
    在所冒充的被信任的用户方不能正常工作时,推测出从服务器方返回的初始序列号,然后伪装成用户方IP,从而与服务器等建立连接

ACKs:

希望接收到的下一个字节的序列号,采用的是累积确认,该序列号之前的所有字节均已被正确接收到

TCP可靠数据传输

TCP在IP层提供的不可靠服务的基础上实现可靠数据传输服务,采用的是流水线机制和累积确认,使用单一重传定时器

设置定时器的超时时间

大于RTT(Rount Trip Time 往返时延)?
RTT是不断变化的
设置短一点儿?
可能造成不必要的重传
设置长一点儿?
对段丢失时间反应慢,效率低