网络七层协议的通俗理解
Socket:这不是一个协议,而是一个通信模型。
- A发包:发请求包给某个已经绑定的端口(所以我们经常会访问这样的地址182.13.15.16:1235,1235就是端口);收到B的允许;然后正式发送;发送完了,告诉B要断开链接;收到断开允许,马上断开,然后发送已经断开信息给B。
- B收包:绑定端口和IP;然后在这个端口监听;接收到A的请求,发允许给A,并做好接收准备,主要就是清理缓存等待接收新数据;然后正式接收;接受到断开请求,允许断开;确认断开后,继续监听其它请求。
可见,Socket其实就是I/O操作。Socket并不仅限于网络通信
。在网络通信中,它涵盖了网络层、传输层、会话层、表示层、应用层——其实这都不需要记,因为Socket通信时候用到了IP和端口,仅这两个就表明了它用到了网络层和传输层;而且它无视多台电脑通信的系统差别,所以它涉及了表示层;一般Socket都是基于一个应用程序的,所以会涉及到会话层和应用层。
socket通信流程
socket是"打开—读/写—关闭"模式的实现,以使用TCP协议通讯的socket为例,其交互流程大概是这样子的
- 服务器根据地址类型(ipv4,ipv6)、socket类型、协议
创建socket
- 服务器
为socket绑定ip地址和端口号
- 服务器socket
监听端口号请求
,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开
- 客户端创建socket
- 客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket
- 服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端谅解请求
- 客户端连接成功,向服务器发送连接状态信息
- 服务器accept方法返回,连接成功
- 客户端向socket写入信息
- 服务器读取信息
- 客户端关闭
- 服务器端关闭
https://baike.so.com/doc/1404608-1484832.html
转载于:https://www.jianshu.com/p/67bd7e2ae2b4