什么是插座,物理上?

时间:2011-02-14 15:35:35

标签: sockets network-programming

我总是喜欢编程概念的逻辑意义到它的逻辑意义。所以这就是这个问题。

在我查看套接字编程范例时,我注意到 bind() connect()函数的作用就像调优 socket()函数创建的套接字。所以我想 socket()函数所做的只是创建一个数据结构(可能是内核空间中的数据结构)来保存有关端到端通信的细节客户端和服务器之间的设置。并且 bind(),connect()只需填写该数据结构。

我不熟悉socket API的实现,所以我希望有人能解决我的问题。

3 个答案:

答案 0 :(得分:18)

答案 1 :(得分:4)

您熟悉OSI model吗? bind()指定要使用的本地IP地址和端口(第4层),因此当数据包物理发送出去时,它指定IP地址作为发送方,connect()指定远程IP地址和端口物理地放在那些包中。

顺便说一下,很多编程都是纯粹的“逻辑”,并没有真正具有“物理”含义,除非“物理”实际上意味着“实现细节”,这将因平台而异。如果您实际上询问物理实现意味着“意义”如何转化为电信号,那么作为计算机工程师而不是程序员,您可能会更高兴。

答案 2 :(得分:2)

我的2美分价值:

套接字基本上与源IP,源端口,目标IP和目标端口一致。 (实际上,它实际上并不是什么,这是一个基于软件的概念)这样操作系统可以告诉哪个应用程序(通过它的端口号)需要接收数据包或发送数据包。

网络堆栈(TCP / IP或OSI模型)的实现方式因您的操作系统而异。如果您想了解更多数据包的传输和处理方式,请研究OSI模型或TCP / IP堆栈。这将告诉您在您的应用程序通过网络发送时会发生什么信息。

操作系统负责处理数据包,所以如果你是程序员,如前所述,你通常对这些细节不感兴趣。

如果你很好奇并希望像我一样知道,我建议你开始阅读。 :)