注:最近在学习linux的socket编程,目前还在比较初级的阶段,在这里把学习的一些心得做个记录,同时也分享给有需要的小伙伴。
正文:
(一)socket是什么
socket简单来说,就是利用标准的unix文件描述符来与远端(网络)的应用程序通信的一种编程技术。再简单来说,就是利用socket读写网络数据就像读写普通的文件一样。socket提供了一组完整的API来支持网络应用程序的开发。
(二)socket的分类
socket分为两种类型:Stream sockets,Datagram sockets。
- Stream sockets:是一种可靠的,双向的传输模式。这种模式下,能够保证数据的正确性以及数据传输的顺序性。Stream sockets 使用的传输协议为TCP (The Transmission Control Protocol)协议。常见的基于TCP协议的应用有:telnet,web browsers 等等。
- Datagram sockets:是一种不可靠的传输模式。通信的双方不需要进行连接。这种模式下,无法保证数据传输的顺序性和正确性。Datagram sockets使用的传输协议是UDP (User Datagram Protocol)协议。常见的基于UDP协议的应用有:tftp, dhcpcd 等等。
(三)TCP与UDP的比较
TCP | UDP |
面向连接、可靠的数据传输 | 面向数据报、不可靠的数据传输 |
性能低,占用资源多 | 性能高,占用资源少 |
有握手、确认、窗口、重传、拥塞控制等机制 | 没有握手、确认、窗口、重传、拥塞控制等机制 |
TCP程序较为复杂 | UDP程序较为简单 |
常见应用:FTP、Telnet、SMTP、HTTP、POP3 | 常见应用:DNS、SNMP、tftp, dhcpcd |
(四)TCP与UDP编程模型
1)TCP编程模型
2)UDP编程模型