socket到底是什么?

💡 原文中文,约7200字,阅读约需18分钟。
📝

内容提要

本文通过比喻插头和插座的关系解释了socket的概念,socket在网络编程中起到连接和通信的作用。文章深入探讨了socket的使用方法和原理,介绍了socket的设计和实现原理,包括sock的数据结构和功能,以及通过文件系统将sock封装成文件的方式。最后,文章简单介绍了TCP协议的建立连接和数据传输过程,以及sock如何实现继承的效果。

🎯

关键要点

  • socket的概念可以通过插头与插座的比喻来理解,socket在网络编程中用于连接和通信。
  • socket的使用场景包括通过TCP或UDP协议在不同计算机之间传输数据,初学者通常选择TCP协议。
  • 创建TCP socket的代码示例为sock_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP),返回的socket_fd是socket的句柄。
  • TCP连接的建立过程包括三次握手,服务端使用bind()、listen()、accept()方法,客户端使用connect()方法。
  • socket的设计是一个黑盒,网络传输功能通过sock数据结构实现,sock包含IP和端口字段。
  • sock的不同类型(如inet_sock、tcp_sock等)支持不同的网络协议和功能。
  • socket层将sock封装成文件,用户通过文件句柄操作sock,实现网络传输功能。
  • TCP协议的连接建立和数据传输过程包括发送和接收缓冲区的使用,以及等待队列的管理。
  • 服务端通过四元组(源IP、源端口、目的IP、目的端口)区分多个客户端的连接。
  • C语言通过结构体内存布局实现类似继承的效果,sock结构体的设计支持多种协议的扩展。
➡️

继续阅读