IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> TCP服务器通信流程 -> 正文阅读

[系统运维]TCP服务器通信流程

1.服务器通信模型

在这里插入图片描述
tcp服务器
接电话模型:创建套接字(服务器电话),绑定ip和端口在套接字上(绑定固定电话号码),监听有没有新在连接(监听),接受连接(接听电话),收发数据(读写对socket文件操作)(说话交流),关闭(挂电话)

说明:一台主机可能多个ip所以得绑定

说明:客户端不用绑定,系统随机分配一个端口给他

详细具体过程

在这里插入图片描述
在这里插入图片描述

说明:
listen监听创建一个已完成队列和未完成队列,未完成队列经过三次握手到达已完成队列中,将服务器变成被动接收模式
accept从已完成队列中提取连接,得到一个新的已连接套接字,用这个已连接套接字和客户端通信,原来那个套接字只用来处理新的请求和接收新的连接,不用原来的那个通信了。

已连接套接字端口和ip和原来的监听套接字ip和端口一模一样同等复制
要服务很多客户端,不止一个
在这里插入图片描述
作用:专门分工,提高工作效率,避免一个套接字产生错乱

函数说明:

bind函数
功能:绑定ip和端口在服务器套接字上
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
sockfd:
socket文件描述符,对应目标套接字
addr:
构造出IP地址加端口号,获取服务器ipv4套接字结构体地址
addrlen:
sizeof(addr)长度,ipv4结构体的大小
返回值:
成功返回0,失败返回-1, 设置errno

listen函数
功能:监听是否有连接
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int listen(int sockfd, int backlog);
sockfd:
socket文件描述符,socket套接字
backlog:在这里插入图片描述
排队建立3次握手队列和刚刚建立3次握手队列的链接数和
已完成连接数和未完成连接数之和的最大值(一般填128够用了)

说明:
查看系统默认backlog
cat /proc/sys/net/ipv4/tcp_max_syn_backlog

返回值
listen()成功返回0,失败返回-1。

accept函数
功能:从已完成连接队列提取新的连接
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
sockdf:
socket文件描述符,套接字
addr:
传出参数,返回链接客户端地址信息,含IP地址和端口号
获取到客户端ipv4套接字结构体地址
addrlen:
套接字结构体大小的地址
传入传出参数(值-结果),传入sizeof(addr)大小,函数返回时返回真正接收到地址结构体的大小
返回值:
成功返回一个新的socket文件描述符,理解成创建一个新的套接字,用于和客户端通信不用那个旧的套接字
失败返回-1,设置errno

说明:如果没有新的连接,accept会阻塞

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:33:29  更:2022-02-16 13:36:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:55:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码