Socket介绍
- socket 套接字, 是基于TCP UDP 协议的 一种通信机制, 它本身就是对TCP 和UDp 协议应用的一种管理
- 用 Socket 能够实现网络上的不同主机之间或同一主机的不同对象之间的数据通信。
本地 Socket
-
本地上的两个进程如何通信?
-
内存共享(munmap());
-
消息和队列;
-
管道(匿名管道pipe()和命名管道mkfifo());
-
信号量(P V操作);
-
RPC remote protocol control
网路Socket
-
网路上的两个进程如何通信
-
本地进程间通信(IPC)通过PID(在终端中输入ps -ef可查看PID)可以唯一确定彼此,然后通过共享内存,消息队列来通;网络上的两个进程确定彼此需要IP与端口号,通过传输层(TCP/UDP)协议进行通信;
-
socket可以理解为:在TCP/UDP 加一个端口(在网卡注册的)绑定。
网路socket和 本地 Socket对比
-
在同一个设备上,两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中可以使用PID来唯一标示一个进程;
-
PID只在本地唯一,网络中的两个进程PID冲突几率很大,此时显然不行了,怎么办?
IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,所以可以利用ip地址+协议+端口号唯一标示网络中的一个进程
网络上的请求就是通过Socket来建立连接然后互相通信
IP地址(网络上主机设备的唯一标识)
端口号(定位程序)
用于标示进程的逻辑地址,不同进程的标示
有效端口:065535,其中01024由系统使用或者保留端口,开发中建议使用1024以上的端口
传输协议(用什么样的方式进行交互)
通讯的规则
常见协议:TCP、UDP
TCP(传输控制协议)
建立连接,形成传输数据的通道
在连接中进行大数据传输(数据大小不做限制)
通过三次握手完成连接,是可靠协议,安全送达
必须建立连接,效率会稍低
UDP(用户数据报协议)
将数据及源和目的封装成数据包中,不需要建立连接
每个数据报的大小限制在64K之内
因为无需连接,因此是不可靠协议
不需要建立连接,速度快
TCP和UDP有什么区别?
-
TCP是面向连接的,建立连接需要经历三次握手,保证数据正确性和数据顺序
-
UDP是非连接的协议,传送数据受生成速度,传输带宽等限制,可能造成丢包
-
UDP一台服务端可以同时向多个客户端传输信息
-
TCP报头体积更大,对系统资源要求更多
TCP的三次握手
-
TCP的连接建立过程又称为TCP三次握手;
-
首先发送方主机向接收方主机发起一个建立连接的同步(SYN包)请求;
-
接收方主机在收到这个请求后向发送方主机回复一个同步/确认(SYN/ACK)应答;(此时服务器进入SYN_RECV状态)
-
发送方主机收到此包后再向接收方主机发送一个确认(ACK),此时TCP连接成功建立.(客户端和服务器进入ESTABLISHED状态,完成第三次握手)
一旦初始的三次握手完成,在发送和接收主机之间将按顺序发送和确认段。关闭连接之前,TCP使用类似的握手过程验证两个主机是否都完成发送和接收全部数据。
完成三次握手,客户端与服务器开始传送数据。
TCP工作过程比较复杂,包括的内容如下
TCP连接关闭:发送方主机和目的主机建立TCP连接并完成数据传输后,会发送一个将结束标记置1的数据包,以关闭这个TCP连接,并同时释放该连接占用的缓冲区空间。
TCP重置:TCP允许在传输的过程中突然中断连接。
TCP数据排序和确认*:在传输的过程中使用序列号和确认号来跟踪数据的接收情况。
TCP重传:在TCP的传输过程中,如果在重传超时时间内没有收到接收方主机对某数据包的确认回复,发送方主机就认为此数据包丢失,并再次发送这个数据包给接收方。
TCP延迟确认:TCP并不总是在接收到数据后立即对其进行确认,它允许主机在接收数据的同时发送自己的确认信息给对方。
TCP数据保护(校验):TCP是可靠传输的协议,它提供校验和计算来实现数据在传输过程中的完整性。
网友评论