Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >tcp 与 udp的区别

tcp 与 udp的区别

作者头像
用户8418197
发布于 2022-02-17 13:17:58
发布于 2022-02-17 13:17:58
8480
举报
文章被收录于专栏:howtouselinuxhowtouselinux

TCP报头

(1)TCP协议报头

TCP指传输控制协议,其报头格式如下:

1)源/目的端口号:表示数据是从哪个进程来,到哪个进程去。

2)32位序号/32确认号:用于可靠传输。

3)4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节),所以TCP头部最大长度是15*4=60。

4)6位标志位:TCP协议中的六个标志分别是,URG、ACK、PSH、RST、SYN、FIN。

A、UGR(紧急):UGR=1表示紧急指针字段有效。它告诉系统此报文段有紧急数据,应当尽快传送。从报文段的开头,到紧急指针指向的地方就是紧急数据。

B、ACK(确认):ACK=1时,确认号字段才有效。

C、PSH(推送):让对方立即收到响应。与URG的区别就是URG中的紧急数据不经过缓冲区就直接上交给上层逻辑,而PSH还是要从缓冲区上交,只是不用等到缓冲区满了才上交。

D、RST(复位):RST=1时,表明TCP链接中出现严重差错,必须释放链接,然后再重新链接。以下几种场景中会使用RST报文(访问不存在的端口。异常终止一个链接,一般情况下是发送FIN,因为在所有排队数据都以发送之后才发送FIN,但是也有可能发送一个RST来异常释放连接。检测半打开的链接,即一端关闭,另一端不知道,这时会发送一个RST进行监测。当长时间不用连接,连接断开之后,再次访问的时候会发送RST)。

E、SYN(同步):在链接建立时用来同步序号。当SYN=1,ACK=0时表示请求报文。SYN=1,ACK=1表示链接接受。因此SYN=1表示一个链接请求或链接接受报文。

F、FIN(终止):用来释放一个链接。

5)16位窗口大小:表示数据传输的最大长度。

6)16位校验和:发送端填充,CRC检验,接收端校验不通过,则认为数据有问题。此处的校验和不光包含TCP首部,也包含TCP数据部分。

7)16紧急指针:标识哪部分数据是紧急数据。

8)40字节头部选项:存放一个窗口扩大因子等等信息。

(2)UDP协议报头

UDP指用户数据报协议,其报头格式如下:

TCP的优缺点

(1)TCP的优点:

TCP的优点是:可靠、稳定。它体现在TCP在传递数据之前,会有三次握手来建立连接;在数据传递时,采用校验和、序列号、确认应答、超时重发、流量控制、拥塞控制,为了提高性能,还采用了滑动窗口、延迟应答和捎带应答等机制;在数据传完后,会断开连接以节约系统资源。

(2)TCP的缺点:

TCP的缺点:运行速度慢,效率低,占用系统资源多,易被攻击。因为TCP在传递数据之前,要先建立连接,这会消耗时间;在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,每个连接都会占用系统的CPU、内存等资源;TCP有确认机制、三次握手机制,这导致TCP容易受到DOS、DDOS、CC等攻击。收到STN洪水攻击,是因为使用 TCP的时候服务器端需要listen,这时需要设置backlog。

understanding tcp sequence number

UDP的优缺点

(1)UDP的优点:运行速度较快,比TCP安全。

1)运行速度快,因为 UDP连接没有TCP的三次握手、确认应答、超时重发、流量控制、拥塞控制等机制,而且UDP是一个无状态的传输协议,所以它在传递数据时非常快。

2)较安全,因为没有TCP的那些机制,UDP较TCP被攻击者利用的漏洞就会少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击等。

(2)UDP的缺点:不可靠,不稳定。

因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

tcp_window_scaling

TCP和UDP的特点

(1)TCP的特点

TCP协议是一种有连接、可靠的、面向字节流、相对比较慢、点对点的传输层协议。TCP协议适用于对可靠性要求比较高的场合。

(2)UDP的特点

UDP协议是一种无连接,不可靠、面向数据报、速度比较快、可实现一对一,多对一的传输层协议。UDP协议适用于对实时性有要求的场合。因为UDP不保证可靠性,所以UDP也没有重传机制,也没有拥塞机制,它只是尽最大努力交付数据。

TCP保证数据可靠性和提高性能的机制

(1)确认应答(ACK)机制

TCP将每个字节的数据都进行了编号,即为序列号。每一个ACK都带有对应的确认序列号,意思是告诉发送者收到了哪些数据,下次从哪里开始发送。

(2)超时重传机制

1)超时重传机制的工作过程

主机A发送数据给B之后,可能因为网络拥堵等问题,数据无法到达主机B。如果主机A在一个特定时间间隔内没有收到B发来的确认应答,就会进行重发。但是,主机A未收到B发来的确认应答,也可能是因为ACK丢失了,因此主机B会收到很多重复数据。那么TCP协议需要能够识别出哪些包是重复的,并且把重复的丢弃掉,这时候可以利用序列号就可以很容易做到去重的效果。

2)如何确定超时时间?

最理想的情况下找到一个最小的时间,保证“确认应答”一定能在这个时间内返回。但是,这个时间的长短随着网络环境的不同是有差异的,如果超时时间设的太长会影响整体的重传效率;如果超时时间设得太短,有可能会频繁发送重复的包。

TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间。Linux中超时以500ms为一个单位进行控制,每次判定超时重发的超时时间都是500ms的整数倍。如果重发一次之后仍然得不到应答,等待2500ms后进行重传;如果仍然得不到应答,等待4500ms再进行重传,以此类推,以指数形式递增。累计到一定的重传次数,TCP认为网络或者对端主机出现异常,并强制关闭连接。

tcp_time_wait_linux

(3)滑动窗口

1)为什么需要滑动窗口?

前面讨论了确认应答策略,对每一个发送的数据段都要给一个ACK确认应答,收到ACK后再发送下一个数据段。这个做有一个比较大的缺点就是性能较差,尤其是数据往返的时间较长的时候。既然这样一发一收性能较低,那么如果一次发送多条数据,不是就可以将多个段的等待时间重叠在一起提高性能了吗?

2)工作过程

窗口大小指的是无须等待确认应答而可以继续发送数据的最大值,规定发送前4个段的时候,需要等待任何ACK直接发送。收到第一个ACK后,滑动窗口向后移动,继续发送第5个段的数据,以此类推。操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答,只有确认应答过的数据才能从缓冲区删掉,窗口越大网络吞吐率就越高。那么如果出现丢包,如何进行重传?

情况一:数据包已经抵达,ACK被丢了。

这种情况下,部分ACK丢了并不要紧,因为可以通过后续的ACK进行确认。

情况二:数据包直接丢了。

当某一段报文丢失之后,发送端会一直收到1001这样的ACK,就像是在提醒发送端“接收端想要的就是1001”一样。如果发送端主机连续三次收到了同样一个“1001”,就会将对应的数据1001-2000重新发送.这个时候接收端收到了1001之后,再次返回的ACK就是7001了,因为2001-7000接收端其实之前就已经收到了,被放到了接收端操作系统内核的接收缓冲区中。这种机制被称为“高速重发控制”,也称为“快重传”。

(4)流量控制

1)什么是流量控制?

接收端处理数据的速度是有限的,如果发送端发得太快,导致接收端的缓冲区被填满,这个时候如果发送端继续发送就会造成丢包,继而引起丢包重传等等一系列连锁反应。因此,TCP支持根据接收端的处理能力来决定发送端的发送速度,这个机制就叫做流量控制。

2)工作流程

接收端将自己可以接收的缓冲区大小放入TCP首部中的“窗口大小”字段,通过ACK端通知发送端。窗口大小字段越大,说明网络的吞吐量越高。接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端,发送端接收到这个窗口之后就会减慢自己的发送速度。如果接收端缓冲区满了就会将窗口置为0,这时发送方不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。

3)接收端如何把窗口大小告诉发送端?

在TCP首部中,有一个16位窗口字段就是用于存放窗口信息的。16位数字最大表示65535,那么TCP窗口最大就是65535字节么?实际上,TCP首部40字节选项中还包含了一个窗口扩大因子M,实际窗口大小是窗口字段的值左移M位。

(5)拥塞控制

1)拥塞控制的必要性

虽然TCP有了滑动窗口这个大杀器,能够高效可靠的发送大量数据,但是如果在刚开始阶段就发送大量的数据,仍然可能引发问题。因为网络上有很多的计算机,可能当前的网络状态就已经比较拥堵,在不清楚当前网络状态下贸然发送大量的数据,是很有可能雪上加霜的。

2)慢启动

TCP引入慢启动机制,先发少量的数据探探路,摸清当前的网络拥堵状态再决定按照多大的速度传输数据。此处引入一个概念——拥塞窗口,发送开始的时候,定义拥塞窗口大小为1。每次收到一个ACK应答拥塞窗口就加1,每次发送数据包的时候将拥塞窗口和接收端主机反馈的窗口大小做比较,取较小的值作为实际发送的窗口。

3)慢启动阀值

像上面这样的拥塞窗口增长速度是指数级别的。“慢启动”只是指初始时慢,但是增长速度非常快。为了不增长得那么快,因此不能使用拥塞窗口单纯的加倍。此处引入一个叫做慢启动的阀值,当拥塞窗口超过这个阀值的时候,不再按照指数方式增长,而是按照线性方式增长。 当TCP开始启动的时候,慢启动阀值等于窗口最大值,在每次超时重发的时候,慢启动阀值会变成原来的一半,同时拥塞窗口置回1。少量的丢包仅仅是触发超时重传,大量的丢包就会认为是网络拥塞。当TCP通信开始后,网络吞吐量会逐渐上升,随着网络发生拥堵,吞吐量会立刻下降。拥塞控制。归根结底是TCP协议想尽可能快的把数据传输给对方,但是又要避免给网络造成太大的压力的折中方案。(TCP拥塞控制这样的过程就好像热恋的感觉)

(6)延迟应答

如果接收端数据的主机立刻返回ACK应答,这个时候返回的窗口可能性比较小。假设接收端缓冲区为1M,一次收到了500k的数据,如果立刻应答,返回的窗口就是500k。但是实际上可能处理端处理的速度很快,10ms之内就把500k数据从缓冲区消费掉。在这种情况下,接收端处理还远没有达到自己的极限,即使窗口再放大一些,也能处理过来。如果接收端稍微等一会儿再应答,比如等待200ms再应答,那么这个时候返回的窗口大小就是1M。注意:窗口越大,网络吞吐量就越大,传输效率就越高,应在保证网络不拥塞的情况下尽量提高传输效率。那么,所有的包都可以延迟应答么?肯定不行,因为规定有数量限制,每隔N个包就应答一次;而且有时间限制,超过最大延迟时间就应答一次,具体的数量和时间依操作系统不同也有差异,一般N取2,超时时间取200ms。

(7)捎带应答

在延迟应答的基础上,很多情况下客户端服务器在应用层也是“一发一收”的,意味着客户端给服务器说了“how are you”,服务器也会给客户端会一个“Fine,thank 有”,那么这个时候ACK就可以搭顺风车和服务器回应的“Fine,thank you”一起回给客户端。

更多详情:

tcp vs udp

tcp connection

psh ack tcp flags

tcp socket

tcp flags

how tcp connection works

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
【网络编程】十一、四万字详解 TCP 协议
​ TCP 全称为传输控制协议(Transmission Control Protocol),它是当今互联网当中使用最为广泛的传输层协议,没有之一。
利刃大大
2025/05/18
2530
【网络编程】十一、四万字详解 TCP 协议
UDP和TCP特征的详解
UDP:无连接,不可靠传输,面向数字报,无发送缓存区,有接收缓存区,大小受限制64kb,全双工。 TCP:有连接,可靠传输, 面向字节流,有发送缓存区,有接收缓存区,大小不受限, 全双工。 我们接下来针对他们的特性细细解答
用户11319080
2025/05/27
1100
UDP和TCP特征的详解
初识Linux · 传输层协议TCP · 下
前文我们从TCP的报头字段开始介绍,从最开始的首部长度,到16位的源端口号和目的端口号,然后逐渐从TCP的缓存管理机制开始理解TCP报头中的标志位ACK,并且顺便引出了32位的序号和确认序号,从中我们知道了TCP管理报文的时候是依赖的环形缓冲队列,并且报文是以sk_buff的结构体的形式管理起来的。
_lazy
2025/05/11
1270
初识Linux · 传输层协议TCP · 下
【计网】从零开始理解TCP协议 --- 拥塞控制机制,延迟应答机制,捎带应答,面向字节流
尽管TCP拥有滑动窗口这一高效的数据传输机制,能够确保在对方接收能力下将大量数据可靠发送,但在通信初期若盲目发送大量数据,仍有可能触发网络问题。
叫我龙翔
2024/10/21
2060
【计网】从零开始理解TCP协议 --- 拥塞控制机制,延迟应答机制,捎带应答,面向字节流
面试必备!TCP协议经典十五连问!
TCP协议是大厂面试必问的知识点。整理了15道非常经典的TCP面试题,希望大家都找到理想的offer呀
捡田螺的小男孩
2021/07/19
1.3K0
TCP 重传、滑动窗口、流量控制、拥塞控好难?看完图解就不愁了(重制)
很早之前写了这篇文章:你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了
小林coding
2022/05/21
9040
TCP 重传、滑动窗口、流量控制、拥塞控好难?看完图解就不愁了(重制)
TCP 详解[通俗易懂]
TCP协议全称: 传输控制协议, 顾名思义, 就是要对数据的传输进行一定的控制. 先来看看它的报头
全栈程序员站长
2022/07/22
1.6K0
TCP 详解[通俗易懂]
网络原理(三)——一文了解传输层UDP/TCP协议
在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看);
海盗船长
2020/08/27
1K0
我今天才知道,原来TCP为了保证可靠传输做了这么多
本节内容有点多,不过关于 TCP 的话,除了三四次握手就是可靠传输了,高频重点知识点,大家还是搞清楚比较好。
Java程序猿阿谷
2021/01/14
1.2K0
我今天才知道,原来TCP为了保证可靠传输做了这么多
计算机网络之TCP/UDP协议详解[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141669.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/24
3.7K0
计算机网络之TCP/UDP协议详解[通俗易懂]
你真的知道TCP协议吗?滑动窗口是什么?有什么重传机制?拥塞控制又是什么?一篇文章带你吃透TCP协议
首先这个·4位首部长度的大小就是报头的大小,前面20个字节是固定的,但是还有个选项字段,我们可以计算一下,4位最大长度是15,但是报头的宽度是32,也就是4字节,15*4就是60,所以选项字段最大是40字节,所以我们就可以分离报头和有效载荷。
用户10923087
2024/09/08
3920
你真的知道TCP协议吗?滑动窗口是什么?有什么重传机制?拥塞控制又是什么?一篇文章带你吃透TCP协议
33 张图详解 TCP 和 UDP :打通网络和应用的中间人
前面说过,传输层的作用是建立应用程序间的端到端连接,为数据传输提供可靠或不可靠的通信服务。传输层有两个重要协议,分别是 TCP 和 UDP。TCP 是面向连接的可靠传输协议,UDP 是无连接的不可靠传输协议。
程序员小富
2021/07/15
1.4K0
33 张图详解 TCP 和 UDP :打通网络和应用的中间人
tcp和udp的面试题_adp转化为amp
TCP(Transmission Control Protocol,传输控制协议)提供的是面向连接,可靠的字节流服务。即客户和服务器交换数据前,必须现在双方之间建立一个TCP连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
全栈程序员站长
2022/09/30
4310
tcp和udp的面试题_adp转化为amp
【Linux网络编程】传输层协议TCP:ACK机制 | 超时重传机制 | 三次握手四次挥手 | 流量控制 | 滑动窗口 | 拥塞控制 | 面向字节流 | 粘包问题
宏观上,在发送方的缓冲区中只是数据部分,经过传输层后添加报头。接收方在接收到报文时,需要将报头和数据分离。
南桥
2024/12/28
6210
【Linux网络编程】传输层协议TCP:ACK机制 | 超时重传机制 | 三次握手四次挥手 | 流量控制 | 滑动窗口 | 拥塞控制 | 面向字节流 | 粘包问题
【Linux网络】网络基础:传输层TCP协议(二)
前言:在当今这个信息爆炸、网络互联的时代,TCP(Transmission Control Protocol,传输控制协议)作为互联网通信的基石之一,扮演着举足轻重的角色。无论是我们日常浏览网页、观看在线视频,还是企业进行大规模数据传输、云计算服务,TCP协议都默默地在幕后工作,确保数据的可靠、有序和高效传输。
Eternity._
2024/12/15
2200
【Linux网络】网络基础:传输层TCP协议(二)
【计算机网络】详谈TCP协议确认应答机制&捎带应答机制&超市重传机制&连接管理机制&流量管理机制&滑动窗口&拥塞控制&延迟应答
 4位首部长度的基本单位是4字节,也就是说如果4位首部长度填6,那报头长度就是24字节。报头长度的取值范围为[0,60]字节,也就是说选项的最大长度为40字节。 
用户10923276
2024/10/09
5140
【计算机网络】详谈TCP协议确认应答机制&捎带应答机制&超市重传机制&连接管理机制&流量管理机制&滑动窗口&拥塞控制&延迟应答
传输层:TCP协议
TCP全称为 "传输控制协议(Transmission Control Protocol")。人如其名, 要对数据的传输进行一个详细的控制。
二肥是只大懒蓝猫
2023/10/13
5600
传输层:TCP协议
TCP是怎么样保持可靠性的?
计算方式:在数据传输的过程中,将发送的数据段都当做一个16位的整数。将这些整数加起来。并且前面的进位不能丢弃,补在后面,最后取反,得到校验和。  发送方:在发送数据之前计算检验和,并进行校验和的填充。  接收方:收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方的进行比对。
WindSun
2019/09/15
9870
TCP是怎么样保持可靠性的?
Linux网络UDP与TCP
端口号(Port)标识了一个主机上进行通信的不同的应用程序; 在 TCP/IP 协议中, 用 “源 IP”, “源端口号”, “目的 IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过 netstat -n 查看);
有礼貌的灰绅士
2025/04/21
1900
Linux网络UDP与TCP
Linux网络-UDP/TCP协议详解
注:端口号大部分都是16位的,其根本原因就是因为传输层协议当中的端口号就是16位的
用户9645905
2022/11/15
1.8K0
Linux网络-UDP/TCP协议详解
推荐阅读
相关推荐
【网络编程】十一、四万字详解 TCP 协议
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档