l8-d6 socket套接字及TCP的实现框架

一、socket套接字

/*创建套接字*/

int socket(int domain, int type, int protocol);

/*绑定通信结构体*/

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

/*监听套接字*/

int listen(int sockfd, int backlog);

/*处理客户端发起的连接,生成新的套接字*/

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

/*向服务器发起连接请求*/

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

三元组【IP地址,端口,协议】

IP地址:标识计算机

端口号:标识计算机当中的进程

协议:指定数据传输的方式

地址族结构体

//通用地址族结构体

struct sockaddr {

sa_family_t sa_family;

char sa_data[14];

}

//sa_family

AF_UNIX 使用本地域套接字的地址结构,用于本地通信

AF_INET 使用IPv4的通信地址结构

AF_INET6 使用IPv6的通信地址结构

....

//IPv4

struct sockaddr_in {

sa_family_t sin_family;

in_port_t sin_port;

struct in_addr sin_addr;

};

struct sockaddr {

uint32_t s_addr;

};

套接字类型

流式套接字 (SOCK_STREAM) 提供可靠的、面向连接的通信流;它使用TCP,从而保证数据传输的可靠性和顺序性

**数据报套接字 (SOCK_DGRAM)**定义了一种不可靠、面向无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错的。它使用数据报协议UDP

原始套接字(SOCK_RAW) 允许直接访问底层协议,如IP或ICMP,它功能强大但使用较为不便,主要用于协议开发。

二、TCP通信的实现过程

实现过程:

1.通信之前,客户和服务器先创建套接字

2.服务器端调用 bind,把端口号和本地 IP 地址填写到已创建的套接字中

3.服务器端调用 listen(收听),把套接字设置为被动方式,以便随时接受客户的服务请求。UDP 服务器不使用 listen 系统调用

4.服务器端调用 accept(接受),以便把远地客户进程发来的连接请求提取出来。UDP 服务器不使用 accept 系统调用

5.客户进程调用 connect,以便和远地服务器建立连接(这就是主动打开)

6.客户和服务器在 TCP 连接上使用 write传送数据,使用 read接收数据

7.客户或服务器通信结束,调用 close 释放连接和撤销套接字。

相关推荐
HY小海11 分钟前
【Linux】进程概念
linux·运维·服务器
黄筱筱筱筱筱筱筱3 小时前
LINUX-防火墙
linux·服务器·网络
сокол4 小时前
【网安-Web渗透测试-靶场系列】AWD-Platform(ctf-hub)
linux·服务器·ubuntu·网络安全·docker
utf8mb4安全女神4 小时前
Linux系统服务相关命令【定时任务设置】【任务进程管理】【防火墙区域应用】
linux·运维·服务器
CPETW6 小时前
RS-232 Sniffer 嗅探器 ---- UNI-T电子负载通讯协议抓取-C
网络
L、2187 小时前
昇腾NPU性能调优Checklist——从“能跑“到“跑得快“的20步
服务器·人工智能·深度学习
liulilittle8 小时前
TCP UCP 卡尔曼滤波器
网络·网络协议·tcp/ip·通信
不吃土豆的马铃薯8 小时前
Spdlog 进阶:日志基本控制、日志格式控制、异步记录器
linux·服务器·开发语言·前端·c++
疯狂成瘾者8 小时前
常见的 Linux 版本
linux·运维·服务器
GOTXX8 小时前
SenseNova U1 实战体验:API 调用 + OpenClaw 接入全流程
服务器·网络·人工智能·语言模型