For-learning-Go-Tutorial

Go语言是谷歌2009发布的第二款开源编程语言。

Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

因而一直想的是自己可以根据自己学习和使用Go语言编程的心得,写一本Go的书可以帮助想要学习Go语言的初学者快速入门开发和使用!

通信协议解析

在理解通信协议之前我们应该思考下为何会有协议呢?答案是因为有了网络,但是网络怎么来的呢,又是什么呢?

网络是由节点和连线构成,用来表示诸多对象及其相互联系。在数学上,网络是一种图,一般认为专指加权图。网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型。在计算机领域中,网络是信息传输、接收、共享的虚拟平台,通过它把各个点、面、体的信息联系到一起,从而实现这些资源的共享。但是网络的本质是为了解决多台计算机之间如何互相通信这个问题,从最初的ARPANET(Advanced Research Projects Agency Network) 到现在的 TCP/IP,这个本质问题并没有变化,只是技术不断改进。

在20世纪60年代,由于计算机网络飞速发展,各大厂商为了在数据通信网络领域占据主导地位,纷纷推出了各自的网络架构体系和标准,如IBM公司的SNA,Apple公司的AppleTalk协议,以及广泛流行的TCP/IP协议。同时,各大厂商针对自己的协议生产出了不同的硬件和软件。由于多种协议的并存,使得网络变得越来越复杂;而且,厂商之间的网络设备大部分不能兼容,很难进行通信。

因此为了解决网络之间的兼容性问题,帮助各个厂商生产出可兼容的网络设备,国际标准化组织ISO于1984年提出了OSI RM(OpenSystem Interconnection Reference Model,开放式系统互联通信参考模型),OSI 参考模型很快成为计算机网络通信的基础模型。

该体系结构定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),在这一框架下进一步详细规定了每一层的功能,以实现开放系统环境中的互连性、互操作性和应用的可移植性。

由于OSI模型和协议比较复杂,所以并没有得到广泛的应用。而TCP/IP(transfer control protocol/internet protocol,传输控制协议/网际协议)模型因其开放性和易用性在实践中得到了广泛的应用,TCP/IP协议栈也成为互联网的主流协议。

通信协议解析 - 图1

两个因特网主机通过两个路由器和对应的层连接。各主机上的应用通过一些数据信道相互执行读取操作。