HTTP面试-TCP和UDP

Posted 同花技术笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP面试-TCP和UDP相关的知识,希望对你有一定的参考价值。

TCP/IP是什么

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。


tcp、udp是什么

上面之所以单独拿TCP/IP来解说一下它究竟是什么,主要是想让大家有个概念,不想让大家搞混乱了,TCP/IP是一个大的协议簇,里面包含了网络七层协议里面的各种协议,在这套TCP/IP的网络体系结构当中,TCP(传输控制协议,Transport Controll Protocol、UDP(用户数据报协议,User Data Protocol)是传输层最重要的两种协议,为上层用户提供级别的通信可靠性。


TCP/UDP的区别

首先大概说一下它们的区别:

  1. TCP是面向连接的,UDP是无连接的。
  2. TCP是基于数据流的,UDP是基于报文的。
  3. TCP保证了数据的可靠传输,UDP是有可能丢包的。
  4. TCP保证了数据的顺序,UDP是保证的。
  5. TCP的结构比较复杂,UDP简单。
  6. TCP慢,UDP快。

TCP

TCP协议是一种可靠的、一对一的、面向有连接的通信协议。

TCP主要通过几种方式保证数据传输的可靠性:

  1. 在使用TCP协议进行数据传输时,往往需要客户端和服务端先建立一个 「 通道 」 、且这个通道只能够被客户端和服务端使用,所以TCP传输协议只能面向一对一的连接。为了保证数据 「 传输的准确无误 」 ,TCP传输协议将用于传输的数据包分为若干个部分(每个部分的大小根据当时的网络情况而定),然后在它们的首部添加一个检验字节。当数据的一个部分被接收完毕之后,服务端会对这一部分的完整性和准确性进行 「 校验 」 ,校验之后如果数据的完整度和准确度都为100%,在服务端会要求客户端开始数据下一个部分的传输,如果数据的完整性和准确性与原来不相符,那么服务端会要求客户端 「 再次传输 」 这个部分。

  2. 客户端与服务端在使用TCP传输协议时要先建立一个 「 通道 」 ,在传输完毕之后又要关闭这 「 通道 」 ,前者可以被形象地成为 「 三次握手 」 ,而后者则可以被称为 「 四次挥手 」 。

TCP协议能为应用程序提供 「 可靠 」 的通信连接,使一台计算机发出的字节流 「 无差错 」 地发往网络上的其他计算机,所以对可靠性要求高的数据通信系统往往使用TCP协议传输数据。


UDP

UDP传输协议是 「 无连接 」 的, 「无连接」 就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。它是一种不可靠的、面向无连接、可以实现多对一、一对多和一对一连接的通信协议。

  1. UDP在传输数据前 「 不需要建立通道 」 ,在数据传输完毕后也不需要将通道关闭。
  2. 只要客户端给服务端发送一个请求,服务端就会 「 一次性 」 地把所有数据发送完毕。UDP在传输数据时 「 不会对数据的完整性进行验证 」 ,在数据丢失或数据出错时也 「 不会要求重新传输 」 ,因此也节省了很多用于验证数据包的时间,所以以UDP建立的连接的延迟会比以TCP建立的连接的延迟更低。
  3. UDP不会根据当前的网络情况来控制数据的发送速度,因此无论网络情况是好是坏,服务端都会以 「 恒定的速率 」 发送数据。虽然这样有时会造成数据的丢失与损坏,但是这一点对于一些实时应用来说是十分重要的。

基于以上三点,UDP在数据传输方面 「 速度更快 」 ,「 延迟更低 」 , 「 实时性更好 」  , 因此被广泛地用于通信领域和视频网站当中。


TCP的应用场景

效率相对比较低,但是数据可靠要求比较高的场景。传输涉及到数据确认、重发、排序等。比如文件传输,浏览器的一些操作等等。


UDP的应用场景

效率比较高,但是数据不可靠,有存在丢包的情况。一般直播,视频聊天,语音聊天等(就算掉帧,画面卡了几帧并没有多大影响的,并且这种视频等流量本身就很大,数据量高)。


总结


TCP UDP
是否连接 面向连接 无连接
传输可靠性 可靠的 不可靠的
应用场景 传输少量数据 大量数据
速度

形象的例子

TCP

这是一个好人1号和他的女神的故事:

有一天,好人1号很喜欢他的女神,但是女神好像 「 对他爱答不理 」, 所以这一只舔dog比较有礼貌 ,完了好人1号偷偷打听到,他的女神很喜欢喝果汁,对于好喝的果汁都没有办法抵抗,所以好人1号就找了好多好多的果汁决定送给女神。

  1. 好人1号开始的时候问女神在家里吗?
  2. 女神说在家里
  3. 好人1号就说我给你买了果汁,你收到了要跟我说一下哦!
  4. 好人1号给女神送了一瓶果汁。
  5. 女神发现是自己最爱喝的果汁,所以拿到了之后就跟好人1号说已经喝完这一瓶了。
  6. 好人1号心想女神这么能喝,决定这次给女神送两瓶果汁,完了又问,女神你收到我给你的果汁了吗?
  7. 女神又发现是自己没有办法抵抗的果汁,所以又跟好人1号说自己已经喝完第三瓶了。...

这就是TCP,好人1号得先跟女神三次握手,确定女神在家了再去给女神送果汁,好人1号每次给女神送完果汁还要女神去告诉好人1号她已经喝完了。


UDP

这是一个好人2号和他的女神的故事:

有一天,好人2号很喜欢他的女神,但是女神好像对他爱搭不理,但是好人2号毫不知觉,并且 「 认为女神跟他相亲相爱,沉浸在自己爱情的世界 」 当中,所以这一只好人2号比较自以为是,有自己的想法,有一天听到女神对于好喝的果汁没有办法抵抗,所以买了好多好多果汁决定送给女神。

  1. 好人2号开始的时候打听到了女神的家里地址。
  2. 然后直接叫外卖,叫了一车的果汁,地址就是女神家。
  3. 叫完外卖好人2号就不管了,等外卖自己送过去就完了。

这就是UDP,好人2号知道女神的住址后,直接就买一堆果汁往女神家里塞,也不在乎女神喝完没,外卖送到女神家里没。


总结

你这么一看,你TCP给女神送果汁,还要等女神告诉你她喝没喝完,但UDP不一样呀,你直接叫外卖就完了,也不管她喝没喝完,果汁到位就完事了。所以TCP数据当然可靠了,毕竟确认女神喝完了再继续给她送,UDP只需要确认自己给女神叫了外卖就好了。

PS

都结合网上资料加上自己的一些理解,如果有影响到人的地方,可以联系我:fzfz2007@163.com

以上是关于HTTP面试-TCP和UDP的主要内容,如果未能解决你的问题,请参考以下文章

面试补缺:TCP协议与UDP协议总结

再谈Http和Https及TCP/UDP/IP协议分析,面试官都惊讶的网络见解

面试 TCP UDP

面试官问:TCP协议与UDP协议有哪些区别呢?

面试官:TCP和UDP两者的区别是什么?

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