UDP协议

UDP(User Datagram Protocol):用户报文协议
没有任何特点
和TCP对比:不可靠、无连接、面向报文
1. 网络的基本情况就是不可靠的

  1. 没有谁能保证数据一定是可以发送到对方的,可能丢失(丢包)
  2. 即使数据发送给对方了,也不能保证数据就是无差错的(不考虑有人故意修改数据的情况)
  3. 依次发送多个数据后,不能保证接收方按照发送顺序接收到数据(乱序),每次数据的发送,都是一次独立的寻找路径的过程

2. UDP作为一种最简单的传输层协议,基本上没有做什么的操作来帮助用户处理复杂的网络环境,所以UDP保留下来这种不可靠的特性。

3. UDP报文的头信息(定长的(8字节))

4. 校验和(checksum)的作用和工作机制

  1. 判断收到的报文(数据)是否出现差错的
  2. 利用hash函数的原理︰通过设计一种hash函数,达到冲突率很低的一种情况
    发送端:checksum(payload)=>校验和1 (把校验和1填写到UDP的header 中)
    接收端:checksum(payload)=>校验和2
    比较校验和2和header 中的校验和1:如果不等,payload在传输过程中一定出现差错了;如果相等,大概率payload没有出现出错
  3. 针对校验和可以对上的情况,正常接收数据。
    针对校验和对不上的情况,直接丢弃包: UDP不是特别可靠

5.UDP协议栈的作用

  1. 计算校验和
  2. 填写正确的header信息
  3. 把 header + payload一起交给网络层 (重点:UDP没有发送缓冲区)
  4. 网络层发送数据到网卡
  5. send方法返回
    重点:我们在应用层调用send方法时send方法返回了,就意味着数据已经到达网络中

接收到数据之后

  1. 计算校验和
  2. 解包
  3. 通知指定的进程,数据已经到达…这段期间,进程可能还暂时来不及过来取数据。所以UDP协议栈需要找个地方把数据暂存一会儿。UDP协议栈中有接收缓冲区。

6. UDP有接收缓冲区,没有发送缓冲区
用户发送多少数据,UDP也会发送多少数据,所以UDP是面向报文的
UDP发送数据无需任何准备工作,随时随地可以发送:寄信vs打电话,所以UDP是无连接的

7. 面向数据报文导致的一个后果:
由于底层(物理层+网络层))都对一次发送的数据有大小限制。如果强行发送大于限制的数据,就会出现数据被截断。
全双工:同一个信道是双向的。

8. UDP协议的最适用场景
对实时性要求较高,对可靠性要求较低的场景
实时聊天(语音、视频聊天)
UDP支持广播。如果有广播需求,也可以考虑用UDP。

TCP协议

TCP(Transmission Control Protocol):传输控制协议

目标:

  1. 以进程为单位传递数据
  2. 追求可靠性

什么是可靠性?

TCP只能保证尽自己最大的可能,把数据有序地发送给对方。但不能保证一定能发送给对方。

  1. 尽可能去发送给对方
  2. 即使发不过去,也有反馈
  3. 保证对方接收是有序的
  4. 保证对方不会收到差错数据
  5. TC会设计一些机制,来尽可能的优化网络,提高对方收到的可能性

TCP使用什么样的机制,来保证可靠性——确认应答机制

  1. TCP发送的数据,一般被称为segment(数据段)
  2. 应答: acknowledge
  1. 如果发送方同时发送了多条segment,应答进行了多次应答。发送方如何得知,接收方收到的是哪一次的segment?
    编号机制:发送方为发送的数据做编号,应答的时候带上对应编号即可。
  2. 如果接收方没有收到数据,则不会应答;或者接收方应答了,但应答丢包了
    总之:发送方没有收到对应的应答。则认为对方没有收到数据——超时重传机制

TCP协议的header格式

  1. 和UDP不同,TCP的header 不是定长的。
  2. 哪个或者哪些字段,可以保证接受方的TCP协议栈进行解包工作?
    4位header长度
  3. 根据源port+目标port做分用
  4. 到目前为止,TCP发送的 segment有两种:(1.携带数据segment,⒉.应答segment),TCP协议并没有把两种作用的segment进行不同格式的设计,而是进行统一的设置了!
    那具体怎么区分本次segment是否有应答的作用呢?
    ack ==1时segment有应答功能;ack == 0时segment没有应答功能
  5. segment的可能情况:(1)光携带数据;(2)携带数据+应答(网络中合并数据的发送,可以提高网络发送的效率)
  6. 32位序号:SN(Sequence Number)
    32位确认序号:ASN(Acknowledge Sequence Number)

SN和ASN书写规则

  1. TCP为发送的每个字节都进行编号(只是payload,没有header)[h ello]
    h: 108(随便选的) ,e: 109 ,l: 110, l: 111, o: 112
  2. TCP协议栈在建立连接时,会随机一个初识序列号(Initial Sequence Number lSN)lSN : 108
  3. 发送的时候,header 中的SN填写的是 payload 中的第一个字节的序列号
    [ hello ]
    SN: 108
    接收方是知道长度是5的,所以,接收方如果收到数据,则表示108 - 112已经全部收到了
  4. ASN应该如何填写?填写的是接收方期望收到的下一个字节的数据
    上述例子中,接收方要应答的话ASN应该填写113。隐含的意思就是113之前的所有数据,已经全部接收到了。
  5. 如果发送方超过一定时间都没有收到应答,则可能

    发送方的处理逻辑是一致的。超时之后,直接重传即可(重传的数据不会丢失),不需要区分情况
  6. 如果乱序到达怎么办?

    对于发送方,收到了一个应答segASN = x时,发送方是怎么理解这个信号的?
    对方已经收到收到了x-1之前的所有数据了。
    TCP协议是有接收缓冲区的,保证对方接收是有序的(接收端可以重新整理数据,接收过得数据不再接收)

如果超时之后,重传对方仍然没有收到,怎么办?

继续重传,直到到达一个阈值(假设6次)。如果6次,我都没有收到应答。我就认为不需要再努力的,放弃:

  1. 尽人事,试图通知对方,连接异常关闭了——通过发送一个reset segment(另一种)。
    rst = 1,reset segment
    rst = 0,不是reset segment
  2. 通知我们的应用层,数据发送失败了。(Java中是通过异常的方式通知的,会收到一个IOException (SocketException)描述reset connection)

连接管理(Connection Message)

为什么需要连接(连接是什么抽象)?

  1. 作为TCP协议栈,是需要维护一个接收缓冲区的。
    (1)保证整理乱序到达的数据
    (2)在数据暂时未被应用层读走之前,临时保存数据
  2. 作为TCP协议栈,是需要维护一个发送缓冲区的。
    因为要考虑重发的可能性,所以未应答的数据不能直接扔掉,所以需要一个空间暂存
    例:send(‘hello’)成功,代表数据被发送到OS的TCP协议栈的发送缓冲区中
  3. 作为TCP协议栈
    发送方时,需要维护已经发送的SN
    接收方时,需要维护应该应答的SN

上述3点,足以说明:TCР协议栈,为了保证之前的那些机制可用,必须为每个信道,维护一组相关的数据! !

建立连接阶段的必要性

  1. 由于TCP是追求可靠性的,所以TCP在正式发送数据之前,想验证下对象是否能收到我的数据。
    类比:寄信+电话
  2. Connection对象,有一部分信息是无法独立知道的,需要双方进行有效信息的同步


TCP的建立连接,需要双方交换几次信息——三 次——三 次握手
[常见面试题]为什么是三次?为什么不是两次,为什么不是四次,为什么不是其他次?

4种segment:数据segment、应答segment (ack= 1)、reset segment (rst= 1)、同步segment (syn= 1)

  1. 什么是连接&为什么TCP需要有连接,UDP就没有连接。
    逻辑上对信道的抽象。物理上各自内存中维护的信道相关的一组数据。
    因为TCP为了追求可靠性引入一系列机制(确认应答机制,超时重传机制),为了这些机制能正常的工作,使得TCP必须引入连接的概念。
  2. 为什么要有建立连接阶段的必要性
    1. 互相确认对象在线
    2. 双方同步必要的初识信息
  3. 为什么是三次握手。

UDP协议和TCP协议相关推荐

  1. 计算机网络整理:UDP协议和TCP协议

    系列文章目录 HTTP协议和HTTPS协议 文章目录 系列文章目录 一.TCP/IP 各层协议 二.UDP协议和TCP协议 1.TCP和UDP的区别 2.UDP 协议 3.TCP 协议 1)特点 2) ...

  2. http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎

    TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...

  3. IP协议和TCP协议详解

    IP协议和TCP协议详解 IP协议 IP协议的特点 IPV4头部信息 IP分片 重定向 IPV6头部结构 TCP协议 TCP协议的特点 TCP头部结构 TCP连接的建立与关闭 异常终止连接 异常终止连 ...

  4. http协议及http协议和tcp协议的区别

    http是应用层的协议,并且无连接,无状态的协议. http协议的特点: 1.支持c/s模式 2.简单快速:客户端向服务器端传送数据的时候,只需要发送请求方法和路径,请求方法有:post,get,he ...

  5. osi七层协议和tcp/ip四层协议

    (大部分内容为转载) OSI(Open System Interconnection)是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范,共包含七层协议.OSI七层协议是由ISO (I ...

  6. Linux:数据链路层——以太网协议、NAT协议、ARP协议和DNS协议

    Linux:数据链路层--以太网协议.NAT协议.ARP协议和DNS协议 以太网协议 以太网帧格式 MTU以及MTU对IP协议的影响 ARP协议 NAT协议 NAT IP转换过程 静态NAT 动态NA ...

  7. WebRTC服务器理论铺垫(六):OpenSSL协议,DTLS协议,RTP协议和SRTP协议

    文章目录 一.SSL协议 二.OpenSSL 三.TLS和DTLS 四.DTLS的通信的步骤图 五.RTP协议和SRTP协议 5.1 详解RTP协议 5.2 详解RTCP协议 5.3 RTP & ...

  8. 协议分析---HTTP协议和DNS协议

    协议分析-HTTP协议和DNS协议 一.HTTP协议 1.HTTP协议简介 1.1 什么是超文本(HyperText) ?   包含有超链接(Link)和各种多媒体元素标记(Markup)的文本.这些 ...

  9. 网络层协议详解(主要是IP协议、ICMP协议和ARP协议)

    网络层协议详解(主要是IP协议.ICMP协议和ARP协议) 一.网络层的功能 定义了基于IP协议的逻辑地址: 连接不同的媒介类型: 选择数据通过网络的最佳路径. 二.IP数据包格式 第一层 版本:该字 ...

  10. RabbitMQ MQTT协议和AMQP协议

    RabbitMQ MQTT协议和AMQP协议 1        序言... 1 1.1     RabbitMq结构... 1 1.2     RabbitMq消息接收... 4 1.3     Ex ...

最新文章

  1. PE文件和COFF文件格式分析——导出表的应用——通过导出表隐性加载DLL
  2. vue 复选框的渲染
  3. CSV合规的矫枉过正
  4. 计算机应用教程 中级 平装,计算机应用中级教程
  5. cshrc设置 ic618_.cshrc一般在什么地方
  6. python 字典操作
  7. truncate 、delete与drop三者的异同
  8. Android用ImageView显示本地和网上的图片
  9. java二次方程式答案_二次方程式Java?
  10. 暗通道去雾算法的python实现
  11. 工信部:中国4G用户量已居世界首位
  12. Hadoop 安装部署
  13. Android应用开发-MP3音乐播放器代码实现(三)
  14. mysql提示表不存在的解决方法error: 1146: Table doesn‘t exist
  15. java创建窗口_java如何创建一个窗口出来
  16. Erueka状态变更说明(十三)
  17. QT3D场景快速绘制入门学习
  18. draw.io 二次开发(idea2020) 系列(三)
  19. matlab 黄金分析,matlab黄金分割法求解
  20. 脉冲星测时软件TEMPO2安装

热门文章

  1. 解决vue方法在谷歌浏览器中无法正常实现的问题
  2. python matplotlib.pyplot报错tk_@邹博,python 中 import matplotlib.pyplot 会报Keyerror 'qt5' 的错...
  3. UDS协议(史上最全)
  4. Centos7安装Caffe教程
  5. 电脑版微信如何实现消息批量发送
  6. 网站爬虫Python
  7. Nginx 架构原理
  8. xmind 切换图形结构 和 常用模板
  9. 标准输入输出 stdio 流缓冲 buffering in standard streams
  10. 思聪吃热狗(双人版)