TCP/UDP协议(二)

面试问题:Tcp/Udp协议是什么,各有什么异同点,各自的使用场景?

Tcp协议(传输控制协议)

  • tcp是面向连接的协议,在收发数据之前,必须与对方建立可靠的连接;
  • 三次握手:简单形象通俗描述: 主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。 三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
  • 四次握手:断开Tcp连接时,需要客户端和服务端总共发送4个包以确认连接的断开。通俗描述为: 客户端A和服务器B四次握手: 客户端A: “B,我已经没有话说了,我不会再给你发消息了”; (等待B确认)(一次握手) 服务端B: “A,好的,我知道你不会给我发消息了”;(此时,A->B的这条通路会变为半关闭状态,A -> B这个方向的连接释放了,但是,B->A这个方向的还没释放,B发消息给A,A仍能接收到)(二次握手); 服务端B: “A,我也没话要跟你说了”;(等待A确认)(三次握手); 客户端A: “好,我知道了,挂了吧”;(收到确认后,B断开连接,A断开连接)。
  • 特点: (1)是面向连接的运输层协议(使用Tcp协议前必须建立Tcp连接,传送数据完毕后,必须释放已建立的Tcp连接); (2)点对点:每条Tcp连接只能有两个端点(连接的端点叫套接字(socket)或插口); (3)Tcp提供可靠交互服务,通过Tcp连接传送的数据,无差错,不丢失,不重复,并且有序到达。 (4)提供全双工通信: (5)面向字节流。
  • 适用场景:适用于对效率要求相对低,但对准确性要求相对高的场景下; 一般用于文件传输(对数据准确性要求高,速度可以相对慢),发送或接收邮件(对数据准确性要求高,非紧急应用),远程登录等等。 TCP可以用于网络数据库,分布式高精度计算系统的数据传输
  • Tcp的可靠传输协议

(1)停止等待协议:

超时重传:A给B发送消息后,必须收到B返回的确认消息才算发送成功,A只要在发送后的一段时间内没有收到B的确认消息,那就认为刚才发的消息丢失,就会重新发送刚才的消息,这就叫超时重传。 一种情况是,B在收到重传的消息后,又收到了之前丢失的消息,此时B也应该向A发送确认信息,但A会将这个信息丢弃,B也会将迟到的那个信息丢弃。

(2)连续ARQ协议

滑动窗口协议:接收方采用累计确认的方式,接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认。

  • Tcp的拥塞控制 (1)拥塞:对网络资源的需求超过了网络能提供的资源(需求资源 > 可用资源)就称为拥塞; (2)拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。 (3)几种拥塞控制方法:

  • 慢开始算法 和 拥赛避免算法:发送数据时,由小到大逐渐增大发送窗口,这样的方法可以使分组注入到网络的速率更合理。
  • 快重传算法 和 快恢复算法:收到3个重复的确认,执行快重传算法,转入拥塞避免,将发送窗口数量变为慢开始数量的一半。

Udp协议

  • 特点: (1)UDP是无连接的:发送数据之前不需要建立连接,发送结束后也没有连接释放,因此减少了开销和发送数据前的时研; (2)UDP使用尽最大努力交付:即不保证可靠交互; (3)UDP是面向报文的:发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。 (4)UDP没有拥塞控制:网络出现拥塞并不会使源主机的发送速率降低;

很多实时应用如ip电话,实时视频会议等要求主机以恒定速率发送数据,并且允许在拥塞时有一些数据丢失,但不允许有太大的时延,就可以用UDP,比如打视频电话,有一两帧卡顿影响并不大。

(5)UDP支持一对一,一对多,多对一,多对多的交互通信; (6)UDP首部开销小;

  • 适用场景:UDP协议适用于对效率要求相对高,对准确性要求相对低的场景。

UDP一般用于即时通信:

  • QQ聊天 对数据准确性和丢包要求比较低,但速度必须快;
  • 在线视频(RTSP 速度一定要快,保证视频连续,但是偶尔花了一个图像帧,人们还是能接受的);
  • 网络语音电话(VoIP 语音数据包一般比较小,需要高速发送,偶尔断音或串音也没有问题);
  • UDP可以用于服务系统内部之间的数据传输,因为数据可能比较多,内部系统局域网内的丢包错包率又很低,即便丢包,顶多是操作无效,这种情况下,UDP经常被使用。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android补给站

重学Java-一个Java对象到底占多少内存

内存是程序员逃不开的话题,当然Java因为有GC使得我们不用手动申请和释放内存,但是了解Java内存分配是做内存优化的基础,如果不了解Java内存分配的知识,可...

20120
来自专栏sktj

python pyqt5 自定义信号和槽

from PyQt5.QtCore import QObject, pyqtSignal

36620
来自专栏伪架构师

(译)Conduit 0.4.2 发布

Conduit 0.4.2 是生产就绪之路上的重要一步。这个版本为代理服务器的长期运行做出了很多修复和提高,并提供了更多的遥测功能。同时也为未来的双向 TLS ...

6520
来自专栏北风IT之路

平时常说的ThreadLocal,今天就彻底解决它

ThreadLocal是多线程处理中非常重要的一个工具,比如数据库连接池存放Connection、存放本地参数等作用,面试也经常会问到它的应用及原理,本文就将从...

80530
来自专栏网络技术联盟站

网络工程师从入门到精通-通俗易懂系列 | 路由部分基础知识

直连路由 //通过接口感知到的直连 (网络接口配置IP,并且该接口的物理层及链路层状态为UP)

14240
来自专栏CreateAMind

Data Analysis

Now a days, we run a lot experiment based on spinuping(https://spinningup.openai...

9330
来自专栏新智元

IMO奥数双冠20年后再现:2019奥数中美并列第一!

第60届国际数学奥林匹克竞赛(IMO)今年在英国巴斯市成功举办。经过16、17日两天的激烈竞争,来自114个国家和地区的643位中学参赛者终于迎来了他们刻苦训练...

8820
来自专栏程序猿声

干货|十分钟教你用动态规划算法解Travelling Salesman Problem(TSP)问题,附代码……

乍一看标题,大家是不是觉得“动态规划”这四个字组合在一起有点眼熟?似乎哪会儿学过来着……但是吧,细细一琢磨,又忘了它具体是什么、怎么用、用来解决哪些问...

9530
来自专栏PHP饭米粒

在Swoole上使用双容器策略实现请求隔离的依赖注入

容器(container)技术(可以理解为全局的工厂方法), 已经是现代项目的标配. 基于容器, 可以进一步实现控制反转, 依赖注入. Laravel 的巨大成...

15520
来自专栏深度学习入门与实践

【原】深度学习的一些经验总结和建议 | To do v.s Not To Do

前言:本文同步发布于公众号:Charlotte数据挖掘,欢迎关注,获得最新干货~  

14220

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励