TCP和UDP

简介: 在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时,实际上对用户数据不进行校验。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
14天前
|
网络协议 Java
Java的Socket编程:TCP/IP与UDP深入探索
Java的Socket编程:TCP/IP与UDP深入探索
18 0
|
2天前
|
监控 网络协议 安全
TCP和UDP面试题提问
TCP是一种面向连接、可靠的协议,提供确认和重传机制,确保数据完整性和可靠性,适合网页浏览、邮件收发等。UDP则是无连接、轻量级协议,不保证数据可靠性,但适合实时应用如语音视频通话和在线游戏,追求低延迟。
|
9天前
|
移动开发 网络协议 视频直播
25.Python 网络编程:TCP和UDP编程
25.Python 网络编程:TCP和UDP编程
15 2
|
9天前
|
网络协议 Linux Windows
测试端口是否开放 tcp端口 udp端口 测试服务器端口连通性
测试端口是否开放 tcp端口 udp端口 测试服务器端口连通性
|
11天前
|
网络协议 应用服务中间件 网络性能优化
解析TCP /UDP协议的 socket 调用的过程
【6月更文挑战第2天】该文介绍了传输层的两种主要协议TCP和UDP的区别。TCP是面向连接、可靠的,提供顺序无错的数据传输,而UDP则是无连接、不可靠的,不保证数据顺序或不丢失。
|
15天前
|
域名解析 缓存 网络协议
|
16天前
|
网络协议 网络性能优化
TCP和UDP协议的特点和用途
TCP是面向连接、可靠的传输协议,提供按序交付和流量控制,适合网页浏览、邮件及文件传输等需要高可靠性的场景,例如在线购物交易数据的准确传输。而UDP是无连接、不可靠但速度更快的协议,具有较小的头部开销,常用于实时应用如在线游戏和语音通话,其低延迟特性适合对即时性要求高于准确性的场合,如多人在线游戏中的即时互动。
|
16天前
|
网络协议 安全 程序员
网络原理-UDP/TCP详解
网络原理-UDP/TCP详解
网络原理-UDP/TCP详解
|
17天前
|
网络协议
TCP/UDP网络编程
TCP/UDP网络编程
19 2
|
21天前
|
网络协议 安全 Java
网络编程、网络编程的三要素、TCP/UDP通信、三次握手和四次挥手
网络编程、网络编程的三要素、TCP/UDP通信、三次握手和四次挥手
28 1
网络编程、网络编程的三要素、TCP/UDP通信、三次握手和四次挥手