什么是网络套接字(Socket)
来源:互联网 发布:mac装windows系统好吗 编辑:程序博客网 时间:2024/05/17 04:24
什么是网络套接字(Socket)?一时还真不好回答,而且网络上也有各种解释,莫衷一是。
Socket定义
Socket在维基百科的定义:
A network socket is an endpoint of an inter-process communication across a computer network. Today, most communication between computers is based on the Internet Protocol; therefore most network sockets are Internet sockets.
在Oracle官网上的定义:
A socket is one endpoint of a two-way communication link between two programs running on the network.
其实他们想表达的都是这个意思:Socket是网络上两个程序双向通讯连接的端点。
那我们又该如何理解‘端点(endpoint)’一词呢?
在Unix/Linux中,一切皆文件。那对于这两个操作系统而言,“端点”就是一个特殊的文件,也就是说Socket实际上就是文件。
在Unix/Linux中,一切皆文件。那对于这两个操作系统而言,“端点”就是一个特殊的文件,也就是说Socket实际上就是文件。
既然Socket是文件,那就可以用“打开open –> 读写write/read –> 关闭close”模式来操作它,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。
对于一个Socket而言,它至少需要3个参数来指定:
1)通信的目的地址;
2)使用的传输层协议(如TCP、UDP);
3)使用的端口号。
Socket类型
套接字类型是指创建套接字的应用程序要使用的通信服务类型。linux系统支持多种套接字类型,最常用的有以下三种:
1)SOCK_STREAM:流式套接字,提供面向连接、可靠的数据传输服务,数据按字节流、按顺序收发,保证在传输过程中无丢失、无冗余。TCP协议支持该套接字。
2)SOCK_DGRAM:数据报套接字,提供面向无连接的服务,数据收发无序,不能保证数据的准确到达。UDP协议支持该套接字。
3)SOCK_RAW:原始套接字。允许对低于传输层的协议或物理网络直接访问,例如可以接收和发送ICMP报文。常用于检测新的协议。
1)SOCK_STREAM:流式套接字,提供面向连接、可靠的数据传输服务,数据按字节流、按顺序收发,保证在传输过程中无丢失、无冗余。TCP协议支持该套接字。
2)SOCK_DGRAM:数据报套接字,提供面向无连接的服务,数据收发无序,不能保证数据的准确到达。UDP协议支持该套接字。
3)SOCK_RAW:原始套接字。允许对低于传输层的协议或物理网络直接访问,例如可以接收和发送ICMP报文。常用于检测新的协议。
详细可参考tutorialspoint。
Socket网络层次
下图画出了套接字位于网络中的层次,它位于传输层以上、应用层以下。Socket编程正是通过一系列系统调用(Socket API)来完成应用层协议(如ftp、http)。
图 套接字层次图
套接字是对网络中应用层进程之间的通信进行了抽象,提供了应用层进程利用网络协议栈交换数据的机制。
Socket API
这里的Socket API指的是Berkeley Sockets API,详细请参考维基百科。
参考文献
http://www.cnblogs.com/xiehongfeng100/p/4598128.html
阅读全文
0 0
- 什么是网络套接字(Socket)
- 什么是套接字(Socket)
- 什么是套接字(Socket)?套接字(Socket)是什么意思?(转载)
- 什么是套接字(Socket)?套接字(Socket)是什么意思?(转载)
- 什么是套接字(Socket)?套接字(Socket)是什么意思?(转载)
- 什么是套接字(Socket)?
- 什么是套接字Socket
- socket,网络套接字
- 网络套接字socket
- 什么是套接字(Socket)?[转]
- 什么是套接字Socket详解
- (转)什么是套接字(Socket)?
- (转)什么是套接字(Socket)?
- (转)什么是套接字(Socket)?
- (转)什么是套接字(Socket)?
- 计算机网络:什么是套接字(Socket)?
- 初遇SOCKET套接字(网络基本概念)
- Linux - Socket网络套接字
- 求1+2+3+...+n
- TCP UDP TCP三次握手
- Python3:《机器学习实战》之k近邻算法(2)我们约会吧
- 洛谷P3374 【模板】树状数组 1
- 问题 F: 巴什博弈?
- 什么是网络套接字(Socket)
- 鼠标案例【完美告白,为爱转身】
- 【原创】不小心把.settings文件夹, 以及.classpath和.project文件push进了远程仓库了怎么办
- Visual Studio 配色和快捷键设置
- 结构体struct使用之总结
- tf.where 和 tf.cond对比
- 异步任务详解
- 小孩报数问题
- 程序员这样优化简历,一投制胜