bind

通俗易懂讲解epoll

心不动则不痛 提交于 2020-10-28 10:25:04
epoll 的本质是什么? 从事服务端开发,少不了要接触网络编程。epoll 作为 Linux 下高性能网络服务器的必备技术至关重要,nginx、Redis、Skynet 和大部分游戏服务器都使用到这一多路复用技术。 epoll 很重要,但是 epoll 与 select 的区别是什么呢?epoll 高效的原因是什么? 网上虽然也有不少讲解 epoll 的文章,但要么是过于浅显,或者陷入源码解析,很少能有通俗易懂的。笔者于是决定编写此文,让缺乏专业背景知识的读者也能够明白 epoll 的原理。 文章核心思想是:要让读者清晰明白 epoll 为什么性能好。 本文会从网卡接收数据的流程讲起,串联起 CPU 中断、操作系统进程调度等知识;再一步步分析阻塞接收数据、select 到 epoll 的进化过程;最后探究 epoll 的实现细节。 一、从网卡接收数据说起 下边是一个典型的计算机结构图,计算机由 CPU、存储器(内存)与网络接口等部件组成,了解 epoll 本质的第一步,要从硬件的角度看计算机怎样接收网络数据。 计算机结构图(图片来源:Linux内核完全注释之微型计算机组成结构) 下图展示了网卡接收数据的过程。 在 ① 阶段,网卡收到网线传来的数据; 经过 ② 阶段的硬件电路的传输; 最终 ③ 阶段将数据写入到内存中的某个地址上。 这个过程涉及到 DMA 传输、IO

http请求报文格式和响应报文格式

落爺英雄遲暮 提交于 2020-10-28 07:54:01
超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议。HTTP 是一种请求/响应式的协议,即一个客户端与 服务器 建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应。   HTTP 请求报文   HTTP 请求报文由 请求行、请求头部、空行 和 请求包体 4 个部分组成,如下图所示:   下面对请求报文格式进行简单的分析:   请求行:请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 HTTP 请求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;   ● GET:当客户端要从服务器中读取某个资源时,使用GET 方法 。GET 方法要求服务器将URL 定位的资源放在响应报文的部分,回 送给 客户端,即向服务器请求某个资源。使用GET 方法时,请求参数和对应的值附加在 URL 后面,利用一个问号(“?”)代表URL 的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。   ● POST:当客户端给服务器提供信息较多时可以使用POST 方法 ,POST 方法向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。 GET 一般用于获取/查询资源信息,POST

四、kali之msf渗透测试

☆樱花仙子☆ 提交于 2020-10-28 00:23:07
kali之msf渗透测试 1.metasploit介绍、安装、更新、目录结构 1.metasploit介绍 Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称MSF。是一个免费、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数2000多个已知软件漏洞的专业级漏洞攻击工具。Metasploit就是一个漏洞框架。 2.MSF安装要求 硬盘空间: 至少10G,个人建议50G;由于分区时用FAT32类型不支持大文件运行,所以分区建议使用NTFS、EXT3类型分区, 内存: 建议2G及以上 处理器: 处理器要求较低,市面上电脑均可满足要求,处理速度大于500HZ即可 网络设备 虚拟机中桥接即可,也可以自己配置IP,无线网络需要外接无线网卡 软件: KALI 和其他测试系统 虚拟机: 必备:需安装kali和各种测试系统 Kali: 下载地址:http://www.kali.org/downloads/ 升级指令:“apt-get update && apt-get upgrade” Metasploitable系统: 它包含Linux系统中大大小小的漏洞,很适合做测试系统。 下载地址:https://sourceforge.net/projects/metasploitable/files

docker部署elasticsearch集群

天大地大妈咪最大 提交于 2020-10-27 16:23:29
昨天有个伙伴一直想让我写个搭建elasticsearch集群的文章,由于时间有限,用docker部署了一把,不多说了,直接上安装配置吧。 1、拉取镜像 docker pull elasticsearch:5.6 2、创建配置文件路径及data存放路径 cd /home/dingzhen mkdir -p ES/config cd ES mkdir data1 data2 data3 4、集群配置文件 在ES/config/路径下创建配置文件并配置 es1.yml文件 cluster.name: elasticsearch-cluster node.name: es-node1 network.bind_host: 0.0.0.0 network.publish_host: 192.168.111.129 http.port: 9200 transport.tcp.port: 9300 http.cors.enabled: true http.cors.allow-origin: "*" node.master: true node.data: true discovery.zen.ping.unicast.hosts: ["192.168.111.129:9300","192.168.111.129:9301","192.168.111.129:9302"] discovery

计算机网络1

社会主义新天地 提交于 2020-10-27 08:37:50
计算机网络 重点在TCP/IP协议和HTTP协议。 目录 Chapter 1 Chapter 2 Chapter 3 网络层(IP) 传输层(TCP/UDP) 应用层(HTTP) 内容 网络层(IP) 待补充 传输层(TCP/UDP) ISO七层模型中表示层和会话层功能是什么? 表示层:图像、视频编码解,数据加密。 会话层:建立会话,如session认证、断点续传。 描述TCP头部? 序号(32bit):传输方向上字节流的字节编号。初始时序号会被设置一个随机的初始值(ISN),之后每次发送数据时,序号值 = ISN + 数据在整个字节流中的偏移。假设A -> B且ISN = 1024,第一段数据512字节已经到B,则第二段数据发送时序号为1024 + 512。用于解决网络包乱序问题。 确认号(32bit):接收方对发送方TCP报文段的响应,其值是收到的序号值 + 1。 首部长(4bit):标识首部有多少个4字节 * 首部长,最大为15,即60字节。 标志位(6bit): URG:标志紧急指针是否有效。 ACK:标志确认号是否有效(确认报文段)。用于解决丢包问题。 PSH:提示接收端立即从缓冲读走数据。 RST:表示要求对方重新建立连接(复位报文段)。 SYN:表示请求建立一个连接(连接报文段)。 FIN:表示关闭连接(断开报文段)。 窗口(16bit):接收窗口。用于告知对方

网络

断了今生、忘了曾经 提交于 2020-10-27 08:36:24
一.理论 1.应用层 1)http协议与TCP联系? 2) http/1.0和http/1.1的区别 (非持久连接与持久连接、 范围请求(断点续传) 、缓存处理、更多状态码) 3)http1.1和 http2.0 的区别?( 二进制分帧层 、 服务端推送 、 首部压缩 ) 4)http的 请求方法 有哪些? GET和POST的区别 (获取资源与传输数据、额外参数的位置、支持的编码) 5)http的 状态码 6)http和https的区别,由http升级为https需要做哪些操作? 7) https 的具体实现,怎么确保安全性? 8) cookie 和 session 的 区别 ? 9)服务器攻击(DDos攻击) 10) 对称加密 和 非对称加密 11) 数字证书的了解 12)RSA加密算法,MD5原理(MD5不算加密算法) 13) 在浏览器中输入URL后执行的全部过程 ( DHCP 获取主机和网关路由IP, ARP 解析网关路由MAC地址, DNS 解析域名,TCP连接,HTTP请求响应) 14) URL 包括哪些部分?(协议、服务器名称、文件路径、还可能带有参数) 15)http 请求 / 响应报文 构成 16) DNS? ( 查询过程? DNS记录? ) 2.运输层 1)一个机器能够使用的端口号上限是多少,为什么?可以改变吗?那如果想要用的端口超过这个限制怎么办? 2) TCP

Hello Docker(七)——Docker数据持久化

一曲冷凌霜 提交于 2020-10-25 13:32:39
Hello Docker(七)——Docker数据持久化 一、Docker数据持久化简介 默认情况下,Docker容器内部新创建文件或者修改文件,结果会保存在容器的可读写层中,因此: (1)当container消失时,与container一体的可读写层也一并消失,数据并未持久化。当一个container需要其它container中可读写层的数据时,读取操作非常困难。 (2)container可读写层与宿主机的文件系统紧密结合,很难进行迁移。 (3)写入数据到container可读写层需要storage driver,与直接在宿主机文件系统中读写数据相比效率要低。 Docker支持的数据持久化方案如下: (1)volume。 (2)bind mount。 (3)tmpfs mount,仅限Linux操作系统中。 Docker创建容器时通过参数选项指定数据持久化路径,bind mount与volume使用-v或者--volume选项,tmpfs通过--tmpfs选项。从docker17.0.6开始,推荐使用新选项--mount。 --mount参数选项如下: type:可以是bind、volume或者tmpfs,默认是volume source:宿主机上目录路径,可以用缩写src destination:目标路径,容器上挂载的路径,可以用dst或者 target readonly

jQuery Event Keypress:按下了哪个键?

醉酒当歌 提交于 2020-10-25 07:04:37
问题: With jQuery, how do I find out which key was pressed when I bind to the keypress event? 使用jQuery,如何确定绑定到keypress事件时按下了哪个键? $('#searchbox input').bind('keypress', function(e) {}); I want to trigger a submit when ENTER is pressed. 我想在按ENTER键时触发提交。 [Update] [更新] Even though I found the (or better: one) answer myself, there seems to be some room for variation ;) 即使我找到了(或者更好:一个)自己回答,似乎还有一些变化的空间;) Is there a difference between keyCode and which - especially if I'm just looking for ENTER , which will never be a unicode key? 有没有之间的差异 keyCode 和 which -尤其是如果我只是在寻找ENTER,这将永远是一个unicode关键? Do some

XTP: 从XTP看Rust与C++接口FFI通信

瘦欲@ 提交于 2020-10-24 13:35:31
XTP.rs 来源于: https://github.com/dovahcrow/xtp-rs 一、从RUST ->C++: 当Rust需要把指令传入XTP中时,以register_spi为例 1、rust中.rs文件中 let mut api = QuoteApi::new(1, &args.path, XTPLogLevel::Trace); info!("XTP Version: {:?}", api.get_api_version()); info!("Trading Day: {:?}", api.get_trading_day()); api.register_spi(MySpi); 2、quote_api.rs pub fn register_spi<T: QuoteSpi>(&mut self, spi: T) { let trait_object_box: Box<Box<dyn QuoteSpi>> = Box::new(Box::new(spi)); let trait_object_pointer = Box::into_raw(trait_object_box) as *mut Box<dyn QuoteSpi> as *mut c_void; let quote_spi_stub = unsafe { QuoteSpiStub::new(trait