socket的send和recv原理剖析

socket的send和recv原理剖析

TCP socket的发送和接收缓冲区

当创建一个socket对象时会有一个发送缓冲区和接收缓冲区。

send原理剖析

是不是直接把数据发送给服务端?

发数据要通过网卡,所以需要调用操作系统接口,把要发送的数据先写入发送缓冲区,再由操作系统控制网卡把缓冲区的数据发送给服务端网卡

recv原理剖析

和send原理类似。先调用操作系统接口,通过网卡接收数据,写入缓冲区,再由应用程序从接收缓冲区获取客户端发送的数据

%%{init: {"flowchart": {"defaultRenderer": "dagre", "htmlLabels": false}} }%%
flowchart BT
	subgraph ide1 ["客户端程序"]
		a1("客户端数据") -- "发送" --> b1("socket") -- "发送" --> c1("客户端发送缓冲区") -- "发送" --> d1("客户端网卡")
		d1 -- "接收" --> A1("客户端接收缓冲区") -- "接收" --> b1 -- "接收" --> B1("接收到服务端数据")
	end
	subgraph ide2 ["服务端程序"]
		d2 -- "接收" --> A2("服务端接收缓冲区") -- "接收" --> b2 -- "接收" --> B2("接收到客户端数据")
		a2("服务端数据") -- "发送" --> b2("socket") -- "发送" --> c2("服务端发送缓冲区") -- "发送" --> d2("服务端网卡")
	end
	d1 -- "发送客户端数据" --> d2
	d2 -- "发送服务端数据" --> d1