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 —》相当于 信的内容格式 (可以是中文/英文/…等)

相关文章

  • day19

    socket套接字 socket又叫套接字,实现网络通信的python通过提供socket标准库来支持socket...

  • Socket编程-tcp协议/服务器端

    Socket编程是用来做网络通信的。 理解:做网络通信的时候需要有网络协议。Socket编程有两种协议 :TCP/...

  • Day18-总结

    import socket 1.什么是socket '''socket又叫套接字,指的是实现网络通信的两端''' ...

  • Socket编程

    一、Socket 1.1 Socket简介 Socket就是为网络服务提供的一种机制。网络通信其实就是Socket...

  • iOS面试题整理

    1.socket原理:socket中文翻译为套接字 是支持TCP/IP协议的网络通信的基本操作单元,包含网络通信必...

  • 1.普通Socket的用法

    Java中网络通信是通过Socket实现的。Socket分为ServerSocket和Socket两大类。Serv...

  • 网络基本

    网络通信的要素 socket通过socket来建立连接,然后通信 IP -- Internet Protocol网...

  • CocoaAsyncSocket --Socket学习

    Socket理论 套接字(Socket)概念 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信...

  • Day18总结

    一.网络通信过程TCP协议和UDP协议二.socket编程 1.socket编程定义:socket又叫套接字。指的...

  • iOS_环信

    对于环信(即时聊天)分为三个方面学习: 1,Socket的网络通信,Socket相关难点理解(详见——Socket...

网友评论

    本文标题:Socket 网络通信

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