一、TCP/UDP

1、osi模型

物理层、数据链路层、网络层、传输层、会话层、表示层、应用层(下层为上层提供服务)

2、TCP/IP模型(TCP/IP协议栈)

应用层:

HTTP(超文本传输协议)、FTP(文件传输协议)、DNS、DHCP

传输层:

TCP(传输控制协议)、UDP(用户数据报)

网络层:

IP(互联网协议)、ICMP(互联网控制消息协议)ARP(ip->mac)RARP(mac->ip)

接口层:以太网协议....

3、常见的协议

DNS:域名解析

DHCP:动态主机配置协议,功能:自动分配IP地址

4、 ip地址

IP地址 == 网络位 + 主机位(ip地址的前三组是网络地址,第四组是主机地址)

有A B C D E 类五类地址

5、网络接口

套接字:用于网络通信的一组接口函数(文件描述符)

ip+port(地址+端口):地址用来识别主机,端口用来识别进程

端口号范围:1-65535

网络设备是大端存储,计算机设备是小端存储

6、udp特性(发不会阻塞,收会阻塞)

1. 无连接 
不需要维护繁杂网络状态。网络开销小。通信双方通信过程,无法知道对方进程关闭。如果需要告知,需要发信息通知。 (每次发数据,链路发完自动释放,下次发会选择新的链路)
2. 不可靠, 
传输数据的过程中,会有丢包。但是实时性好。适用直播 视频传输,音频传输。

3、数据报:数据间有边界,收发次数需要对应
【很容易实现一对多 、可以组播,广播】

7、UDP:客户端-服务端

8、网络模型

C/S:专用客户端,标准协议,自定义协议,功能复杂,大部分资源都在客户端(和本地客户端打交道)

B/S:通用客户端,超文本协议,功能相对较弱,资源都在服务器,(和浏览器打交道)

p2p模型:(peer to peer)用于直播,下载工具

9、TCP:传输控制协议(相当于打电话)特性:

1、有链接(一次会话中,链接会一直保持。如果一个断开,另外一方可以感知),

2、可靠:应答,超时重传

3、流式套接字:(有顺序、发送和接受的次数不需要对应,发的太快会出现写阻塞,数据之间没有边界)

注意:

数据之间没有边界会导致数据的黏包(接收收到数据后,无法正常解析)
1.协商边界
2.固定大小
3.自定义协议 

 10、TCP:客户端-服务端

重点代码:网络编程——聊天程序实现-CSDN博客

11、三次握手,四次挥手

三次握手:

客户端-->SYN(请求连接),c_num-->服务器

服务器-->SYN/ACK,s_num-->客户端

客户端-->ACK-->服务器

四次挥手:

客户端--> FIN(断开连接)/ACK -->服务器

服务器--> ACK -->客户端

服务器-->FIN/ACK-->客户端

客户端-->ACK-->服务器

 二、HTTP相关

1、网络协议头和工具

协议头(数据的封包和拆包)

客户端,从应用层发hello,经过传输层加tcp,网络层加ip,接口层加ip,变成一帧数据(mtu,最大传输单元1500字节,,分片?),经过互联网,到服务器逐层拆包,到服务器应用层输出hello.

  • MAC(以太网V2帧格式):目地址,源地址,ip数据报
  • IP(20个字节大小):ip flags(x d(能不能分片)m(是不是最后一片)),TTL(生存时间:默认值64,每经过一个网络节点ttl减1,数字减为0则不再继续传递)
  • TCP(20个字节大小):标志位(urg,ack,psh(抓包时:没有标准协议就找push,有标准协议就找相关协议),pst,synfin?),window(滑动窗口)

(UDP,8个字节大小)

2、网络测试工具:

telnet/ssh2:远程登录工具

netstat -anp/ping/arp:常用命令

wireshark:网络抓包工具

tcpdump:命令行抓包工具

3、万维网

统一资源定位符URL,标志万维网的各种文档(相当于网页链接)

HTTP的URL的一般形式:

http://<主机>:<端口>/<路径>

超文本传送协议HTTP,使用TCP可靠传输(加s就是加密传输)

超文本标记语言HTML

4、HTTP操作过程:

  • 客户端与服务器建立连接(三次握手)
  • 客户端发送请求报文
  • 服务器收到请求,发送响应报文+加对应数据
  • 断开连接(四次挥手)

5、HTTP报文结构

请求报文:

第一行:方法(get/post)+URL+HTTP版本号+回车换行\r\n

首部行:状态说明信息(键值对)

实体:请求实体(一般为空)

响应报文

三、多路IO复用(服务器和多客户端)

1、定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力

(进线程消耗资源,多路IO复用用最少的资源解决更多的事)

2、IO模型:

1、阻塞IO  闲等待(不占cpu等待):有名管道
2、非阻塞IO 忙等待(占着cpu等待)
3、信号驱动IO
4、并发模型 (进程/线程,相对多路IO比较消耗系统资源)
5、IO多路复用(可以处理单进程或单线程中,多个阻塞)

3、 fctnl设置非阻塞

 //将fd置为非阻塞模式
  int flag = fcntl(fd,F_GETFL,0);
  fcntl(fd,F_SETFL,flag|O_NONBLOCK);

//将标准输入(0)也设置为非阻塞模式。
  flag = fcntl(0,F_GETFL,0);
  fcntl(0,F_SETFL,flag|O_NONBLOCK);

4、fctnl设置信号驱动(代码运行和系统版本相关)(了解即可)

  //把设备设置为信号驱动的方式
  int flag = fcntl(fd,F_GETFL,0);
  fcntl(fd,F_SETFL,flag|O_ASYNC);
  //设置接收sigio信号的进程
  fcntl(fd,F_SETOWN,getpid());

5、IO多路复用:由操作系统提供的对IO事件进行检测的机制 (select,poll,epoll)

6、select函数实现多路IO复用(轮询方法)

创建集合(fd_set)

把文件描述符放进集合(FD_SET)

select轮询扫描,(返回值:有几个就是有几个描述符准备好)

找到对应的fd,进行读写操作(FD_LSSET)

清除读写标志位

注意点:

select最多检测1024fd

select在检测fd的方式是轮询的方式

select在找对应fd时,需要在原始集合(就绪和未就绪的在一个集合)找

7、epoll函数实现多路IO复用(主动上报)

创建集合 (epoll_create)

把文件描述符放进集合(epoll_ctl)

调用epoll_wait等待读写事件的到来,并把就绪fd存入就绪集合(rev)

在rev集合找到对应的fd,进行读写操作

注意点:

不限制文件描述符的限制

监听的性能不会随监听描述符增加而下降

epoll在rev集合(只有就绪fd)中找

使用共享内存的方式(不需要用户和内核反复进行复制)

四、TCP并发模型

服务器/多客户端模型

1、循环服务器(while(accept();recv()))

2、并发服务器(进线程)

3、多路IO模型服务器(select epoll)

1、select

注意点:

maxfd + 1 告诉 select 需要检查的文件描述符范围是 0maxfd(包含 maxfd)。

如果 maxfd 不更新,select 可能漏掉新连接的高 fd。

2、epoll
3、线程进程并发
3.1进程

signal(SIGCHLD, myhandle) 的作用是 处理子进程终止信号(SIGCHLD),避免僵尸进程的积累。

3.2线程

pthread_detach(pthread_self());

分离属性:线程退出时,系统自动回收资源,无需 pthread_join

信号量:

使用信号量同步,确保线程先读取 conn,主线程再进入下一轮循环

sem_wait(&sem_arg):主线程阻塞,等待子线程读取 conn

sem_post(&sem_arg):子线程读取完 conn 后,通知主线程继续。

4、mmq协议

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90496.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90496.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90496.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

taro+pinia+小程序存储配置持久化

主要通过taro的getStorageSync,setStorageSync实现配置持久化 // https://pinia.esm.dev/introduction.html import { defineStore } from pinia; import { CreditCardDateUtils } from /untils/compute; import { getStorageSync, setStorageSync } from "tarojs/taro&qu…

抖音小游戏好做吗?

从0到1&#xff0c;教你打造爆款抖音小游戏随着移动互联网的发展&#xff0c;抖音小游戏凭借便捷即玩、流量庞大等优势&#xff0c;成为游戏开发者的热门选择。想知道如何开发出一款吸睛又好玩的抖音小游戏吗&#xff1f;下面就为你详细介绍开发流程。一、前期规划明确游戏类型…

Spring Boot 3核心技术面试指南:从迁移升级到云原生实战,9轮技术攻防(含架构解析)

面试官&#xff1a;cc程序员&#xff0c;聊聊Spring Boot 3的那些事儿&#xff1f; 场景背景 互联网大厂云原生架构部面试官老王&#xff0c;与自称"Spring Boot骨灰粉"的cc程序员展开技术对决。 面试过程 第一轮&#xff1a;迁移升级 面试官&#xff1a;Spring Boot…

技术演进中的开发沉思-42 MFC系列:Components 与 ActiveX Controls

点击程序启动时&#xff0c;是不是看过有加载的画面。在VC开发时&#xff0c;可使用 VC 的 Component Gallery&#xff0c;找到 Splash screen 组件&#xff0c;当时觉得组件就是给程序员的暖手宝。一、Component GalleryComponent Gallery 在 VC 里的位置很特别 —— 它藏在 “…

抽象类、接口、枚举

第八天&#xff08;坚持&#xff09;抽象类1.什么是抽象类&#xff0c;作用特点。抽象类是面向对象编程中一种特殊的类&#xff0c;它不能被实例化&#xff0c;主要用于作为其他类的基类&#xff08;父类&#xff09;。抽象类的主要作用是定义公共结构和行为规范&#xff0c;同…

在Ubuntu上使用QEMU仿真运行ARM汇编

ARM汇编一般无法在PC上直接运行&#xff0c;因为ARM和x86架构是不一样的。但是很多时候用ARM开发板是很不方便的&#xff0c;所以能不能直接在PC上仿真运行ARM汇编来练习呢&#xff1f;当然可以&#xff0c;那就是&#xff1a;使用QEMU来仿真。这篇文章我们就来演示下如何在Ubu…

【趣味解读】淘宝登录的前后端交互机制:Cookie-Session 如何保障你的账户安全?

在现代Web应用中&#xff0c;前后端交互是核心功能之一&#xff0c;而用户认证又是其中最关键的部分。本文将以淘宝登录为例&#xff0c;详细解析基于Cookie-Session的前后端交互流程&#xff0c;帮助开发者理解这一常见的安全认证机制。生动理解一下什么是cookie和seesion我们…

贪心算法(基础算法)

1.引言 ok啊&#xff0c;拖更这么长时间也是没有压力&#xff08;doge&#xff09; 不说啥&#xff0c;直接进入正题。 2.概念 这个贪心算法呢&#xff0c;看名字就知道&#xff0c;不就是每个步骤都挑最好的嘛&#xff0c;有啥难的。 这么说的话......其实确实&#xff0c…

简单的mcp 服务示例

参考&#xff1a;https://www.bilibili.com/video/BV1nyVDzaE1x 编写自己的tools.py #### tools.py from pathlib import Path import osbase_dir Path("./test")def read_file(name: str) -> str:"""Return file content. If not exist, return …

DeepSeek-R1+豆包迭代一次完成中国象棋游戏

DeepSeeek- R1生成的棋盘符合中国象棋风&#xff0c;单独豆包无法画好象棋棋盘。提示词&#xff1a;使用html实现中国象棋游戏&#xff0c;要求支持人机对弈。等等&#xff0c;你需要实现完整版本。代码如下&#xff08;电脑走棋不对&#xff09;&#xff1a;<!DOCTYPE html…

阿里通义千问Qwen3深夜升级:架构革新+性能碾压

&#xff08;以下借助 DeepSeek-R1 & Grok3 辅助整理&#xff09; 北京时间2025年7月22日凌晨&#xff0c;阿里云通义千问团队发布了Qwen3旗舰模型的最新更新——Qwen3-235B-A22B-Instruct-2507-FP8。这一更新不仅在性能上实现了突破&#xff0c;还标志着开源大模型技术架…

pip关于缓存的用法

pip cache info查看 pip 缓存的大小&#xff0c;运行示例 Package index page cache location (pip v23.3): c:\users\xxx\appdata\local\pip\cache\http-v2 Package index page cache location (older pips): c:\users\xxx\appdata\local\pip\cache\http Package index page c…

嵌入式学习-(李宏毅)机器学习(2)-day29

十五个作业不同类型的Functions两大类任务一个是Regression&#xff08;回归&#xff09; 一个是 Classification&#xff08;分类&#xff09;一个是给出一个数值&#xff0c;一个是从类别中选择一个还有一类任务 Structured Learning 机器要学会创造文件 机器学习预测频道第…

【C++11】哈希表与无序容器:从概念到应用

文章目录一、前言二、哈希表&#xff08;Hash Table&#xff09;1. 基本概念2. 哈希函数3. 冲突解决方法链地址法&#xff08;Separate Chaining&#xff09;开放寻址法&#xff08;Open Addressing&#xff09;4. 性能分析5. 动态扩容6. 应用场景7. 优缺点二. 无序容器的介绍1…

【智能大数据分析 | 实验二】Spark实验:部署Spark集群

【作者主页】Francek Chen 【专栏介绍】⌈⌈⌈智能大数据分析⌋⌋⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xf…

使用pymongo进行MongoDB的回收

在 PyMongo 中使用 compact 命令进行 MongoDB 碎片回收的完整操作指南如下&#xff1a; 一、核心执行方法 from pymongo import MongoClient import time# 1. 连接到 MongoDB 实例 client MongoClient("mongodb://username:passwordhost:27017/dbname?authSourceadmin&q…

Azure DevOps 使用服务主体配置自托管代理 (Self-hosted Agent) 配置指南

Azure DevOps 使用服务主体配置自托管代理配置指南1. 概述2. 在 Azure AD 中创建服务主体 (SP)3. 授予 Azure DevOps 权限3.1. 组织层级&#xff1a;用户身份与访问级别3.2. 组织层级&#xff1a;Agent pools管理员3.3. 在 Linux VM 上安装和配置代理3.4. 启动并设置为系统服务…

Java学习第六十四部分——Nginx

目录 一、前言提要 二、核心特点 三、核心作用 四、架构优势 五、应用场景 六、常用命令 七、性能对比——Nginx vs Apache 八、典型用户 九、配置示例 十、Java应用需配合的配置 十一、性能优化策略 十二、常见问题排查 十三、文件结构配置 十四、总结归纳概述 …

几个常用的Oxygen编辑器插件

Oxygen XML Editor是罗马尼亚的SyncroSoft公司开发的结构化文档编辑和发布软件。 除了Oxygen编辑器带的功能&#xff0c;它还提供了丰富的插件来提供额外的功能来辅助资料开发人员更高效率、更低成本地开发结构化资料。 本文介绍几个比较常用和有用的插件。 - 1 - Git Clie…

基于springboot的软件缺陷管理跟踪平台

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…