zoukankan      html  css  js  c++  java
  • socket通信流程

      9/15/2017  最近在学UNIX网络编程,感觉理论基础不够,所以整理了一遍相关的知识


       

    Socket简介


      两个进程能够进行通讯的办法是在网络中唯一的标识一个进程。而在网络中唯一的标识一个进程的方法是:标出ip地址 + 协议 + 端口号。这样就可以利用socket进行通信了。

        什么是socket?socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

       socket抽象层在网络中的位置图解:

        

      

    Socket通信流程


     ·

      (绿色为服务器操作,纯黑色为用户操作)

      服务器根据地址类型(ipv4、ipv6)、socket类型、协议创建socket

      服务器为socket绑定对应的IP地址和端口号

      服务器监听端口号请求,接收用户发来的连接请求,此时服务器没有打开socket

    ·  用户创建socket

       用户打开socket,并通过IP地址+端口号试图connect服务器的socket

      服务器接收到了用户发来的socket连接请求,被动打开socket,开始接收客户端请求,直到用户返回连接信息。这时候服务器的socket进入堵塞状态,所谓堵塞,即accept();方法一直接收到客户端返回连接信息后才返回,然后开始接收下一个用户端请求

      客户端连接成功,开始向服务器输入状态信息

      服务器accept();方法返回,连接成功

      客户端写入信息

      服务器读取信息

      客户端关闭

      服务端关闭

      

    三次握手


      在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接,就是socket通信流程中的建立socket连接部分

       

      

      第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认

      第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态

      第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

    ————全心全意投入,拒绝画地为牢
  • 相关阅读:
    js 日期插件 datepicker
    Yii 安装二维码扩展Qrcode
    Yii2 验证码
    Yii 通过composer 安装的方法
    JQery icheck 插件
    Yii 设置 flash消息 创建一个渐隐形式的消息框
    Yii2 自动更新时间created_at updated_at
    MySQL 安装与使用(二)
    MySQL 安装与使用(一)
    Nginx使用(配置开机启动)
  • 原文地址:https://www.cnblogs.com/Bw98blogs/p/7525543.html
Copyright © 2011-2022 走看看