文章内容概览

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个字节。这个选项次要是为了反对协定将来的倒退所应用的(反对将来的拓展)