socket(套接字)的发展历史
1)1982 - Berkeley Software Distributions 操作系统引入了socket作为本地进程之间通信的接口
2)1986 - Berkeley 扩展了socket 接口,使之支持UNIX 下的TCP/IP 通信
3)现在很多应用 (FTP, Telnet) 都依赖这一接口
socket(套接字)的介绍
1.是一个编程接口
2、是一种特殊的文件描述符 (everything in Unix is a file)
3、socket是一种通信机制,并不仅限于TCP/IP协议
4、面向连接 (Transmission Control Protocol - TCP/IP)
5、无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX)
为什么需要socket
1.普通的I/O操作过程 :打开文件->读/写操作->关闭文件
2.TCP/IP协议被集成到操作系统的内核中,引入了新型的“I/O”操作 ----->进行网络通信的两个进程在不同的机器上,如何连接? 网络协议具有多样性,如何进行统一的操作 ?
需要一种通用的网络编程接口:Socket
socket的类型
流式套接字(SOCK_STREAM) TCP
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
数据报套接字(SOCK_DGRAM) UDP
提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
原始套接字(SOCK_RAW)
可以对较低层次协议如IP、ICMP直接访问,还有一些ping命令