Socket 网络通信

作者: irenb | 来源:发表于2020-07-05 22:46 被阅读0次

    一、概念

    • Socket 字面意思又称“套接字”
    • 网络上的两个程序(如,客户端和服务器端)通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个Socket。
    • 应用程序一般是先通过Socket来建立一个通信连接,再向网络发出请求或响应网络请求。


      image.png

    说明:
    1.客户端向服务器端发送网络请求前,必须要先在底层建立一个通信连接(通信管道),才能发送网络请求。
    客户端向服务器端发送http请求,服务器返回数据,这个过程就是一个数据交换的过程。
    客户端与服务器端进行数据交换,需要先建立一个双向的通信连接(即一条线、一个通道)
    2.客户端和服务端 两端都有一个Socket,通过Socket建立一个连接(双向通信管道),有了管道就可以进行数据传输。
    3.Socket 就是通信管道的两个端口,可以理解为管道的入口/出口。

    二、网络通信的要素

    网络上的请求就是通过Socket来建立连接然后互相通信

    1. IP地址(网络上主机设备的唯一标识)——>寻找服务器主机
    2. 端口号(定位程序) ——> 寻找程序
    • 用于标示进程的逻辑地址,不同进程的标示
    • 有效端口:065535,其中01024由系统使用或者保留端口,开发中建议使用1024以上的端口
    1. 传输协议(就是用什么样的方式进行交互)
    • 通讯的规则
    • 常见协议:TCP、UDP

    三、传输协议 TCP/UDP

    TCP和UDP:数据传输的两种方式,即把数据从一端传到另一端的两种方式

    1. TCP(传输控制协议) —>要建立连接(如:发送HTTP请求,客户端向服务端发送网络请求)
    • 建立连接,形成传输数据的通道
    • 在连接中进行大数据传输(数据大小不受限制)
    • 通过三次握手完成连接,是可靠协议,安全送达

    说明:在建立通信连接(打通管道)之前有三次握手,目的是为了数据的安全性和可靠性(让数据安全可靠的传输到对方)。

    举例:打电话 (理解三次握手)
    第一次握手:拿起电话,进行拨号。这个拨号的过程称为第一次握手。【开始准备连接】
    第二次握手:拨通了,对方"喂"了一声(响应了一声),我听到了,称为第二次握手。【说明我连接你 没问题】
    第三次握手:我听到了对方"喂"了一声(响应了一声),我也习惯性的"喂"了一声,对方听到了。【说明你连接我 没问题】
    如果这三个过程都没有问题,就可以确定通话连接建立成功。

    • 必须建立连接,效率会稍低。(每次请求都要建立连接)
    1. UDP(用户数据报协议)—>不建立连接 (如:广播用这个,不断的发送数据包)
    • 将 数据 及 源 和 目的 封装成数据包中,不需要建立连接
    • 每个数据报的大小限制在64KB之内
    • 因为无需连接,因此是不可靠协议

    举例:看老师广播讲课,网络卡主了,再看到的是最新的视频内容,不能接着看,可能错过了一些内容。

    • 不需要建立连接,速度快 (省掉了三次握手操作)

    四、Socket 通信流程图

    image.png

    ☞ bind():绑定端口 (80、3306)
    ☞ listen():监听端口(服务器监听客户端有没有连接到这个端口来)
    ☞ accept():如果有连接到这个端口,就接收这个连接。(通信管道打通,接下来就可以传输数据了)
    ☞ write():发请求/写请求/发数据
    ☞ read():读请求/读数据

    • HTTP底层就是Socket通信,通过Socket建立连接(通信管道),实现数据传输,连接的方式(数据传输的方式)是TCP。
    • HTTP是一个TCP的传输协议(方式),它是一个可靠、安全的协议。

    五、体验 Socket

    实现Socket服务端监听:
    1.使用C语言实现。
    2.使用 CocoaAsyncSocket 第三方框架(OC),内部是对C的封装。
    telnet命令:是连接服务器上的某个端口对应的服务。
    telnet命令:telnet host port
    如:telnet www.baidu.com 80  (IP地址和域名一样,都能找到主机。)

    六、长连接和短连接

    长连接和短连接:是连接的一个保存状态(保存时间),长连接就是长时间连接,短连接就是短时间连接。

    • http网络请求是短连接。
    • 长连接用在即时通信(实时聊天,要随时随地的发送信息,考虑到性能,用长连接)

    七、Socket 层上的协议

    Socket层上的协议:指的数据传输的格式。

    1. HTTP协议:定义在网络上数据传输的一种格式。
      传输格式:假设:这是假设,实际http的格式不是这样的。
    http1.1,content-type:multipart/form-data,content-length:188,body:username=zhangsan&password=123456
    
    1. XMPP协议:是一款即时通讯协议 (别人定义好的协议,我们经常拿来用)
      是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。
      传输格式:
    <from>zhangsan<from>
    <to>lisi<to>
    <body>一起吃晚上</body>
    
    1. 自定义即时通讯协议,json格式。
    {
      "from": "zhangsan",
      "to": "lisi",
      "body": "中午一起吃饭",
    }
    

    你做什么操作,必须要有一个固定的格式,这样服务器才知道你要做什么。
    举例:写一封信给北京好友(区别 TCP/UDP 与 HTTP/XMMP)

    • 数据传输的方式:TCP/UDP —》相当于 EMS/顺丰/申通/中通
    • 数据传输的格式:HTTP/XMMP —》相当于 信的内容格式 (可以是中文/英文/…等)

    相关文章

      网友评论

        本文标题:Socket 网络通信

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