详解TCP协议(一)——TCP是什么及报文结构

导图:

在这里插入图片描述
接下来的博客内容会按照导图展开

一、TCP是什么

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、有序的、基于字节流的传输层通信协议。

1.1面向连接

TCP的三次握手和四次挥手,应该是挺熟悉的名词。TCP的连接与释放就是通过上面完成的。

1.1.1那么它连接的是谁?

连接的是要通信双方的进程
我们知道应用层之间的通信本质是进程之间的通信,传输层接收(发送)应用层数据,传输层协议如果要连接的话得连接主机之间的进程才能完成通信(信息交换)

TCP连接通过三次挥手就是发送方主机A进程确定连接接收方主机B的某个进程,一旦连接,TCP协议会允许双方应用进程在任何时间段都可以发送和接收数据(全双工通信服务),并且会提供发送和接收空间缓存。

1.1.2全双工通信与半双工通信
  • 全双工通信:通信双方可以同时发送和接收信息(TCP实现)
  • 半双工通信:通信方式可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行(数据链路层实现)

举例:
全双工通信:咱们打电话的时候可以说话也可以听见对方说话
半双工通信:好比对讲机,你一句我一句说话

如图:
在这里插入图片描述
半双工也可以理解为只能过一辆车的桥,全双工为双向各一车道的桥。前者同时只有一个方向可以过,后者来回双向都可以同时过。

TCP采用的是全双工通信,这也是为什么三次握手建立连接,四次挥手释放连接,后面祥谈。

1.2可靠

TCP协议是基于滑动窗口协议的,包含并综合可靠传输协议的措施,例如,差错检测,累计确认机制,序号,重传,计时器等,后面博客介绍

1.3有序

进程的应用数据通常被TCP分割成数据块(报文段)进行传输,一般数据块的长度按照最大报文段长度(MSS)来设置。

因此从主机A传输到主机B的数据只是应用数据的一部分,所以传输的数据块必须要有序才能保证应用数据的完整性

1.4面向字节流传输

TCP将上述的数据块,看成一连串无结构的字节流,所有的数据都是按照8bit一组进行发送与传输数据块数据包含很多组

1.4.1面向字节流,面向比特流,面向字符流比较

面向比特流
8比特为一组传输数据
面向字节流
1比特为一组传输数据
面向字符流
在tcp编程,网络传输中的字节流,对应到代码里的字符流,就是字符串,所以本质没有什么区别。

二、TCP报文结构及功能

2.1TCP报文结构

2.1.1应用数据在整个传输过程中被封装的数据形式

位于传输层的TCP数据分组称为段(Segment),又译为报文段、数据段或分段。TCP将来自应用层的数据分块并封装成TCP段进行发送。TCP段封装在IP数据报中,然后再封装成数据链路层中的帧,如下图所示:
在这里插入图片描述

2.1.2TCP段的组成

TCP段=TCP首部+应用数据
在这里插入图片描述
详细说下TCP首部组成及功能
在这里插入图片描述
各个组成的功能都概况了下,后面用到会再强调一遍,TCP的工作步骤就是和上面的组成打交道。

发布了198 篇原创文章 · 获赞 94 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/shang_0122/article/details/104387269