计算机网络 (33)传输控制协议TCP概述

news/2025/1/12 7:10:35/

一、定义与基本概念

        TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它工作在OSI模型的第四层,即传输层,为用户提供可靠的、有序的和无差错的数据传输服务。TCP协议与UDP协议是传输层的两大主要协议,但两者在设计上有明显的不同,TCP提供的是可靠的数据传输服务,而UDP则更注重传输的速度和效率。

二、工作原理

  1. 三次握手

    • 当客户端想要与服务器建立连接时,会首先发送一个SYN(同步)报文给服务器,服务器收到后会回复一个SYN+ACK(同步+确认)报文,表示同意建立连接。
    • 然后,客户端再发送一个ACK(确认)报文给服务器,确认收到服务器的SYN+ACK报文。至此,TCP连接建立完成。
  2. 四次挥手

    • 当客户端或服务器想要关闭连接时,会发送一个FIN(结束)报文给对方,对方收到后会回复一个ACK报文,表示同意关闭连接。
    • 然后,发送方再发送一个FIN报文,对方再次回复ACK报文,确认收到FIN报文。这样,一个TCP连接就被关闭了。

三、主要特点

  1. 面向连接:TCP协议在数据传输前需要先建立连接,确保双方都已准备好进行数据交换。这种连接是全双工的,即数据可以在两个方向上同时传输。
  2. 可靠性:TCP协议通过一系列机制确保数据的可靠传输,包括序号机制、确认应答机制、超时重传机制等。
  3. 基于字节流:TCP协议将应用层发送的数据视为无结构的字节流,并按照字节流的方式传输数据。
  4. 流量控制:TCP协议使用滑动窗口机制实现流量控制,以防止发送方发送过多的数据导致接收方无法处理。
  5. 拥塞控制:TCP协议还包含拥塞控制机制,以避免网络拥塞,确保网络资源的合理利用。拥塞控制是TCP协议中一个至关重要的部分,它旨在防止过多的数据注入网络,从而导致网络性能下降甚至崩溃。

四、报文格式

       TCP报文由TCP首部(报头)和应用数据构成,其中TCP首部是TCP协议的核心所在,应用数据部分是TCP报文的负载。TCP报文的主要字段包括:

  1. 源端口和目的端口:长度各为16位,分别指示发送端的应用程序使用的端口号以及接收端的应用程序期望接收的端口号。
  2. 序列号:长度为32位,用于标识发送的数据字节流中的每个字节的位置。
  3. 确认号:长度为32位,用于确认已经成功接收的数据的序列号。
  4. 数据偏移:长度为4位,指示TCP报文的“数据”起始处距离TCP报文起始处的距离有多远。
  5. 控制标志:长度为9位,用于控制和管理TCP连接,包括NS、CWR、ECE、URG、ACK、PSH、RST、SYN等标志位。

五、应用场景与局限性

       TCP协议适用于对可靠性要求高的数据传输场景,如网页浏览、文件传输、电子邮件等。然而,TCP协议也存在一些局限性,如传输速度相对较慢、开销较大等,因此在一些对实时性要求较高或传输数据量较小的场景中,可能会选择使用UDP协议。

总结

       综上所述,TCP协议作为互联网中最重要的传输层协议之一,具有面向连接、可靠传输、流量控制和拥塞控制等特点,为数据的稳定传输提供了有力的保障。然而,TCP协议也存在一些缺点和限制,需要在具体的应用场景中进行权衡和选择。

 结语    

这世上有些事情是永远不会变的

但有些事情却改变了

!!!


http://www.ppmy.cn/news/1562435.html

相关文章

搭建Hadoop分布式集群

软件和操作系统版本 Hadoop框架是采用Java语言编写,需要java环境(jvm) JDK版本:JDK8版本 ,本次使用的是 Java: jdk-8u431-linux-x64.tar.gz Hadoop: hadoop-3.3.6.tar.gz 三台Linux虚拟节点: CentOS-7-x86_64-DVD-2…

LeetCode hot100-96

136. 只出现一次的数字 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。这题的解答挺有意…

Streamlit+Selenium快速构建一个网络爬虫应用

项目需要从网上爬取数据,用了八爪鱼来进行测试,可以通过自定义任务,不需要编程即可实现对于数据的爬取,但是缺点是免费版本自定义任务有数量限制,另外在采集过程的控制上还不够便利,对于熟悉Python编程的人…

【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的爱家园管理系统

开题报告 随着社会的不断发展,人们对于生育、婚姻的观念也在不断变化。然而,这些观念的变化往往伴随着一些问题和挑战。例如,一些年轻夫妇对于生育和婚姻感到迷茫和焦虑,而一些中年人则面临着婚姻危机或情感困扰。此外&#xff0…

C#使用OpenTK绘制一个着色矩形

OpenTK介绍 OpenTK是一个开源、跨平台的游戏开发库,由MonoGame团队创建。它为C#开发者提供了一个简单易用的接口,以便使用OpenGL、OpenAL和OpenCL进行3D渲染、音频处理和并行计算。OpenTK的目标是提供一个一致且高效的框架,让开发者能够专注…

DDD - 如何运用 DDD 进行数据库设计

文章目录 Pre概述领域对象持久化的思想领域模型的设计传统的 4 种关系1. 一对一关系2. 多对一关系3. 一对多关系4. 多对多关系 继承关系的 3 种设计1. 继承关系的第一种方案:整个父类与子类都写入一张表2. 继承关系的第二种方案:各子类各自对应各自的表3…

分享:osgb倾斜数据转cesium-3dtiles 小工具.

背景: 很多知识殊途同归,在三维软件这块,少不了要和各种各样的数据格式打交道.osgb,stl,obj,3dtiles,3ds等等..虽然里面本质核心基本都是几何数据拓扑数据材质纹理数据等等,但是由于其组织方式不同和特殊的应用场景,导致很多模型需要转来转去...相信很多人在这方面都或多或少吃…

记录一下vue2项目优化,虚拟列表vue-virtual-scroll-list处理10万条数据

文章目录 封装BrandPickerVirtual.vue组件页面使用组件属性 select下拉接口一次性返回10万条数据,页面卡死,如何优化??这里使用 分页 虚拟列表(vue-virtual-scroll-list),去模拟一个下拉的内容…