了解套接字基础知识

时间:2011-01-24 12:44:30

标签: sockets network-programming

我一直在阅读基本的网络编程,但我很难找到关于究竟和套接字是什么的直接解释,以及它与OSI或TCP / IP堆栈的关系。

  1. 有人可以向我解释插座是什么吗?它是程序员或API定义的数据结构,还是网卡上的硬件设备?

  2. 上述网络模型的哪些层处理“原始”套接字?传输层?网络层?

  3. 就它们之间传递的数据而言,是基于套接字文本还是二进制文件?

  4. 基于套接字的网络编程是否有替代?或者所有联网应用程序都使用某种形式的套接字?

  5. 如果我能得到这么多,我应该非常清楚地理解我正在读的其他一切。谢谢你的帮助!

4 个答案:

答案 0 :(得分:7)

简答:

  1. Socket是IP连接端点的抽象 - 因此,如果您将其视为API结构,那么您就不是很远了。请阅读http://en.wikipedia.org/wiki/Internet_socket
  2. Internet layer即IP协议。在实践中,您通常使用显式套接字绑定到某个传输层参数(数据报/ UDP或流/ TCP)
  3. 套接字以网络字节顺序发送数据 - 无论是文本还是二进制,取决于上层协议。
  4. 理论上,可能是 - 但实际上所有IP流量都是使用'套接字'
  5. 完成的

答案 1 :(得分:4)

Socket是操作系统提供的软件机制。就像它的名字所暗示的那样,你可以把它想象成一个“电源插座”或一些电连接器,即使插座不是物理设备,而是软件机制。在现实世界中,当您有两个电气连接器时,可以使用电线连接它们。在网络编程中,您可以在一台计算机上创建一个套接字,在另一台计算机上创建另一个套接字,然后连接这些套接字。当你向其中一个人写数据时,你会在另一个人身上收到数据。还有一些不同类型的插座。例如,如果您正在编写服务器软件,那么您希望拥有一个永远不会发送或接收实际数据但只监听和接受传入连接的侦听套接字,并为每个新连接创建一个新套接字。

答案 2 :(得分:3)

C语言中的套接字是内核空间中的数据结构,对应于UDP或TCP会话的一个端点(在谈论UDP时,我使用会话非常)。它通常与本地端的一个端口号相关联,并且在会话的任何一侧很少有一个“众所周知的”号码。

“原始套接字”是或多或少的物理传输的终点。它们很少用于应用程序编程,但有时用于各种诊断事项(traceroute,ping,可能还有其他),并且可能需要提升权限才能打开。

套接字本质上是二进制八位字节传输。将套接字(至少TCP套接字)视为基于文本的流并不罕见。

我还没有看到一个不涉及套接字的编程模型,如果你深入挖掘,但肯定还有其他的网络模型。 “/ net /”伪文件系统,其中打开“/net/127.0.0.0.1/tcp/80”(或“tcp / www”)将为您提供一个文件句柄,其中写入最终在localhost上的Web服务器上只是一个。

答案 3 :(得分:0)

假设your PC at home,并且您已经打开two browser个窗口。

一个看着facebook website,另一个看着Yahoo website

与Facebook的连接为:

Your PC – IP1+port 30200 ——– facebook IP2 +port 80 (standard port)

combination IP1+30200 = the socket on the client computerIP2 + port 80 = destination socket on the facebook server

与Yahoo的连接为:

your PC – IP1+port 60401 ——–Yahoo IP3 +port 80 (standard port)

The combination IP1+60401 = the socket on the client computerIP3 + port 80 = destination socket on the Yahoo server