计算机网络基础(十五)---传输层-TCP协议详解

文章内容概览

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个字节。这个选项主要是为了支持协议未来的发展所使用的(支持未来的拓展)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/self_realian/article/details/107857901