1、网络进程通信之socket
在使用TCP/IP协议族进行网络通信的过程中,网络层的IP地址可以唯一标识一台网络主机,而传输层的协议+端口可以唯一标识主机中的应用程序进程,利用这样的三元组合(IP地址,协议,端口)就可以在网络中唯一标识网络中的进程,从而为进程在网络中的通信建立了基石。
TCP/IP协议族为网络通信提供了编程接口,Socket正是其代表,Socket起源于Unix,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",socket可以视为这个文件的句柄或者称之为文件描述符,在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。socket在通信模型中的角色与位置如下图:
2、socket如何进行通信
建立socket通信需要用到五大元素(协议,源IP,源端口,目的IP,目的端口),只要保证这样的五元组合唯一便能建立socket通信连接。
其通信建立的过程大致为:1)服务端初始化socket,与端口(例如8080)绑定(bind),端口监听(listen),调用accept等待客户端连接。2)客户端初始化socket,客户端随机分配一个端口(例如6688)发起对服务端监听端口(8080)的连接(connect),服务端IP层收到请求之后,根据具体协议类型交由传输层协议栈处理,传输层再交由socket层处理,socket层以监听端口(8080)作为服务端端口建立与客户端的连接,创建新的socket实例(该实例包含客户端IP,客户端端口6688,服务端端口8080,服务端IP)用于标识此次连接的服务端句柄,并将其放进连接队列(连接队列的大小是由服务端listen之时指定的,一旦连接数达到限制,将会拒绝或者延迟新的连接请求)。
连接建立之后,两端可以通过各自的终端句柄socket实例(因为其包含有socket通信的五元组合)进行数据传输(客户端仍然向服务端的8080端口发送数据),目的端主机的传输层接收到数据之后,仍然交由socket层处理,socket层根据源/宿对准确的分辨出数据包与socket实例的归属关系。通信图示如下:
3、socket建立/关闭连接的三次握手与四次挥手
建立连接的三次握手如下图:
这三次握手详细流程大致为:
- 客户端socket对象connect调用之后进行阻塞,此过程发送了一个SYN(同步序列编号Synchronize Sequence Numbers)。
- 服务端监听到连接请求,如果请求被允许,便向客户端发送对收到的SYN的确认包ACK,同时自己也会发送一个SYN。此时accept仍然处于阻塞状态。
- 客户端收到SYN+ACK之后,connect返回,并向服务端发送ACK确认包,服务端收到之后,accept返回,连接建立成功。
关闭连接的四次挥手如下图:
这四次握手详细流程大致为:
- 某端首先调用close主动关闭连接,这时TCP向另一端发送一个FIN M包。
- 另一端的read返回0表面收到了FIN段,就知道另一端关闭了连接,那么首先发送一个对FIN的确认包ACK
- 发送确认包之后,也调用close关闭连接,从而导致它的TCP也会发送一个FIN N包。
- 接收到这个FIN的源端TCP最后发出确认包ACK,完成四次握手。
注意:任何一方调用close()后,连接的两个传输方向都关闭,不能再发送数据了。如果一方调用shutdown()则连接处于半关闭状态,仍可接收对方发来的数据。
相关推荐
用Socket实现基于TCP和UDP的原理探索.pdf用Socket实现基于TCP和UDP的原理探索.pdf
Socket Socket TCAP 钽电容 TEST-POINT 测试点 TSW 轻触开关 USB type C W25Qxx 外置Flash XC6206-3.3 SOT-23,XC6206P332MR,MAX8V,100mA XTAL-4P 4脚无源晶振 XTAL_3225 Crystal Oscillator microSD
全志A33核心板应用开发底板OrCAD16.5格式原理图+PADS9.5格式PCB图+转AD格式的原理图PCB文件,可以做你的学习设计参考,应用开发底板主要器件如下: Library Component Count : 180 Name Description ---------------...
71 2.4.5 使用 Content Provider / 91 2.4.6 使用Socket / 103 2.5 Binder连接池 / 112 2.6 选用合适的IPC方式 / 121 第3章 View的事件体系 / 122 3.1 View基础知识 / 122 3.1.1 什么是View / 123 3.1.2 View...
2.4.6 使用Socket / 103 2.5 Binder连接池 / 112 2.6 选用合适的IPC方式 / 121 第3章 View的事件体系 / 122 3.1 View基础知识 / 122 3.1.1 什么是View / 123 3.1.2 View的位置参数 / 123 3.1.3 Motion...
ADS1118芯片评估板ALTIUM设计硬件原理图+PCB+BOM文件,2层板设计,大小为25*51mm,包括完整的原理图和PCB文件,主要器件有: TC1 Thermocouple connector Omega Omega PCC-SMP-K-5 N/A Thermocouple Omega Omega 5...
STM32F103RCT6+W5500+SI4432无线基站板ALTIUM设计硬件原理图+PCB文件,2层板设计,大小100*146mm,可以做为你的学习设计参考。 主要器件型号列表如下: Library Component Count : 28 Name Description ------------...
MT7688智能家居开发板ALTIUM设计硬件原理图+PCB+封装库文件,4层板设计,大小为55*26mm,包括完整的原理图和PCB文件,封装库封装列表如下: Component Count : 21 Component Name ------------------------------...
2.4.6 使用Socket 103 2.5 Binder连接池 112 2.6 选用合适的IPC方式 121 第3章 View的事件体系 122 3.1 View基础知识 122 3.1.1 什么是View 123 3.1.2 View的位置参数 123 3.1.3 MotionEvent和TouchSlop 125 ...
Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入...持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不
第二,框架的应用分析,每个框架都有一个应用实例与之对应,应用实例既帮助读者了解框架的使用方法,又为读者提供了一个可以调试的应用程序,便于读者使用调试器探索框架的内部秘密;第三,框架的实现分析,这是本书...
探索客户机服务器Web应用程序的现代概念。这本书包含了一些简单易懂的例子,这些应用程序与现实世界的应用程序并没有太大的不同。每一章开发一个不同的主题,解释从A到Z的概念,并提供一个完整的源代码和配置步骤的...
多进程:熟练掌握多进程的运行机制,懂Messenger、Socket等; 事件分发:弹性滑动、滑动冲突等; 玩转View:View的绘制原理、各种自定义View; 动画系列:熟悉View动画和属性动画的不同点,懂属性动画的工作原理; ...
Java版水果管理系统...使用MySQL:因为探索阶段使用Spring+JPA的组合构建后端,但引入Nacos后,MySQL显得鸡肋完全可以用Nacos替代 关于前端:前端JS代码极度反人类,使用jQuery从数据构建页面,是因为此项目必须作为
引擎简单界面背后的技术原理其实对每一个希望在互联网行业有所建树的信息 技术人员都很重要。 1.1. 搜索引擎 作为互联网应用中最具技术含量的应用之一,优秀的搜索引擎需要复杂的架构 和算法,以此来支撑对海量数据...
7_Netty的Socket编程详解 8_Netty多客户端连接与通信 9_Netty读写检测机制与长连接要素 10_Netty对WebSocket的支援 11_Netty实现服务器端与客户端的长连接通信 12_Google Protobuf详解 13_定义Protobuf文件及消息...
7_Netty的Socket编程详解 8_Netty多客户端连接与通信 9_Netty读写检测机制与长连接要素 10_Netty对WebSocket的支援 11_Netty实现服务器端与客户端的长连接通信 12_Google Protobuf详解 13_定义Protobuf文件及消息...
第7讲:Netty的Socket编程详解 第8讲:Netty多客户端连接与通信 第9讲:Netty读写检测机制与长连接要素 第10讲:Netty对WebSocket的支援 第11讲:Netty实现服务器端与客户端的长连接通信 第12讲:Google ...