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

相关推荐
网安小白的进阶之路1 小时前
A模块 系统与网络安全 第四门课 弹性交换网络-6
网络·安全·web安全
深耕AI4 小时前
【完整教程】宝塔面板FTP配置与FileZilla连接服务器
运维·服务器
无聊的小坏坏5 小时前
从单 Reactor 线程池到 OneThreadOneLoop:高性能网络模型的演进
服务器·网络·一个线程一个事件循环
AI智域边界 - Alvin Cho6 小时前
Bloomberg、LSEG 与 MCP 缺口:为什么尚未发布完整的 MCP 服务器,以及多智能体系统如何解決这问题
运维·服务器
还下着雨ZG6 小时前
TCP/IP协议族详细介绍
网络·网络协议·tcp/ip·计算机网络
国服第二切图仔6 小时前
Rust开发之Trait 定义通用行为——实现形状面积计算系统
开发语言·网络·rust
蒙奇D索大6 小时前
【计算机网络】[特殊字符] 408高频考点 | 数据链路层组帧:从字符计数到违规编码,一文学透四大实现方法
网络·笔记·学习·计算机网络·考研
_OP_CHEN7 小时前
Linux网络编程:(七)Vim 编辑器完全指南:从入门到精通的全方位实战教程
linux·运维·服务器·编辑器·vim·linux生态·linux软件
Maple_land7 小时前
第1篇:Linux工具复盘上篇:yum与vim
linux·运维·服务器·c++·centos
奋斗的牛马7 小时前
OFDM理解
网络·数据库·单片机·嵌入式硬件·fpga开发·信息与通信