美文网首页
Socket相关概念

Socket相关概念

作者: ArthurIsUsed | 来源:发表于2019-03-14 08:55 被阅读0次

为何会有socket,它起到什么作用

  • 单节点的服务器,进程间的通信可归结为以下四类:
    • 消息传递(管道、FIFO、消息队列)
    • 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
    • 共享内存(匿名的和具名的)
    • 远程过程调用(Solaris门和Sun RPC)

在本地可以通过PID唯一标识一个进程,但是网络中两个进程的PID很容易冲突。利用TCP/IP协议族的概念,IP标识节点,protocol+port标识进程,利用三元组(IP, protocol, port)就可以标识网络中不通的进程。

TCP/IP这个协议栈,需要向上层提供服务,也就像OS系统一样,会有各种抽象接口,如linux的read()、fork()等函数。结构图如下


从以上的结构图可知,socket跟TCP/IP并没有必然的联系,socket编程接口在设计的时候,就希望能其他的网络协议。socket的出现也就是为了更方便的使用TCP/IP协议而已,其对TCP/IP协议进行了抽象,形成几个最基本的操作,让网络间的进程通信更加简洁明了。比如:create、 listen、 accept、 connecte、 read、 write等。

从发展史来看,socket起源于UNIX,在Unix一切皆文件哲学的思想下,对于文件用打开、 读写、 关闭、模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件。socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。

例如,如果一个程序创建了一个socket,并bind了80端口,就是向TCP/IP协议声明了其对80端口的占用。以后,所有目标是80端口的TCP数据包都转给该程序(因为使用socket,所以理应先有socket来处理)。通俗地讲,服务程序,在listen某个端口并accept某个请求连接后,会生成一个新的socket来对该请求处理。

Socket Definition: 
A socket is one endpoint of a two-way communication link between two programs running on the network. A socket is bound to a port number so that the TCP layer can identify the application that data is destined to be sent to.

An endpoint is a combination of an IP address and a port number.

socket通信流程

socket是"打开—读/写—关闭"模式的实现,以使用TCP协议通讯的socket为例


  • server端
    • socket()用于创建一个socket描述符,它唯一标识一个socket。这个socket描述符跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。
    • bind()把一个地址族中的特定地址赋给socket。也就是绑定服务端的IP跟端口
    • 调用socket()、bind()之后就会调用listen()来监听这个socket,如果客户端这时调用connect()发出连接请求,服务器端就会用accept()接收到这个请求。
  • client端
    • socket()初始化一个socket描述符文件句柄
    • connect()的参数填上服务端的IP,端口系统会随机分配,如果server收到请求就会调用accept()接受这个请求。
  • 数据传输
    • 建立连接后,两者之间就调用,read()、write()函数传数据。
  • 数据传输完成
    • 传输完毕后,双方都调用close()函数,关闭socket链接服务。

  • 网络层取出IP头,判断网络包下一步走向,比如是交给上层处理还是转发。当网络层认为这个包是要发送给本机后,会取出上层协议(TCP还是UDP),去掉IP包头,交给传输层处理。
  • 传输层取出TCP头或者UDP头后,根据<source-IP, source-port, destination-ip, destination-port>四元组作为标识,找出对应的socket,并把数据copy到socket的接受缓冲区中。
  • 最后,application就可以使用socket的相关接口,读取新接收到的数据了。


socket三次握手

  • 客户端向服务器发送一个SYN J
  • 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1
  • 客户端再想服务器发一个确认ACK K+1


socket四次断开

  • 某个应用进程首先调用close主动关闭连接,这时TCP发送一个FIN M;
  • 另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认。它的接收也作为文件结束符传递给应用进程,因为FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据;
  • 一段时间之后,接收到文件结束符的应用进程调用close关闭它的socket。这导致它的TCP也发送一个FIN N;
  • 接收到这个FIN的源发送端TCP对它进行确认。


相关文章

  • Socket相关概念

    为何会有socket,它起到什么作用 单节点的服务器,进程间的通信可归结为以下四类:消息传递(管道、FIFO、消息...

  • SOCKET与NIO

    1. 套接字(SOCKET)相关概念 网络套接字的基本操作:创建(socket)、命名(bind)、侦听(list...

  • python编写简单聊天程序

    socket模块相关的方法和类 socket.socket():返回一个 socket对象。 socket.cre...

  • php socket函数

    socket相关函数: socket_accept() 接受一个Socket连接socket_bind() 把so...

  • Kotlin网络编程(3)TCP Socket 低层次网络编程

    TCP Socket 通信概念TCP Socket 通信过程Socket 类ServerSocket 类案例:文件...

  • iOS 原生Socket和CocoaAsyncSocket框架的

    一、Socket到底是什么? 1、Socket原理 1.1、套接字(Socket)概念 套接字(Socket)是通...

  • #Socket回顾学习笔记

    Socket学习笔记 Socket基础知识 背景 Socket概念 Socket 又称"套接字",是系统提供的用于...

  • Socket 知识点总结复习

    Socket 知识总结 1.socket 概念 通讯流程: 2.socket 断开重连 socket 的KeepA...

  • Socket相关

    Socket定义Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口。 Socket通信流程

  • IOS开发_Socket通讯

    1、socket简介; 2、IOS中socket的实现; 1、socket简介; 1.1 概念:套接字(s...

网友评论

      本文标题:Socket相关概念

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