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

计算机网络:运输层 —— 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数据库服务器开放的端口

http://www.kler.cn/a/391308.html

相关文章:

  • ❤React-JSX语法认识和使用
  • 将大型语言模型(如GPT-4)微调用于文本续写任务
  • Android Profiler 内存分析
  • LeetCode【0018】四数之和
  • 开源数据库 - mysql - xtrabackup工具进行备份
  • 【Vue】Vue3.0(二十)Vue 3.0 中mitt的使用示例
  • 基于Ubuntu2410脚本搭建OpenStack-D版
  • SSE与WebSocket与MQTT
  • STM32WB55RG开发(3)----生成 BLE 程序连接手机APP
  • Linux开发讲课49--- Linux 启动过程分析
  • 刘铁猛C#入门 024 类的声明,继承和访问控制
  • 微澜:用 OceanBase 搭建基于知识图谱的实时资讯流的应用实践
  • Nebula NGQL语言的使用 一
  • LabVIEW 实现 find_nearest_neighbors 功能(二维平面上的最近邻查找)
  • vue-h5:在h5中实现相机拍照加上身份证人相框和国徽框
  • 智能科技赋能金融决策:中阳科技的数据分析解决方案
  • [免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
  • vue3 富文本组件(MDEditor)在拖拽组件(vuedraggable)点击功能失效问题
  • Python 操作 Neo4J,Python 库 Py2Neo
  • (三)【 Python最牛 -Basemap】使用Basemap进行地图可视化
  • 项目管理人员的自我评估与职业目标设定
  • Knife4j调试全局对象参数自动化
  • A算法详解(go实现)
  • 【服务器】本地安装X11 服务器-Windows
  • 【学习】【HTML】HTML、XML、XHTML
  • Spring Boot编程训练系统:核心特性与实现策略