技术标签: 加密学 网络 https协议 http协议 TCP-IP
本文以总结的形式,先大体介绍TCP/IP协议整体组成,再择其应用层上的HTTP协议进行详细总结,继而拓展知识点讲解加密学,过渡到HTTPS协议的学习,除去网络知识必备掌握的三次握手、四次挥手,另需了解基于SSL/TLS的握手,也是重要的一个环节。
本文涉及到的知识点如下:
(若想要详细了解TCP三次握手、四次挥手相关知识点,可看此篇博客:
深入浅出之 TCP协议(三次握手与四次挥手、超时重发、流量控制、拥塞控制、与UDP区别))
在正式介绍HTTP网络知识之前,先追其根源—–TCP/IP协议族,通常使用的网络是在TCP/IP协议族的基础上运作的,而HTTP属于它内部的一个子集,所以先了解有关TCP/IP有关知识,为HTTP做铺垫。
(1)协议(protocal)
计算机与网络相互通信,双方必须基于相同的方法,例如由哪一方先发起通信、使用哪种语言进行通信、如何结束通信等都需要事先规定。不同的硬件、OS之间的通信都需要一种规则,就是协议(protocal)。
(2)TCP/IP协议定义
协议中存在各种内容,例如从电缆规格到IP地址的选定方法、双方建立通信的顺序,以及web页面显示需要处理的步骤等。以上这种与互联网相关联的协议集合起来总称为 TCP/IP。(有的说法是TCP/IP是指TCP和IP这两种协议,还有一种说法是TCP/IP是在IP协议的通信过程中使用的协议族的统称)
(3)分层管理
TCP/IP协议族里重要的一点是分层,可分为:应用层、传输层、网络层、数据链路层。
其实层次化是有它的好处,如果互联网只有一个协议统筹,某个地方需要改动时需要将所有部分换掉,而分层之后只需替换变动层即可。每一层也只需考虑自己的任务即可。
TCP/IP协议族内预存了各类通用的应用服务,例如FTP(File Transfer Protocol文件传输协议)和DNS(Domain Name System域名系统)服务就是其中两类,HTTP协议也处于改层。
在传输层有两个性质不同的协议:TCP(Transmission Control Protocol传输控制协议)和UDP(User Data Protocol用户数据报协议)。
与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起作用就是在众多选项内选择一条传输路线。
利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端的顺序从应用层往下走,接收端则往应用层上走。
举个HTTP的例子:作为发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求。
为了传输方便,在传输层(TCP协议)把应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。
在网络层(IP协议),增加作为通信目的地的MAC地址后转发给链路层。这样发送网络的通信请求就准备完全了。
接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输层到应用层,才算真正接收到由客户端发送过来的HTTP请求。
发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。
这种包装数据信息的行为称为封装(encapsulate)
(1)负责传输的IP协议
定义作用
作用:把各种数据包传送给对方。要保证确实传送到对方那里,需满足各类条件,其中两个重要的条件:(IP地址可以和MAC地址进行配对,IP地址可变换,但MAC地址基本上不会改变。)
使用ARP协议凭借MAC地址进行通讯
IP间的通信依赖MAC地址。在网络上,通信的双方在同一局域网(LAN)内的情况很少,通常是经过多台计算机和网络设备中转才能连接到对方。
在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时会采用ARP协议(Address Resolution Protocol),它是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。
无法全面掌握互联网中的传输状况
在到达通信目标前的中转过程中,那些计算机和路由器等网络设备只能获悉很粗略的传输路线。
这种机制称为路由选择(rounting),有点像快递送货,寄快递时把货物送到集散中心,即可知道是否肯收件,接着检查送达地址,明确下一站送达的集散中心,下一个集散中心再判断是否能送达目的地。(其中的中转过程无法掌握,所以无法掌握互联网中的细节。)
(2)确保可靠性的TCP协议
TCP位于传输层,提供可靠的字节流服务(Byte Stream Service)。
TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否送达到对方。
确保数据能到达目标
为了准确无误地将数据送达目标处,TCP协议采用了三次握手(three-way handshaking)策略。用TCP协议将数据包送出去后,TCP一定会向对方确认是否成功送达。若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的顺序包。
握手过程
在socket编程中,客户端执行connect()时,将触发三次握手。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据。
(若想要详细了解TCP三次握手、四次挥手相关知识点,请看此篇博客:
深入浅出之 TCP协议(三次握手与四次挥手、超时重发、流量控制、拥塞控制、与UDP区别))
(3)负责域名解析的DNS服务
DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议,它提供域名到IP地址之间的解析服务。
计算机不仅可以被赋予IP地址,也可以被赋予主机名和域名。例如 www.baidu.com。用户经常使用这种方式来访问对方计算机,但要让计算机去理解名称就显得困难,因此DNS服务应运而生,DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。
这张图是客户端向服务器请求资源时的过程,在HTTP通信过程中包含了IP协议、TCP协议、DNS服务,发挥着各自的作用,查看下图。
(1)HTTP协议及特点
协议:指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。
HTTP协议:超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。
如上图,其实HTTP协议是基于TCP/IP协议来传递数据,从服务器端获取到数据,是C/S架构——客户端到服务端通信的接口。浏览器作为HTTP协议下的客户端,通过URL发送请求到服务端,服务端做出响应将内容返回给浏览器显示,这就是一个基本的C/S架构的HTTP协议。
HTTP协议特点:
(2) Http 版本区别
(3)HTTP请求报文和响应报文
HTTP请求报文主要由请求行、请求头、空行、请求正文(GET方式无请求正文)4部分组成。
HTTP响应报文主要由状态行、响应头、空行、响应正文4部分组成。
(4) Http的请求方式总结
方式名称 | 含义 |
---|---|
GET | 请求获取Request-URI所标识的资源 |
POST | 在Request-URI所标识的资源后附加新的数据 |
HEAD | 请求获取由Request-URI所标识的资源的响应信息报头 |
PUT | 请求服务器存储一个资源,并用Request-URI作为其标识 |
DELETE | 请求服务器删除Request-URI所标识的资源 |
TRACE | 请求服务器回送收到的请求信息,主要用于测试或诊断 |
CONNECT | 保留将来使用 |
OPTIONS | 请求查询服务器的性能,或者查询与资源相关的选项 |
HEAD、GET、OPTIONS和TRACE是安全的方法,因为它们只从服务器获得资源而不对服务器做任何修改,但是前三个在用户端不安全,POST相对安全,但POST会影响服务器的资源。TRACE方法对于服务端盒用户端一定是安全的。
(5) 请求头信息
请求头 | 说明 |
---|---|
User-Agent | 中文名为用户代理,是Http协议中的一部分,它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识 |
Referer | 先前网页的地址,当前请求网页紧随其后,即来路 |
Cache-Control | 指定请求和响应遵循的缓存机制 |
Connection | 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) |
If-Match | 只有请求内容与实体相匹配才有效 |
If-Modified-Since | 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 |
If-None-Match | 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 |
这里只介绍举例部分重要的请求响应头,关于更详细信息可看:
http://tools.jb51.net/table/http_header
(6) 响应头信息
应答头 | 说明 |
---|---|
Content-Encoding | 文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。 |
Content-Type | 表示后面的文档属于什么MIME类型。 |
Date | 当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。 |
Expires | 过期时间 |
Last-Modified | 档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。 |
.
(7) 状态码信息
HTTP状态码分类
分类 | 描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
较常用状态码
安全幂等性质
参数存放位置
浏览器缓存
HTTP无状态:是指协议对于事务处理没有记忆能力,不能保存每次客户端提交的信息,即当服务器返回应答后,此次事务的所有消息会被丢掉。即使客户端发来一个新的相同的请求,服务器无法知道它是否与上次请求有联系。
举个例子:一个包含多个图片的网页浏览步骤:
优缺点
解决办法
针对这些问题,可以采用会话跟踪技术,即把状态保存在服务器,只发送回一个标识符,浏览器在下次提交中把这个标识符发送过来,这样可以定位存储在服务器上的状态信息。技术有以下:
(1)Cookie
定义
Cookie技术是客户端的解决方案,由服务器发送给客户端的特殊信息,存放在response的header中,这些信息以文本文件方式存放在客户端,由客户端每次向服务器发送请求时带上,此时是存放在request的header中。
如下图,Cookie的设置可分为以下几个步骤:
因为HTTP协议“无状态”的特点,在请求完毕后会关闭连接,再次交换数据需要建立新的连接,无法跟踪会话。Cookie机制的引入正好弥补了HTTP协议“无状态”的缺陷。
工作原理
由于HTTP协议是“无状态”的,所以服务器无法从网络上获取用户的真实身份。
解决办法:此时客户端给服务端发一个“通行证”,它是一个唯一的标识,无论哪个用户访问服务器需要带上此标识,这样服务器即可辨识用户,这也就是Cookie的原理—–个人身份标识。
总结
在客户端向服务端请求时,若服务器要记录该用户信息,就发送一个携带cookie的response,客户端会保留此cookie,当客户端需要再次请求时,将请求URL和Cookie信息一同打包发送给服务端,此时服务器即可根据cookie辨认状态再做出响应(也可修改)。
总而言之,Cookie就是用户识别标志,保存在客户端!
(2)session
定义
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器行。客户端浏览器访问的时候,服务器把客户端信息以某种形式记录在服务器上。
注意:当客户端浏览器再次请求服务器时是不需要携带信息的,在服务器上已有记录。
工作原理
(3)两者的区别
在HTTP1.0中默认采用的是短连接,即浏览器和服务器每进行一次HTTP操作需要进行一次连接,任务结束时中断。若客户端访问的某个HTML或其他类型的Web中又包含其他Web资源,例如JS文件、图像文件、CSS文件,那么每次遇到以一个Web资源都会建立一个HTTP会话,进行三次握手,十分耗费资源。因此,通过在Request中增加“Connection:keep-alive”可支持长连接。
当HTTP采用长连接时的数据交互流程如下:
在HTTP1.1起,默认使用长连接,来保持连接特性,即在请求头和响应头中默认加入“Connection:keep-alive” 。HTTP长连接利用同一个TCP连接处理多个HTTP请求和响应。
Keep-Alive不会永久保持连接,有一个保持时间,可以在不同的服务器中设定时间,实现长连接要求客户端和服务器都支持长连接。
在讲解HTTPS之前需要了解一些预备知识,即加密与签名。
如果不对传输数据进行加密,很容易被第三方窃取或篡改,所以加密是保护数据的措施。最常见的就是对数据进行MD5加密,获取数据后再将其解密。
(1)组成
因此,加密包含算法和密钥这两个元素,两者结合会使原有数据加密为明文,而加密分为以下两个部分:
对称加密
不对称加密:其中含有两个密钥,一个是一方保管的私有密钥,另一个是双方公有的公有密钥。这种方式决定了发送秘文的一方先获取对方的公有密钥,通过算法进行处理,对方收到加密数据后,使用自己的私有密钥进行解密。
(2)数字证书
定义:数字证书就是互联网通讯中标志通讯各方身份的一串数字。
产生的原因:请求方如何确定它想要的公钥未经过第三方篡改,一定是从目标主机而来的?此时需要一个权威机构来发放密钥,来解决数字证书的安全问题。
颁发过程:首先用户要产生自己的密钥,和公有密钥一起交给认证中心,认证中心核实身份之后会将确认中心发给用户,会颁发一个数字证书,含有密钥信息。
(1)定义
密钥是一种参数,它是在使用密码cipher算法过程中输入的参数。同一个明文在相同的密码算法和不同的密钥计算下会产生不同的密文。密钥才是决定加密数据是否安全的重要参数。
(2)明文到密文的加密过程
(3)密钥组成
对称密钥
不对称密钥
(4)RSA加密简单过程
首先思考一个问题:浏览器和服务器直接传输数据时,有可能被黑客篡改,如何保证数据安全性?需要引出此部分核心——数字签名。
(1)定义
数字签名是用于验证传输内容是否是真实服务器发送的数据,是否被篡改过,主要验证这两件事,是非对称加密的一种应用场景,但它是反过来用秘钥加密,通过与之配对的公钥解密。
(2)加密过程
在了解HTTP特点之后,不可忽视的是它的不足之处:
以上三个问题不仅在HTTP上出现,其它未加密的协议也存在这些问题。除此之外,还有其它的缺点。
(1)通信使用明文可能会被窃听
由于HTTP本身不具备加密功能,所以无法做到对通信整体(使用HTTP协议通信的请求和响应的内容)进行加密,即HTTP报文使用明文的方式发送。
TCP/IP是可能被窃听的网络
按照TCP/IP 协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。
加密处理防止被窃听
防止窃听保护信息的几种对策中,最为普及的就是加密技术,加密对象有以下几个:
通信的加密: HTTP协议中没有加密机制,可以通过SSL(Secure Socket Layer安全套接层)或TLS(Transport Layer Security安全传输层协议)的组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信。与SSL组合使用的HTTP被称为HTTPS。
内容的加密:对HTTP协议传输内容本身加密。客户端需要对HTTP报文进行加密处理后再发送请求。为了做到有效的内容加密,前提是客户端和服务器同时具备加密和解密机制。(该方法不同于SSL或TLS将整个通信线路加密处理,所以内容有篡改的风险,后续讲解)
(2)不验证通信方的身份可能遭遇伪装
在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求,服务器只有收到请求,不论是谁都返回响应,因此存在以下隐患:
查明对手的证书
虽然HTTP协议无法确定通信方,但是使用SSL可以。SSL不仅提供加密处理,还使用了一种被称为证书的手段,可用于确定方。
通过使用证书,来证明通信方就是意料中的服务器,这对使用者个人来讲减少了信息泄露的危险。另外客户端持有证书即可完成个人身份验证,可用于Web认证环节。
(3)无法证明报文完整性,可能已遭篡改
由于HTTP协议无法证明通信报文的完整性,即使请求或响应内容遭到篡改,也没有办法获悉。
像这样,请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack)
如何防止篡改
虽然有使用HTTP协议确定报文完整性的方法,事实上并不可靠,常用的是MD5(单向函数生成的散列值)和SHA-1等散列值校验方法,及用来确认文件的数字签名方法。可惜的是如果MD5本身被改写,用户没有办法意识到。
为了有效防止以上这些弊端,需要使用到HTTPS。SSL提供认证和加密处理及摘要功能。仅靠HTTP确保完整性是非常困难的,因此通过和其他协议组合来实现此目标。
(1)定义
HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。通过在TCP和HTTP之间加入TLS来加密,由此保证数据传输的安全性。HTTPS就是身披SSL协议这串外壳的HTTP。
(2)SSL/TLS协议
SSL协议是一种安全传输协议,TLS是SSL v3.0的升级版。
(3)HTTPS层次图
查看HTTPS层次图,最底层是NetWork,依次往上是网络层、传输层、应用层。
传输层上面夹着TLS层,它就是安全传输协议在现实中的应用版,其中最上方的3个绿色小方框组成了TLS协议。上图类似于TCP/IP模型,只是多了一层TLS层,用来加密数据。
(4)HTTPS架构图
查看HTTPS架构图,其实HTTPS协议就是在HTTP基础上加上了加密、验证以及数据的保护。在使用HTTPS通信时,使用的是 https://
(注意:HTTPS并非是新协议,他只是HTTP通信接口中加了一个SSL协议)
在HTTPS通信时会先和SSL层建立通信,然后SSL层再和传输层中的TCP通信。所以HTTPS就是披了一层SSL外壳的HTTP协议
(5)HTTPS传输速度
SSL的慢可归于以下两点:一是通信慢,一是由于大量消耗CPU及内存等资源,导致处理速度变慢。
综合以上因素,只有在处理敏感信息时才使用HTTPS加密通信。
查看上图,TLS与SSL握手过程可以总结以下5个步骤:
(1)客户端发起请求
首先客户端会将它支持的协议版本、加密压缩算法,并生成一个随机数(握手过程的第一个随机数)一起传送给服务端。注意:此随机数与后续服务端产生的随机数会组成密钥。
(2)服务器回应
当服务端收到客户端 hello的请求后,会确定加密的协议算法,也会生成自己的一个随机数(握手过程的第二个随机数),连同证书一起发送给客户端。注意,至此客户端和服务端都拥有了两个随机数(Random1+ Random2),这两个随机数会在后续生成对称秘钥时用到。
(3)客户端验证证书
当客户端再次回应时,首先对服务端发来的证书进行验证,验证完毕后会再次产生一个随机数(握手过程的第三个随机数),此随机数是使用证书中公钥加密的,通知服务端编码已改变、握手结束。
(4)生成密钥
服务端接收到密钥之后,用私钥对这加密的数据进行解密并验证,验证完毕后向客户端发出通知确认编码改变、握手结束。
(5)客户端发送数据
客户端收到服务端发来的通知确认后,可以和服务端进行HTTPS安全的消息通讯了。
注意
由于SSL协议在握手阶段使用的是非对称加密,一般是RSA加密算法,所以需知随机数是不能随意破解的,它是安全性的保证。
以上第3点对TLS与SSL握手过程的总结适合新手初次学习,而此部分就正式地去介绍其细节,查看以下时序图:
(1)client_hello
客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息:
(2)server_hello + server_certificate + sever_hello_done
(3)证书校验
客户端验证证书的合法性,如果验证通过才会进行后续通信,否则根据错误情况不同做出提示和操作,合法性验证包括如下:
(4)client_key_exchange + change_cipher_spec + encrypted_handshake_message
此时客户端已经获取全部的计算协商密钥需要的信息:两个明文随机数 random_C 和 random_S 与自己计算产生的 Pre-master,计算得到协商密钥。
change_cipher_spec:客户端通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信。
encrypted_handshake_message:,结合之前所有通信参数的 hash 值与其它相关信息生成一段数据,采用协商密钥 session secret 与算法进行加密,然后发送给服务器用于数据与握手验证。
(5) change_cipher_spec + encrypted_handshake_message
enc_key=Fuc(random_C, random_S, Pre-Master)
计算之前所有接收信息的 hash 值,然后解密客户端发送的 encrypted_handshake_message,验证数据和密钥正确性。
change_cipher_spec: 验证通过之后,服务器同样发送 change_cipher_spec 以告知客户端后续的通信都采用协商的密钥与算法进行加密通信。
encrypted_handshake_message: 服务器也结合所有当前的通信参数信息生成一段数据并采用协商密钥 session secret 与算法加密并发送到客户端。
(6)握手结束
客户端计算所有接收信息的 hash 值,并采用协商密钥解密 encrypted_handshake_message,验证服务器发送的数据和密钥,验证通过则握手完成。
(7)加密通信
开始使用协商密钥与算法进行加密通信。
注意:
服务器也可以要求验证客户端,即双向认证,可以在过程2要发送 client_certificate_request 信息,客户端在过程4中先发送 client_certificate与certificate_verify_message 信息,证书的验证方式基本相同,certificate_verify_message 是采用client的私钥加密的一段基于已经协商的通信信息得到数据,服务器可以采用对应的公钥解密并验证。
后续相关知识还有:为了加快建立握手的速度,减少协议带来的性能降低和资源消耗(具体分析在后文),TLS 协议有两类会话缓存机制:会话标识 session ID 与会话记录 session ticket。可查看以下链接。
此小节是借鉴于TLS/SSL握手过程,推荐查看。
HTTPS实际上就是在TCP层与HTTP层之间加入了SSL/TLS来为上层的安全保驾护航,主要用到对称加密、非对称加密、证书等技术进行客户端与服务器的数据加密传输,最终达到保证整个通信的安全性。
若有错误,虚心指教~
文章浏览阅读565次。本文主要介绍如何使用C#通过OPC方式连接PLC,并提供了相应的程序和学习资料,以便读者学习和使用。OPC服务器是一种软件,可以将PLC的数据转换为标准的OPC格式,允许其他软件通过标准接口读取或控制PLC的数据。此外,本文还提供了一些学习资料,包括OPC和PLC的基础知识,C#编程语言的教程和实例代码。这些资料可以帮助读者更好地理解和应用本文介绍的程序。1.该程序是通讯方式是CSharp通过OPC方式连接PLC,用这种方式连PLC不用考虑什么种类PLC,只要OPC服务器里有的PLC都可以连。_c#opc通信
文章浏览阅读1.6w次,点赞3次,收藏10次。实践环境物理机:Windows10教育版,操作系统版本 17763.914虚拟机:Ubuntu18.04.3桌面版在Hyper-V中的刚安装好Ubuntu虚拟机之后,会发现鼠标滑动很不顺畅,也不能向虚拟机中拖拽文件或者复制内容。在VMware中,可以通过安装VMware tools来使物理机和虚拟机之间达到更好的交互。在Hyper-V中,也有这样的工具。这款工具可以完成更好的鼠标交互,我的..._win10 hyper-v ubuntu18.04 文件拷贝
文章浏览阅读156次。前言互联网时代,瞬息万变。一个小小的走错,就有可能落后于别人。我们没办法去预测任何行业、任何职业未来十年会怎么样,因为未来谁都不能确定。只能说只要有互联网存在,程序员依然是个高薪热门行业。只要跟随着时代的脚步,学习新的知识。程序员是不可能会消失的,或者说不可能会没钱赚的。我们经常可以听到很多人说,程序员是一个吃青春饭的行当。因为大多数人认为这是一个需要高强度脑力劳动的工种,而30岁、40岁,甚至50岁的程序员身体机能逐渐弱化,家庭琐事缠身,已经不能再进行这样高强度的工作了。那么,这样的说法是对的么?_类初始化一个静态属性 为线程池
文章浏览阅读1w次,点赞13次,收藏43次。说来也是惭愧,一直以来,在装环境的时候都会从官网下载Maven。然后再在idea里配置Maven。以为从官网下载的Maven是必须的步骤,直到今天才得知,idea有捆绑的 Maven 我们只需要搞一个配置文件就行了无需再官网下载Maven包以后再在新电脑装环境的时候,只需要下载idea ,网上找一个Maven的配置文件 放到 默认的 包下面就可以了!也省得每次创建项目都要重新配一次Maven了。如果不想每次新建项目都要重新配置Maven,一种方法就是使用默认的配置,另一种方法就是配置 .._安装idea后是不是不需要安装maven了?
文章浏览阅读45次。家是我们一生中最重要的地方,小时候,我们在这里哭、在这里笑、在这里学习走路,在这里有我们最真实的时光,用相机把它记下吧。 很多家庭在拍摄孩子时有一个看法,认为儿童摄影团购必须是在风景秀丽的户外,即便是室内那也是像大酒店一样...
文章浏览阅读429次。Dockerfile介绍Dockerfile是构建镜像的指令文件,由一组指令组成,文件中每条指令对应linux中一条命令,在执行构建Docker镜像时,将读取Dockerfile中的指令,根据指令来操作生成指定Docker镜像。Dockerfile结构:主要由基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令。每行支持一条指令,每条指令可以携带多个参数。注释可以使用#开头。指令说明FROM 镜像 : 指定新的镜像所基于的镜像MAINTAINER 名字 : 说明新镜像的维护(制作)人,留下_rocker/r-base镜像
文章浏览阅读223次。该系统将提供便捷的信息发布、物业报修、社区互动等功能,为小区居民提供更加便利、高效的服务。引言: 随着城市化进程的加速,小区管理成为一个日益重要的任务。因此,设计一个基于微信小程序的小区管理系统成为了一项具有挑战性和重要性的毕设课题。本文将介绍该小区管理系统的设计思路和功能,以期为小区提供更便捷、高效的管理手段。四、总结与展望: 通过本次毕设项目,我们实现了一个基于微信小程序的小区管理系统,为小区居民提供了更加便捷、高效的服务。通过该系统的设计与实现,能够提高小区管理水平,提供更好的居住环境和服务。_ssm基于微信小程序的公寓生活管理系统
文章浏览阅读635次。文章来源i春秋入坑Ubuntu半年多了记得一开始学的时候基本一星期重装三四次=-= 尴尬了 觉得自己差不多可以的时候 就吧Windows10干掉了 c盘装Ubuntu 专心学习. 这里主要来说一下使用Ubuntu的正确姿势Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu 是基于DebianGNU/Linux,支..._ubuntu安装攻击工具包
文章浏览阅读335次。需求:C++中将BYTE型数组传递给Java中,考虑到内存释放问题,未采用通过返回值进行数据传递。public class demoClass{public native boolean getData(byte[] tempData);}JNIEXPORT jboolean JNICALL Java_com_core_getData(JNIEnv *env, jobject thisObj, jbyteArray tempData){ //resultsize为s..._jni引用byte[]
文章浏览阅读2.1k次,点赞5次,收藏30次。本教程代码开源:GitHub 欢迎star文章目录一、平面模型分割1. 代码2. 说明3. 运行二、圆柱模型分割1. 代码2. 说明3. 运行三、欧几里得聚类提取1. 代码2. 说明3. 运行四、区域生长分割1. 代码2. 说明3. 运行五、基于最小切割的分割1. 代码2. 说明3. 运行六、使用 ProgressiveMorphologicalFilter 分割地面1. 代码2. 说明3. 运行一、平面模型分割在本教程中,我们将学习如何对一组点进行简单的平面分割,即找到支持平面模型的点云中的所有._pclpy.pcl.pointcloud.pointxyzi转为numpy
文章浏览阅读141次。一 其实在 skyeye 上移植 arm-linux 并非难事,网上也有不少资料, 只是大都遗漏细节, 以致细微之处卡壳,所以本文力求详实清析, 希望能对大家有点用处。本文旨在将 arm-linux 在 skyeye 上搭建起来,并在 arm-linux 上能成功 mount NFS 为目标, 最终我们能在 arm-linux 里运行我们自己的应用程序. 二 安装 Sky..._nfs启动 arm
文章浏览阅读598次,点赞2次,收藏5次。00为了形成一个体系,想将前面学过的一些东西都拉来放在一起总结总结,方便学习,方便记忆。攻防世界 Pwn 新手攻防世界 Pwn 进阶 第一页01 4-ReeHY-main-100超详细的wp1超详细的wp203 format2栈迁移的两种作用之一:栈溢出太小,进行栈迁移从而能够写入更多shellcode,进行更多操作。栈迁移一篇搞定有个陌生的函数。C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 _pwn snprintf