美文网首页
我所认识的Socket

我所认识的Socket

作者: 牛软糖 | 来源:发表于2017-06-07 22:29 被阅读0次

我所认识的Socket

Socket是应用层与TCP/IP协议族通信的中间软件抽象层(百度百科的解释:网络上两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket)

1)支持TCP/IP协议的网络通信的操作单元,是对TCP/IP协议的封装,它本身不是一个协议,而是一个调用接口(API)

2)Socket位于应用层和传输层之间,可用指定传输层所使用的协议,TCP(Transimission Control Protocol)或UDP(User Datagram Protocol)

3)Socket一旦建立起连接,通信的双方可以互相发送数据(推送),直到断开连接

4)由于网络通信要经过多个中间节点,如路由器、网关、防火墙等,大部分防火墙会默认关闭长时间处于非活跃状态的连接而导致Socket连接中断,虽然Socket是长连接

5)定时发送数据包(又名心跳包)以避免长时间不活跃而被关闭的Socket连接

6)利用三元组(ip地址、协议、端口号)就可以标识网络的进程

7)如果一个程序创建了Socket,并让其监听80端口(创建时会为其分配一个端口),其实是向TCP/IP协议栈声明了其对80端口的占用,之后,所有目标是80端口的TCP数据包都会转发给该应用程序

结构图

Socket的通信连接过程

1)服务端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept方法阻塞,等待客户端的连接。

2)客户端初始化Socket,然后连接服务(connect),如果连接成功(三次握手成功),这时客户端就和服务端建立了连接

3)客户端发送数据请求,服务端接收请求并处理请求,然后把数据响应给客户端,客户端读取数据,最后关闭连接,一次交互结束

通信连接过程

Socket数据传输过程

1)当连接成功时,客户端和服务端都会拥有一个Scoket实例,每个实例都有一个InputStream和OutputStream,正是通过这两个对象类交换数据

2)网络I/O操作都是字节流传输的,当Socket对象创建时,操作系统会为InputStream和OutputStream分别分配一定大小的缓冲区,数据的写入和写出都是通过缓冲区完成的

3)写入端将数据写到OutputStream对应的SendQ队列中,当队列填满时,数据将被发送到另一端的InputStream的RecvQ队列中

4)如果此时RecvQ队列已经满了,那么OutputStream的write方法将会阻塞直到RecvQ队列有足够的空间容纳SendQ发送的数据

5)该注意的是,缓冲区的大小以及写入端的速度和读取速度非常影响这个连接的数据传输效率,有可能发送阻塞

相关文章

  • 我所认识的Socket

    我所认识的Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层(百度百科的解释:网络上两个程...

  • 十一、我所理解的 Socket

    Socket 理解 参考:书籍《TCP / IP 协议族》https://blog.csdn.net/u01430...

  • 我所认识的我

    我没读过几本书,没有坚持下来什么有意义的事,我就这样在这个世界里活着,没有什么存在感,也没有什么激情。每天跟自己罗...

  • SOCKET几点认识

    在认识socket之前,先熟悉哈TCP/IP协议(Transmission Control Protocol/In...

  • 我所认识的张爱玲

    我喜欢的名人叫张爱玲,张出生于1920年卒于1995年9月8日出生在显赫家庭原名张英,在10岁时她改名为张爱玲,父...

  • 我所认识的自己

    时光飞逝,岁月如梭,一转眼,我已经20岁了,快要“奔三”啦。小的时候懵懵懂懂,做事全凭本能全看心情,很多事情做过了...

  • 我所认识的杨子

    昨天在玉泉路附近看了一个需要二次装修的房子,量完房子以后,跟业主初步达成要找我合作的意向,等我回去给她出好设计方案...

  • 我所认识的改变

    所以,改变无处不在,这是我所认识的改变的第一点! 让我们把焦点放在关于人的改变上,我很喜欢一段话:上帝,请赐予我平...

  • 我所认识的死亡

    人到中年,有种看透的感觉,经历得越多,越来越明白,这世上没有不“死”的,但没想到原来死还有那么多种。 ...

  • 我所认识的罗永浩

    那年我还在做培训班。有个学妹说有一个培训机构名字的逼格很高,叫作老罗和他的朋友们。那是我第一次听说罗永浩。 当时老...

网友评论

      本文标题:我所认识的Socket

      本文链接:https://www.haomeiwen.com/subject/ozoafxtx.html