网络编程知识
网络编程知识
一.网络七层模型
OSI模型:
OSI 模型(Open System Interconnection model)是一个由国际标准化组织提出的概念模型,试图提供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的接口。了解 OSI 模型有助于理解实际上互联网络的工业标准—— TCP / IP 协议(族)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-No810uUq-1690518028857)(C:\Users\xie19\Pictures\Camera Roll\屏幕截图 2023-07-13 121801.png)]
由上至下,对七个层的应用做简单的介绍:
应用层:规定数据的传输协议
常见的应用层协议:
协议 | 端口 | 说明 |
---|---|---|
HTTP | 80 | 超文本传输协议 |
HTTPS | 443 | HTTP+SSL,HTTP的安全版 |
FTP | 20,21,990 | 文本传输协议 |
telnet | 23 | 远程终端协议 |
表示层:应用层数据编码和转化,以确保以一个系统应用层发送的信息 可以被另一个系统应用层识别;
EG: 解决不同系统之间的通信,比如Linux下的QQ和Windows下的QQ可以通信
会话层:
建立一个连接(自动的手机信息、自动的网络寻址)
传输层:
每一个应用程序都会在网卡注册一个端口号,该层就是端口与端口的通信!常用的(TCP/IP)协议;
网络层:
此处需要确定计算机的位置,怎么确定?IPv4,IPv6!
网络链路层
规定了0和1的分包形式,确定了网络数据包的形式;
物理层
物理层负责最后将信息编码成电流脉冲或其它信号用于网上传输
下面的图表显示了常见的不同的TCP/IP和其他的协议在最初OSI模型中的位置
协议 | 位置 |
---|---|
HTTP、FTP、 telnet、 SIP、 SSH | 应用层 |
NCP、AFP | 表示层 |
SSH、BSD socket | 会话层 |
TCP、UDP | 传输层 |
IP | 网络层 |
以太网 | 数据链路层 |
光纤、无线电 | 物理层 |
由于OSI是一个理想的模型,因此一般网络系统只涉及其中的几层,很少有系统能够具有所有的7层,并完全遵循它的规定。
二、三次握手
1.第一次握手
客户端发送 SYN 包( syn = j )到服务器,并进入 SYN_SEND 状态,等待服务器确认。
j 是一个随机数,通过看服务器返回的 j + 1 是否正确,判断第一次握手服务器是否正确响应
2.第二次握手
服务器确认客户的 SYN 包,同时发送 ACK 包( ack = j + 1 )作为回应;
自己也发送一个 SYN 包( syn = k ),共两个包,此时服务器进入 **SYN_RECV**** 状态;
k 也是一个随机数,也是用于看客户端返回的 k+1 是否正确,判断第二次握手客户端是否正确响应。
3.第三次握手
客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK ( ack = k + 1 ),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
三、socket,http,TCP
有一篇博文写的很好
http://t.csdn.cn/N50wA
四、http协议
1.http协议得特性
http协议是建立在TCP/IP协议之上应用层协议,默认端口为80或者8080
http协议的的特点是无状态,短连接
2.http协议得请求
利用抓包工具httpwatch可以获取报文,多见于前端,后端用于分析数据传输过程中产生的问题
http协议的报文传输的是ASCII码,在TCP/IP协议之上,主要主要分为三部分:
请求行
-
浏览器向服务器发送的,在第一行,包含:.请求方式(GET请求、POST请求).url(网址).http协议版本
GET请求
例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p8HwCbBK-1690518028859)(C:\Users\xie19\Pictures\Camera Roll\18902323239.png)]
请求方式是GET请求,url 携带的参数可见,http协议版本是1.1
POST请求
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x0qXbmnj-1690518028859)(C:\Users\xie19\Pictures\Camera Roll\555555.png)]
请求方式为POST请求,url携带的参数不可见,协议版本是1.1
3.POST与GET的区别
1.本质区别
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应200(返回数据);
对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送 data,服务器响应200 ok(返回数据)。200,一般以2开头的为成功,以4开头是失败
2.具体区别
2.1.url的参数是否可见
get请求:url携带的参数可见
var url = 'http://192.168.1.40:8080/v1/sea?page=1&per_page=10' + 'search=' + escape(str)
post请求:url 携带的参数不可见(参数被隐藏,可以通过抓包)
2.2参数传递方式
get,通过请求行拼接url进行传递参数
post,通过请求主体传输参数
3.缓存性
get 请求是可以缓存的
post 请求不可以缓存
4.页面后退的反应
get 请求页面后退时,不产生影响(因为有缓存)
post 请求页面后退时,会重新提交请求(没有缓存)
5.传输数据的大小
get 一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)
post 请求传输数据的大小根据 php.ini 配置文件设定,也可以无限大
6.安全性
这个也是最不好分析的,原则上 post 肯定要比 get 安全,毕竟传输参数时 url 不可见,但也挡不住部分人闲的没事在那抓包玩。安全性个人觉得是没多大区别的,对传递的参数进行加密,其实都一样。
7.请求头
浏览器向服务器发送一些状态数据,标识数据等等
一个信息一行,包括信息名:信息值,按行分隔。
User-Agent: firefox//表示发送请求的浏览器(请求代理端)是firefox
Host: shop.100.com//表示请求的主机域名(基于域名的虚拟主机就是靠这个头判断的)
Cookie:name=itcast//浏览器携带的cookie数据。
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
注意,请求头信息,需要使用一个空行结束!
8.请求主体
请求代理端向服务器端,发送的请求数据!
典型的就是POST形式发送的表单数据!
get请求,没有请求主体部分!get数据是在请求行中的url上进行传递的!
4.http协议的响应
HTTP/1.1 200 ok
Date: Tue,19 Nov 2013 03:08:55 GMT
Server: Apache/2. 2.22 (Win32) PHP/5.3. 13
X- -Powered -By: PHP/5. 3.13
Content-Length: 16
Content- Type: text/html
响应行:
响应行包括:协议版本、状态码、状态消息。典型的:
(以1开头)1xx:消息
(以2开头)2xx:成功
(以3开头)3xx:请求被重定向
(以4开头)4xx:浏览器端错误
(以5开头)5xx:服务器端错误
响应头:
Date:响应的时间。GMT时间!
Content-Length: 响应主体数据的长度!
Content-Type: text/html :内容类型:告知浏览器接下来发送的响应主体数据是什么格式!
响应主体:
主要的响应数据,在浏览器的主体区域显示的数据都是相应主体!(前端人员通过html和css技术实现的排版,对于C语言来说拿到的就是一段ASCII码、一段字符串)
注意,每行,包括响应行和响应头,都需要一个 r\n
结尾
五、HTTPS协议
1.简介与原理
http协议是明文传输的,因此很容易被截取和解析,泄漏个人数据。https协议是在 http 和 tcp 之间多添加了一层加密SSL,进行身份验证和数据加密。
2、密码学基础
明文与密文
明文: 明文指的是未被加密过的原始数据。
密文: 明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。
密钥
密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。
密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。
对称加密(私钥+私钥)
*对称加密*:对称加密又叫做私钥加密,即信息的发送方和接收方使用****同一个密钥****去加密和解密数据。
对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有****DES*、3DES、TDEA、Blowfish、*RC5****和IDEA。
其加密过程如下:明文 + 加密算法 + 私钥 => 密文
解密过程如下 : 密文 + 解密算法 + 私钥 => 明文
对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。
其加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因。
由于对称加密的算法是公开的,所以一旦私钥被泄露,那么密文就很容易被破解,所以对称加密的缺点是密钥安全管理困难。
非对称加密(公钥+私钥)
*非对称加密*:非对称加密也叫做公钥加密。
非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
(1)被公钥加密过的密文只能被私钥解密,过程如下:
明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文
(2)被私钥加密过的密文只能被公钥解密,过程如下:
明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文
由于加密和解密使用了两个不同的密钥,这就是非对称加密“非对称”的原因。
非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
在非对称加密中使用的主要算法有:*RSA*、Elgamal、Rabin、D-H、ECC(椭圆曲线加密算法)等。
这些算法不用亲自去写,已经成为一种标准,有现成的库去调用实现即可。
六.HTTPS相对于HTTP优缺点
优点:正确率更高,安全性更强
使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器 ;
HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性 。
HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本 。
缺点:效率低,成本高
相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。
HTTPS 协议还会影响缓存,增加数据开销和功耗 。
HTTPS 协议的安全是有范围 中间人攻击 伪造证书
http:安全系数不高,但是效率高,成本低
HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器 ;
HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性 。
HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本 。
缺点:效率低,成本高
相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。
HTTPS 协议还会影响缓存,增加数据开销和功耗 。
HTTPS 协议的安全是有范围 中间人攻击 伪造证书
http:安全系数不高,但是效率高,成本低
相关文章:

网络编程知识
网络编程知识 一.网络七层模型 OSI模型: OSI 模型(Open System Interconnection model)是一个由国际标准化组织􏰁提出的概念模型,试图提供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。它将计算机网络体系结构划分为七层…...

线性神经网路——线性回归随笔【深度学习】【PyTorch】【d2l】
文章目录 3.1、线性回归3.1.1、PyTorch 从零实现线性回归3.1.2、简单实现线性回归 3.1、线性回归 线性回归是显式解,深度学习中绝大多数遇到的都是隐式解。 3.1.1、PyTorch 从零实现线性回归 %matplotlib inline import random import torch #d2l库中的torch模块&a…...

js实现多种按钮
你可以使用JavaScript来实现多种类型的按钮,以下是几个常见的示例: 普通按钮(Normal Button): <button>Click me</button> 带图标的按钮(Button with Icon): <bu…...

getopt函数(未更新完)
2023年7月28日,周五上午 这是我目前碰到过的比较复杂的函数之一, 为了彻底弄懂这个函数,我花了几个小时。 为了更好的说明这个函数,之后我可能会录制讲解视频并上传到B站, 如果我上传到B站,我会在文章添…...

SpringCloud学习路线(9)——服务异步通讯RabbitMQ
一、初见MQ (一)什么是MQ? MQ(MessageQueue),意思是消息队列,也就是事件驱动架构中的Broker。 (二)同步调用 1、概念: 同步调用是指,某一服务…...

postcss-pxtorem适配插件动态配置rootValue(根据文件路径名称,动态改变vue.config里配置的值)
项目背景:一个项目里有两个分辨率的设计稿(1920和2400),不能拆开来打包 参考: 是参考vant插件:移动端Vant组件库rem适配下大小异常的解决方案:https://github.com/youzan/vant/issues/1181 说明: 因为vue.c…...

代码随想录算法训练营第二十三天 | 额外题目系列
额外题目 1365. 有多少小于当前数字的数字借着本题,学习一下各种排序未看解答自己编写的青春版重点代码随想录的代码我的代码(当天晚上理解后自己编写) 941.有效的山脉数组未看解答自己编写的青春版重点代码随想录的代码我的代码(当天晚上理解后自己编写) 1207. 独一…...

UiAutomator
运行Espresso和UI Automator测试时要使用模拟器。国内手机的ROM大多进行过修改,可能加入很多限制,导致测试无法正常运行。 Espresso只支持一个活动内部交互行为的测试。跨越多个活动、多个应用的场景需要使用UI Automator。使用Espresso和UI Automator的…...

stm32标准库开发常用函数的使用和代码说明
文章目录 GPIO(General Purpose Input/Output)NVIC(Nested Vectored Interrupt Controller)DMA(Direct Memory Access)USART(Universal Synchronous/Asynchronous Receiver/Transmitter…...

有关合泰BA45F5260中断的思考
最近看前辈写的代码,发现这样一段代码: #ifdef SUPPORT_RF_NET_FUNCTION if(UART_INT_is_L()) { TmrInsertTimer(eTmrHdlUartRxDelay,TMR_PERIOD(2000),NULL); break; } #endif 其中UART_INT_is_L&am…...

Numpy-算数函数与数学函数
⛳算数函数 如果参与运算的两个对象都是ndarray,并且形状相同,那么会对位彼此之间进 第 30 页 行( - * /)运算。NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和divide()。 …...

Nginx在springboot中起到的作用
面试时这样回答: 在Spring Boot项目中使用Nginx可以有以下用途: 1. 反向代理:Nginx可以作为反向代理服务器,将外部请求转发到后端的Spring Boot应用,并可以实现负载均衡、高可用、缓存等功能,提高系统的性…...

12.(开发工具篇vscode+git)vscode 不能识别npm命令
1:vscode 不能识别npm命令 问题描述: 解决方式: (1)右击VSCode图标,选择以管理员身份运行; (2)在终端中执行get-ExecutionPolicy,显示Restrictedÿ…...

如何在MacBook上彻底删除mysql
好久以前安装过,但是现在配置mysql一直出错,索性全部删掉重新配置。 一、停止MySQL服务 首先,请确保 MySQL 服务器已经停止运行,以免影响后续的删除操作。 sudo /usr/local/mysql/support-files/mysql.server stop如果你输入之…...

web攻击面试|网络渗透面试(一)
Web攻击面试大纲 常见Web攻击类型 1.1 SQL注入攻击 1.2 XSS攻击 1.3 CSRF攻击 1.4 命令注入攻击SQL注入攻击 2.1 基本概念 2.2 攻击原理 2.3 防御措施XSS攻击 3.1 基本概念 3.2 攻击原理 3.3 防御措施CSRF攻击 4.1 基本概念 4.2 攻击原理 4.3 防御措施命令注入攻击 5.1 基本概…...

VBA操作WORD(六)另存为不含宏的文档
Sub 另存为不含宏的文档()Application.DisplayAlerts False Application.ScreenUpdating FalseDim oDoc As DocumentSet oDoc Word.ActiveDocumentDim oRng As RangeSet oRng oDoc.ContentDim sPath As String默认存储路径,当前用户桌面,注释掉的是当…...

分享69个Java源码,总有一款适合您
Java源码 分享69个Java源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。 源码下载链接: https://pan.baidu.com/s/1ZgbJhMNwIyFyqFzHsDdL5w 提取码&a…...

《cool! autodistill帮你标注数据训练yolov8模型》学习笔记
《cool! autodistill帮你标注数据训练yolov8模型》 Summary Autodistill是一个用于自动标注数据训练边缘模型的工具。 Highlights 💡 Autodistill由Robotflow推出,用于训练建立部署计算机视觉模型。💻 通过使用大模型自动标注和训练小模型…...

Rust vs Go:常用语法对比(十)
题图来自 Rust vs. Golang: Which One is Better?[1] 182. Quine program Output the source of the program. 输出程序的源代码 package mainimport "fmt"func main() { fmt.Printf("%s%c%s%c\n", s, 0x60, s, 0x60)}var s package mainimport "fm…...

SliverPersistentHeader组件 实现Flutter吸顶效果
效果: 20230723-212152-73_Trim 代码: import package:flutter/cupertino.dart; import package:flutter/material.dart;class StickHeaderPage extends StatefulWidget {overrideState<StatefulWidget> createState() {// TODO: implement creat…...

Nginx性能优化配置
一、全局优化 # 工作进程数 worker_processes auto; # 建议 CPU核心数|CPU线程数# 最大支持的连接(open-file)数量;最大值受限于 Linux open files (ulimit -n) # 建议公式:worker_rlimit_nofile > worker_processes * worker_connections…...

杭州多校2023“钉耙编程”中国大学生算法设计超级联赛(4)
1003Simple Set Problem 首先将元素的值 x 以及所属集合的编号 y 作为二元组 (x,y) 存入数组,然后按照 x 升序排列, 之后使用双指针扫描数组(尺取法),当区间内出现了所有编号时更新答案的最小值, #includ…...

音视频入门之音频采集、编码、播放
作者:花海blog 今天我们学习音频的采集、编码、生成文件、转码等操作,我们生成三种格式的文件格式,pcm、wav、aac 三种格式,并且我们用 AudioStack 来播放音频,最后我们播放这个音频。 使用 AudioRecord 实现录音生成…...

在 Linux 系统中,如何发起POST/GET请求
在 Linux 系统中,可以使用命令行工具 curl 或者 wget 来发送 POST 请求。这两个工具都是非常常用的命令行工具,可以通过命令行直接发送 HTTP 请求。 1. 使用 curl 发送 POST 请求: curl -X POST -H "Content-Type: application/json&q…...

文心一言大数据模型-文心千帆大模型平台
官网: 文心千帆大模型平台 (baidu.com) 文心千帆大模型 (baidu.com) 模型优势 1、模型效果优:所需标注数据少,在各场景上的效果处于业界领先水平 2、生成能力强:拥有丰富的AI内容生成(AIGC)能力 3、应用…...

django学习笔记(1)
django创建项目 先创建一个文件夹用来放django的项目,我这里是My_Django_it 之后打开到该文件下,并用下面的指令来创建myDjango1项目 D:\>cd My_Django_itD:\My_Django_it>"D:\zzu_it\Django_learn\Scripts\django-admin.exe" startpr…...

postgresql主从搭建
postgresql主从搭建 主从服务器分别安装好postgresql 主库 创建数据库热备帐号replica,密码123456为例,则执行以下命令 create role replica login replication encrypted password 123456;打开 pg_hba.conf 配置文件,设置 replica 用户白…...

将Parasoft和ChatGPT相结合会如何?
ChatGPT是2023年最热门的话题之一,是OpenAI训练的语言模型。它能够理解和生成自然语言文本,并接受过大量数据的训练,包括用各种编程语言编写的许多开源项目的源代码。 软件开发人员可以利用大量的知识库来协助他们的工作,因为它具…...

Go text/template详解:使用指南与最佳实践
I. 简介 A. 什么是 Go text/template Go text/template 是 Go 语言标准库中的一个模板引擎,用于生成文本输出。它使用类似于 HTML 的模板语言,可以将数据和模板结合起来,生成最终的文本输出。 B. Go text/template 的优点 Go text/templa…...

Stable Diffusion在各种显卡上的加速方式测试,最高可以提速211.2%
Stable Diffusion是一种基于扩散模型的图像生成技术,能够从文本生成高质量的图像,适用于CG,插图和高分辨率壁纸等领域。 但是它计算过程复杂,使得它的生成速度较慢。所以研究人员就创造了各种提高其速度的方式,比如Xf…...