《计算机网络》知识总结-5.TCP的研究学习思路

来源:互联网 发布:个人如何开通淘宝直播 编辑:程序博客网 时间:2024/05/19 13:31

TCP学习之前,我有对UDP有了一定的了解的基础上给出了以下思路:

1。要明白TCP有一个特点那就是可靠性传输,所谓的可靠性传输就是要保证:

  • 有序性,就是发送方发送的顺序和接收方接受的顺序一致。
  • 不重复,不缺失, 就是发送方发送的数据报的数量有且只有一个。

2。有了上面的需求,我们先学习一个简单的技术去实现上面那个需求,因为一下子去学习TCP有点难记,需要有过度帮助我们理解,这个过度过程就是学习停止等待协议

3。停止等待协议有一个缺点,那就是信道利用率非常低,根据计算机的反应速度的快慢,一般计算机的IO反应速度都比较慢,越慢整理利用率越低,这样很容易形成瓶颈。所以我们得改进一下这个技术。那就是“基于分组转发”的和连续ARQ协议( ARQ-自动重传请求 Automatic Repeat-reQuest,ARQ ),了解这个请求需要依赖2个技术要点“滑窗技术”和“超时重传技术”,这两个技术也是性能调节的要点。

4。 有了这些了解后,下面就直接进入字段的学习。首先学习16位端口字段就基本和UDP一样的,那下面就先学习“32位顺序号”和“32位确认号”。这个两个保证了传输的顺序前后一致。

5。 下面了解“4位首部长度”,这个首部长度有2个作用:一,用来界定数据部分的起始位置(报文 = 头部+数据),二、用来计算数据部分的长度(TCP总长度 = IP总长度 - IP头长度)。另外说明一下,4位能表示的范围是0~15,如果1个byte用1表示,最多只能表示15Byte,这显然不够用啊,头部长度最小也有20byte,所以,就改为4个byte用1表示,这样算的话,能表示的最大长度为 4*15=60byte(也就是说头部长度一定是32位的倍数,不足32的倍数就用0在尾部填充,相信你能理解我说什么)。

6。 TCP的通信是可靠性的,因此在通信前后都要保证双方都在线,因此需要有很多交互细节去做这个保证,“”8位标志位“”用来实现这个过程。

7。 要实现信道利用率高的分组通信技术,因此就要解决收发双方速度不一致的问题,所以“”窗口技术“”必须要有,那么“”16位窗口大小“”这个字段也不需要要有。

8。 要保证可靠性,数据的正确性不能随意(网络层是尽可能的传输,他只是做了头部校验,所以不可靠),“16位校验和”用来覆盖整个TCP报文,校验收发的正确性。

9。基于队列的分组发送是非实时的,所以阻塞延时在所难免,在不得已的时候,有些紧急消息只能通过“基于优先级队列“的IO缓存技术去补救。所以这个用来标记异常数据结束位置(所有传输的数据都是以流的形式传输的,这个流的单位是1byte,因此一个Byte都有一个顺序号标记)“16位紧急指针”字段必须要有。

10。 以上20个字节的基本字段学完后,接下来就是要学习“选项”字段了(最小长度:0字节,最大长度40byte = “头部长度”字段最大值60byte - 固定头部长度20byte)


11。以上基础学完后,开始对TCP重要技术进行学习。第一个技术是滑动窗口技术的实现和目的。接收端的接收滑动窗口的第一个字节对应的序号会被作为确认号发送给发送端(一个byte一个序列号)。接收端的滑动窗口的第一个字节为未被接收程序读取的序号最小的字节。利用滑动窗口技术还可以实现发送和接收的流量控制。

12.滑动窗口技术基于停止等待协议(连续的停止等待协议)只会把有顺序的一组数据留给接收程序读取,保证了可靠传输的顺序问题。而“数据不丢失,不重复”则由TCP协议头中的选项字段中的带选择确认机制的超时重传来保证。

13.发送窗口中发送时机的学习,有3种发送时机的设置:一、发送窗口中的缓存大小达到MSS(最大发送数据大小,会影响网络层的分片),这是被动发送,二、发送端程序主动请求发送数据,这是人工主动发送,三、设置定时器,定时发送,这是机器主动发送(这个时间的设定影响连续发送的次数和累计确认的次数,比如,时间长则发送10次累计确认1次,时间短则发送2次累计确认1次,同时,还影响重发的次数,比如,时间长,连续发送10次中有一次失败,则可能得重新发送10次了,如果时间短,连续发送2次有一次失败,最多也才重发2次。当然关于重发次数,还可以通过选项字段中的SACK选择确认机制实现只重发失败的部分数据)。

14.之后还要学习网络拥堵管理机制。

15.还有TCP的连接建立和断开管理机制。

最后,过程中有2个疑问和答案:

1.TCP选项字段可以同时拥有多个功能吗?

可以的!!,比如可以拥有MSS和SACK功能,根据业务环境的特点去设置。TCP选项 = 类型1byte + 选项总长度1byte + n byte 选项参数。

2.TCP的连续请求协议在哪里体现?

发送窗口(不能大于接收窗口)内的数据分很多组可连续发送,接收到可以对多次接收只对发送端做一次确认,这就是累计确认机制。当然也可以通过设置发送时机实现一次发送一次确认,如果这样做,就是停止请求协议了。

0 0