socket套接字

来源:互联网 发布:定义数组长度的代码 编辑:程序博客网 时间:2024/06/05 17:36

先来一个类比:

             两个人打电话

      ①任何用户在通话之前,首先要占有一部电话机,相当于申请一个 Socket 号;同时要知

道对方的电话号码,相当于对方有一个 Socket。

       ②然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)  。

       ③对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求), 拿起电话话筒,双方就可以正式通话,相当于连接成功。

       ④双方通话的过程,是向电话机发出信号和从电话机接受信号的过程,相当于向 Socket 发送数据和从 Socket 接受数据。

       ⑤通话结束后,一方挂起电话机,相当于关闭 Socket,撤消连接。


专业一点:

         socket   ——  电话机

              |

              |

      通信连接的端点

在Unix/Linux中,一切皆文件。那对于这两个操作系统而言,“端点”就是一个特殊的文件,也就是说Socket实际上就是文件

既然Socket是文件,那就可以用 open ——write/read——close 的操作文件流程。


socket与TCP\UDP

   socket 类比为电话座机,所以他是一个东西,它运用了TCP\UDP协议。


 对于一个Socket而言,它至少需要3个参数来指定:

  1)通信的目的地址;

  2)使用的传输层协议(如TCP、UDP);

  3)使用的端口号。


所以根据使用的协议不同,socket有以下分类:

        1)SOCK_STREAM:流式套接字,提供面向连接、可靠的数据传输服务,数据按字节流、按顺序收发,保证在传输过程中无丢失、无冗余。TCP协议支持该套接字。

  2)SOCK_DGRAM:数据报套接字,提供面向无连接的服务,数据收发无序,不能保证数据的准确到达。UDP协议支持该套接字。

  3)SOCK_RAW:原始套接字。允许对低于传输层的协议或物理网络直接访问,例如可以接收和发送ICMP报文。常用于检测新的协议。

具体为啥TCP是流式,UDP是数据报式,参见上一篇文章。




0 0
原创粉丝点击