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

【计算机网络篇】TCP协议

✅作者简介:大家好,我是小杨
📃个人主页:「小杨」的csdn博客

🐳希望大家多多支持🥰一起进步呀!


TCP协议

1,TCP 简介

TCP(Transmission Control Protocol)是一种在计算机网络中广泛使用的传输层协议,用于在网络上可靠地传输数据。

TCP 提供了可靠的、面向连接的通信,并负责数据的划分、排序和重传,以确保数据在网络中可靠地传输、按顺序到达。


2,TCP 特点

TCP的主要特点为面向连接,可靠传输,面向字节流,全双工通信。下面对这些特点进行逐一解释:

1,面向连接:TCP是一种面向连接的协议,这意味着在通信双方进行数据传输之前需要建立连接。连接的建立过程涉及到三次握手,这种连接确保了通信双方之间的可靠性和顺序性。

2,可靠传输:TCP提供了可靠的数据传输,这意味着它会确保数据在发送方和接收方之间以正确的顺序、无差错地传递。TCP使用确认机制、重传机制和序列号等技术来实现数据的可靠传输,在不稳定的网络环境中也能保证数据的准确性。

3,面向字节流:TCP将数据视为连续的字节流,而不是离散的消息。这意味着应用程序可以按照需要将数据划分为任意大小的数据块,TCP会将这些数据块分割为合适大小的数据段进行传输。接收方会按照序列号将数据段重新组装成完整的字节流并解析。

4,全双工通信:TCP连接支持全双工通信,这意味着通信双方可以同时进行双向的数据传输,而不需要等待对方的响应。发送方和接收方可以独立地发送和接收数据,而不会干扰对方的操作。

此外,TCP除了上述的主要特点外,还有其它的特点:

  • 流量控制:TCP通过滑动窗口机制对发送方的发送速率进行控制,避免因发送方发送过多的数据导致接收方缓冲区溢出。
  • 拥塞控制:TCP具有拥塞控制算法,可以根据网络状况动态调整发送速率,避免网络拥塞发生,保持网络的稳定性和公平性。

3,TCP 段格式

段是TCP传输数据的基本单位,由2部分所构成,分别为报头和数据区。

TCP 协议段格式示意图:

TCP 段格式中的各字段代表含义如下:

1,源端口号:16位字段,表示发送方的端口号。

2,目的端口号:16位字段,表示接收方的端口号。

3,序列号:32位字段,表示发送方发送数据的字节流的序列号,实现有序传输。

4,确认号:32位字段,表示接收方期望收到的下一个字节的序列号,实现可靠传输。

5,数据偏移:4位字段,表示TCP头部的长度,以32位(4字节)为单位计算。

6,保留:6位字段,保留供将来使用。

7,控制标志:6位字段,用于控制TCP的连接和传输行为,包含URG、ACK、PSH、RST、SYN、FIN等标志位。

8,窗口大小:16位字段,表示接收方当前可以接收的数据量,实现流量控制。

9,校验和:16位字段,用于校验TCP头部和数据的完整性。

10,紧急指针:16位字段,用于指示紧急数据的位置,在URG标志位被设置时才有效。

11,选项:可选字段,用于扩展TCP协议的功能,如选择确认、最大段长度等。

12,数据:可选字段,TCP段中携带的实际数据部分。

以上是TCP段的主要字段,并通过这些字段实现了可靠的数据传输、流量控制、拥塞控制和连接管理等功能。


TCP 段中的注意事项:

1,数据偏移该字段表示TCP头部的长度,以32位(4字节)为单位计算。具体来说,它表示TCP头部中有多少个4字节的字。

每个数据偏移的值乘以4就得到了TCP头部的长度,数据偏移字段的取值范围是0-15,这就使得TCP可以适应不同的选项需求。

2,TCP头部中的选项字段的长度是可变的,其是由数据偏移字段决定的,选项字段的长度范围区间为0字节到40字节。

当数据偏移值为5时,说明整个TCP报头为20字节,相当于没有选项;而当数据偏移值为15时,这时选项字段占用40字节。

3,控制标志字段用于控制TCP的连接和传输行为,包含URG、ACK、PSH、RST、SYN、FIN等标志位。标志位逐一解释:、

  • URG(Urgent):表示紧急指针字段是否有效,即是否有紧急数据需要处理。
  • ACK(Acknowledgment):表示确认号字段是否有效,即确认是否已接收到的数据。
  • PSH(Push):提示接收方应用层尽快传递数据给应用程序,不需要等待缓冲区充满。
  • RST(Reset):请求重置连接,终止连接或处理异常情况。复位报文段
  • SYN(Synchronize):用于建立连接,初始化序列号。同步报文段
  • FIN(Finish):用于释放连接,表明发送方已经发送完数据。结束报文段

结语

这就是本期博客的全部内容啦!如果有什么其他的问题无法自己解决,可以在评论区留言哦!

最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞👍,评论✍,收藏📖),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!

在这里插入图片描述


http://www.lryc.cn/news/135450.html

相关文章:

  • Disruptor并发编程框架
  • matlab 点云精配准(1)——point to point ICP(点到点的ICP)
  • 【JVM】运行时数据区域
  • uniapp踩坑合集
  • 再JAVA中如何使用qsort对类进行排序?
  • docker安装clickhouse
  • 解决`idea`中`database`工具查询起别名乱码问题
  • UE4/5Niagara粒子特效之Niagara_Particles官方案例:1.5->2.3
  • Docker 容器数据卷
  • STM32--MPU6050与I2C外设
  • 项目管理实战笔记1:项目管理常识
  • 时序分解 | MATLAB实现基于SVMD逐次变分模态分解的信号分解分量可视化
  • 阿里云访问端口被限制解决方法记录
  • antd5源码调试环境启动(MacOS)
  • 单片机使用基于时间片轮询系统的-状态机-[1]
  • 前端开发怎么解决性能优化的问题? - 易智编译EaseEditing
  • 共享球拍小程序:打破拥有束缚,尽享运动乐趣
  • uniapp 微信小程序 绘制海报,长按图片分享,保存海报
  • 爬虫异常捕获与处理方法详解
  • 制作网络课堂学习平台(标签嵌套,后代选择器)
  • 基于医疗领域数据微调LLaMA——ChatDoctor模型
  • UDP TCP 报文内容
  • Boost开发指南-4.8operators
  • c# 泛型约束
  • android frida
  • Linux下的Shell编程——正则表达式入门(四)
  • 使用VisualStudio制作上位机(一)
  • 【前端从0开始】JavaSript——自定义函数
  • 如何在Windows、Mac和Linux操作系统上安装Protocol Buffers(protobuf)编译器
  • 简单介绍 CPU 的工作原理