从零开始的Socket编程 零

从零开始的Socket编程 零


现在程序几乎离不开网络,而网络都会涉及socket,虽然经常接触,但是却一直没有对相关的知识进行梳理,从零开始的Socket编程就是希望能从最基本的Socket开始梳理网络编程相关的一些知识,形成自己的知识体系。

立下了目标,接下来就是希望能顺序的完成。

本文结构

先介绍Socket的概念,了解Socket是什么以及Socket被设计出来是为了做什么的;然后介绍Socket的原理,最后是总结。

Socket是什么

Socket的中文翻译的套接字,但是说实话,一开始看到套接字这三个字完全不知道是什么意思,查询的结果也之后专业的名词解释,无法得到直观的理解,因此本人是不太喜欢套接字这个翻译的。

相对而言,Socket的英文解释就要好得多,毕竟是外来词汇。查到的科林斯的解释如下:

A socket is a device on a piece of electrical equipment into which you can put a bulb or plug.

看起来就比较直观了,Socket的原意是一种可以将灯泡或插头插入其中的电子设备,也就是插座了。

抽象一点来看,插座用于连接电源和设备,电源提供能量,设备接收能量后执行操作。对应到计算机中也是类似,连接两个设备(进程),一端提供信息(server)另一端接收信息并为执行操作(client)。所以直观来看,Socket在计算机中就是用来连接两个进程的工具。
在实际的使用中,Socket更多的是通过网络来连接不同计算机中的两个进程。

维基上对Socket给出了更明确的定义:

A network socket is a software structure within a network node of a computer network that serves as an endpoint for sending and receiving data across the network. The structure and properties of a socket are defined by an application programming interface for the networking architecture.

按照维基上的说法,这里讨论的Socket全称应该是network socket,只是习惯上直接叫socket了。

Socket 原理

我们已经知道了Socket是通过网络使得不同的计算机中的进程进行通信的。熟悉计算机网络的人应该都了解OSI网络七层模型:
从零开始的Socket编程 零_第1张图片

Socket所处的位置就是在传输层和应用层之间。应用层的协议由应用自定义,传输层协议,也就是TCP/UDP协议已经由操作系统实现,Socket则是操作系统对TCP/UDP的一层封装,向开发人员提供的便于使用的接口。

Socket起源于Unix,而Unix的哲学之一就是“一切皆文件”,都可以用 open->write/read->close的模式来进行操作。基于该思想,Socket也被视为一种特殊的文件,Socket函数就是对其进行的操作。但是在Windows中,Socket并不被看作文件,而是当作一个网络连接来对待。因此Windows上和Linux上Socket的接口有所不同

总结

Socket的含义是插座的衍生,描述了Socket设计的目的是要用于连接网络中不同计算机上的进程,其原理是对操作台系统提供的对网络模型中传输层协议的封装,以便开发人员进行网络编程。不同的操作系统上对Socket的抽象有一定的差异,所提供的接口也有差别。

你可能感兴趣的:(C++,网络,linux,服务器,c++,Socket)