socket 是一套用于不同主机通信的API它工作在我们的TCP/IP协议栈之上 他的应用无处不在
比如说你的浏览器,手机应用,用于服务器管理的SSH客户端,全都是基于socket实现的,要通过socket与不同主机建立通信,我们只需要指定主机的IP地址和一个端口号,IP地址用于唯一标识你的网络设备
那我们为什么还要额外指定一个端口号呢,如果没有端口操作系统则没有办法区分数据到底应该发送到哪一个应用上 ,因此端口主要区分主机上的不同应用
通过socket我们可以建立一条用于不同主机,不同应用之间的虚拟数据甬道,并且他是点对点的,一个形象的比喻是将一条数据线链接在不同应用的插槽上,这也是socket名字的由来
我们经常用到的socket有两种类型
第一种就是UDP(用户报文协议):
与TCP相反,UDP正如他的名字以报文(Datagram)为单位来收发数据,并且UDP不会回传丢失数据包,因此不保证数据一定会被接收到,正是缺少了这一检查,UDP通常更具有更低的延迟并占有更少的系统资源
第二种就是TCP(传输控制协议):
首先TCP协议是可靠的他的底层会自动检测并回传丢失的数据包,因此对调用这来说你发送的数据对方一定能接收到
其次发送的数据和接受到的数据都是一致的,比如你发送了一串字符,对方就会原封不动的收到同样的字符。这就是为什么大家说TCP是基于“数据流”的协议。
TCP要求收发数据的双方扮演不同的角色:服务器和客户端,服务器会被动的等待客户端的链接,他自己不会主动发起请求