Go语言Socket编程详解

  • 内容
  • 评论
  • 相关

大部分底层网络的编程都离不开 socket 编程,HTTP 编程、Web 开发、IM 通信、视频流传输的底层都是 socket 编程。

什么是 Socket

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 socket。

建立网络通信连接至少要一对端口号(socket),socket 本质是编程接口(API),对 TCP/IP 的封装,TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口。

可以将 HTTP 比作轿车,它提供了封装或者显示数据的具体形式;那么 Socket 就是发动机,它提供了网络通信的能力。

Socket 的英文意思是“孔”或“插座”,作为 BSD UNIX 的进程通信机制,取后一种意思,通常也称作“套接字”,用于描述 IP 地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。

每种服务都打开一个 Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket 正如其英文意思那样,像一个多孔插座。插座是用来给插头提供一个接口让其通电的,此时我们就可以将插座当做一个服务端,不同的插头当做客户端。

常用的 Socket 类型有两种,分别是流式 Socket(SOCK_STREAM)和数据报式 Socket(SOCK_DGRAM):

  • 流式是一种面向连接的 Socket,针对于面向连接的 TCP 服务应用;
  • 数据报式 Socket 是一种无连接的 Socket,对应于无连接的 UDP 服务应用。

Socket 如何通信

网络中的进程之间如何通过 Socket 通信呢?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程 PID 来唯一标识一个进程,但是在网络中这是行不通的。

其实 TCP/IP 协议族已经帮我们解决了这个问题,网络层的“ip 地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip 地址,协议,端口)就可以标识网络的进程了,网络中需要互相通信的进程,就可以利用这个标志在他们之间进行交互。请看下面这个 TCP/IP 协议结构图:

七层网络协议图
图:七层网络协议图

本文标题:Go语言Socket编程详解

本文地址:http://www.hosteonscn.com/5992.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注