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_data14;

}

//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 释放连接和撤销套接字。

相关推荐
国科安芯7 分钟前
星载数据处理单元中单粒子翻转防护机制的设计考量与实现路径
网络·单片机·嵌入式硬件·架构·抗辐射·星载数据处理·单粒子
Lynne3098 分钟前
IT/OT融合为什么难?从网络、协议到实时性的技术问题
网络
新时代牛马31 分钟前
Linux 驱动调试完整篇:从printk/dev_dbg、动态调试到 debugfs/ftrace 排障
java·linux·服务器
FfHUCisI33 分钟前
Golang 网络轮询器 netpoll:把阻塞 IO 变成事件通知
开发语言·网络·golang
Fnetlink11 小时前
Fnet 云网安 260907
网络·人工智能·安全·web安全·网络安全·智能路由器
2603_965148111 小时前
宠物经济崛起:宠物食品用品API选品指南
大数据·服务器·人工智能·python·生活·宠物
Jae den1 小时前
什么是服务器虚拟化?
运维·服务器
凌云若寒1 小时前
CODESOFT试用流程
linux·运维·网络·数据库·sentinel
维克兜率天2 小时前
4.3.2.1 日常监控:上线只是开始
服务器·数据库·python·区块链·php·量化
悦库企业网盘2 小时前
等保三级合规性介绍
网络