套接字概念
Socket本身有「插座」的意思,在Linux環境下,用於表示進程間網路通信的特殊文件類型。本質為內核藉助緩衝區形成的偽文件。既然是文件,那麼理所當然的,我們可以使用文件描述符引用套接字。與管道類似的,Linux系統將其封裝成文件的目的是為了統一介面,使得讀寫套接字和讀寫文件的操作一致。區別是管道主要應用於本地進程間通信,而套接字多應用於網路進程間數據的傳遞。套接字的內核實現較為複雜,不宜在學習初期深入學習。在TCP/IP協議中,「IP地址+TCP或UDP埠號」唯一標識網路通訊中的一個進程。「IP地址+埠號」就對應一個socket。欲建立連接的兩個進程各自有一個socket來標識,那麼這兩個socket組成的socket pair就唯一標識一個連接。因此可以用Socket來描述網路連接的一對一關係。
套接字通信原理如下圖所示: