详解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的工作步骤就是和上面的组成打交道。

FINS(Factory Interface Network Service)是种基于TCP/IP的通信协议,用于PLC(Programmable Logic Controller,可编程逻辑控制器)与上位机之间的通信。FINS协议采用了TCP作为传输层协议,并使用了自定义的应用层协议。 FINS协议TCP报文结构如下: | 字段 | 长度(字节) | 描述 | | :----------: | :------------: | :---------------------------------------------------------: | | 代码 | 1 | 协议版本、数据类型和数据长度 | | 目标节点 | 1 | 目标节点地址 | | 目标单元 | 1 | 目标单元地址 | | 源节点 | 1 | 源节点地址 | | 源单元 | 1 | 源单元地址 | | 服务代码 | 2 | 请求或响应服务代码 | | 命令码 | 2 | 请求或响应命令 | | 数据长度 | 2 | 数据长度 | | 数据 | 数据长度(可变) | 请求或响应数据 | | FCS(校验码) | 2 | 用于检验数据的完整性,由数据段的每个字节按位异或得到的16位值 | 其中,代码字段包括协议版本、数据类型和数据长度。协议版本指FINS协议的版本号,数据类型指请求或响应数据类型,数据长度指数据段的长度。目标节点和目标单元字段指目标PLC的节点地址和单元地址,源节点和源单元字段指本PLC的节点地址和单元地址。服务代码和命令码字段指服务请求或响应的类型和具体命令,数据长度字段指数据段的长度,数据字段存储请求或响应的具体数据。最后,FCS字段是用于检验数据的完整性的校验码,由数据段的每个字节按位异或得到的16位值。 以上是FINS协议TCP报文结构解析。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿成长轨迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值