UDP协议和TCP协议
UDP协议
UDP(User Datagram Protocol):用户报文协议
没有任何特点
和TCP对比:不可靠、无连接、面向报文
1. 网络的基本情况就是不可靠的
- 没有谁能保证数据一定是可以发送到对方的,可能丢失(丢包)
- 即使数据发送给对方了,也不能保证数据就是无差错的(不考虑有人故意修改数据的情况)
- 依次发送多个数据后,不能保证接收方按照发送顺序接收到数据(乱序),每次数据的发送,都是一次独立的寻找路径的过程
2. UDP作为一种最简单的传输层协议,基本上没有做什么的操作来帮助用户处理复杂的网络环境,所以UDP保留下来这种不可靠的特性。
3. UDP报文的头信息(定长的(8字节))
4. 校验和(checksum)的作用和工作机制
- 判断收到的报文(数据)是否出现差错的
- 利用hash函数的原理︰通过设计一种hash函数,达到冲突率很低的一种情况
发送端:checksum(payload)=>校验和1 (把校验和1填写到UDP的header 中)
接收端:checksum(payload)=>校验和2
比较校验和2和header 中的校验和1:如果不等,payload在传输过程中一定出现差错了;如果相等,大概率payload没有出现出错 - 针对校验和可以对上的情况,正常接收数据。
针对校验和对不上的情况,直接丢弃包: UDP不是特别可靠
5.UDP协议栈的作用
- 计算校验和
- 填写正确的header信息
- 把 header + payload一起交给网络层 (重点:UDP没有发送缓冲区)
- 网络层发送数据到网卡
- send方法返回
重点:我们在应用层调用send方法时send方法返回了,就意味着数据已经到达网络中
接收到数据之后
- 计算校验和
- 解包
- 通知指定的进程,数据已经到达…这段期间,进程可能还暂时来不及过来取数据。所以UDP协议栈需要找个地方把数据暂存一会儿。UDP协议栈中有接收缓冲区。
6. UDP有接收缓冲区,没有发送缓冲区
用户发送多少数据,UDP也会发送多少数据,所以UDP是面向报文的
UDP发送数据无需任何准备工作,随时随地可以发送:寄信vs打电话,所以UDP是无连接的
7. 面向数据报文导致的一个后果:
由于底层(物理层+网络层))都对一次发送的数据有大小限制。如果强行发送大于限制的数据,就会出现数据被截断。
全双工:同一个信道是双向的。
8. UDP协议的最适用场景
对实时性要求较高,对可靠性要求较低的场景
实时聊天(语音、视频聊天)
UDP支持广播。如果有广播需求,也可以考虑用UDP。
TCP协议
TCP(Transmission Control Protocol):传输控制协议
目标:
- 以进程为单位传递数据
- 追求可靠性
什么是可靠性?
TCP只能保证尽自己最大的可能,把数据有序地发送给对方。但不能保证一定能发送给对方。
- 尽可能去发送给对方
- 即使发不过去,也有反馈
- 保证对方接收是有序的
- 保证对方不会收到差错数据
- TC会设计一些机制,来尽可能的优化网络,提高对方收到的可能性
TCP使用什么样的机制,来保证可靠性——确认应答机制
- TCP发送的数据,一般被称为segment(数据段)
- 应答: acknowledge
- 如果发送方同时发送了多条segment,应答进行了多次应答。发送方如何得知,接收方收到的是哪一次的segment?
编号机制:发送方为发送的数据做编号,应答的时候带上对应编号即可。 - 如果接收方没有收到数据,则不会应答;或者接收方应答了,但应答丢包了
总之:发送方没有收到对应的应答。则认为对方没有收到数据——超时重传机制
TCP协议的header格式
- 和UDP不同,TCP的header 不是定长的。
- 哪个或者哪些字段,可以保证接受方的TCP协议栈进行解包工作?
4位header长度 - 根据源port+目标port做分用
- 到目前为止,TCP发送的 segment有两种:(1.携带数据segment,⒉.应答segment),TCP协议并没有把两种作用的segment进行不同格式的设计,而是进行统一的设置了!
那具体怎么区分本次segment是否有应答的作用呢?
ack ==1时segment有应答功能;ack == 0时segment没有应答功能 - segment的可能情况:(1)光携带数据;(2)携带数据+应答(网络中合并数据的发送,可以提高网络发送的效率)
- 32位序号:SN(Sequence Number)
32位确认序号:ASN(Acknowledge Sequence Number)
SN和ASN书写规则
- TCP为发送的每个字节都进行编号(只是payload,没有header)[h ello]
h: 108(随便选的) ,e: 109 ,l: 110, l: 111, o: 112 - TCP协议栈在建立连接时,会随机一个初识序列号(Initial Sequence Number lSN)lSN : 108
- 发送的时候,header 中的SN填写的是 payload 中的第一个字节的序列号
[ hello ]
SN: 108
接收方是知道长度是5的,所以,接收方如果收到数据,则表示108 - 112已经全部收到了 - ASN应该如何填写?填写的是接收方期望收到的下一个字节的数据
上述例子中,接收方要应答的话ASN应该填写113。隐含的意思就是113之前的所有数据,已经全部接收到了。
- 如果发送方超过一定时间都没有收到应答,则可能
发送方的处理逻辑是一致的。超时之后,直接重传即可(重传的数据不会丢失),不需要区分情况 - 如果乱序到达怎么办?
对于发送方,收到了一个应答segASN = x时,发送方是怎么理解这个信号的?
对方已经收到收到了x-1之前的所有数据了。
TCP协议是有接收缓冲区的,保证对方接收是有序的(接收端可以重新整理数据,接收过得数据不再接收)
如果超时之后,重传对方仍然没有收到,怎么办?
继续重传,直到到达一个阈值(假设6次)。如果6次,我都没有收到应答。我就认为不需要再努力的,放弃:
- 尽人事,试图通知对方,连接异常关闭了——通过发送一个reset segment(另一种)。
rst = 1,reset segment
rst = 0,不是reset segment - 通知我们的应用层,数据发送失败了。(Java中是通过异常的方式通知的,会收到一个IOException (SocketException)描述reset connection)
连接管理(Connection Message)
为什么需要连接(连接是什么抽象)?
- 作为TCP协议栈,是需要维护一个接收缓冲区的。
(1)保证整理乱序到达的数据
(2)在数据暂时未被应用层读走之前,临时保存数据 - 作为TCP协议栈,是需要维护一个发送缓冲区的。
因为要考虑重发的可能性,所以未应答的数据不能直接扔掉,所以需要一个空间暂存
例:send(‘hello’)成功,代表数据被发送到OS的TCP协议栈的发送缓冲区中 - 作为TCP协议栈
发送方时,需要维护已经发送的SN
接收方时,需要维护应该应答的SN
上述3点,足以说明:TCР协议栈,为了保证之前的那些机制可用,必须为每个信道,维护一组相关的数据! !
建立连接阶段的必要性
- 由于TCP是追求可靠性的,所以TCP在正式发送数据之前,想验证下对象是否能收到我的数据。
类比:寄信+电话 - Connection对象,有一部分信息是无法独立知道的,需要双方进行有效信息的同步
TCP的建立连接,需要双方交换几次信息——三 次——三 次握手
[常见面试题]为什么是三次?为什么不是两次,为什么不是四次,为什么不是其他次?
4种segment:数据segment、应答segment (ack= 1)、reset segment (rst= 1)、同步segment (syn= 1)
- 什么是连接&为什么TCP需要有连接,UDP就没有连接。
逻辑上对信道的抽象。物理上各自内存中维护的信道相关的一组数据。
因为TCP为了追求可靠性引入一系列机制(确认应答机制,超时重传机制),为了这些机制能正常的工作,使得TCP必须引入连接的概念。- 为什么要有建立连接阶段的必要性
- 互相确认对象在线
- 双方同步必要的初识信息
- 为什么是三次握手。
UDP协议和TCP协议相关推荐
- 计算机网络整理:UDP协议和TCP协议
系列文章目录 HTTP协议和HTTPS协议 文章目录 系列文章目录 一.TCP/IP 各层协议 二.UDP协议和TCP协议 1.TCP和UDP的区别 2.UDP 协议 3.TCP 协议 1)特点 2) ...
- http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎
TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...
- IP协议和TCP协议详解
IP协议和TCP协议详解 IP协议 IP协议的特点 IPV4头部信息 IP分片 重定向 IPV6头部结构 TCP协议 TCP协议的特点 TCP头部结构 TCP连接的建立与关闭 异常终止连接 异常终止连 ...
- http协议及http协议和tcp协议的区别
http是应用层的协议,并且无连接,无状态的协议. http协议的特点: 1.支持c/s模式 2.简单快速:客户端向服务器端传送数据的时候,只需要发送请求方法和路径,请求方法有:post,get,he ...
- osi七层协议和tcp/ip四层协议
(大部分内容为转载) OSI(Open System Interconnection)是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范,共包含七层协议.OSI七层协议是由ISO (I ...
- Linux:数据链路层——以太网协议、NAT协议、ARP协议和DNS协议
Linux:数据链路层--以太网协议.NAT协议.ARP协议和DNS协议 以太网协议 以太网帧格式 MTU以及MTU对IP协议的影响 ARP协议 NAT协议 NAT IP转换过程 静态NAT 动态NA ...
- WebRTC服务器理论铺垫(六):OpenSSL协议,DTLS协议,RTP协议和SRTP协议
文章目录 一.SSL协议 二.OpenSSL 三.TLS和DTLS 四.DTLS的通信的步骤图 五.RTP协议和SRTP协议 5.1 详解RTP协议 5.2 详解RTCP协议 5.3 RTP & ...
- 协议分析---HTTP协议和DNS协议
协议分析-HTTP协议和DNS协议 一.HTTP协议 1.HTTP协议简介 1.1 什么是超文本(HyperText) ? 包含有超链接(Link)和各种多媒体元素标记(Markup)的文本.这些 ...
- 网络层协议详解(主要是IP协议、ICMP协议和ARP协议)
网络层协议详解(主要是IP协议.ICMP协议和ARP协议) 一.网络层的功能 定义了基于IP协议的逻辑地址: 连接不同的媒介类型: 选择数据通过网络的最佳路径. 二.IP数据包格式 第一层 版本:该字 ...
- RabbitMQ MQTT协议和AMQP协议
RabbitMQ MQTT协议和AMQP协议 1 序言... 1 1.1 RabbitMq结构... 1 1.2 RabbitMq消息接收... 4 1.3 Ex ...
最新文章
- PE文件和COFF文件格式分析——导出表的应用——通过导出表隐性加载DLL
- vue 复选框的渲染
- CSV合规的矫枉过正
- 计算机应用教程 中级 平装,计算机应用中级教程
- cshrc设置 ic618_.cshrc一般在什么地方
- python 字典操作
- truncate 、delete与drop三者的异同
- Android用ImageView显示本地和网上的图片
- java二次方程式答案_二次方程式Java?
- 暗通道去雾算法的python实现
- 工信部:中国4G用户量已居世界首位
- Hadoop 安装部署
- Android应用开发-MP3音乐播放器代码实现(三)
- mysql提示表不存在的解决方法error: 1146: Table doesn‘t exist
- java创建窗口_java如何创建一个窗口出来
- Erueka状态变更说明(十三)
- QT3D场景快速绘制入门学习
- draw.io 二次开发(idea2020) 系列(三)
- matlab 黄金分析,matlab黄金分割法求解
- 脉冲星测时软件TEMPO2安装
热门文章
- 解决vue方法在谷歌浏览器中无法正常实现的问题
- python matplotlib.pyplot报错tk_@邹博,python 中 import matplotlib.pyplot 会报Keyerror 'qt5' 的错...
- UDS协议(史上最全)
- Centos7安装Caffe教程
- 电脑版微信如何实现消息批量发送
- 网站爬虫Python
- Nginx 架构原理
- xmind 切换图形结构 和 常用模板
- 标准输入输出 stdio 流缓冲 buffering in standard streams
- 思聪吃热狗(双人版)