11.网络编程

news2024/10/1 19:33:16

1.客户端-服务器

客户端和服务器是进程,不是机器或者主机

2.网络

对于主机,网络只是一种 I/O设备,是数据源和数据接收方
一个插到I/O总线扩展槽的适配器提供了到网络的物理接口
物理上而言,网络是一个按照地理远近组成的层次系统
最底层是 LAN(局域网),最流行的LAN技术是 以太网(Ethernet)
一台主机发送一段位(称为 ),到这个网段的其他任何主机
每个帧包括头部位和数据位的有效载荷
头部位:标识帧的源和目的地址,以及长度
桥接以太网
多个不兼容的局域网可以通过 路由器连接成一个 internet(互联网络)
路由器也能连接高速点到点,称为 WAN(广域网)
互联网络的特性:能由采用完全不同和不兼容技术的各种局域网和广域网组成
通过一层运行在每个主机和路由器的 协议软件,消除不同网络之间的差异
协议软件的能力:
命名机制:每台主机被分配至少1个互联网络地址,唯一标识这台主机
传送机制:把数据位捆扎成 (不连续的片)
包由包头和有效载荷组成
包头包括包的大小、源主机和目的主机的地址
有效载荷包括从源主机发出的数据位
传送数据的实例:
(1)主机A的客户端进行系统调用,从客户端的虚拟地址复制数据到内核缓冲区
(2)协议软件创建LAN1的帧( 封装)
互联网络包头寻址到主机B,LAN1帧头寻址到路由器
互联网络包的有效载荷是实际的用户数据,LAN1帧的有效载荷是一个互联网络包
(3)LAN1适配器复制帧到网络
(4)路由器的LAN1适配器从电缆上读取帧,并传送到协议软件
(5)路由器从互联网络包头提取目的互联网络地址,用它作为路由表的索引。
路由器剥落旧的LAN1的帧头,加上主机B的LAN2帧头,把帧传送到适配器
(6)路由器的LAN2适配器复制帧到网络
(7)主机B的适配器从电缆读取帧,并传送到协议软件
(8)主机B的协议软件剥落包头和帧头。
服务器进行系统调用时,协议软件将得到的数据复制到服务器的虚拟地址空间

3.全球IP因特网

每台因特网主机都运行实现 TCP/IP协议(传输控制协议/互联网络协议)的软件
TCP/IP实际上是一个协议族,其中每一个都提供不同的功能
把因特网看成一个世界范围的主机集合:
主机被映射为一组32位的IP地址
这组IP地址被映射成一组称为因特网域名的标识符
主机的进程通过连接和其他主机的进程通信
TCP/IP为任意整数数据项定义了统一的网络字节顺序(大端字节顺序)
IP地址通常以 点分十进制表示法表示,如128.2.194.242
因特网客户端和服务器通信时使用IP地址
域名:cmu.edu
数学角度可以认为每条主机条目是一个域名和IP地址的等价类

4.套接字接口

从Linux的内核来看, 套接字是通信、连接的一个端点
从Linux的层序来看,套接字是有相应描述符的打开文件
用“地址:端口”表示
一个连接由两端的套接字地址唯一确定,这对地址称为 套接字对,以元组表示
(cliaddr:cliport, servaddr:servport)
套接字的地址结构
socket函数:客户端通过socket建立与服务器的连接
服务器用bind、listen、accept建立与客户端的连接
bind函数:告诉内核,联系服务器套接地址和套接字描述符
listen函数:告诉内核,描述符是被服务器使用的,而不是客户端
客户端是发起连接请求的主动实体,服务器是被动实体
默认情况下,内核任务socket创建的描述符对应主动套接字,存在于客户端
listen将主动套接字转化为监听套接字,可以接受来自客户端的连接请求
accept函数:服务器通过accept等待来自客户端的连接请求
监听描述符:作为客户端连接请求的一个端点,通常被创建一次,存在于服务器的整个生命周期
已连接描述符:客户端与服务器连接的一个端点,每次服务器接受连接请求时都会创建,只存在于服务器为一个客户端服务的过程中
区分二者,可以建立 并发服务器,同时处理许多客户端连接
每次一个连接请求到达监听描述符,可以派生一个新的进程,通过已连接描述符与客户端连接
getaddrinfo函数:将主机名、主机地址、服务名、端口号字符串转化为套接字地址结构
返回一个指向addrinfo结构的链表
getnameinfo函数:将套接字地址结构转化为主机和服务名字符串
套接字接口的辅助函数
open_clientfd函数:客户端调用,以建立与服务器的连接
open_listenfd函数:服务器创建一个监听描述符,准备接收连接请求
迭代服务器:一次只能处理一个客户端,一次一个地在客户端间迭代
并发服务器

5.Web服务器

Web客户端和服务器之间的交互通过一个基于文本的应用级协议,即 HTTP协议(超文本传输协议)
Web的内容通过 HTML语言(超文本标记语言)编写
Web客户端,即浏览器
超链接(指针)
Web服务器向客户端提供的内容:
磁盘文件称为静态内容
运行时可执行文件产生的输出称为动态内容
这些文件中的每一个都有一个唯一的名字,称为 URL(通用资源定位符)
“?”分隔文件名和参数,“&”分隔参数和参数
https://www.baidu.com/s?ie=UTF-8&wd=hello&tn=78000241_13_hao_pg
客户端使用前缀,来决定与哪类服务器联系、服务器在哪里、监听的端口号
http://www/google.com:80
服务器使用后缀,来发现文件系统中的文件,并确定请求的是静态内容还是动态内容
/index.html
浏览器在URL后添加缺失的"/",并传递给服务器,服务器又把"/"扩展到某个默认的文件名
HTTP事务:
HTTP请求
5:请求行
GET方法指导服务器生成和返回URI(统一资源标识符)(相应URL的后缀)
6:请求报头
代理缓存会使用Host请求报头,这个代理缓存有时作为浏览器和管理被请求文件的原始服务器的中介
客户端和原始服务器之间,可以有多个代理,即代理链
7:空的文本行,终止报头列表,并指示服务器发送被请求的HTML文件
HTTP响应:
8:响应行
9~13:响应报头
14:空的文本行
15~17:响应主体
CGI(通用网关接口):
客户端将程序参数传递给服务器
服务器将参数传递给子进程
服务器将其他信息传递给子进程
子进程将输出发送到哪里

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Arduino Uno构建一个巡线机器人

使用Arduino Uno构建一个巡线机器人 原文 MX 巡线机器人(**LFR)**是一种简单的自主引导机器人,它遵循在地面上绘制的线来检测白色表面上的暗线或黑暗表面上的白线。在本教程中,使用 Arduino Uno 和一些易于访问的组件构建黑线跟…

动态规划——01背包,完全背包,力扣题型讲解

目录 背包问题 01背包及基础 压缩空间(一维dp滚动数组) 416.分割等和子集 1049.最后一块石头的重量 494.目标和 474.一和零 完全背包 理论基础 518.零钱兑换 Ⅱ 377.组合总和 Ⅳ 70.爬楼梯(n阶,完全背包解法&#xff0…

邻桌为何一天就学完了SQL基础语法,数据分析必学的SQL,满满硬货

因为开学原因,导致好久没有更新博客了,谁家大学生一周五天早八, 今天这篇分享数据库操作和 SQL。 SQL 全称是 Structured Query Language,翻译后就是结构化查询语言,是一种数据库查询和程序设计语言,用于…

SpringSecurity学习(三)自定义数据源、前后端分离案例

文章目录一、自定义数据源1. 认证流程与原理分析AuthenticationManager、ProviderManager、AuthenticationProvider三者关系2. 全局配置AuthenticationManager方式由于WebSecurityConfigurerAdapter过期,我们使用以下写法:3. 编码3.1 创建数据库表与插入…

一张图搞定研发团队管理全景图实例

研发团队往往是公司的生命力“源泉”但是研发团队的管理,往往都会“极端化”:※要不然极端的管理,导致创新力下降;※要不然极端的不管理,导致创新的方向太多,蔓延生长,没有边界,企业…

LearnOpenGL-光照-1.颜色

本人刚学OpenGL不久且自学,文中定有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/LearnOpenGLProject 文章目录颜色OpenGL代码例子颜色 物体颜色简介 我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有…

C++ Primer Plus 第6版 读书笔记(5)第5章 循环和关系表达式

第5章 循环和关系表达式 本章内容包括&#xff1a;for 循环。表达式和语句。递增运算符和递减运算符&#xff1a;和−−。组合赋值运算符。复合语句&#xff08;语句块&#xff09;。逗号运算符。关系运算符&#xff1a;>、>、 、<、<和!。while 循环。typedef 工…

java怎么写接口,java开发api接口教程

在大家的工作中&#xff0c;经常写界面。 而且&#xff0c;最常用的是http接口。 但是&#xff0c;对于初学者Java工作人员来说&#xff0c;写http界面还很难。 那么&#xff0c;用实例来说明吧。 一、建设项目 首先&#xff0c;生成SpringBoot项目。 省略如何构建此处&#x…

proteus中仿真arduino驱动模拟器件(蜂鸣器继电器电机)

模拟器件如蜂鸣器、继电器、直流电机等在arduino电路中&#xff0c;如果我们接在数字管脚上来驱动往往可能因为驱动电流不够而达不到预期效果&#xff0c;或者没有动作或者没有动静。这篇博文我们专门来讨论一下如何驱动他们。 文章目录一、典型电路1、蜂蜜器(1)蜂鸣器的种类:(…

tun驱动之write

tun的write执行类型下面的代码 int fd open("/dev/net/tun", O_RDWR) write(fd, buf, len); 首先要明确一点&#xff0c;向tun驱动写的数据&#xff0c;最后会进入网络协议栈&#xff0c;相当于外部的数据通过网卡进入网络协议栈。所以写入tun驱动的数据&#xff0…

LSTM网络:一种强大的时序数据建模工具

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

32位Ubuntu系统安装visual studio code

Step.01 下载vscode安装包 vscode自1.36版本后停止支持32位linux系统&#xff0c;所以要使用<1.36版本。1.33版本下载地址&#xff1a; Visual Studio Code March 2019See what is new in the Visual Studio Code March 2019 Release (1.33)https://code.visualstudio.com…

nvm的使用

nvm工具 nvm是什么nvm下载与安装nvm的基本使用 1、nvm介绍 1.1、基于node的开发 在介绍nvm之前&#xff0c;先介绍下前端开发中关于node的使用。目前前端不管是基于vue或者react框架的开发&#xff0c;都是基于node环境下&#xff0c;进行包的管理与开发的。而不同项目组&a…

work-notes(23):结合typora、git、gitee实现云存储笔记完成的操作过程

时间&#xff1a;2023-03-07 文章目录摘要一、下载 typora二、安装 Git三、创建连接远程仓库四、使用 Git 上传到远程仓库五、到gitee上查看总结摘要 由于很想找一个好用&#xff0c;又有云存储的笔记软件。之前用过 有道笔记&#xff08;还行&#xff0c;量大了难找&#xff…

「MySQL进阶」为什么MySQL用B+树做索引而不用二叉查找树、平衡二叉树、B树

「MySQL进阶」为什么MySQL用B树做索引而不用二叉查找树、平衡二叉树、B树 文章目录「MySQL进阶」为什么MySQL用B树做索引而不用二叉查找树、平衡二叉树、B树一、概述二、二叉查找树三、平衡二叉树四、B树五、B树六、聚集索引和非聚集索引七、利用聚集索引和非聚集索引查找数据利…

剑指 Offer 67 把字符串转换成整数

摘要 面试题67. 把字符串转换成整数 一、字符串解析 根据题意&#xff0c;有以下四种字符需要考虑&#xff1a; 首部空格&#xff1a; 删除之即可&#xff1b;符号位&#xff1a;三种情况&#xff0c;即 , − , 无符号"&#xff1b;新建一个变量保存符号位&#xff0…

螯合剂p-SCN-Bn-TCMC,282097-63-6,双功能配体化合物应用于光学成像应用

p-SCN-Bn-TCMC 反应特点&#xff1a;p-SCN-Bn-TCMC属于双功能配体是螯合剂&#xff0c;也具有共价连接到生物靶向载体&#xff08;如抗体、肽和蛋白质&#xff09;的反应位点。应用于核医学、MRI和光学成像应用。西安凯新生物科技有限公司供应的杂环化合物及其衍生物可制作为具…

消息队列理解

为什么使用消息队列 使⽤消息队列主要是为了&#xff1a; 减少响应所需时间和削峰。降低系统耦合性&#xff08;解耦/提升系统可扩展性&#xff09;。 当我们不使⽤消息队列的时候&#xff0c;所有的⽤户的请求会直接落到服务器&#xff0c;然后通过数据库或者 缓存响应。假…

GPU是什么

近期ChatGPT十分火爆&#xff0c;随之而来的是M国开始禁售高端GPU显卡。M国想通过禁售GPU显卡的方式阻挡中国在AI领域的发展。 GPU是什么&#xff1f;GPU&#xff08;英语&#xff1a;Graphics Processing Unit&#xff0c;缩写&#xff1a;GPU&#xff09;是显卡的“大脑”&am…

给比特币“雕花” 增值还是累赘?

比特币网络也能发NFT了&#xff0c;大玩家快速入场。3月6日&#xff0c;Yuga Labs开启了TwelveFold拍卖会&#xff0c;该项目是Yuga Labs在比特币区块链网络上发行的首个NFT合集&#xff0c;内含300个艺术品。 在没有智能合约的比特币网络造NFT&#xff0c;没那么友好。但Web3…