文章内容概览
TCP 协定简介
- TCP(Transmission Control Protocol:传输控制协议)
- TCP 协定是计算机网络中非常复杂的一个协定
TCP 数据报所处的地位
TCP 协定的特点
TCP 是面向连贯的协定
在上一篇 UDP 协定详解中有对面向连贯进行了介绍,也就是在通信之前会先建设连贯
TCP 的一个连贯有两端(点对点通信)
A 和 B 要进行电话通信,那么 A 和 B 就是两个端点
TCP 提供 牢靠的传输 服务
后边会对 TCP 实现牢靠的传输做具体的介绍
TCP 协定提供 全双工 的通信
全双工在网络概览)中有提到,指的就是 一条通信线路,单方都能够同时发送和接管音讯。也就是说,如果两台计算机建设了 TCP 连贯,那么这两台计算机都能够同时向连贯中发送数据或接收数据
TCP 是面 向字节流 的协定
上篇文章在介绍 UDP 的时候晓得,UDP 是面向用户数据报的协定。那么数据报和字节流的区别是什么?
流指的是流入过程或流出过程的字节序列。传输层的数据都是由应用层传输下来的,是一块残缺的数据。然而在 TCP 中,它不把应用层传输下来的数据看做是一块残缺的数据,而是把它看做一整串的字节流。TCP 不是面向一整块数据来进行解决的,而是面向一个一个的字节来进行解决的。所以,TCP 就可能取出一块数据中的某一段来进行传输,而剩下的数据,再把它放到第二个 TCP 报文中进行传输。所以,在应用 TCP 协定进行数据传输时,可能对数据进行合并,也可能进行拆分,以实现更好的传输
TCP 协定头部
16 为的源端口和目标端口是和 UDP 中的一样的
序号 :序号一共占用 32 个比特位,所以它能够示意的范畴是 0~2^32。因为 TCP 协定是面向字节流的,因而,每一个字节都有一个惟一的序号,这个序号就是用来标记传输的每一个字节的(一个字节一个序号)。 这里的序号所代表的就是,这个 TCP 报文所传输的数据的第一个字节序号是什么
确认号 :确认号所示意的范畴也是 0~2^32,也是一个字节一个确认号。确认号示意的就是 期待收到数据的首字节序号是什么
假如有一个 TCP 数据报,它的序号是 501,数据的长度是 100 个字节。某个计算机收到了这个数据,确认号就会说,501 到 600 这个范畴的数据,我都曾经收到了,而后冀望下一个传递给我的数据的确认号是 601。所以确认号示意的就是,我冀望下一个数据报里数据的首字节序号。确认号是配合序号一起来应用的。
如果某一个 TCP 数据报的数据确认号是 N,则示意 N - 1 序号的数据都曾经收到
数据偏移:
- 占 4 个比特位(0~15),单位是 32 位字,也就是说,每一个偏移都能够示意 4 个字节的偏移
- 它示意的就是实在的 TCP 数据,它偏离首部的间隔(这个次要是因为 TCP 选项 这个块的内容所导致的,因为咱们并不知道这个选项的内容有多少,所以须要存储数据偏移)
- TCP 头部有固定长度的 20 个字节(至多),那TCP 首部最长有多少个字节? 此时能够对数据偏移进行一个简略的计算,以失去 TCP 首部最长有多少
因为数据偏移最大示意的是 15,每一个偏移都能够示意 4 个字节。所以最大偏移是 15 乘 4 等于 60 字节,所以TCP 首部的长度范畴就是 20~60 字节
保留字段:保留着的,还没有应用的
TCP 标记 :占 6 个比特位,每位都有不同的含意,他们别离是:
在后边理解 TCP 的三次握手和四次挥手,都会用到这里的标记位
窗口:占 16 个比特位,0~2^16-1。窗口的意思就是,指明容许对方发送的数据量。如果窗口大小为 1000,则表明对方能够发送 1000 个字节
也能够联合窗口和确认号进行一个运算,假如确认号为 501,窗口的值为 1000,也就是说 501~1500 之间字节的数据是能够接管的
校验和:和 UDP 里边的校验和意思是一样的,能够看一下我上一篇介绍 UDP 的文章
紧急指针:这个只有以后边 TCP 标记位的 URG= 1 时才启用,它示意紧急数据位于报文的地位。对于 TCP 报文来说,是有局部的紧急数据能够保留在数据报中的,等对方接管到的时候,就能够通过紧急指针来找到紧急数据所位于数据报的地位
TCP 选项:它是可选的,从前边通过对数据偏移的计算能够晓得,TCP 选项最多有 40 个字节。这个选项次要是为了反对协定将来的倒退所应用的(反对将来的拓展)