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