当前位置: 首页 > ops >正文

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

文章目录

    • 导图:
    • 一、TCP是什么
        • 1.1面向连接
          • 1.1.1那么它连接的是谁?
          • 1.1.2全双工通信与半双工通信
        • 1.2可靠
        • 1.3有序
        • 1.4面向字节流传输
          • 1.4.1面向字节流,面向比特流,面向字符流比较
    • 二、TCP报文结构及功能
        • 2.1TCP报文结构
          • 2.1.1应用数据在整个传输过程中被封装的数据形式
          • 2.1.2TCP段的组成

导图:

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

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

http://www.xdnf.cn/news/11595.html

相关文章:

  • EasyUi框架
  • ⭐️Composer常见错误解决
  • C++stack
  • lua入门(1) - 基本语法
  • 成成你好呀笔记整理(知识点合集三)
  • 如何理解鲁棒性?为什么robustness会翻译为鲁棒性?
  • Android :这是一份详细 全面的 SQLlite数据库 使用手册
  • vuex介绍及使用指南(面向实战)
  • Prometheus基本原理和使用
  • 男人最爱丰满女人
  • ELK日志分析系统
  • SVG基础知识
  • Spark是什么
  • Navicat Premium数据库管理工具安装教程
  • cron表达式详解
  • 介绍一个超好用的API管理工具:Apipost
  • 【Eclipse安装及使用(面向小白)】
  • Kafka介绍
  • 什么是IP?
  • 案例分享:建设企业网上办公综合平台
  • 四季度组内定期技术与架构思维交流会 Kaki的博客
  • PHP8 编程提示(二)
  • 系统提示缺少或找不到d3dcompiler_43.dll文件的详细修复教程
  • 深度学习人脸识别基础
  • 操作系统期末总结
  • oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)
  • J-Link:STM32使用J-LINK烧录程序,其他MCU也通用
  • Ubutun常用命令之chmod
  • 浅议C++ 中的垃圾回收方法
  • 斯坦福的parser学习--