38

TCP 和 UDP

 4 years ago
source link: https://mp.weixin.qq.com/s/ejbaUVuxelDqYbf21yyz3g
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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 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

都结合网上资料加上自己的一些理解,如果有影响到人的地方,可以联系我: [email protected]


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK