socket的总结(2016-02)



socket是一个基础内容,包括hadoop里面的RPC等,都会用到它,所以简单学习了一下,如下是一个总结。

socket的理解:
1.socket 这个概念没有对应一个具体的实体,它描述计算机之间完成相互通信的一种抽象功能;
2.socket的产生背景:解决网络中进程之间如何通信。如何识别网络中的进程?使用了网络节点(IP地址)+协议+端口号的信息来解决。
3.利用三元组(IP地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。
4.socket的设计原理:socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。
5.socket建立在TCP/IP协议之上,所以,遵从TCP协议的三次握手建立连接流程。四次握手释放连接流程。
6.OS已经提供了socket实现(各个API),各个业务可以直接调用,例如RPC框架,例如JAVA NIO。
7.一个socket建立的简单流程描述:当客户端要与服务端通信时,客户端首先要创建一个socket实例,操作系统将为这个socket实例分配一个没有被使用的本地端口号,并创建一个包含本地地址、远程地址和端口号的套接字数据结构,这个数据结构将一直保存在系统中,直到这个连接关闭。

补充内容:socket的长连接和短连接

在hadoop中,常听到所谓的长连接和短连接,hadoop所使用的RPC,底下也是用了socket连接。socket层上也有长连接和短连接之说,再多细节可以看下面内容。理解总结下,就是:hadoop的客户端/服务端连接方式下,socket层/更上的各层,为了长连接/短连接,各做了很多工作,例如socket长连接需要考虑如下因素,更上的各个应用层,需要考虑将socket的实例信息保存下来,同时应用层自己的信息也要保存好,例如会话ID等。

所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。 
短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,一般银行都使用短连接。  
比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。 
其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。

长连接与短连接的操作过程

 

通常的短连接操作步骤是: 
连接→数据传输→关闭连接;


而长连接通常就是: 
连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接; 
这就要求长连接在没有数据通信时,定时发送数据包(心跳),以维持连接状态,短连接在没有数据传输时直接关闭就行了

什么时候用长连接,短连接?

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。


参考资料:

《深入分析JAVA WEB 技术内幕》 徐令波

http://blog.csdn.net/jiajia4336/article/details/8798421

http://blog.csdn.net/zdwzzu2006/article/details/7723738


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值