Socket底层探究与实现——理论篇

学过网络编程的人都知道Socket这个东西,Socket又称伯克利Socket,是网络通信中很重要的一环

我们都知道不论是C, C++, C#, java等等语言,要想进行网络编程,Socket是必不可少的重要环节,实例化Socket,绑定,连接,监听,发送,接收,当然啦,还有异步Socket,但是流程都是一样的。

但是如何去自己实现一个Socket呢?我们都知道Socket承担着网络通信的基础,那么Socket又是如何与远端进行通信呢?

说起Socket的实现,不得不去说TCP/IP协议,如果说Socket是网络编程的底层的话,那么TCP/IP协议就是网络通信的底层,当然,如果追根溯源,可能会牵扯到网络驱动程序,那就是硬件层面了。

TCP/IP协议又是什么呢?TCP/IP协议就是计算机之间进行网络交互的一种协议,通俗的讲,就是一种规则,一种算法。计算机A通过这套算法可以与其他计算机进行通信,计算机A上面的一个应用程序C可以调用TCP/IP API向计算机B上面的应用程序D发送数据,而Socket简单理解就是对TCP/IP API进行的封装(虽然远远不止对TCP/IP API的封装,还有对其他协议的封装)

TCP/IP协议包括两部分,一部分是TCP/IP的报文规定,也就是TCP/IP的数据结构;另一部分就是TCP/IP的传输规定,也就是TCP/IP怎么传输数据,报文怎么发,发多少,多少次握手之类的。

说了这么多,其实我们也不难看出,实现Socket大致有这么几步(假设只封装TCP/IP协议):

第一步,使用特定语言依照协议定义TCP/IP报文的数据结构

第二步,使用特定语言依照协议提供TCP/IP的传输方法,比如监听,绑定,连接

第三步,调用底层网络驱动程序完成所需的网络操作

也就是说,实现一个Socket需要有调用底层驱动程序的能力,而这样的能力只有C语言具备并能够发挥很好的性能(汇编语言更好,只是书写起来比较困难),至于说那些高级语言是如何做到上述几点,有很大机率是调用C语言的代码

猜你喜欢

转载自blog.csdn.net/u012878073/article/details/80200422
今日推荐