其实我在上一篇文章中已经提到并比较了TCP和UDP,但是我没有明确提及它们的联系和区别。今天我们就来介绍一下它们的联系和区别。我希望这个常见的面试问题不再成为你的障碍。
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在计算机网络的简化OSI模型中,它完成第四层传输层规定的功能。用户数据报协议(UDP)是同一层中另一个重要的传输协议。
在互联网协议族中,TCP层是位于IP层之上、应用层之下的中间层。不同主机的应用层之间往往需要可靠的、类似管道的连接,但IP层并不提供这样的流机制,而是提供不可靠的分组交换。
TCP的优点
可靠稳定
TCP的可靠性体现在TCP传输数据之前,会有3次握手建立连接,并且传输数据时有确认、窗口、重传、拥塞控制机制。数据传输完毕后,将断开连接以供使用。节省系统资源。
TCP的缺点
速度慢、效率低、系统资源占用高、易被攻击
TCP在传输数据之前,必须先建立连接,这会消耗时间。而且,在传输数据时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,所有的传输都必须在每个设备上维护。连接,其实每个连接都会占用系统的CPU、内存等硬件资源。
由于TCP中存在确认机制和三向握手机制,TCP很容易被利用实现DOS、DDOS、CC等攻击。
TCP应用场景
当对网络通信质量有要求时,例如:必须将整个数据准确地传输给对方,这常用于需要可靠性的应用中,如HTTP、HTTPS、FTP等文件传输协议、POP、SMTP以及其他电子邮件传输协议。
日常生活中,常见的使用TCP协议的应用有:浏览器使用HTTP,Outlook使用POP、SMTP、QQ文件传输等。
UDP 是用户数据报协议的缩写。中文名称是用户数据报协议。它是OSI(开放系统互连)参考模型中的无连接传输层协议,提供简单且不可靠的面向事务的信息传输服务。IETF RFC 768是UDP的官方规范。 IP数据包中UDP的协议号是17。
UDP的优点
比TCP 更快且更安全
UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制。 UDP是一种无状态的传输协议,因此传输数据时速度非常快。由于没有TCP 的这些机制,UDP 比TCP 具有更少的可供攻击者利用的漏洞。但UDP无法避免攻击,例如:UDP Flood攻击……
UDP 的缺点
不可靠的,不稳定的
由于UDP没有TCP的可靠机制,如果数据传输时网络质量不好,很容易丢包。
UDP应用场景
当网络通信质量不高,要求网络通信速度尽可能快时,可以使用UDP。日常生活中,常见的使用UDP协议的应用有:QQ语音、QQ视频、TFTP等。
TCP 和UDP 使用IP 协议将数据包从一个网络传输到另一个网络。将IP 视为一种高速公路,允许其他协议在其上传输并找到通往其他计算机的路径。 TCP和UDP是高速公路上的“卡车”,它们运载的货物是HTTP、文件传输协议、FTP等协议。
TCP/IP是一个协议族,可分为三个层次:网络层、传输层和应用层。
网络层有:IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
传输层有:TCP协议和UDP协议。
应用层有:FTP、HTTP、TELNET、SMTP、DNS等协议。
因此,HTTP本身就是一种协议,一种用于将超文本从Web服务器传输到本地浏览器的传输协议。
TCP 和UDP 是FTP、HTTP 和SMTP 等使用的传输层协议。虽然TCP 和UDP 都用于传输其他协议,但它们有一个显着区别:TCP 提供有保证的数据传输,而UDP 则不提供。这意味着TCP 有一种特殊的机制来确保数据从一个端点安全且无错误地传输到另一个端点,而UDP 不提供任何此类保证。
HTTP协议
HTTP(超文本传输协议)是一种使用TCP 在两台计算机(通常是Web 服务器和客户端)之间传输信息的协议。客户端使用Web浏览器向Web服务器发起HTTP请求,Web服务器将请求的信息发送给客户端。
HTTP是短连接:当客户端发送请求时,服务器需要发回响应。请求完成后,连接被主动释放,因此是短连接。通常的方法是每隔一段时间向服务器发送“保持活动”请求,而无需任何数据。这确保客户端在服务器端“在线”。
HTTP 连接使用“请求-响应”方法。不仅在发出请求时就建立连接,而且只有在客户端向服务器发出请求后服务器才返回数据。
套接字协议
网络上的两个程序通过双向通信连接交换数据。该连接的一端称为套接字。
关于Java/Android面试必备:深入解析TCP、UDP、Socket与HTTP的关系及差异,的介绍到此结束,希望对大家有所帮助。
【Java/Android面试必备:深入解析TCP、UDP、Socket与HTTP的关系及差异】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
学习了新知识,这次终于弄懂了TCP、UDP和Socket的关系了!
有5位网友表示赞同!
平时做开发会接触到网络编程,这篇文章真是太实用了。
有17位网友表示赞同!
正好在准备Android高级面试,这些题都是必问的啊!
有12位网友表示赞同!
HTTP跟TCP/UDP关联在一起确实挺有意思的,原来是这样子的。
有20位网友表示赞同!
分享一下自己最近面试的时候被问到这个问题,好尴尬啊!
有17位网友表示赞同!
感觉这篇文章解释的很清晰了,很容易理解。
有8位网友表示赞同!
我已经把这篇文章收藏起来了,方便下次复习。
有18位网友表示赞同!
学习编程真的需要不断深入了解底层原理,才能写出更优秀的代码。
有18位网友表示赞同!
做Android开发肯定要熟悉HTTP协议啊,这个文章帮了大忙!
有11位网友表示赞同!
分享一下我的理解:TCP可靠性高,但慢;UDP速度快,但不可靠。 HTTP通常基于 TCP 传输,所以比较稳定。
有8位网友表示赞同!
想要在面试中脱颖而出,这些高级知识点确实很重要啊!
有19位网友表示赞同!
原来HTTP协议和Socket有这么紧密的联系,真让我开阔了眼界!
有8位网友表示赞同!
这篇文章帮我解决了之前对TCP、UDP和Socket概念的理解问题。
有14位网友表示赞同!
学习过程中遇到很多疑问,这篇博客给到了很清晰的答案,很棒!
有17位网友表示赞同!
感觉Java/Android高级面试真不容易啊,需要不断地积累经验和知识。
有13位网友表示赞同!
这些高频面试题太重要了,我要认真学习一遍。
有11位网友表示赞同!
下次和我的同事分享一下这篇博客,帮助他们更好地理解网络通信原理。
有17位网友表示赞同!
做软件开发真是一个充满挑战和乐趣的过程!
有10位网友表示赞同!
我已经准备好了,冲刺Android高级面试!
有16位网友表示赞同!