• 从零开始的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网络七层模型:
    OSI七层模型与实际网络模型

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

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

    总结

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

  • 相关阅读:
    PHP7的新特性
    LeetCode——半有序排列
    1.14.C++项目:仿muduo库实现并发服务器之Util模块的设计
    文心一言 vs. GPT-4: 全面比较
    SqlServer命名规范
    f12工具
    查看Android打包时签名文件keystore的MD5值
    驱动开发:内核枚举Registry注册表回调
    计算机基础知识44
    Opencv
  • 原文地址:https://blog.csdn.net/Loney_Island/article/details/127704334