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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Posix API实现原理(TCP) -> 正文阅读

[网络协议]Posix API实现原理(TCP)

Posix API

在这里插入图片描述

tcp server

socket

创建一个TCB

bind

作用:绑定ip、port到fd, 不调用的话使用默认值(填充五元组),可以理解为设置socket属性

connect

listen(int fd, int backlog)

  1. backlog: (unix中)半连接+全连接的总数的最大值, 容易收到DDOS攻击 : (其他)全连接的最大数, 不会遭受DDOS攻击

  2. 这里面会经历三次握手,接收到连接请求时候将连接信息(五元组)填入半连接队列,并发出sync通知client。当server接收到client的sync的时候,将半连接队列中的对应块信息(五元组)放入全连接队列
    在这里插入图片描述

  3. 如果第一次超时没有接收到client的sync, 则server再发一次sync, 再次超时则丢掉
    在这里插入图片描述在这里插入图片描述

accept

从全连接队列中得到一个tcb控制块
分配文件描述符

recv

发现tcb的recv_buffer中存在了数据,再cp过来
(TCP协议栈执行)
tcb每收到一个包,重置延时定时器,发现有包没有收全,比如收到了包序号1,2,3,5,6, tcb回复一个ack=4,client将重新发送4,5,6,以此来确保包的完整性
6. send:
仅将数据cp到tcb的sendbuf中,tcb异步发送数据
在这里插入图片描述

close

执行四次挥手(客户端、服务器各自close以及sync,总共4次挥手)
在这里插入图片描述

  1. fin_wait1附带超时重传,即该状态不会太多。

  2. 如果close_wait状态较多,大概率是recv到0长度的数据包后没有即时close掉链接,解决方案: 将close之前的流程扔到另外一个线程中处理

  3. 客户端停留在fin_wait2(对端没有即时调用close),解决方案: 设置keep_alive 字节将之终止掉

  4. 如果双方同时发送close, 两者同时进入closing状态,各自发送ack,则都进入time_wait状态

  5. 如果出现大量的time_wait, 可以设置reused, 在简历连接时候 先去reused列表中寻找对应的五元组tcb进行使用

time_wait的回收:时间到了回收
fd的回收:调用close时候回收
tcb的回收:主动close的是time_wait后回收,被动close是收到ack后回收

TCB

可以根据五元组定位到tcb控制块的位置

fcntl

设置socket文件属性, 不涉及协议栈属性变更

TCP与UDP的优劣

TCP重传耗时较大
TCP无法做到实时
UDP速度快
UDP数据传输不够稳定

定时器

重传计时器:Retransmission Timer
坚持计时器:Persistent Timer
保活计时器:Keeplive Timer
时间等待计时器:Time_Wait Timer

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:56:42  更:2022-01-25 10:58:22 
 
开发: 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年10日历 -2024/10/6 13:25:38-

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