Java学习手册:TCP 协议基础

TCP 协议基础

一、TCP 协议概述

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它在 IP 协议的基础上提供了可靠的 数据传输服务。TCP 通过三次握手建立连接,通过四次挥手断开连接,确保了数据传输的可靠性和有序性。

二、TCP 协议的特点

  • 面向连接 :在数据传输之前,TCP 协议需要在通信双方之间建立一个连接,这个连接是双向的、可靠的,确保数据可以按顺序传输。
  • 字节流导向 :TCP 把数据看成一连串无结构的字节流,应用程序需要自己对数据进行分界。
  • 可靠的传输 :TCP 使用确认(ACK)、重传、校验和等机制来确保数据的可靠传输。如果接收方发送了 ACK 确认包,发送方可以确定数据已经成功到达;如果在规定时间内没有收到 ACK 确认包,发送方会重传数据。
  • 使用端口号 :TCP 协议通过端口号来区分不同的应用程序进程,使得一个主机可以同时运行多个网络应用程序。
  • 全双工通信 :TCP 支持通信双方同时发送和接收数据,实现全双工通信。
  • 面向字节流 :TCP 把数据看成一连串无结构的字节流,应用程序需要自己对数据进行分界。

三、TCP 协议的工作原理

  • 三次握手

    • 第一次握手 :客户端向服务器发送一个带有 SYN(同步序列编号)标志的数据包,请求建立连接。
    • 第二次握手 :服务器收到 SYN 数据包后,回复一个带有 SYN 和 ACK(确认)标志的数据包,表示同意建立连接,并为客户端分配资源。
    • 第三次握手 :客户端收到服务器的 SYN-ACK 数据包后,再发送一个带有 ACK 标志的数据包,确认连接建立成功。
  • 数据传输 :在连接建立后,客户端和服务器就可以通过 TCP 协议进行数据传输了。TCP 协议会将数据分成多个数据段进行传输,并对每个数据段进行编号和确认,以确保数据的可靠传输。

  • 四次挥手

    • 第一次挥手 :主动关闭方(通常是客户端)发送一个带有 FIN(结束发送)标志的数据包,表示已经没有数据要发送了。
    • 第二次挥手 :被动关闭方(通常是服务器)收到 FIN 数据包后,发送一个带有 ACK 标志的数据包,确认收到 FIN 数据包。
    • 第三次挥手 :被动关闭方发送一个带有 FIN 标志的数据包,表示自己也没有数据要发送了。
    • 第四次挥手 :主动关闭方收到被动关闭方的 FIN 数据包后,发送一个带有 ACK 标志的数据包,确认收到 FIN 数据包,连接断开。

四、TCP 协议的可靠性保证机制

  • 确认(ACK)和重传 :接收方收到数据后,会发送一个 ACK 确认包给发送方,表示已经成功接收到数据。如果发送方在规定时间内没有收到 ACK 确认包,就会认为数据丢失,重新发送数据。
  • 序列号和确认号 :TCP 协议为每个数据段都分配了一个序列号,接收方通过序列号可以将数据按正确的顺序进行重组。同时,接收方在发送 ACK 确认包时,会携带一个确认号,表示已经成功接收到序列号小于确认号的数据。
  • 校验和 :TCP 协议会对数据段进行校验和计算,接收方收到数据后,也会进行校验和计算,如果校验和不匹配,就认为数据损坏,丢弃该数据段并要求重传。
  • 流量控制 :TCP 协议通过滑动窗口机制实现流量控制,接收方可以根据自己的接收能力调整窗口大小,发送方只能在窗口范围内发送数据,避免了接收方因处理不过来而丢弃数据的情况。
  • 拥塞控制 :TCP 协议通过多种算法(如慢启动、拥塞避免等)来实现拥塞控制,当网络出现拥塞时,会自动减少发送速率,缓解网络拥塞。

五、TCP 协议的应用场景

  • 网页浏览(HTTP/HTTPS) :当我们通过浏览器访问网页时,浏览器与 Web 服务器之间通常使用 HTTP 或 HTTPS 协议进行通信,而这些协议都是基于 TCP 协议的。
  • 文件传输(FTP) :FTP 协议用于在客户端和服务器之间传输文件,它也是基于 TCP 协议的,以确保文件传输的完整性和可靠性。
  • 电子邮件(SMTP、POP3、IMAP) :电子邮件的发送和接收通常使用 SMTP、POP3、IMAP 等协议,这些协议同样基于 TCP 协议,以确保邮件数据的可靠传输。
  • 远程登录(SSH、Telnet) :通过 SSH 或 Telnet 进行远程登录时,客户端与服务器之间的通信也是基于 TCP 协议的,以确保命令和数据的准确传输。

六、TCP 协议的性能和优化

  • TCP 长连接和短连接

    • 短连接 :每次传输数据都要建立和断开连接,适合偶尔的小数据量传输,但频繁建立和断开会增加 overhead。
    • 长连接 :建立一次连接后多次复用传输数据,适合频繁的数据交互,减少了建立和断开连接的 overhead。
  • Nagle 算法与延迟 ACK :Nagle 算法通过将小的数据包合并成较大的数据包发送,减少网络传输的 overhead。但可能会导致时延增加,对于实时性要求高的应用可以通过设置 TCP_NODELAY 选项来禁用 Nagle 算法。延迟 ACK 是接收方延迟发送 ACK 确认包,通常在收到一个数据包后,等待一段时间(通常是 200 毫秒)再发送 ACK,这样可以将多个 ACK 合并在一起发送,减少网络传输量。但这也可能会增加时延,需要根据具体应用进行权衡。

  • 发送缓冲区和接收缓冲区 :增大发送缓冲区和接收缓冲区可以提高数据传输的性能,减少数据丢失和重传的可能性。可以通过 socket 选项(如 SO_SNDBUF、SO_RCVBUF)来调整缓冲区大小。

七、总结

TCP 协议作为传输层的核心协议之一,为网络通信提供了可靠的传输服务。通过理解 TCP 协议的特点、工作原理、可靠性保证机制以及性能优化方法,开发人员可以更好地设计和优化基于 TCP 协议的网络应用程序。在 JavaWeb 开发中,虽然通常使用高层的协议和框架(如 HTTP、Servlet 等)进行开发,但了解 TCP 协议的基础知识有助于深入理解网络通信的本质,为构建高性能、可靠的 Web 应用提供坚实的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

删除排序数组中的重复项--LeetCode

题目 给你一个非严格递增排列的数组 nums ,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#xff0c…

【Elasticsearch】入门篇

Elasticsearch 入门 前言 官方地址:Elastic — 搜索 AI 公司 | Elastic ES 下载地址:Past Releases of Elastic Stack Software | Elastic 文档:什么是 Elasticsearch?|Elasticsearch 指南 简介 Elasticsearch 是一个分布式、…

2024新版仿蓝奏云网盘源码,已修复已知BUG,样式风格美化,可正常运营生产

说起网盘源码,网络上出现的也很多,不过可真正正能够用于运营的少之又少。今天将的蓝奏云网盘源码,其实网络上也有,不过是残缺版,bug很多。我今天分享的仿蓝奏云模板是经过长时间测试修复后的源码,源码实测可…

机器人结构认知与安装

机器人结构认知与安装 1. ES机器人系统结构与硬件组成 核心组件: OPPO ES5机器人系统由机器人本体、控制手柄、48V电源和OPPO Studio终端构成。一体化底座:包含控制主板、安全接口板、监测保护电路单元,支持外接急停开关,采用光耦…

sass 变量

基本使用 如果分配给变量的值后面添加了 !default 标志 ,这意味着该变量如果已经赋值,那么它不会被重新赋值,但是,如果它尚未赋值,那么它会被赋予新的给定值。 如果在此之前变量已经赋值,那就不使用默认值…

python自动化测试1——鼠标移动偏移与移动偏移时间

python对自动化测试运维提供了一个简易的库—pyautogui,我们可以借助这个库进行开发。 import pyautogui as pp.moveTo(100,100,3) 这里将鼠标光标移动到100,100处,并且用时3秒移动 鼠标移动是以固定坐标为单位,鼠标偏移则是在…

LX4-数据手册相关

数据手册相关 一 如何获取数据手册 ST官网:www.st.com 中文社区网: https://www.stmcu.com.cn/Designresource/list/STM32F1/document/datasheet 淘宝的商品详情页 二 如何阅读数据手册 芯片手册 定义:由芯片制造商提供,详细…

如何使用 uv 构建 Python 包并本地安装

本文将逐步指导你创建一个简单的 Python 包,并将其本地安装到机器或云环境中。完成本教程后,你将拥有一个可复用的 Python 库,可直接通过 pip 安装或在项目中导入使用。 步骤详解 Step 0: 选择构建工具 - 使用 uv 推荐理由:uv 是…

Linux之安装配置Nginx

Linux系统下安装配置Nginx的详细步骤如下: 一、准备工作 系统环境:确保Linux系统已安装,并且具有网络连接(以便在线安装依赖或下载Nginx)。 安装依赖:Nginx依赖于一些开发库和工具,如gcc、pcr…

计算机视觉cv入门之答题卡自动批阅

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识,这里我们以答题卡自动批阅这一案例来实操一下。 大致思路 答题卡自动批阅的大致流程可以分为这五步:图像预处理-寻找考试信息区域与涂卡区域-考生信息区域OCR识别-涂卡区域填涂答案判断…

语音合成之一TTS技术发展史综述

TTS技术发展史综述 引言TTS技术的起源与早期探索基于规则的TTS系统:原理与发展共振峰合成技术:作用与影响拼接合成技术:发展与应用统计参数语音合成:以隐马尔可夫模型(HMM)为例深度学习驱动的TTS&#xff1…

目标检测中的损失函数(一) | IoU GIoU DIoU CIoU EIoU Focal-EIoU

🚀该系列将会持续整理和更新BBR相关的问题,如有错误和不足恳请大家指正,欢迎讨论!!! 📦目标检测的损失函数一般包含三个部分,分别是边界框损失也可称为定位损失、置信度损失和分类损…

结构型模式:适配器模式

什么是适配器模式? 适配器模式(Adapter Pattern)是一种常用的结构型设计模式,它的主要作用是将一个类的接口转换成客户端期望的另一个接口。就像现实生活中的各种转接头一样,适配器模式使得原本因接口不兼容而无法一起…

AI Agent认知框架(ReAct、函数调用、计划与执行、自问自答、批判修正、思维链、思维树详解和对比,最后表格整理总结

以下是主流AI Agent认知框架的详细说明、对比及表格总结: 1. 各认知框架详解 (1) ReAct (Reasoning Action) 定义:结合推理(Reasoning)和行动(Action)的循环过程。核心机制: 模型先推理&…

特征存储的好处:特征存储在机器学习开发中的优势

随着企业寻求提升机器学习生产力和运营能力 (MLOps),特征存储 (Feature Store) 的普及度正在迅速提升。随着 MLOps 技术的进步,特征存储正成为机器学习基础设施的重要组成部分,帮助企业提升模型的性能和解释能力,并加速新模型与生产环境的集成。这些存储充当集中式存储库,…

SPRING-AI 官方事例

springAI 关于最近看了很多SpringAi,阅读很多代码都感觉特别陌生 SpringAI依赖的springBoot版本都是3.3以上, 以及很多SpringAi都是依赖JDK版本最低17, 并且出现了很多新关键字例如 var,record 等写法, 烟花缭乱得lambda 表达式, 到处都是使用build 构…

Visual Studio Code 使用tab键往左和往右缩进内容

使用VSCode写东西,经常遇到多行内容同时缩进的情况,今天写文档的时候就碰到,记录下来: 往右缩进 选中多行内容,点tab键,会整体往右缩进: 往左缩进 选中多行内容,按shifttab&am…

机器学习(7)——K均值聚类

文章目录 1. K均值(K-means)聚类是什么算法?2. 核心思想2. 数学目标3. 算法步骤3.1. 选择K个初始质心:3.2.迭代优化3.3. 重复步骤2和步骤3: 4. 关键参数5. 优缺点6. 改进变种7. K值选择方法8. Python示例9. 应用场景10…

爬虫案例-爬取某企数据

文章目录 1、准备要爬取企业名称数据表2、爬取代码3、查看效果 1、准备要爬取企业名称数据表 企业名称绍兴市袍江王新国家庭农场绍兴市郑杜粮油专业合作社绍兴市越城区兴华家庭农场绍兴市越城区锐意家庭农场绍兴市越城区青甸畈家庭农场绍兴市袍江王新国家庭农场绍兴市袍江月明…

足球 AI 智能体技术解析:从数据采集到比赛预测的全链路架构

一、引言 在足球运动数字化转型的浪潮中,AI 智能体正成为理解比赛、预测赛果的核心技术引擎。本文从工程实现角度,深度解析足球 AI 的技术架构,涵盖数据采集、特征工程、模型构建、实时计算到决策支持的全链路技术方案,揭示其背后…