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

TCP/UDP原理

文章目录

  • 一、端口
    • 1. 端口的定义和作用
    • 2.服务端和客户端的区别
    • 3.常见的知名端口号有
  • 二、TCP的原理
    • 1.TCP头部封装格式
    • 2.TCP可靠性机制
      • 三次握手
      • 确认机制
      • 四次挥手
      • RST结束连接
      • 窗口机制
    • 3.完整性校验
    • 4.TCP特征
    • 5.TCP的适用场景
  • 三、UDP的原理
    • 1.UDP头部封装格式
    • 2.UDP特征
    • 3.UDP的适用场景
  • 四、TCP与UDP的对比

首先可以看下思维导图,以便更好的理解接下来的内容。
在这里插入图片描述

一、端口

在计算机网络中,端口是一种虚拟数据结构,用于网络应用程序与底层网络协议(如TCP或UDP)进行通信的途径。端口可以被看作是网络地址的一部分,有助于路由器和交换机将数据传送到正确的应用程序。

1. 端口的定义和作用

端口是计算机网络中的关键概念,它为应用程序提供了一种标识和区分不同通信会话的方式。在网络通信中,数据需要通过网络传输到达目标应用程序,而端口就是这个过程中的关键。

2.服务端和客户端的区别

服务端:服务端使用知名端口号,通常是固定的,用于特定的服务或协议。知名端口号范围通常是0-1023,这些端口被IANA(Internet Assigned Numbers Authority)指定给了特定的服务。常见的知名端口号包括HTTP的80端口、FTP的20和21端口等。

客户端:客户端使用大于等于1024随机端口号,用于临时的数据传输。

3.常见的知名端口号有

TCP 80                        HTTP                超文本传输协议。
TCP 20 & 21                   FTP                 文件传输协议。
TCP 23                        Telnet              远程登录。
TCP 25                        SMTP                简单邮件传输协议。
UDP 53                        DNS                 域名解析协议。
TCP 443                       HTTPS               HTTP over SSL/TLS。

在这里插入图片描述

二、TCP的原理

1.TCP头部封装格式

TCP头部包含了多种信息,这些信息帮助在发送和接收数据时维持连接的可靠性和顺序。

在这里插入图片描述

其中包括:

Source Port (源端口)                                 #表示数据包的发送方的端口号。帮助接收端知道哪个进程发送了这个数据包。
Destination Port (目的端口)                           #表示数据包的接收方的端口号。确保数据包被正确地路由到接收机上的适当进程。
Sequence Number (序列号)                             #用于标识发送的数据在整个数据流中的位置。允许接收端按正确的顺序重新组织接收的数据包。
Acknowledgement Number (确认号)                      #用于确认接收到的数据。告诉发送方哪些数据已被成功接收。
Data Offset (数据偏移)                                #显示TCP头部的长度。告诉接收端数据部分从哪里开始。
Reserved (保留位)                                    #为将来的使用而预留的位。保证向前兼容,为未来的扩展预留空间。
Control Bits (控制位)                                #包含URG, ACK, PSH, RST, SYN, FIN等标志位,用于流控制。URG (紧急位)设置为1时,表示“紧急指针”字段是有效的。ACK (确认位)当设置为1时,表示“确认号”字段是有效的。PSH (推送位)告诉接收端应该立即将数据推送到应用程序,而不是等待缓冲区填满。RST (复位位)用于复位连接,通常在错误发生时使用。SYN (同步位)用于建立连接时的同步。在三次握手过程中使用。FIN (结束位)用于关闭连接,表示发送方已完成数据发送。Window (窗口)                                       #定义了发送方愿意接收的数据量。实现流量控制,防止接收端被发送端的数据淹没。
Checksum (校验和)                                    #用于数据完整性校验。确保数据在传输过程中没有被篡改或损坏。
Urgent Pointer (紧急指针)                             #当URG标志被设置时使用。指出紧急数据的结束位置。
Options (选项)                                      #可选字段。为TCP提供附加的功能,如最大段大小、时间戳等。
Padding (填充)                                      #确保TCP头部的长度是32位的倍数。为了对齐头部字段。
Data (数据)                                         #实际要传输的数据。传输应用程序的数据。

2.TCP可靠性机制

TCP的设计目的是提供一个可靠的、面向连接的通信服务。为了实现这一目标,TCP使用了以下几种主要机制。

三次握手

三次握手:在建立连接之前,发送方和接收方之间进行三次握手以确保双方都准备好交换数据。

第一次  SYN置位      A-B
第二次  SYN,ACK置位   B-A
第三次  ACK置位      A-B

在这里插入图片描述

确认机制

确认机制:每当数据被接收,接收方都会发送一个确认回发送方。
Seq=上一次ack
Ack=上一次的seq+length

在这里插入图片描述超时重传
如果没有接收到,或接收到的是不完整数据,会再次发送Ack请求对方重发
在这里插入图片描述

四次挥手

四次挥手:当一方想要终止连接时,双方会进行四次挥手来安全地关闭连接。

第一次  FIN置位    A-B
第二次  ACK置位   B-A
第三次  FIN置位    B-A
第四次  ACK置位   A-B

在这里插入图片描述

RST结束连接

RST结束连接:一种异常结束连接的方式,当接收到带RST标志的数据包时,连接立即被终止。
收到RST置位的包后,立即结束TCP连接
收到RST置位的包后,不必等待对方的确认,直接结束TCP连接

窗口机制

滑动窗口机制:一种流量控制机制,它允许发送方调整发送数据的速度,以匹配接收方的接收能力。
滑动窗口
通过通告对方本机接收能力,来实现流量控制

在这里插入图片描述

3.完整性校验

完整性校验:通过Checksum字段来确保数据的完整性。
通过Checksum来检查数据完整性

4.TCP特征

优点
可靠性高:TCP通过确认机制和滑动窗口机制确保数据的可靠传输。
顺序传输:TCP确保数据包的顺序与发送顺序一致。

缺点
占用带宽高:由于确认机制和滑动窗口机制,TCP可能会产生额外的网络开销。
传输延迟高:三次握手和四次挥手增加了建立和终止连接的时间。

5.TCP的适用场景

对数据完整性要求高,但是对传输延迟要求低
TCP是一个重量级的协议,适用于对数据完整性和顺序有严格要求的应用场景,例如文件传输、邮件发送和Web浏览。

三、UDP的原理

UDP是一个简单的、无连接的协议,与TCP相比,它牺牲了可靠性以换取更低的延迟和开销。

1.UDP头部封装格式

与TCP相比,UDP的头部简洁得多,它只包含了最基本的信息。
在这里插入图片描述

2.UDP特征

优点:
占用带宽低:UDP没有确认机制,因此网络开销更小。
传输延迟低:UDP发送数据时不需要建立连接。

缺点:
没有任何可靠性机制:UDP不保证数据的顺序、完整性或可靠性。

3.UDP的适用场景

对传输延迟要求高,但数据完整性要求低
UDP适用于那些对传输速度有要求,但不需要完全可靠的数据传输的场景,例如在线视频流、语音通话和某些实时游戏。

四、TCP与UDP的对比

在这里插入图片描述在这里插入图片描述

如有不详或错误,敬请指出。

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

相关文章:

  • 操作符算数转换题
  • Centos7 安装 Docker
  • Java虚拟机内部组成
  • python遍历文件夹下的所有子文件夹,并将指定的文件复制到指定目录
  • [golang 流媒体在线直播系统] 1.直播的简单介绍以及借助腾讯云直播实现在线直播
  • C# 中操作集合的方法
  • pytorch学习(8)——现有网络模型的使用以及修改
  • get和post请求的区别
  • extern “C”关键字的作用
  • 使用ffmpeg截取视频片段
  • Python教程(11)——Python中的字典dict的用法介绍
  • 三道dfs题
  • Seaborn数据可视化(四)
  • kubernetes deploy standalone mysql demo
  • 【Map】Map集合有序与无序测试案例:HashMap,TreeMap,LinkedHashMap(121)
  • TiDB Serverless Branching:通过数据库分支简化应用开发流程
  • 运用亚马逊云科技Amazon Kendra,快速部署企业智能搜索应用
  • C# 使用 OleDbConnection 连接读取Excel的方法
  • 【LeetCode-中等题】98. 验证二叉搜索树
  • Leetcode-每日一题【剑指 Offer 37. 序列化二叉树】
  • 删除无点击数据offer数据分析使用
  • 【Apollo学习笔记】——规划模块TASK之SPEED_BOUNDS_PRIORI_DECIDER
  • 物理机ping不通windows server 2012
  • 誉天HCIE-Datacom丨为什么选择誉天数通HCIE课程学习
  • Python文本终端GUI框架详解
  • 01_lwip_raw_udp_test
  • 学习ts(十一)本地存储与发布订阅模式
  • MySQL对NULL值处理
  • Vector 动态数组(迭代器)
  • 多组背包恰好装满方案数