网络编程复习

WEB编程

Http

Http

超文本传输协议,是一个基于请求和响应的、无状态的应用层协议,基于Tcp协议传输数据(明文),互联网上应用最广泛的一种网络协议,所以的WWW文件都必须遵守该协议,其目的是将超文件标记语言(HTML)文档是Web服务器传输到客户端的浏览器上。

Http1.0的缺陷

影响Http网络请求的因素主要有两个:带宽和延迟。
1、带宽
随着网路基础建设的提升,带宽对网络的请求的影响已经微乎其微了。
2、延迟
(1)浏览器阻塞:浏览器会因为一些原因阻塞请求。浏览器对于同一域名。同时只能有4个连接(和浏览器的内核有关),当超过浏览器最大的连接数限制时,后续的请求就会被阻塞。
(2)DNS查询:浏览器需要知道服务器的Ip才能建立连接。通常可以使用DNS缓冲来减少时间。
(3)建立连接:Http协议的数据传输是基于Tcp的,Tcp在使用时需要通过三次握手来建立连接,之后才能传输数据,而且Http1.0的连接是短连接,即一个连接只处理一个请求,这将导致每次请求都需要重新建立连接。三次握手在高延迟的场景下影响较为明显(网络情况不好可能会导致三次连接建立失败),慢启动则对文件的请求影响较大。

Http1.0、Http1.1和Http2.0

表1 Http发展的过程

版本产生时间内容现状
Http0.91991不涉及数据包的传输,规定客户端和服务器之间的通信格式,只能使用Get请求没有作为正式的标准
Http1.01996传输内容格式不限制,增加post、head命令正式作为标准
Http1.11997长连接、节约带宽、Host域、管道机制、分块传输编码2015年前使用广泛
Http2.02015多路复用、服务器推送、头信息压缩、二进制协议逐渐覆盖市场
Http1.0和Http1.1

(1)缓冲处理:Http1.1提供了更多可供选择的缓冲头来控制缓冲策略。
(2)带宽优化以及网络连接的使用:当浏览一个网页时,在Http1.0会一次将网页的所有数据全部发送给客户端,这样就存在一定的浪费带宽的现象,因为我们不是每次都回去浏览网页全部内容;而在Http1.1中是先将数据的一部分呢发送过来,然后当用户再次请求时再次发送一部分。
(3)错误通知的管理:Http1.1新增了24个错误状态响应码。
(4)Host头的处理:在Http中认为每个服务器都绑定一个唯一的IP地址,所以在url并没有传递主机名。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且共享一个IP地址,所以在Http1.1中新增了Host头,用于指定请求服务器的域名/ip地址和端口号。
(5)长连接:Http1.1支持长连接和请求的流水线处理,在一个Tcp连接上可以传送多个Http请求和响应,减少了建立和关闭连接的消耗和延迟。
Http1.x存在的问题
(1)明文传输:无论时在Http1.0,还是Http1.1中数据时,所以传输的内容都是明文。
(2)身份认证:客户端和服务器都无法验证对方的身份。
(3)建立连接:在Http1.x中在传输数据时,每次都需要建立连接(长连接和短链接),这会增加一定的延迟时间,尤其在移动端更为突出。
(4)Http1.x在使用时,header里携带的内容过大,在一定的程序上增加了传输的成本,而且每次请求header的数据内容基本是固定的,增加了移动端用户的流量。
(5)Keep—alive:Http1.1中增加了Kee-alive来保持长连接,让一个连接上可以处理多个请求和响应,但keep-alive的使用任然会给服务器带来一定的压力。例如:图片存放网站,连接在图片请求后并不会被立即释放,保持了一段不必要的连接时间。
(6)线程阻塞:在同一时间,同一域名的请求有一定的数量限制,超过限制数目会被阻塞。

Https

超文本传输安全协议,是以安全为目标的Http,简单来说就是Http的安全版。Https是一种通过计算机网络进行安全通信的传输协议,经由Http进行通信,利用SSL/TLS建立安全信道,加密数据报。Https使用的主要作用:
(1)提供对网站服务器的身份认证。
(2)保护交换数据的隐私于完整性。
(3)对数据进行加密,建立信息安全通道,保证传输过程中的数据安全。

SSL和TLs

安全套接层,工作在Http之下Tcp之上,是居于Http标准对Tcp传输数据时进行加密,Https可以理解成Http+ssl。在ssl更新到3.0时,IETFf对ssl3.0进行标准化,并添加了少数机制,并将这套协议命名为TLS(安全传输层协议)

加密算法

(1)对称加密:加密和解密用的是同样的“钥匙”。
(2)非对称加密:加密和解密用的是不同的“钥匙”。
(3)混合策略:使用对称加密和非对称加密混合的方式。
(4)数字签名:
(5)数字证书
对称加密:
A生成一个密钥,然后将密钥发送给B,之后A、B就可以使用这个密钥对消息进行加密和解密。发送消息时对需要发送的消息使用密钥进行加密,接受方再接收到消息后使用密钥对消息解密。
非对称加密:
公钥和密钥是一对,使用公钥加密的消息只能通过对应的密钥进行解密,使用密钥加密的消息只有通过对应的公钥才能加密。
A生成一对密钥,然后将其中的一把作为公钥发送给B,之后A使用自己的密钥对消息进行加密/解密。B使用公钥对消息进行加密/加密。
混合策略:
Https采用的是对称加密和非对称加密的混合加密方式:
(1)服务端将非对称加密的公钥发送给客户端。
(2)客户端使用公钥对对称加密的密钥进行加密,发送给服务器。
(3)服务器使用非对称加密的密钥的对数据进行解密取出对称加密使用的密钥。
(4)客户端和服务器利用对称加密的密钥对传输的数据进行加密/解密。
数字签名:
数字签名是防止数据被修改的技术,即使用密钥加密后的密文称为数字签名。简单来说就是先使用摘要算法计算出报文摘要,使用密钥对报文摘要进行加密,连同数据一起发送个接收方,接收方收到之后使用公钥数据解密,之后使用相同摘要算法对报文进行摘要计算,判断数据有没有被修改。
数字证书:
上述加密的方式存在一个问题,就是无法确定公钥的发送者。即无法判断公钥是真正的服务器发送的还是第三方冒充的,数字证书就是解决这个问题的,数字证书由一个专门的机构负责。

中间方攻击

中间方攻击

(1)服务器生成一对密钥,公司人员会拿着公钥去数字认证机构提出申请,数字认证机构在调查公司的身份后,会对这个公钥进行数据签名,并将公钥绑定在公钥证明中并生成数字证书,将这个公钥发送个服务器。
(2)当客户端和服务器进行通信时,服务器将数字证书发送给客户端。客户端使用数字认证机构的公钥,对证书进行验证。如果验证通过则进行通信。通过这样的方式就可以确认公钥的发出人的身份。
但这样做也仅仅时增加了破解的难度,还是没有彻底的解决这个问题,原因是无法确定数组认证机构公钥的发送者。解决这个办法的方法就是使用根证书,客户端提前将服务器颁布的根证书导入,这样就可以保证用户使用的公钥是真正的公钥。

SPDY

SPDY优化了Http1.x的请求延迟,解决了Http1.x的安全性,工作于Http之下ssl之上。具体如下:
(1)降低延迟:SPDY使用多路复用(多个请求共用一个Tcp连接),降低了延迟的同时提高了带宽的利用率。
(2)请求优先级:多路复用带来一个问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个请求设置优先级,这样重要的请求就会优先得到响应。
(3)header压缩:Http1.x中的header很多时候都是重复多余的,选择合适的压缩算法可以减少包的大小和数量。
(4)基于Https的加密协议传输:强制使用Https,提高了传输数据的安全性。
(5)服务端推送:服务器会在客户端请求一部分数据后将其他的必要数据主动推送给客户端,减少了客户端的请求次数。

Http2.0

Http2.0在很多地方和SPDY由很多相似的地方,但也由一定的区别。
Http22.0和SPDY的区别:
(1)Http2.0支持明文Http传输,SPDY强制使用Https。
(2)Http2.0和SPDY采用的消息头压缩算法不同。
Http2.0和Http1.x的区别:
(1)新的二进制格式:Http1.x的解析是基于文本的,而Http2.0的解析是基于二进制的。
(2)多路复用
(3)header压缩
(4)服务端推送
Http1.x和Http2.0连接方式的区别:
(1)Http1.0使用的短连接,建立一个连接,用完就关闭;每次请求都要建立一个连接,延时主要体现在:Tcp连接的建立和慢启动。
(2)Http1.1使用长连接,建立一个连接,多个请求排队等待处理,后面的请求等待前面返回才能被执行,一旦某个请求超时,后续所有的请求只能被阻塞(线头阻塞)。Http1.x对突发性和短时性的Http连接十分的低效(三次握手和慢启动)。
(3)Http2.0使用多路复用,可以在一个连接上同时处理多个请求,各个请求之间互不影响,可以被同时响应,避免了慢启动的过程,提升了Http的性能。

session、cookie

为什么会有session、cookie?

我们知道浏览网页时使用的HTTP协议,而HTTP协议是无状态的,即HTTP不能保存用户的信息,这样就会产生一些问题:不能进行登录验证,即当我们进行网上购物时,需要不停的输入用户名和密码(切换网页时),因为HTTP不会为记录你的这些信息。

cookie

那这个问题该为何解决,这时就产生了cookie:
将用户的信息存储在客户端本地,每次访问同一个域名时,就从本地加载这些信息。这样就很好的解决了需要不停输入用户名和密码的问题。但这样的做法是存在一定的安全问题(cookie文件保存在本地,对用户可见),这时就产生了session。

session(会话)

session机制是一种服务器端机制,服务器使用一种类似散列表的结构来保存信息,session一般用来记录用户的信息。session有生命周期,一般为30分钟(关闭了浏览器就需要重新创建)。

session和cookie的关系"
图1 session和cookie的关系

session和cookie的区别

(1)session数据存放在服务器;cookie数据存放在客户端。
(2)cookie的安全性不是很好(cookie欺骗)。
(3)session有时间的限制。
(4)session可以放在文件、数据库或者是内存中,cookie是保存在本地的文件,一般以域名为文件名。
session的运行依赖于session_ID,而session_ID是存放在cookie中的。

Get和Post

Get和Post的区别?

(1)Get和Post的请求头不一样。
(2)参数的位置不同。Get的参数放在url中,Post的参数放在body中。
(3)Get可以被缓冲,而Post不会被缓冲。
(4)Get可以收藏书签,而Post不能。
(5)Get一般用于获取/查询资源消息,而Post一般用于更新资源信息。
(6)Post相对于Get来说比较安全。
(7)Get请求参数的长度最多1024k,post对请求数据没有限制(和浏览器有关)。

Get和Post的误区

(1)请求参数长度限制

Http协议中并没有对url的长度进行限制,也就是说Get请求参数的长度也是没有限制的,但浏览器和服务器一般会对URL的长度有限制。不同的浏览器对url的长度限制是不同的。

(2)Post比Get安全性高

从url的角度来看Post的安全性是比Get要高一些,因为Get的参数会在url中显示出来,而Post的数据在url中是不可见的。但从传输的角度来说它们都是不安全的,因为Http本身就是不安全的,Http在网络上是明文传输,数据一旦被抓包,很容易被解析。通过HTTPs才能实现安全传输。

<think>好的,我现在需要处理用户关于嵌入式网络编程学习资料和复习要点的查询。首先,我要回顾用户提供的系统级指令和示例,确保回答符合格式要求。用户要求使用中文回答,生成相关问题,并在引用段落末尾添加引用标识。同时,需要结合提供的三个引用内容,虽然这些引用看起来与网络编程关联不大,但需要尽量找到关联点。 首先,分析用户的问题:用户需要查找嵌入式网络编程复习资料和学习笔记。我需要整理相关知识要点,并参考提供的三个引用。引用1提到嵌入式学习路线,包括C语言、单片机、Linux等,可能与网络编程的基础有关。引用2涉及STM32串口通讯,虽然主要是串口,但通讯协议是网络编程的基础之一。引用3提到QT的信号与槽机制,可能在网络应用中有用,比如处理网络事件。 接下来,我需要构建回答的结构。按照用户示例中的“嵌入式系统 网络编程 复习要点”,分几个主要部分,每个部分列出关键点,并尽可能关联引用中的内容。例如,在基础协议部分,可以提到TCP/IP,并引用学习路线中的Linux部分,因为网络编程通常在Linux环境下进行。在开发框架部分,可以提到Socket编程,并结合引用2中的串口通讯,说明不同通讯方式的异同。此外,QT的信号槽机制可用于网络事件处理,引用3中的内容可以作为例子。 需要确保所有数学表达式和公式使用正确的LaTeX格式,但当前主题是网络编程,可能较少涉及数学公式,但如果有,比如校验和计算,需要用$...$或$$...$$。例如,CRC校验可以写成多项式形式:$G(x) = x^{16} + x^{12} + x^5 + 1$。 然后生成相关问题,可能包括网络协议、调试工具、实时系统中的应用、与上位机通信等,结合引用中的上位机入门和QT开发内容。 最后,检查引用标识是否正确添加,例如在提到学习路线时引用[^1],串口通讯引用[^2],QT信号槽引用[^3]。 需要确保回答结构清晰,分点明确,语言自然,符合用户要求的中文回答,并正确应用系统级指令中的格式要求。</think>### 嵌入式系统 网络编程 复习要点 #### 一、基础协议与概念 1. **TCP/IP协议栈分层** 嵌入式网络编程需掌握物理层、数据链路层(如MAC协议)、网络层(IPv4/IPv6)、传输层(TCP/UDP)及应用层协议(HTTP/MQTT等)。TCP面向连接的特性适合可靠性要求高的场景,而UDP适用于实时性优先的传输。 2. **Socket编程基础** - 创建Socket:`int socket(int domain, int type, int protocol);` - 绑定端口:`bind()` - 监听与连接:`listen()`/`accept()`(TCP服务端)或 `connect()`(TCP客户端) - 数据收发:`send()`/`recv()` 或 `write()`/`read()` 3. **数据帧与校验** 嵌入式设备常用CRC校验确保数据完整性,例如CRC-16的多项式为: $$ G(x) = x^{16} + x^{12} + x^5 + 1 $$ --- #### 二、典型开发框架 1. **LwIP协议栈** 轻量级IP协议栈(Lightweight IP)是嵌入式系统常用开源实现,支持ARP、ICMP、DHCP等功能,适合资源受限设备[^2]。 2. **BSD Socket适配** 在FreeRTOS或RT-Thread等实时操作系统中,可通过封装LwIP提供标准Socket API,简化跨平台开发。 3. **事件驱动模型** 使用`select()`或`epoll()`实现多连接管理,结合QT信号槽机制处理异步网络事件: ```cpp connect(socket, SIGNAL(readyRead()), this, SLOT(onDataReceived())); ``` --- #### 三、实战要点 1. **资源优化** - 使用内存池管理网络缓冲区 - 限制并发连接数(如通过`ulimit`调整文件描述符上限) 2. **调试工具** - Wireshark抓包分析协议交互 - `netstat`命令查看端口状态 - 日志输出关键事件(连接建立、数据收发) 3. **安全性设计** - TLS/DTLS加密传输(如mbed TLS库) - 防火墙规则过滤非法IP --- #### 四、学习资源关联 - **嵌入式Linux网络编程**:参考学习路线中Linux部分,结合Socket API实践。 - **与上位机通信**:可通过串口转TCP/IP(如RFC2217)实现混合通讯。 - **QT网络模块**:利用`QTcpSocket`和`QUdpSocket`类快速开发GUI网络应用。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值