什么是套接字,为什么称“Socket“为套接字

一、目的

        开发人员都知道套接字,毕竟网络开发是一个开发人员必须掌握的内容,但是对于套接字大多数程序员却没深入了解过。在刚入行的一两年里虽然面试会时常问到网络相关的问题,什么OSI七层模型还有什么四层模型大多都是按照面试题背下来就完事了,在那段时间很不理解为什么"Socket"叫套接字,网上搜索也没有个明确的答案,很多都说得模棱两可,还有些就是说法是最早的一些中文论文中叫做套接字所以延用至今。但是我觉得看到这个结果感觉毫无意义,后来经过仔细思考用自己的方式理解了这个套接字的看法,以下就说说我是怎么看“套接字”这个名字的。

 

二、分析

    入门的时候对网络是一塌糊涂,只知道按照文档调接口实现网络开发,在那段时间我把socket、tcp、udp 什么的都混为一团理解。

    1)翻译分析

      用过socket的都知道socket是一个网络传输的工具,但是按照英文翻译过来叫做“插座”,要是结合使用环境硬翻译过来的话我觉得叫“网络插座”这样也还是可以理解,但是这样名字叫起来不是那么顺口而且也有点太白话了点。不过我觉得这么叫也是有好处的,至少这样一听起来比较清楚能明白它是一个工具。

      2)功能分析

      至于为什么叫“套接字”我觉得这个应该要结合实际开发来看,下图简单地表现了一个消息发送的过程,如果对网络协议清楚的可能一眼就会明白,“socket”其实就是帮助我们套接不同网络层协议的的工具,所以把“套接字”补全我们可以叫“套接首部字符串的工具”,这样从语义上就更加强调了它是一个工具而并不是一种字符。但是作为一个资深的开发人员自然要卖个关子,这样显得更有逼格。

      如果你还是刚入门的小白不明白为什么非要套接那么多首部,1)TCP的首部就不多说了,这个主要是用来确定消息完整的方式。2)如果不理解IP首部,那就思考以下,如果用户A同时给两个用户发十条消息,那么路由器怎样知道每条消息到底是发给谁。3)ICMP首部,你可以想象以下当用户A同时连接了两个路由器,虽然你有目标用户B的IP地址,但是你的消息要发给那个路由器呢?(ICMP,它是TCP/IP协议族的一个子协议)。有了这几个问题我相信你会对网络四层模型理解得更透彻。如果想要了解每个协议的首部具体有什么内容可以留言。

什么是套接字,为什么称“Socket“为套接字