TCP和UDP总结

TCP 和 UDP 的区别 前言 UDP TCP TCP 的三次握手 TCP 四次挥手 累计确认 顺序问题和丢包问题 流量控制的问题 拥塞控制的问题 总结及面试问题 前言 前端的面试中经常问的 TCP 和 UDP 的区别,网上也有好多内容,比如 TCP 和 UDP 的区别 TCP 是面向连接的,UDP 是面向无连接的 UDP程序结构较简单 TCP 是面向字节流的,UDP 是基于... 阅读详情

原文来自TCP UDP回顾

TCP

简介
TCP是在不可靠传输的IP层之上实现的可靠传输,主要解决传输的可靠性,有序,无丢失和不重复的问题。TCP是TCP/IP体系中的一个较复杂的协议。

特点
1)面向连接的
2)每一条TCP连接都是两个端点,是一对一的关系
3)TCP提供可靠的交付服务,保证传送的数据无差错,不丢失,不重复且有序
4)TCP提供全双工通信,TCP允许通信双方的应用进程在任何时候都能发送数据,为此TCP两端都有发送缓存和接收缓存。
5)TCP是面向字节流的,尽管应用程序和TCP的交互试一次一个数据块(大小不等),但TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。

TCP详解

这里写图片描述
源端口号( 16 位):它(连同源主机 IP 地址)标识源主机的一个应用进程。

目的端口号( 16 位):它(连同目的主机 IP 地址)标识目的主机的一个应用进程。这两个值加上 IP 报头中的源主机 IP 地址和目的主机 IP 地址唯一确定一个 TCP 连接。

顺序号( 32 位):用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。如果将字节流看作在两个应用程序间的单向流动,则 TCP 用顺序号对每个字节进行计数。序号是 32bit 的无符号数,序号到达 2 32 - 1 后又从 0 开始。当建立一个新的连接时, SYN 标志变 1 ,顺序号字段包含由这个主机选择的该连接的初始顺序号 ISN ( Initial Sequence Number )。

确认号( 32 位):包含发送确认的一端所期望收到的下一个顺序号。因此,确认序号应当是上次已成功收到数据字节顺序号加 1 。只有 ACK 标志为 1 时确认序号字段才有效。 TCP 为应用层提供全双工服务,这意味数据能在两个方向上独立地进行传输。因此,连接的每一端必须保持每个方向上的传输数据顺序号。

TCP 报头长度( 4 位):给出报头中 32bit 字的数目,它实际上指明数据从哪里开始。需要这个值是因为任选字段的长度是可变的。这个字段占 4bit ,因此 TCP 最多有 60 字节的首部。然而,没有任选字段,正常的长度是 20 字节。

保留位( 6 位):保留给将来使用,目前必须置为 0 。

控制位( control flags , 6 位):在 TCP 报头中有 6 个标志比特,它们中的多个可同时被设置为 1 。依次为:

URG :为 1 表示紧急指针有效,为 0 则忽略紧急指针值。
ACK :为 1 表示确认号有效,为 0 表示报文中不包含确认信息,忽略确认号字段。
PSH :为 1 表示是带有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。
RST :用于复位由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1 的报文,那么一定发生了某些问题。
SYN :同步序号,为 1 表示连接请求,用于建立连接和使顺序号同步( synchronize )。
FIN :用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流。

窗口大小( 16 位):数据字节数,表示从确认号开始,本报文的源方可以接收的字节数,即源方接收窗口大小。窗口大小是一个 16bit 字段,因而窗口大小最大为 65535
.. 字节。

校验和( 16 位):此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。

紧急指针( 16 位):只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

选项:最常见的可选字段是最长报文大小,又称为 MSS(Maximum Segment Size) 。每个连接方通常都在通信的第一个报文段(为建立连接而设置 SYN 标志的那个段)中指明这个选项,它指明本端所能接收的最大长度的报文段。选项长度不一定是 32 位字的整数倍,所以要加填充位,使得报头长度成为整字数。

数据: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

TCP发送数据过程

这里写图片描述

三次握手:
请求端(通常称为客户)发送一个 SYN 报文段( SYN 为 1 )指明客户打算连接的服务器的端口,以及初始顺序号( ISN )。

服务器发回包含服务器的初始顺序号( ISN )的 SYN 报文段( SYN 为 1 )作为应答。同时,将确认号设置为客户的 ISN 加 1 以对客户的 SYN 报文段进行确认( ACK 也为 1 )。

客户必须将确认号设置为服务器的 ISN 加 1 以对服务器的 SYN 报文段进行确认( ACK 为 1 ),该报文通知目的主机双方已完成连接建立。

四次挥手:
关闭行为是在发起方数据发送完毕之后,给对方发出一个FIN(finish)数据段。直到接收到对方发送的FIN,且对方收到了接收确认ACK之后,双方的数据通信完全结束,过程中每次接收都需要返回确认数据段ACK。

详细过程:
第一阶段 客户机发送完数据之后,向服务器发送一个FIN数据段,序列号为i;
1.服务器收到FIN(i)后,返回确认段ACK,序列号为i+1,关闭服务器读通道;
2.客户机收到ACK(i+1)后,关闭客户机写通道;
(此时,客户机仍能通过读通道读取服务器的数据,服务器仍能通过写通道写数据)

第二阶段 服务器发送完数据之后,向客户机发送一个FIN数据段,序列号为j;
3.客户机收到FIN(j)后,返回确认段ACK,序列号为j+1,关闭客户机读通道;
4.服务器收到ACK(j+1)后,关闭服务器写通道。

这是标准的TCP关闭两个阶段,服务器和客户机都可以发起关闭,完全对称。
FIN标识是通过发送最后一块数据时设置的,标准的例子中,服务器还在发送数据,所以要等到发送完的时候,设置FIN(此时可称为TCP连接处于半关闭状态,因为数据仍可从被动关闭一方向主动关闭方传送)。如果在服务器收到FIN(i)时,已经没有数据需要发送,可以在返回ACK(i+1)的时候就设置FIN(j)标识,这样就相当于可以合并第二步和第三步。

TCP扩展问题:

什么是CLOSE_WAIT?

发起TCP连接关闭的一方称为client,被动关闭的一方称为server。被动关闭的server收到FIN后,但未发出ACK的TCP状态是CLOSE_WAIT。出现这种状况一般都是由于server端代码的问题,如果你的服务器上出现大量CLOSE_WAIT,应该要考虑检查代码。

什么是TIME_WAIT?

根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态。TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒。TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务。

为什么需要TIME_WAIT?TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证。

主动发起关闭连接的操作的一方将达到TIME_WAIT状态,而且这个状态要保持Maximum Segment Lifetime的两倍时间。为什么要这样做而不是直接进入CLOSED状态?
原因:
一、保证TCP协议的全双工连接能够可靠关闭
二、保证这次连接的重复数据段从网络中消失

原因一:如果Client直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因,导致Server没有收到Client最后回复的ACK。那么Server就会在超时之后继续发送FIN,此时由于Client已经CLOSED了,就找不到与重发的FIN对应的连接,最后Server就会收到RST而不是ACK,Server就会以为是连接错误把问题报告给高层。这样的情况虽然不会造成数据丢失,但是却导致TCP协议不符合可靠连接的要求。所以,Client不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。

原因二:如果Client直接CLOSED,然后又再向Server发起一个新连接,我们不能保证这个新连接与刚关闭的连接的端口号是不同的。也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,由于新连接和老连接的端口号是一样的,又因为TCP协议判断不同连接的依据是socket pair,于是,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。

TCP的滑动窗口实现可靠传输以及拥塞控制算法

UDP

跟TCP相比,UDP协议要简单很多。

简介
UDP是面向报文的。发送发的UDP对应用层交下来的报文,再添加收不后就向下交付,不合并也不拆分,而是保留这些报文的边界;接收方UDO对IP层交上来的UDP用户数据报,在去除收不后就原封不动的交付给上层进程,一次交付一个完整的报文。所以报文不可分割是UDP数据报处理的最小单位。

UDP提供尽最大努力交付,不保证可靠传输,但不是说应用对数据的要求是不可靠的,所有维护传输可靠的工作需要用户在应用层完成。

特点:
1)无需建立连接
2)无连接状态
3)分组首部开销小(首部只有8字节)
4)应用层能更好的的控制要发送的数据和发送时间
5)UDP支持一对一、一对多、多对一和多对多的交互通信

UDP数据报

这里写图片描述

源端口:源端口号,在需要对方回信时选用。不需要时可用0

目的端口:目的端口号。在终点交付报文时必须使用到

长度:UDP数据报的长度,最小值为8字节

校验和:检测UDP数据报在传输中是否有错。有错就丢弃,该字段可选,不需要检验,该字段为0

UDP校验:

这里写图片描述

与IP数据报校验不同的是:IP只校验数据报首部,而UDP校验把首部和数据部分一起校验。

TCP与UDP的区别

这里写图片描述


TCP 和 UDP的区别 总结一下TCP和UDP的区别。 阅读详情

相关推荐

深度理解 UDP 和 TCP(图文详解)

UDP协议和TCP协议详解,包括格式、含义、TCP的十种机制(包括三次握手四次挥手)以及两者的区别

m0_52019666的博客 2866

TCP UDP 回顾

TCP简介 TCP是在不可靠传输的IP层之上实现的可靠传输,主要解决传输的可靠性,有序,无丢 失和不重复的问题。TCP是TCP/IP体系中的一个较复杂的协议。特点 1)面向连接的 2)每一条TCP连接都是两个端点,是一对一的关系 3)TCP提供可靠的交付服务,保证传送的数据无差错,不丢失,不重复且有序 4)TCP提供全双工通信,TCP允许通信双方的应用进程在任何时候都能发送数据,为此TC

SkySuperWL的博客 867

TCP、UDP 通信程序设计实验报告

1. 深入了解 TCP 和UDP 的区别与联系。 2. 掌握网络 Socket 编程的基本概念和基本编程方法。 3. 掌握 TCP 和UDP 的Client/Server 结构的程序的基本编程方法。

TCP与UDP的一些心得

1:CC攻击是正常的业务逻辑,大并发让你处理不过来,处理XP SP2,以上的系统都封了RAW格式协议封包自定义,除了基于应用层改协议,之外都是模拟或请求来测试传输层2:UDP不会粘包,不会少包,除非缓存区满3:TCP主要特征有:1、3次握手连接2、4次挥手断开3、拥塞控制4、重传控制5、流传输方式,服务端需要额外解析方面有:协议粘包,协议少包,协议丢包、异常协议响应、正常协议响应 UDP主要特征...

weixin_30436101的博客 452

afe模拟前端的重要性_高性能模拟前端信号链解决方案如何助力医疗超声系统发展...

1942年,奥地利TDussik使用A型超声成像系统穿透性探测颅脑,并于1949年获得头部的超声图像,此举昭示超声系统进入到医疗领域。直到如今,超声系统作为用于人体内部的无创可视化技术,被广泛用于医疗领域。最近一份报告称到2022年,中国医疗超声诊断仪器行业的市场规模预计将达到15.8亿美元,保持6%左右的年均增长率。高性能模拟信号链前端是超声设备的关键组成部分,作为高性能模拟技术主要的提供商AD...

weixin_28799111的博客 1088

解决vLLM安装卡在vllm-nccl-cu12依赖项的实战指南

本文提供了解决vLLM安装过程中卡在vllm-nccl-cu12依赖项的详细指南。通过分析CUDA版本兼容性问题,介绍了三种实用解决方案:安装指定版本vLLM、手动安装nccl-cu12依赖以及升级CUDA到12.x版本,并特别针对离线环境提供了安装建议,帮助开发者顺利完成vLLM的安装部署。

weixin_29098367的博客 514

【计算机网络实验】实验四 TCP/UDP协议分析

图 1 第一次握手第一次握手:客户端将标志位SYN置为1,随机产生一个值,并将该数据包发送给服务器,等待服务器确认;图 2 第二次握手第二次握手:服务器收到数据包后由标志位SYN = 1,直到客户端请求建立连接,服务器将标志位SYN和ACK都置为1,随机产生一个值,并将该数据包发送给客户端以确认连接请求;图 3第三次握手第三次握手:客户端收到确认后,检查 ACK是否为X + 1= 1,如果正确则将标志位ACK置为1,并将该数据包发送给服务器,服务器检查。

m0_61709053的博客 9361

MinerU安装指南:从源码到验证的完整流程

本文详细介绍了MinerU文档转换工具的安装流程,从源码获取、依赖安装到验证步骤,提供了完整的安装指南和常见问题解决方案。特别适合技术写作者和开发者快速部署这款高效的文档转换工具,提升工作效率。

weixin_29243279的博客 544

TCP和UDP——总结

一、什么是TCP? TCP是TCP/IP体系中一个非常复杂的协议。 1、TCP的主要特点 1)TCP是面向连接的运输层协议。在使用TCP协议之前必须先建立连接,数据从传送完之后必须释放连接。 (这里类似于打电话,通话之前必须先拨号建立连接,结束通话需要挂断,断开连接) 2)每个TCP连接只能有两个端点,一条TCP连接之间必须是点对点(一对一)的。 3)TCP提供全双工通讯(全双工通讯指...

qq_41292216的博客 677

Manimgl 进阶笔记

目录 一、调整视频输出的纵横比 二、调整预览窗口的尺寸 三、在开发工具中直接调试 一、调整视频输出的纵横比 调整输出视频的纵横比,在日常开发中属于比较基本的需求。要使用 Manimgl 得到期望的分辨率的视频输出需要修改以下几个地方: 第一步:在 custom_config.yml 配置文件中通过 camera_qualities设置视频的输出分辨率。manimlib 框架已经在 default_config.yml 文件中设置了四种视频输出分辨率,default_qualities 参数.

gunnery的专栏 2856

CocosCreator | 自定义启动页之H5

01 效果对比 默认启动页: 自定义启动页: 02 启动页存在的意义 我们在 creator 中的开发的游戏都是基于 cocos engine,所以在展示我们的游戏之前,是必须要先加载 cocos engine,然后才是我们自己的业务代码 流程图如下: 而构建完成后未精简的 cocos engine 代码为 1.9M 如果再加上物理相关代码的话,一共是2M 别忘了,我们自己的首场景也要加载过程哦 所以,从游戏启动,到真...

Valiancer 5895

TCP与UDP协议的深入探究

网络协议如同人与人之间相互交流是需要遵循一定的规则(如语言)一样,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议。 OSI参考模型和TCP/IP模型在不同的层次中有许多不同的网络协议,如图所示: 我们今天主要讨论的是传输层的协议,即考虑应用程序之间的逻辑通信。简单来说就是数据该如何发送给其他机器; 二、UDP UDP(User Datagram Protocol):用户数据报协议;UDP是面向无连接的通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说

緑水長流*z 1万+

巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

Rockyoung 8018

TCP和UDP详解

本文是计算机网络的学习,详细讲解了TCP和UDP的工作原理、各自的特点,以及三次握手和四次挥手。之后的学习内容将持续更新!!!

qq15035899256的博客 2万+

Rancher入门到精通 - Nginx Ingress 配置指南

Rancher 是一个开源的容器管理平台,它提供了一套完整且易于使用的工具来部署、管理和扩展容器化应用。而 Nginx Ingress 则是一个常用的开源 Ingress 控制器,用于将外部请求流量导入到 Kubernetes 集群中的服务。在开始之前,请确保您已经正确安装了 Rancher 平台和 Nginx Ingress 控制器。

TechInk的博客 1311

【自监督学习完整教程】第 1 章:初识自监督学习

摘要: 自监督学习(SSL)是一种利用无标签数据自动生成伪标签进行模型训练的方法,有效降低了人工标注成本。本文对比了监督学习、无监督学习和SSL的差异,重点阐述了SSL通过设计PretextTasks(如图像旋转预测)从数据中提取深层特征的原理。实践部分以PyTorch实现图像旋转预测任务为例,展示了SSL的训练流程。实验表明,SSL能够学习通用视觉特征,适用于计算机视觉、自然语言处理等领域,尤其在标注数据稀缺的场景中表现优异。

u012133341的博客 260

TCP和UDP的区别

目录 一、TCP和UDP都属于TCP/IP协议族 二、UDP和TCP的不同 2.1 TCP是面向连接的,UDP是面向无连接的 2.2 TCP是可靠的,UDP是不可靠的 2.3 TCP是面向字节流的,UDP是面向报文的 2.4 TCP只有一对一的传输方式,而UDP不仅可以一对一,还可以一对多,多对多 2.5 UDP的头部开销小,TCP的头部开销大 2.6 TCP会产生粘包问题,UDP会产生丢包问题 2.6.1 TCP粘包 2.6.2 UDP丢包问题 三、总结 一、T...

ZJE 3万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

UDP和TCP协议

摘要:UDP和TCP是主要的传输层协议,具有显著差异。TCP通过三次握手建立可靠连接,采用确认应答、超时重传、滑动窗口等机制确保数据传输的可靠性,适合需要高可靠性的场景。UDP无连接、不可靠但高效,适合实时性要求高的应用。TCP面向字节流,支持全双工通信;UDP面向数据报。此外,TCP通过流量控制、拥塞控制等机制优化性能,而UDP需在应用层实现可靠性。异常情况下,TCP能自动处理连接中断,而UDP无此功能。理解这些差异有助于根据需求选择合适的协议。

aklnhg的博客 1674

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

TCP和UDP 总结

TCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多,UDP较少; 3.UDP程序结构较简单 4.流模式(TCP)与数据报模式(UDP); 5.TCP保证数据正确性,UDP可能丢包 6.TCP保证数据顺序,UDP不保证 UDP应用场景: 1.面向数据报方式 2.网络数据大多为短消息 3.拥有大量Client 4.对数据安全性无特殊要求 5...

在此立一个IT职业上的flag:https://github.com/Zeb-D/my-review 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TCP和UDP

在TCP/IP协议簇中有两个传输协议:传输控制协议(Transmission Control Protocol, TCP) 和用户数据报协议(User Datagram Protocol, UDP)。TCP是面向连接的,而UDP是无连接的。 本节详细讨论TCP协议的控制机制,并简要介绍UDP协议的特点。 目录 1.TCP服务 2.TCP段头格式 3.用户数据报协议 1.TCP服务 TCP协议提供面向连接的可靠的传输服务,适用于各种可靠的或不可靠的网络。TC...

商务合作|种草文章|产品测评 2693

详解 TCP 和 UDP

本篇文章转载自公众号:网络技术平台 https://mp.weixin.qq.com/s/8iyxF1tT3JhyHKdyeF1uAg 目录 一、概述 二、初始传输层 2.1 TCP 2.2 UDP 2.3 TCP 和 UDP 的区别 三、端口号 3.1 标准端口号 3.2时序分配法 四、UDP 五、TCP 5.1 TCP特点 5.2 连接 5.3 序列号和确认应答 5.4 超时重发 5.5 连接管理 5.6 三次握手 5.7 四次挥手 5.8 单位段 5.9 ..

qq_41687938的博客 3897

TCP 和 UDP

计算机网络的运输层非常类似于高速公路,高速公路负责把人或者物品从一端运送到另一端,而计算机网络的运输层则负责把报文从一端运输到另一端,这个端指的就是端系统。在计算机网络中,任意一个可以交换信息的介质都可以称为端系统,比如手机、网络媒体、电脑、运营商等。在运输层运输报文的过程中,会遵守一定的协议规范,比如一次传输的数据限制、选择什么样的运输协议等。运输层实现了让两个互不相关的主机进行逻辑通信的功能,看起来像是让两个主机相连一样。运输层协议是在端系统中实现的,而不是在路由器中实现的。

TMesh的博客 1289

什么是 TCP 和 UDP?Java 中如何实现 TCP 和 UDP 协议

TCP和UDP都是传输层协议,用于在网络上传输数据。它们都是在IP协议之上构建的协议,因此它们都需要IP地址和端口号来标识网络中的设备和应用程序。TCP和UDP是计算机网络中最常用的传输层协议。TCP是一种面向连接的协议,提供可靠的数据传输。UDP是一种无连接的协议,提供不可靠的数据传输。在Java中,可以使用Socket类和DatagramSocket类来实现TCP和UDP协议。TCP协议使用Socket类,UDP协议使用DatagramSocket类。

程序猿徐师兄的博客 1653
上一篇: 网络层---计算机网络
下一篇: TCP应用层
ituling
博客等级 码龄15年 6粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值