常见面试题——TCP和UDP的区别?

关于TCP和UDP的区别,是一个老生常谈的问题了。在面试的时候很容易被问到,那么两者到底有什么区别呢?首先看我从网上找的一个图。

很清晰的能够看出,UDP是无连接的,这是什么意思呢?这就是在传送数据的时候,UDP是不需要进行连接的,远方的主机在收到UDP的请求时,不需要经过任何的确认,虽然它不提高可靠的交付,但是在某种情况下,UDP的价值是最大的,比如视频连接,直播,语音等等功能。

而TCP呢,是一个面向连接的服务,也就是说只有先建立连接,才能传送数据,同样在结束时还要释放连接,同样TCO不提供广播或者多播服务。那么为什么TCP传输时可靠的呢?

1.应用数据被分割成TCP认味最适合发送的数据块。

2.TCP给每个包进行了编号,接收方把数据包进行排序,然后讲将有序数据传送给应用层。

3.校检和:TCP将保持他首部和数据的校检和,这是一个端到端的校检和,目的是为了检测数据在传输过程中的变化,如果校检和出现了差错,TCP将丢弃这个报文段,并不确认收到此报文段。

4.TCP的接收端会丢弃重复的数据。

5.流量控制:TCP连接的每一方都有一个固定的大小缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据,当接收方来不及处理发送方的数据时,就能提示发送方降低发送速率,防止包的丢失。TCP使用的流量控制协议时可变大小的华东窗口协议。

6.拥塞控制:当网络拥塞时,减少数据的发送

7.ARQ协议:每发完一个分组就停止继续发送,等待对方的确认,在收到确定后在发下一个分组。

8.超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能即使确认,就将重发这个报文段。

TCP在传输数据之前要还会有三次握手时来建立连接,而且在数据传输时,还会有确认,窗口,重传,拥塞这些控制机制,在数据传完之后,还会断开连接来节约资源。这也就增加了很大的资源消耗,所以TCP一般用于远程登陆,发送邮件,文件传输等场景。

原文地址:https://www.cnblogs.com/ffdsj/p/12375373.html

时间: 2024-10-08 16:46:52

常见面试题——TCP和UDP的区别?的相关文章

前端面试题-TCP和UDP的区别

TCP和UDP的区别 (1)TCP是面向连接的,udp是无连接的即发送数据前不需要先建立链接. (2)TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付. 并且因为tcp可靠,面向连接,不会丢失数据因此适合大数据量的交换. (3)TCP是面向字节流,UDP面向报文,并且网络出现拥塞不会使得发送速率降低(因此会出现丢包,对实时的应用比如IP电话和视频会议等). (4)TCP只能是1对1的,UDP支持1对1,1对多.

TCP常见面试题

常见面试题 1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢? 这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在 一个报文里来发送. 但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了:但未必你所有的数据都全部发送给对方了,所以你可以 未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这

TCP三次握手与四次挥手及常见面试题

本文经过借鉴书籍资料.他人博客总结出的知识点,欢迎提问 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生:给字节编上序号后,就给每一个报文段指派一个序号:序列号seq就是这个报文段中的第一个字节的数据编号. 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号:序列号表示报文段携带数据的第一个字节的编号:而确认号指的是期望接收到下一个字节的编号:因此当前报文段最后一个字节的编号+1即为确认号. 确认

Unity常见面试题大全

1.       [C#语言基础]请简述拆箱和装箱. 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何接口类型的过程. 1.在堆中开辟内存空间. 2.将值类型的数据复制到堆中. 3.返回堆中新分配对象的地址. 拆箱操作: object类型显示转换为值类型或从接口类型到实现该接口值类型的过程. 1.判断给定类型是否是装箱时的类型. 2.返回已装箱实例中属于原值类型字段的地址. 2.        [.NET(C#)] attribute,property,markup,ta

java常见面试题——java笔试题总结

注:本文转载自http://www.cnblogs.com/huajiezh/p/5790928.html,版权归其所有! Java常见面试题总结 一.Java基础 1.String类为什么是final的. 2.HashMap的源码,实现原理,底层结构. 3.说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4.描述一下ArrayList和LinkedList各自实现和区别 5.Java中的队列都有哪些,有什么区别. 6.反射中,Class.forName和cl

史上最全Python工程师常见面试题集锦,有这一份就够了

从互联网诞生以来,基本上所有的程序都属于网络程序,也就需要设计到网络编程,在python中,就是在python程序本身这个进程内,链接别的服务器进程的通信端口进行通信.在Python程序员找工作的时候,京城被问到关于网络编程的问题.下面就和大家分享一下那些面试中经常出现的问题吧. 1.Tcp 协议和 udp 协议有什么区别? (1)TCP 面向连接(如打电话要先拨号建立连接);UDP 是无连接的,即发送数据之前不需要建立连接. (2)每一条 TCP 连接只能是点到点的;UDP 支持一对一,一对多

iOS常见面试题汇总带详细答案

之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家.(题目来源于网络,如有侵权,请联系apple公司) 1. Objective-C的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方法用继承好还是分类好?为什么? 答: Objective-C的类不可以多重继承.可以实现多个接口,通过实现多个接口可以完成C++的多重继承.Category是类别.一般情况重写一个类的方法用继承比较好,这样不会影响其他地方正常使用这个方

JAVA常见面试题及解答-java开发

JAVA常见面试题及解答 Java的垃圾回收总结  浅谈Java中的内部类 1)transient和volatile是java关键字吗? 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: class T { transient int a;  //不需要维持 int b;  //需要维持 } 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存. volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变.在多

java主线程等待所有子线程执行完毕在执行(常见面试题)

java主线程等待所有子线程执行完毕在执行(常见面试题) java主线程等待所有子线程执行完毕在执行,这个需求其实我们在工作中经常会用到,比如用户下单一个产品,后台会做一系列的处理,为了提高效率,每个处理都可以用一个线程来执行,所有处理完成了之后才会返回给用户下单成功,下面就说一下我能想到的方法,欢迎大家批评指正: 用sleep方法,让主线程睡眠一段时间,当然这个睡眠时间是主观的时间,是我们自己定的,这个方法不推荐,但是在这里还是写一下,毕竟是解决方法 2.使用Thread的join()等待所有