当前位置: 首页 > news >正文

linux网络编程5

24.9.21学习目录

  • 一.TCP
    • 1.TCP流程
    • 2.TCP相关函数
    • 3.三次握手

一.TCP

1.TCP流程

在这里插入图片描述
服务器流程:

  1. 创建套接字socket()
  2. 将套接字与服务器网络信息结构体绑定bind()
  3. 将套接字设置为监听状态listen()
  4. 阻塞等待客户端的连接请求accept()
  5. 进行通信接收或发送(recv()或send())
  6. 关闭套接字close()

客户端流程:

  1. 创建套接字socket()
  2. 发送客户端连接请求connect()
  3. 进行通信接收或发送(recv()或send())
  4. 关闭套接字close()
//TCP套接字的设置,AF_INET为IPv4,SOCK_STREAM设置为TCP方法
socket(AF_INET,SOCK_STREAM,0);

2.TCP相关函数

(1)connect
主动跟服务器建立连接

#include <sys/socket.h>int connect(int sockfd,const struct sockaddr *addr,socklen_t len);

len:为addr的长度

注意:
connect建立连接后不会产生新的套接字;
连接成功后才可以开始传输TCP数据;

(2)send

ssize_t send(int sockfd,const void* buf,size_t nbytes,int flags);

buf:发送数据的地址
nbytes:发送缓存数据的大小
flags:套接字标志(常为0为阻塞,也可以为MSG_SONTWAIT为非阻塞)

注意:
TCP不能发送0长度的数据包

(3)recv
接收数据

ssize_t recv(int sockfd,void *buf,size_t nbytes,int flags);

buf:接收数据的缓冲区地址

(4)listen
将套接字修改为被动,让操作系统给该套接字设置一个连接队伍,用来记录所有连接到该套接字的连接

int listen(int sockfd,int backlog);

backlog:连接队列的长度,即设置服务器最大的连接客服的数量

(4)accept
从连接队列中取出一个已经建立的连接,如果没有任何连接可用,则进入睡眠等待

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

cliaddr:用于存放客户端套接字地址结构
addrlen:接字地址结构长度的地址

注意:
其返回的是一个已连接的套接字,这个套接字代表当前这个连接

3.三次握手

(1)close关闭套接字
其是关闭一个代表已经连接套接字,则会出现向另外一端接收到一个长度为0的数据包;
关闭使用socket函数创建的套接字,会导致服务器无法接收新的连接,但不会影响已经连接的;
关闭accept返回的套接字,则会导致其连接关闭,但不会影响服务器的;

在这里插入图片描述
过程:

  1. 客户端向服务器发SYN,序号为J
  2. 服务器接收到数据后,向服务器发送SYN和ACK,序号分别为K和J+1
  3. 当客户端接收到数据后,确认ACK的序号为其发送的序号加一
  4. 客户端向服务器发送ACK,序号为K+1

http://www.mrgr.cn/news/32937.html

相关文章:

  • Python →爬虫实践
  • 供应SW6301V单C口多协议升降压移动电源IC
  • MySQL中字段类型和Java对象中的数据类型对应关系
  • WebGIS四大地图框架:Leaflet、OpenLayers、Mapbox、Cesium
  • JVM 中的完整 GC 流程
  • 前后端、网关、协议方面补充
  • Dell R720 使用 ESXI 系统直通 p40 等显存大于16g 的显卡使用 EFI 引导无法打开虚拟机。
  • C++——模板初阶
  • 智慧校园建设解决方案建设系统简介
  • C Prime Plus 第6章习题
  • 索引的使用
  • Hadoop的安装
  • 【推广】图书|2024新书《大模型RAG实战:RAG原理、应用与系统构建》汪鹏、谷清水、卞龙鹏等,机械工业出版社
  • CDVAE项目环境配置
  • cv环境设置
  • expressjs 如何封装接口响应数据
  • 用 HTML + JavaScript DIY 一个渐进式延迟法定退休年龄测算器
  • Linux操作系统面试题记录
  • 行阶梯形矩阵的定义,通过正例和反例说明如何判断一个矩阵是不是行阶梯形矩阵
  • iTerm2下载并配置
  • nacos适配人大金仓的数据库
  • 【BetterBench博士】2024年中国研究生数学建模竞赛 E题:高速公路应急车道紧急启用模型 问题分析
  • 【我的 PWN 学习手札】House Of Karui —— tcache key 绕过手法
  • python多继承 - 子类指定父类
  • 基于SpringBoot+Vue的考研百科网站系统
  • 线程池实现的是什么接口