您的位置:首页 > 理论基础 > 计算机网络

tcp、udp、socket,关系

2017-11-24 17:38 204 查看
1QQ等网络即时通信,用的就是socket。



2tcp和udp是一个层次上的东西,是网络传输层的东西;socket和两者不是一个层次的技术,socket比tcp和udp层次要高。
http://blog.csdn.net/m1ngmaidb/article/details/44620621


3tcp和udp,一般在做j2ee的web项目的时候直接接触不到(是直接用不到,但是肯定是用到了,是因为好多东西被封装了,对你是透明的,不可见,实际研发编程写Java代码的时候是用不到的接触不到的),是比较低层次的技术,在高级语言编程时(比如Java等),是直接接触不到的。举个例子:

我使用word的技能很高,word的各种功能没有我不会的。但是我关注的就是使用,至于word这个软件是怎么运行的,原理是什么,我根本不知道,也不用知道。我只要知道,在word使用层次上,怎么使用,通过操作word能达到想要的效果就行了。

这个和高级语言编程,是一个道理,比如Java。我只要会用Java编程,实现我的目的就行了(比如写一个算法,计算1+2+3+...+100)。至于Java的代码怎么执行,怎么使用内存和cpu,那是Java的事情,我不用去考虑和操心。我虽然不直接接触内存和cpu,但是我绝对不能说我不用内存和cpu,肯定、一定、绝对用到了内存和cpu,只是我在写Java代码的时候,感觉不到他们的存在而已,对我来说是一个黑盒。所以我只关注Java层次,即怎么使用Java这个编程语言就行了,其他的我直接接触不到。

就像一个主机一样,我从外表看,一个黑黑的盒子,但是其实内部在波涛汹涌、马不停蹄的在工作着,只是这一切对我不可见,我也不用去管,我只关注可操作层面,会用就可以了。

所以,我使用的一切工具(如斧头、吹风机、Java等),都是低级工具的组合。比如我使用一个斧头看开一个木头,我只要会使用斧头来砍就行了,至于斧子的材质是什么、为什么能砍开木头(如你用一个纸片肯定砍不开一个木头,这里面就有斧子之所以能砍开木头的原理在里面),我不知道,我耶不用去考虑。那么斧头这一工具,是什么低级工具的组合?答案是:铁。那铁又是什么低级工具的组合?答案是:铁矿石。以此不停往下类推。。。那么斧子的使用者,就只关注斧子使用技术(即怎么砍就行了)。钢铁的冶炼者,就只关注炼铁技术就行了。这不就是Java程序员、汇编程序员的区别吗?

工具都是层层封装,而每一层,都有每一层的使用者,上一层只关注本层,不用管下一层的任何东西。

这就是“技术”的真谛吧。
5socket就是比较实在的技术了,可以说是高级语言这个层次了,如写Java代码、C、C++时,就能直接接触到socket。
https://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html


6socket是比udp、tcp高一级的工具。

结合我上面表格里说的例子,进行理解。

就好比socket是斧子,udp是铜,tcp是铁。斧子可以用铁打造,也可以用铜打造,因此socket有遵守tcp协议的,也有遵守udp协议的。



7socket和udp、tcp的关系?

既然socket可以遵从udp协议,也可以遵从tcp协议,那么深情情况下,socket使用udp协议?什么情况下socket使用tcp协议?

最典型的:

QQ的消息发送是遵从tcp协议的socket;

QQ的视频聊天是遵从udp协议的socket;



因为tcp协议不能丢一丝一毫,udp协议注重实时一致性。

我发送消息,要么100%发送成功,要么100%发送不成功。决不允许,部分成功(如我发送一句话:“我不喜欢你”,却把“不”字丢了,对方收到的是“我喜欢你”,这就很尴尬了,不能容忍,WTF),所以是tcp。

视频聊天,不能延迟,丢画面和声音无所谓,但是一定要保证两边的实时一致性,所以是udp。

8遵从tcp协议的socket通信,代码怎么实现?遵从udp协议的socket通信,代码怎么实现?
https://www.cnblogs.com/hongyanee/p/3288184.html




---

总结,什么是socket?

答案:

1socket就是即时通讯,就是QQ这种。A向B发送消息,B不需要刷新,就能收到对方的消息并显示到界面上。

2socket不能通过j2ee的web项目,达到同样的效果吗?

即不用socket,而是用j2ee的web项目,可以实现即时通讯功能吗?

比如想到的一种方式,实现过程如下:

要求:A向B,发送“hello”。

实现:

1)A发起一个http url请求,test/saveInfo,将"hello"存入数据库。

2)B不停地自动刷新(如window.location.reload(true);,用来模拟实时通讯,实时接收消息),发起一个http url请求,test/getInfo,读取数据库,获取“hello”。
但是需要数据库的存在,socket可以没有第三方的存储接入(虽然QQ也写数据库,但是为了用户可以调取历史记录用的,不是实现通讯必须的),就实现A和B的通讯。

3socket和j2ee的web项目最大的不同是,socket没有数据库的概念。

socket没有数据库的概念,不用将数据存储起来,就可以实现信息互相获取。

而j2ee的web项目,必须要将数据存入数据库(就算不用数据库,也得有个能存数据的地方,哪怕是在程序中写死的一个变量,这也是充当着数据库的概念,其实也是数据库的概念),才能实现信息互相获取。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: