计算机网络:运输层 —— TCP/IP运输层中的两个重要协议

文章目录

    • TCP 协议
      • 工作方式
        • 建立连接(三次握手)
        • 释放连接(四次挥手)
      • 首部格式
    • UDP 协议
      • 首部格式
      • 适用场景
    • TCP 与 UDP 的对比
      • 无连接的UDP和面向连接的TCP
      • 对单播、多播和广播的支持情况
      • 对应用层报文的处理
      • 对数据传输可靠性的支持情况
      • UDP首部和TCP首部的对比
    • UDP TCP常用端口

在这里插入图片描述
我们来简单介绍一下 TCP/IP 运输层中的两个重要协议—— TCP 协议UDP 协议

TCP 协议

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层(运输层)通信协议。

主要特点

  • 可靠性高
    • 序列号与确认应答:发送数据时,TCP 会为每个字节的数据都进行编号,即序列号。接收方收到数据后,会返回一个确认应答,告知发送方已成功接收的数据的序列号。通过这种方式,发送方可以确认数据是否被正确接收,如果在一定时间内没有收到确认应答,就会认为数据丢失并进行重传
    • 校验和:TCP 在发送和接收数据时都会计算校验和。校验和是根据数据内容计算出的一个数值,用于检测数据在传输过程中是否发生错误。如果接收方计算出的校验和与发送方发送的校验和不一致,就会丢弃该数据,并通知发送方重传。
  • 面向连接:在数据传输之前,需要先建立 TCP 连接。这个连接是双向的,一旦连接建立,就可以在连接上进行可靠的数据传输。连接的建立通过三次握手过程实现,连接的释放通过四次挥手过程完成。
  • 流量控制:TCP 使用滑动窗口机制进行流量控制。接收方会告知发送方自己的接收窗口大小,发送方根据这个窗口大小来控制发送数据的速度,确保不会发送过多的数据导致接收方无法处理。
  • 拥塞控制:TCP 具有拥塞控制机制,用于避免网络拥塞。当网络拥塞时,TCP 会减少发送数据的速度;当网络状况好转时,再逐渐增加发送速度。拥塞控制算法主要包括慢启动拥塞避免快速重传快速恢复等部分。

TCP 协议具有可靠传输、面向连接等特点,适用于对数据传输可靠性要求较高的应用场景,如文件传输、电子邮件、网页浏览等。

工作方式

建立连接(三次握手)
  • 第一次握手:客户端向服务器发送一个 SYN 报文(同步报文段),请求建立连接。此时客户端进入 SYN_SENT 状态。
  • 第二次握手:服务器收到客户端的 SYN 报文后,会向客户端发送一个 SYN + ACK 报文(同步确认报文段),表示收到了客户端的请求,并同意建立连接。此时服务器进入 SYN_RECV 状态。
  • 第三次握手:客户端收到服务器的 SYN + ACK 报文后,会向服务器发送一个 ACK 报文(确认报文段),确认收到了服务器的 SYN 报文。此时客户端和服务器进入 ESTABLISHED 状态,连接建立成功,可以开始传输数据。
释放连接(四次挥手)
  • 第一次挥手:主动关闭方(通常是客户端)发送一个 FIN 报文(结束报文段),表示不再发送数据,请求关闭连接。此时主动关闭方进入 FIN_WAIT_1 状态。
  • 第二次挥手:被动关闭方(通常是服务器)收到 FIN 报文后,会发送一个 ACK 报文,确认收到了主动关闭方的关闭请求。此时被动关闭方进入 CLOSE_WAIT 状态,主动关闭方进入 FIN_WAIT_2 状态。
  • 第三次挥手:被动关闭方处理完剩余的数据后,也会发送一个 FIN 报文,请求关闭连接。此时被动关闭方进入 LAST_ACK 状态。
  • 第四次挥手:主动关闭方收到被动关闭方的 FIN 报文后,会发送一个 ACK 报文,确认收到了被动关闭方的关闭请求。此时主动关闭方进入 TIME_WAIT 状态,等待一段时间后(通常为 2 倍的报文最大生存时间 MSL),进入 CLOSED 状态,被动关闭方收到 ACK 报文后,也进入 CLOSED 状态,连接彻底关闭。

首部格式

在这里插入图片描述

  • 源端口和目的端口:各占 16 位,用于标识数据的发送方和接收方的应用程序进程。
  • 序列号:32 位,用于对发送的数据字节进行编号,确保数据的顺序。
  • 确认应答号:32 位,是接收方期望收到的下一个数据的序列号,用于确认数据的接收。
  • 数据偏移:4 位,指示 TCP 首部的长度,单位是 4 字节。
  • 标志位:共 6 位,包括 URG(紧急指针有效)、ACK(确认号有效)、PSH(推送功能)、RST(复位连接)、SYN(请求建立连接)、FIN(通知对方本端要关闭连接)。
  • 窗口:16 位,用于表示接收方的接收窗口大小,即接收方能够接收的数据量。
  • 校验和:16 位,用于检验数据的正确性。
  • 紧急指针:16 位,只有在 URG(紧急指针有效)标志位被设置时才有意义,表示紧急数据的偏移量。

UDP 协议

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输层(运输层)协议。

主要特点

  1. 无连接

    • UDP 在通信之前不需要建立连接,直接将数据封装成 UDP 数据报进行发送。这就像发送一封普通的信件,不需要事先与收件人建立联系,直接投入邮筒即可。
    • 这种无连接的特性使得 UDP 通信非常快速和高效,适用于一些对实时性要求较高、但对数据可靠性要求相对较低的场景。
  2. 不可靠传输

    • UDP 不保证数据一定能够到达目的地,也不进行数据的重传和确认。如果数据在传输过程中丢失或损坏,UDP 不会采取任何措施进行修复。
    • UDP 传输的数据可能会出现丢失、乱序、重复等问题。但对于一些实时性要求极高的应用,如视频会议、在线游戏等,偶尔的数据丢失并不会对用户体验产生太大影响,而快速的传输速度更为重要。
  3. 面向数据报

    • UDP 是面向数据报的协议,即一次发送一个完整的数据报,接收方也一次接收一个完整的数据报。数据报之间是相互独立的,不存在像 TCP 那样的字节流概念。
    • 每个 UDP 数据报都有固定的长度限制,理论上最大长度为 65507 字节(65535 字节减去 UDP 首部的 8 字节和 IP 首部的 20 字节)。但在实际应用中,由于网络环境等因素的限制,通常不会发送这么大的数据报。

首部格式

  1. 源端口号(16 位):用于标识发送数据报的应用程序进程。
  2. 目的端口号(16 位):用于标识接收数据报的应用程序进程。
  3. 长度(16 位):指示 UDP 数据报的总长度,包括首部和数据部分。
  4. 校验和(16 位):用于检测 UDP 数据报在传输过程中是否出现错误。如果校验和计算结果为 0,则表示数据报没有错误;如果校验和不为 0,则表示数据报出现了错误,接收方可以选择丢弃该数据报。

适用场景

  1. 实时多媒体应用:如视频会议、在线直播、语音通话等。这些应用对实时性要求非常高,不希望因为数据重传等机制而引入延迟。即使偶尔出现数据丢失,也不会对用户体验产生太大影响。

  2. 多播和广播应用:UDP 支持多播和广播通信,可以将数据同时发送给多个接收者。这在一些需要进行大规模数据分发的场景中非常有用,如网络电视、在线游戏更新等。

  3. 简单的请求 - 响应应用:对于一些简单的请求 - 响应式的应用,如域名系统(DNS)查询,UDP 可以快速地发送请求并接收响应,而不需要建立复杂的连接和进行可靠的数据传输。

TCP 与 UDP 的对比

无连接的UDP和面向连接的TCP

此处的连接指逻辑连接关系,而不是物理连接。

![[无连接的UDP和面向连接的TCP.png]]

  • UDP协议:

    • UDP 是一种无连接不可靠的数据传输协议。
    • UDP 中,发送方直接将数据包发送到接收方,中间没有建立连接的过程。
    • 数据传输过程中不会进行确认或重传机制,因此可能存在数据丢失的情况。
  • TCP 协议

    • TCP 是一种面向连接可靠的传输协议。

    • TCP 中,发送方与接收方之间需要先建立一个连接,这个过程称为“三报文握手”。

    • 建立连接后,基于 TCP 连接进行数据传输。TCP 会确保数据的可靠传输,包括错误检测、重传等机制。

    • 传输完成后,双方还需要通过“四报文挥手”来释放 TCP 连接。

对单播、多播和广播的支持情况

  • UDP支持单播、多播和广播

  • TCP仅支持单播(可靠通信)

![[UDP和TCP对单播、多播和广播的支持情况.png]]

对应用层报文的处理

UDP对应用进程交付下来的报文既不合并也不拆分,而是保留这些报文的边界。即,UDP是面向应用报文的

![[对应用层报文的处理.png]]
TCP是面向字节流的

  • 发送方的 TCP 把应用进程交付下来的应用报文仅仅看作一连串的,无结构的字节流, TCP 并不知道这些待传输的字节流的含义,仅将它们编号并存储在自己的发送缓存中。 TCP 根据发送策略,从发送缓存中提取一定数量的字节,并给其添加一个首部,使之成为TCP报文段并进行发送。

  • 接收方的 TCP,一方面从所接收到的 TCP 报文段中,取出数据载荷并存储在接收缓存中,另一方面,将接收缓存中的一些字节向上交付给应用进程。

  • TCP 不保证 接收方应用进程所接收到的数据块,与发送方应用进程所发出的应用层报文之间具有对应大小的关系。

例如,发送方应用进程交给发送方的 TCP 共 10 个应用层报文,但接受方的 TCP 可能只用了 4 个数据块,就把收到的字节流交付给了上层的应用进程,但接收方应用进程收到的字节流,必须和发送方应用进程发出的字节流完全一样。接收方的应用进程必须有能力识别收到的字节流,把它还原成有意义的应用层报文。

在实际网络中,基于 TCP 连接的两端,可以同时进行 TCP 报文段的发送和接收,也就是全双工通信

对数据传输可靠性的支持情况

![[UDP和TCP对数据传输可靠性的支持情况.png]]

  • UDP 不保证数据的顺序、完整性和到达情况。数据可能在网络中丢失、出现乱序或重复,接收方收到数据后不做任何处理,产生误码的数据直接丢弃

  • 对于 TCP,发送方和接收方之间需要建立连接,并且在传输结束后关闭连接。发送方通过 TCP 向接收方发送数据,TCP 协议负责处理数据的排序、重发和流量控制,提供可靠的数据传输,确保数据的完整。

UDP首部和TCP首部的对比

![[UDP首部和TCP首部的对比.png]]

UDP TCP常用端口

端口号协议说明
21TCPFTP服务器所开放的端口,用于上传、下载
22TCPPcAnywhere建立的TCP连接的端口
23TCPTelnet远程登录TCP连接的端口
25TCPSMTP服务器所开放的端口,用于发送邮件
53TCPDNS服务器所开放的端口
80TCPHTTP端口,用于网页浏览
137UDPNetBios命名服务
138UDPNetBios数据报服务
139TCPNetBios会话服务,当通过网上邻居传输文件时用137、138和139端口
161UDP简单网络管理协议SNMP
443TCP/UDPHTTPS网页浏览端口,提供加密和安全传输
1433TCPSQL Server数据库服务器开放的端口

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习:决策树——ID3算法、C4.5算法、CART算法

决策树是一种常用于分类和回归问题的机器学习模型。它通过一系列的“决策”来对数据进行分类或预测。在决策树中,每个内部节点表示一个特征的测试,每个分支代表特征测试的结果,而每个叶节点则表示分类结果或回归值。 决策树工作原理 根节点&…

Windows,虚拟机Ubuntu和开发板三者之间的NFS服务器搭建

Windows,虚拟机Ubuntu和开发板三者之间的NFS服务器搭建 (1)虚拟机 ubuntu 要使用桥接模式,不能使用其他模式 (2)通过网线将PC和开发板网口直连:这样的连接,开发板是无法连接外网的 (3&#xff…

ReactPress:重塑内容管理的未来

ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议,欢迎一起共建,感谢Star。 ReactPress:重塑内容管理的未来 在当今信息爆炸的时代,一个高效、易用的内容管理系统&#xff0…

WebRTC视频 01 - 视频采集整体架构

一、前言: 我们从1对1通信说起,假如有一天,你和你情敌使用X信进行1v1通信,想象一下画面是不是一个大画面中有一个小画面?这在布局中就叫做PIP(picture in picture);这个随手一点&am…

SQL Servers审核提高数据库安全性

什么是SQL Server审核? SQL Server审核包括追踪和审查发生在SQL Server上的所有活动,检测潜在的威胁和漏洞,能够监控和记录对服务器设置的每次更改。此外,可以帮助管理员可以轻松地追踪数据库中特定表中的所有服务器活动&#xf…

STM32+AI语音识别智能家居系统

基于 STM32 和 AI 语音识别的智能家居系统的详细硬件和软件设计,包括各个模块的详细描述和代码示例。 一、硬件设计 1. 微控制器(STM32): 选择 STM32F7 系列或更高性能的芯片,如 STM32F767ZIT6,以满足处理…

在 ASP.NET Core 6.0 中使用 Swagger/OpenAPI 丰富 Web API 文档

示例代码:https://download.csdn.net/download/hefeng_aspnet/89961435 介绍 在选择或尝试与 API 集成之前,大多数开发人员都会查看其 API 文档。保持 API 文档更新以反映软件更改是一项挑战,需要时间和精力。对于 Web API,我们…

萤石设备视频接入平台EasyCVR海康私有化视频平台监控硬盘和普通硬盘有何区别?

在现代安防监控领域,对于数据存储和视频处理的需求日益增长,特别是在需要长时间、高稳定性监控的环境中,选择合适的存储设备和监控系统显得尤为重要。本文将深入探讨监控硬盘与普通硬盘的区别,并详细介绍海康私有化视频平台EasyCV…

使用Matlab建立随机森林

综述 除了神经网络模型以外,树模型及基于树的集成学习模型是较为常用的效果较好的预测模型。我们以下构建一个随机森林模型。 随机森林是一种集成学习方法,通过构建多个决策树并结合其预测结果来提高模型的准确性和稳定性。在MATLAB中,可以…

WPS宏编辑器开发,单元格内容变更自动触发事件

WPS中Excel的“触发器” 写在前面宏的开发1、切换宏编辑器开发环境2、小练习:自定义函数3、完成功能需求:单元格内容变更自动触发事件 总结 写在前面 我先生用EXCEL做了一张学生存款表。设计得很简单,A学生已存款X元,A学生再次存…

HarmonyOS Next星河版笔记--界面开发(4)

布局 1.1.线性布局 线性布局通过线性容器column和row创建 column容器:子元素垂直方向排列row容器:子元素水平方向排列 1.1.1.排布主方向上的对齐方式(主轴) 属性:.justifyContent(枚举FlexAlign&#…

【前端】深入浅出的React.js详解

React 是一个用于构建用户界面的 JavaScript 库,由 Facebook 开发并维护。随着 React 的不断演进,官方文档也在不断更新和完善。本文将详细解读最新的 React 官方文档,涵盖核心概念、新特性、最佳实践等内容,帮助开发者更好地理解…

Rust开发一个命令行工具(一,简单版持续更新)

依赖的包 cargo add clap --features derive clap命令行参数解析 项目目录 代码 main.rs mod utils;use clap::Parser; use utils::{editor::open_in_vscode,fs_tools::{file_exists, get_file, is_dir, list_dir, read_file}, }; /// 在文件中搜索模式并显示包含它的行。…

Xcode 16 使用 pod 命令报错解决方案

原文请点击这个跳转 一、问题现象: 有人会遇到 Xcode 升级到 16 后,新建应用然后使用 pod init 命令会报错如下: Stack Ruby : ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [x86_64-darwin23]RubyGems : 3.5.22Host : macOS 15.0 (24A335…

Linux 6.13 将提供对一系列 Pre-M1 苹果设备的基本支持

虽然不像苹果 M3/M4 设备支持上游主线 Linux 内核那样令人兴奋,但对于那些拥有一些较旧的苹果(M1 之前)设备的用户来说,即将发布的 Linux 6.13 内核将支持一些较旧的 SoC 和板卡。 即将到来的 Linux 6.13 合并窗口将支持大量旧版…

【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数

CL13 最大的数(20 分) 输入一个有 n 个无重复元素的整数数组 a&#xff0c;输出数组中最大的数。提示&#xff1a;如使用排序库函数 sort()&#xff0c;需要包含头文件#include 。输入&#xff1a; 第一行是一个正整数 n(2<n<20)&#xff1b; 第二行包含 n 个不重复的整…

vue elementui el-dropdown-item设置@click无效的解决方案

如图&#xff0c;直接在el-dropdown-item上面设置click&#xff0c;相应的method并没有被触发&#xff0c;查找资料发现需要在它的上级 el-dropdown 处使用 command 方法触发。 【template】 <el-dropdown placement"bottom-end" command"handleCommand&quo…

flinkOnYarn并配置prometheus+grafana监控告警

flinkOnYarn并配置prometheusgrafana监控告警 一、相关服务版本&#xff1a; flink版本&#xff1a;1.17.2 pushgateway版本&#xff1a;1.10.0 prometheus版本&#xff1a;3.0.0 grafana-v11.3.0参考了网上的多个文档以及学习某硅谷的视频&#xff0c;总结了一下文档&#x…

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本 Shell脚本源码地址&#xff1a; Gitee&#xff1a;https://gitee.com/raymond9/shell Github&#xff1a;https://github.com/raymond999999/shell脚本可以去上面的Gitee或Github代码仓库拉取。 支持的功能和系统&am…

一文1800字使用Jmeter进行http接口性能测试!

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 为什么要做接口测试&#xff1f; 越底层发现b…