Socket基本原理

一、简单介绍

Socket,又称套接字,是Linux跨进程通信(IPC,Inter Process Communication)方式的一种。相比于其他IPC方式,Socket牛逼在于可做到同一台主机内跨进程通信,不同主机间的跨进程通信。根据通信域的不同可以划分成2种:Unix domain socket 和 Internet domain socket。

二、Internet domain socket

Socket核心参数:IP+端口+协议 (确定唯一主机的唯一的进程以及通信的协议)

信息从发送端Socket到接收端Socket,由内核处理。

1、参数(5)

发送端Socket [tcp,发送端IP,发送端port,接收端IP,接收端port]

接收端Socket [tcp,接收端IP,接收端port,发送端IP,发送端port]

2、分类(3)

Socket根据通信协议的不同还可以分为3种:流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM)及原始套接字。

  • 流式套接字(SOCK_STREAM):最常见的套接字,使用TCP协议,提供可靠的、面向连接的通信流。保证数据传输是正确的,并且是顺序的。应用于Telnet远程连接、WWW服务等。
  • 数据报套接字(SOCK_DGRAM):使用UDP协议,提供无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠性。使用UDP的应用程序要有自己的对数据进行确认的协议。
  • 原始套接字:允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议实现的测试等。原始套接字主要用于一些协议的开发,可以进行比较底层的操作。它功能强大,但是没有上面介绍的两种套接字使用方便,一般的程序也涉及不到原始套接字。

3、套接字工作流程

流式套接字:服务器首先启动,通过调用socket()建立一个套接字,然后调用bind()将该套接字和本地网络地址联系在一起,再调用listen()使套接字做好侦听的准备,并规定它的请求队列的长度,之后就调用accept()来接收连接。客户端在建立套接字后就可调用connect()和服务器三次握手建立连接。连接一旦建立,客户机和服务器之间就可以通过调用read()和write()来发送和接收数据。最后,待数据传送结束后,双方调用close()关闭套接字。

TCP角度看待:

三**、Unix domain socket**

只是将应用层数据从一个进程拷贝到另一个进程。也可以用网络域实现(IP为127.0.0.1即可)

UNIX domain socket 是全双工的,linux也支持。

相关推荐
70asunflower16 分钟前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
那就回到过去41 分钟前
VRRP协议
网络·华为·智能路由器·ensp·vrrp协议·网络hcip
神梦流1 小时前
ops-math 算子库的扩展能力:高精度与复数运算的硬件映射策略
服务器·数据库
极客小云1 小时前
【ComfyUI API 自动化利器:comfyui_xy Python 库使用详解】
网络·python·自动化·comfyui
神梦流1 小时前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器
凡人叶枫1 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [drivers][input]serio
linux·笔记·学习
符哥20081 小时前
用Apollo + RxSwift + RxCocoa搭建一套网络请求框架
网络·ios·rxswift
xuhe21 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
相思难忘成疾1 小时前
通向HCIP之路:第四步:边界网关路由协议—BGP(概念、配置、特点、常见问题及其解决方案)
网络·华为·hcip