IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 简单理一理socket的类型 -> 正文阅读

[网络协议]简单理一理socket的类型


经过这段时间对网络编程的学习,发现套接字的类型其实蛮多的,不是仅有 TCPUDP那么简单,本文简单理一理socket的类型。

socket系统调用

通过创建socket的系统调用接口就能看到内核对socket的分类。

// #include <sys/socket.h>
int socket(int domain, int type, int protocol);

参数

通过domaintypeprotocol这三个参数可以唯一标识一种socket。因此可以对socket做三个维度的分类。

domain

该参数指定协议族。取值总共有以下几种:

PF_LOCAL        Host-internal protocols, formerly called PF_UNIX,
PF_UNIX         Host-internal protocols, deprecated, use PF_LOCAL,
PF_INET         Internet version 4 protocols,
PF_ROUTE        Internal Routing protocol,
PF_KEY          Internal key-management function,
PF_INET6        Internet version 6 protocols,
PF_SYSTEM       System domain,
PF_NDRV         Raw access to network device,
PF_VSOCK        VM Sockets protocols

常用的有三种:

  1. PF_INET:ipv4类型的socket,使用ipv4网络地址+端口号标识socket的地址,用于主机间通信。
  2. PF_INET6:ipv6类型的socket,使用ipv6网络地址+端口号标识socket的地址,用于主机间通信。
  3. PF_LOCAL:本地socket,使用某个文件的绝对路径名标识socket地址,用于同一主机的不同进程间,是一种IPC手段(相当于两个进程通过共享一个文件实现通信)。该socket使用的是简化版的网络协议栈,所以性能较高。

协议族确定了,地址族也就确定了。
构造socket的地址时,要指定地址族AF_xxx),AF_xxxPF_xxx是对应的。
PF_xxx这样的值来创建socket,用AF_xxx这样的值来构造socket的地址。

type

该参数指定通信的语义。取值共有以下三种:

SOCK_STREAM
SOCK_DGRAM
SOCK_RAW
  1. SOCK_STREAM:字节流类型,提供有序、可靠、有连接、基于字节流的通信机制。
  2. SOCK_DGRAM:数据报类型,提供最大长度固定、无连接、不可靠的通信机制。
  3. SOCK_RAW:原始socket类型,提供对内部网络协议和接口的访问,仅对超级用户可用。原始套接字可以不经过网络协议栈的处理,直接访问网卡,把用户进程构造的消息发出去。

protocol

该参数指定socket通信时要使用的特定协议。
当前面的两个参数不能唯一标识一个具体的网络通信协议时,就会使用protocol指定具体的协议。

返回值

该函数会返回一个socket描述符,失败时返回-1.
在Linux里面,万物皆文件,socket也不例外。

socket系统调用 <----> open系统调用
socket描述符 <----> 文件描述符
通过socket发送数据 <----> 文件写
通过socket接收数据 <----> 文件读

总结

  1. domain指定了协议族。也指定了地址族,即socket的地址类型。
  2. type指定了通信语义。
  3. protocol指定了具体的通信协议。
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 17:24:00  更:2021-10-03 17:24:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/29 19:00:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码