📚相关专栏:计算机网络那些事
在上一篇文章中,我们研究了UDP报文的结构,由于其报头中只有两个字节来记录报文长度,导致一次最多只能传输 64KB 的数据,这完全无法满足当前对于海量数据传输的需求。于是,TCP协议便应运而生,TCP也是互联网中最广泛使用的传输层协议之一。那么,TCP是如何解决这些问题的?与UDP相比又有哪些区别?就让小编带着大家一起来好好研究一下吧。
一、TCP报文结构
我们先来看一下TCP报文的结构是什么样的吧:
直接这么看,可能会十分抽象,没关系,后面小编都会一一进行解释的。
源端口、目的端口以及校验和这三个信息与UDP的相差不大,想要了解的可以看一下 UDP报文详解 这篇文章,这里就不再做过多赘述了。本篇文章就主要先来介绍一下首部长度、序号与确认序号的具体作用吧。
首部长度:
对于UDP来说,报头的长度就是固定的8个字节,而对于TCP来说,报头的长度是可以根据需要变长的。
首部长度默认是 4个比特位,也就是说其可以表示0到15的范围,不过要注意的是,这里的单位不是 字节 ,而是 4个字节,也就是说假如首部长度记录的是 “1111”,也就是数值 15,其代表整个报头的长度是 15x4 ,也就是 60 个字节。这些都是协议约定好的,我们无权干预,只要遵守就好了。
值得注意的是,在默认4位的基础上,TCP协议还提供了 6 位的保留位,其实这也是为了未雨绸缪。当年UDP就是由于限制死了报文的长度,导致无法顺应时代发展。
TCP就充分吸收了这一教训,这 6位的保留位就是为了TCP协议后续的可拓展性而准备的。当未来某一天,TCP需要新增属性/或某个属性的长度不够用的时候,就可以直接利用保留位来加长报头的长度,TCP的结构也不需要发生太大变化,像这样后续升级扩展就会比较容易了
序号与确认序号