TCP和UDP

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 在TCP/IP协议簇中有两个传输协议:传输控制协议(Transmission Control Protocol, TCP)和用户数据报协议(User Datagram Protocol, UDP)。TCP是面向连接的,而UDP是无连接的。本节详细讨论TCP协议的控制机制,并简要介绍UDP协议的特点。

1.TCP服务

       TCP协议提供面向连接的可靠的传输服务,适用于各种可靠的或不可靠的网络。TCP用户送来的是字节流形式的数据,这些数据缓存在TCP实体的发送缓冲区中。一般情况下,TCP实体自主地决定如何把字节流分段,组成TPDU发送出去。在接收端,也是由TCP实体决定何时把积累在接收缓冲区中的字节流提交给用户。分段的大小和提交的频度是由具体的实现根据性能和开销权衡决定的,TCP规范中没有定义。显然,即使两个TCP实体的实现不同,也可以互操作。

       另外,TCP也允许用户把字节流分成报文,用推进(PUSH)命令指出报文的界限。发送端TCP实体把PUSH标志之前的所有未发数据组成TPDU立即发送出去,接收端TCP实体同样根据PUSH标志决定提交的界限。

2.TCP段头格式

       TCP只有一种类型的PDU,叫做TCP段,段头(也叫TCP头或传输头)的格式如下图

所示,其中的字段如下。

源端口(16位):说明源服务访问点。

目标端口(16位);表示目标服务访问点。

发送顺序号(32 位):本段中第- -个数据字节的顺序号。

应答顺序号(32); 捎带应答的顺序号,指明接收方期望接收的下一个数据字节的顺序号。

偏置值(4位):传输头中32位字的个数。因为传输头有任选部分,长度不固定,所以需要偏置值。

保留字段(6位):未用,所有实现必须把这个字段置全0。

标志字段(6位):表示各种控制信息,其中    

URG:紧急指针有效。

ACK:应答顺序号有效。

PSH:推进功能有效。

RST:连接复位为初始状态,通常用于连接故障后的恢复。

SYN:对顺序号同步,用于连接的建立。

FIN:数据发送完,连接可以释放。

窗口(!6 位):为流控分配的信贷数。

检查和(16 位):段中所有16位字按模2l6-1相加的和,然后取1的补码。

紧急指针(16位):从发送顺序号开始的偏置值,指向字节流中的一个位置,此位置之前的数据是紧急数据。

任选项(长度可变):目前只有一个任选项,即建立连接时指定的最大段长。

补丁:补齐32位字边界。

源端口 目的端口
发送顺序号
接收顺序号
偏置量 保留 URG ACK PSH RST SYN FIN 窗口
检查和 紧急指针
任选项+补丁
用户数据

     下面对某些字段作进- - -步的解释。端口编号用于标识TCP用户,即上层协议,一些经常

使用的上层协议,例如Telnet(远程终端协议)、FTP(文件传输协议)或SMTP(简单邮件传输协议)等都有固定的端口号,这些公用端口号可以在RFC (Request For Comment)中查到,任何实现都应该按规定保留这些公用端口编号,除此之外的其他端口编号由具体实现分配。

       前面提到,TCP是对字节流进行传送,因而发送顺序号和应答顺序号都是指字节流中的某

个字节的顺序号,而不是指整个段的顺序号。例如,某个段的发送顺序号为1000, 其中包含

500个数据字节,则段中第一个字节的顺序号为1000,按照逻辑顺序,下-一个段必然从第1500

个数据字节处开始,其发送顺序号应为1500。为了提高带宽的利用率,TCP采用积累应答的机

制。例如从A到B传送了4个段,每段包含20个字节数据,这4个段的发送顺序号分别为30,

50,70 和90。在第4次传送结束后,B向A发回一个ACK标志置位的段,其中的应答顺序号

为110 (即90+20),一次应答了4次发送的所有字节,表示从起始字节到109 字节都已正确

接收。

       同步标志SYN用于连接建立阶段。TCP用三次握手过程建立连接,首先是发起方发送一

个SYN标志置位的段,其中的发送顺序号为某个值X,称为初始顺序号ISN ( Initial Sequence

Number),接收方以SYN和ACK标志置位的段响应,其中的应答顺序号应为X+1 (表示期望

从第X+1个字节处开始接收数据),发送顺序号为某个值Y (接收端指定的ISN)。这个段到达

发起端后,发起端以ACK标志置位,应答顺序号为Y+1的段回答,连接就正式建立了。可见,

所谓初始顺序号是收发双方对连接的标识,也与字节流的位置有关。因而对发送顺序号更准确

的解释应该是:当SYN未置位时,表示本段中第-一个数据字节的顺序号:当SYN置位时,它

是初始顺序号ISN,而段中第一一个数据字节的顺序号应为ISN+ 1,正好与接收方期望接收的数

据字节的位置对应,如上图所示。

       所谓紧急数据,是指TCP用户认为很重要的数据,例如键盘中断等控制信号。当TCP段中的URG标志置位时,紧急指针表示距离发送顺序号的偏置值,在这个字节之前的数据都是紧急数据。紧急数据由上层用户使用,TCP只是尽快地把它提交给上层协议。



   窗口字段表示从应答顺序号开始的数据字节数,即接收端期望接收的字节数,发送端根据

这个数字扩大自己的窗口。窗口字段、发送顺序号和应答顺序号共同实现信贷滑动窗口协议。检查和的检查范围包括整个TCP段和伪段头(Pseudo ——header)。伪段头是IP头的一部分,如上图所示。伪段头和TCP段-起处理有-一个好处,如果IP把TCP段提交给错误的主机,TCP实体可根据伪段头中的源地址和目标地址字段检查出错误。

源地址
目标地址
0 协议 段长
传输头
用户数据

3.用户数据报协议

      UDP也是常用的传输层协议,它对应用层提供无连接的传输服务,虽然这种服务是不可靠

的、不保证顺序的提交,但这并没有减少它的使用价值。相反,由于协议开销少而在很多场合

相当实用,特别是网络管理方面,大都使用UDP协议。



TCP连接状态图

       UDP运行在IP协议层之.上,由于它不提供连接,所以只是在IP协议之上加上端口寻址能力,这个功能表现在UDP头上,如下图所示。

UDP报头          

         UDP头包含源端口号和目标端口号。段长指整个UDP段的长度,包括头部和数据部分。检查和与TCP相同,但是任选的,如果不使用检查和,则这个字段置0。由于IP的检查和只作用于IP头,并不包括数据部分,所以当UDP的检查和字段为0时,实际上对用户数据不进行校验。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
8天前
|
网络协议 算法 网络性能优化
|
2天前
|
缓存 负载均衡 网络协议
面试:TCP、UDP如何解决丢包问题
TCP、UDP如何解决丢包问题。TCP:基于数据块传输/数据分片、对失序数据包重新排序以及去重、流量控制(滑动窗口)、拥塞控制、自主重传ARQ;UDP:程序执行后马上开始监听、控制报文大小、每个分割块的长度小于MTU
|
19天前
|
网络协议 前端开发 物联网
TCP和UDP区别?
本文首发于微信公众号“前端徐徐”,详细介绍了TCP和UDP两种传输层协议的核心概念、连接性和握手过程、数据传输和可靠性、延迟和效率、应用场景及头部开销。TCP面向连接、可靠、有序,适用于网页浏览、文件传输等;UDP无连接、低延迟、高效,适用于实时音视频传输、在线游戏等。
31 1
TCP和UDP区别?
|
10天前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
38 10
|
21天前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
26 1
|
26天前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
32 0
Linux C/C++之TCP / UDP通信
|
29天前
|
网络协议 算法 数据格式
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
81 3
|
29天前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
56 1
|
1月前
|
存储 网络协议 算法
更深层次理解传输层两协议【UDP | TCP】【UDP 缓冲区 | TCP 8种策略 | 三次握手四次挥手】
UDP和TCP各有所长,UDP以其低延迟、轻量级的特点适用于对实时性要求极高的应用,而TCP凭借其强大的错误检测、流量控制和拥塞控制机制,确保了数据的可靠传输,适用于文件传输、网页浏览等场景。理解它们的工作原理,特别是UDP的缓冲区管理和TCP的8种策略,对于优化网络应用的性能、确保数据的高效和可靠传输至关重要。开发者在选择传输层协议时,应根据实际需求权衡利弊,合理利用这两项关键技术。
52 5
|
28天前
|
网络协议 网络性能优化
详解TCP/IP协议以及UDP
详解TCP/IP协议以及UDP
32 0