计算机网络与编程
文章平均质量分 89
coolwriter
这个作者很懒,什么都没留下…
展开
-
select,poll,epoll
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用...转载 2018-06-08 15:47:21 · 167 阅读 · 0 评论 -
XSS攻击
学习XSS之前,我们很有必要知道XSS到底是什么东西。其英文名是(Cross Site Scripting),意思就是跨站脚本攻击,是黑客常用的攻击手段之一,因为与层叠样式表CSS(Cascading Style Sheets)同名,为了避免混淆,故将其命名为XSS。好了,现在知道了它的名字的由来之后,最重要的就是去了解XSS的实现原理。XSS实现原理因为浏览器本身的设计缺陷,浏览器只...原创 2018-07-23 20:05:50 · 741 阅读 · 0 评论 -
端口扫描
常见的扫描类型有以下几种:秘密扫描秘密扫描是一种不被审计工具所检测的扫描技术。 它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己。 秘密扫描能躲避IDS、防火墙、包过滤器和日志审计,从而获取目标端口的开放或关闭的信息。由于没有包含TCP 3次握手协议的任何部分,所以无法被记录下来,比半连接扫描更为隐蔽。 但是这种扫描的缺点是扫描结果的不可靠性会增加,而且...转载 2018-07-23 22:16:17 · 820 阅读 · 1 评论 -
UDP中的connect函数
1、UDP中可以使用connect系统调用。 2、UDP中connect操作与TCP中connect操作有着本质区别。‘ TCP中调用connect会引起三次握手,client与server建立连结。 UDP中调用connect内核仅仅把对端ip&port记录下来。 3、UDP中可以多次调用connect,TCP只能调用一次connect。...原创 2018-07-24 09:02:04 · 864 阅读 · 0 评论 -
负载均衡算法
常见的几种负载均衡算法 1、轮询法将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。2、随机法通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。3、源...原创 2018-07-24 15:56:32 · 193 阅读 · 0 评论 -
session介绍
1.session的简单介绍session是一种保存上下文信息的机制,保存的是对象,它的值是存放在服务器端,它通过sessionId来区分不同的客户端,而sessionId是保存在客户端的,做为客户端与服务器的验证标识,它是一个24位的随机字符串,用户每次提交页面时,浏览器都会把这个sessionId包含在HTTP头中提交给WEB服务器。2.session的产生过程当服务器接收到客户端...原创 2018-07-25 14:10:38 · 874 阅读 · 0 评论 -
epoll IO多路复用模型实现机制
在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数据、高并发、集群等一些名词唱得火热之年代,select和poll的用武之地越来越有限,风头已经被epoll占尽。本文便来介绍epoll的实现机制,并附带讲解一下select和poll。通过对比其不同的实现机制,真正理解为何epoll能实现高并发。select...转载 2018-08-05 16:53:02 · 289 阅读 · 0 评论 -
TCP协议的可靠性,与udp的区别,tcp的nagle算法
1024程序员节,回顾tcp协议的一些重点。1024在外界的众多小伙伴看来,可能是某一不可描述的知名网站,但是(敲黑板,划重点)这是我们程序猿的节日啊!这一年节日传播,真可谓是陆海空全面轰炸。为了让程序员们过好这个节日,他们身边的人也是操碎了心。在望京、751、南锣鼓巷、奥林匹克公园等多处北京街头,惊现“快闪寻人”。人们手举各式各样的标语,倡议程序员在1024程序员节当天,不加班!2015...原创 2018-10-24 15:24:59 · 732 阅读 · 0 评论 -
TCP分段与IP分片
我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组。我们先来看两个与TCP报文段分段和IP数据报分片密切相关的概念。MYU(最大传输单元)MTU前面已经说过了,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节。一个IP数据报在以太网中 传输,如果它的...转载 2018-11-04 21:50:59 · 1057 阅读 · 0 评论 -
http与https
一、前言:访问域名http://www.12306.cn,谷歌浏览器提示不安全链接,https://kyfw.12306.cn/otn/regist/init,浏览器显示安全,为什么会这样子呢?2017年1月发布的Chrome 56浏览器开始把收集密码或信用卡数据的HTTP页面标记为“不安全”,若用户使用2017年10月推出的Chrome 62,带有输入数据的HTTP页面和所有以无痕模式浏览...转载 2019-03-19 21:34:27 · 901 阅读 · 0 评论 -
socket 通信问题(一)
由于socket的accept函数在有客户端连接的时候产生了新的socket用于服务该客户端,那么,这个新的socket到底有没有占用一个新的端口?讨论完后,才发现,自己虽然熟悉socket的编程套路,但是却并不是那么清楚socket的原理,今天就趁这个机会,把有关socket编程的几个疑问给搞清楚吧。 先给出一个典型的TCP/IP通信示意图。问题一:so...转载 2019-03-30 15:38:44 · 696 阅读 · 1 评论 -
socket 通信问题(二)socket最大连接数所受的各种限制
1、修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的文件数限制:[speng@as4 ~]$ ulimit -n...转载 2019-03-30 15:39:45 · 11054 阅读 · 0 评论 -
socket通信问题(三)查看SOCKET使用情况
Linux系统中,查看SOCKET使用情况可以使用ss命令。1、命令格式:ss [参数]ss [参数] [过滤]2、命令功能:ss(Socket Statistics的缩写)命令可以用来获取 socket统计信息,此命令输出的结果类似于netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比 netstat 更快速高效。它使用了 TCP协议栈中tcp_dia...转载 2019-03-30 15:50:37 · 2961 阅读 · 0 评论 -
socket 通信问题(四)粘包问题
概念长连接与短连接:1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。2.短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点通讯,比如多个Client连接一个Server.什么时候需要考虑粘包问题?1:如果利用tcp每次发送数据,...转载 2019-03-30 17:57:34 · 965 阅读 · 1 评论 -
jansson 库测试
#include<stdio.h>#include<string.h>#include<jansson.h>#define FILE_PATH "./temp.txt"#define MAX_NUM 5typedef struct _JSON_ITEM_INFO{ json_t* string; jso...转载 2019-05-04 21:56:01 · 1852 阅读 · 3 评论 -
epoll服务器
epoll同上篇博客中的select一样,都是用于多路转接,但epoll被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 一、epoll相关系统调用epoll只有三个系统调用函数:epoll_create:创建epoll模型epoll_ctl:管理epoll模型epoll_wait:等待I/O时间就绪 events可以是以下几个宏的集合:EPOL...原创 2018-06-08 11:21:40 · 428 阅读 · 0 评论 -
select 服务器
select原理系统提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。关于文件句柄,其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、s...原创 2018-05-31 12:24:51 · 223 阅读 · 0 评论 -
TCP协议
为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。于是人们就想方设法的用电线把电脑连接到了一起。但是简单的连到一起是远远不够的,就好像转载 2018-01-27 10:56:05 · 285 阅读 · 0 评论 -
TCP三次握手和四次挥手过程
TCP三次握手和四次挥手过程1、三次握手(1)三次握手的详述首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接。 (A、B关闭状态CLOSED——...转载 2018-03-24 16:22:17 · 301 阅读 · 0 评论 -
C++ socket编程 实现服务端与客户端的通讯
1、网络中进程之间如何通信?本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:消息传递(管道、FIFO、消息队列) 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC)我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来...原创 2018-04-13 14:52:43 · 2773 阅读 · 1 评论 -
socket通信函数
TCP协议 - CSDN博客 https://blog.csdn.net/coolwriter/article/details/791789501、网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:消息传递(管道、FIFO、消息队列) 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 共享内存(匿名的和具名的) 远程过程调用(Sola...转载 2018-04-13 17:02:09 · 1460 阅读 · 0 评论 -
Socket通信
什么是Socket?Socket是一个通信的端点。一对进程在网络直接通过一对socket通信,每个进程一个。一个socket由一个IP地址和端口号确定。Socket封装了一些操作,使得网络里两个进程的数据通信比较方便。基于TCP协议和UDP协议的socket用得很多。下图展示了两种方式的通信过程②建立socket进行通信使用的几个函数以Linux系统为例,说明一下几个函数A. socket()...转载 2018-05-09 17:43:12 · 228 阅读 · 0 评论 -
多线程socket
#include <stdio.h> #include <Winsock2.h> #pragma comment (lib, "ws2_32") #include <thread> void sendFuction(SOCKET &sockConn) { while (true) { ...原创 2018-05-09 18:00:39 · 816 阅读 · 0 评论 -
HTTPS原理详解
1、HTTPS的工作原理 HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下:1.浏览器将自己支持的一套加密规则发送给网站。 2.网站从中选出一组加密算法与...原创 2018-05-10 14:27:39 · 685 阅读 · 0 评论 -
tcp
UDP协议提供了端到端之间的通讯,应用程序只需要在系统中监听一个端口,便可以进行网络通讯。随着计算机网络的发展,计算机网络所承载的业务越来越多,有些业务数据的传输需要具备可靠性,譬如我们在进行在线聊天的时候,我们发送的一条消息,我们必须明确地知道对方是否收到。如果对方对我们发送地消息不给予确认,我们就不知道对方是否已经收到。显然,UDP协议并没有提供可靠交付的能力,因此我们可能需要在应用层之上,基...转载 2018-05-10 14:41:45 · 373 阅读 · 0 评论 -
大端小端与网络字节序
在裘宗燕翻译的《程序设计实践》里,这对术语并没有翻译为“大端”和小端,而是“高尾端”和“低尾端”,这就好理解了:如果把一个数看成一个字符串,比如11223344看成"11223344",末尾是个'\0','11'到'44'个占用一个存储单元,那么它的尾端很显然是44,前面的高还是低就表示尾端放在高地址还是低地址,它在内存中的放法非常直观,如下图:#include <iostream>...原创 2018-05-13 14:59:26 · 2548 阅读 · 0 评论 -
HTTP协议
HTTP协议规范服务器和浏览器之间数据传输的格式一、查看浏览器与服务器间的通讯过程IE使用httpwatchchrome使用审查元素(network)使用telnet(telnet host port)二、HTTP请求1.请求行请求方式 GET:提交数据在请求URI,大小不能超过1k,会产生缓存文件POST:提交数据在实体内容,大小无限制,不会产生缓存文件请求资源协议名和版本 HTTP/1.0: ...转载 2018-05-23 21:43:06 · 145 阅读 · 0 评论 -
在浏览器中输入 网址 后执行的全部过程
请原谅我把标题中的google.com 改成了 baidu.com——我估计百度应该把我这篇blog推到首页吧:)这仅仅是为了表达对百度的一个吐槽——如果你真以为我是为了SEO虾米的。。。亲,你觉得有这个必要么? O(∩_∩)O 本文试图回答一个古老的面试问题:当你在浏览器中输入google.com并且按下回车之后发生了什么? 不过我们不再局限于平常的回答,而是想办法回答地尽可能具体,不遗漏任...转载 2018-06-04 17:04:32 · 21013 阅读 · 2 评论 -
redis入门
首先, 我带大家简单的了解一下RedisRedis常用数据类型(最为常用的数据类型主要有以下五种)●String●Hash●List●Set●Sorted set下面我们先来逐一的分析下这五种数据类型的使用和内部实现方式:1、String常用命令:set,get,decr,incr,mget 等。常用方法:set -- 设置key对应的的值为String类型的valueget -- 获取对应key...转载 2018-06-04 20:57:28 · 208 阅读 · 0 评论 -
TCP连接
简述TCP是面向连接的协议,TCP把连接作为最基本的抽象。每一条TCP连接唯一地被通信两端的两个端点所确定。那么,TCP连接的端点是什么呢?TCP连接的端点又叫套接字(socket),根据TCP协议的规定,端口号拼接到IP地址即构成了套接字,即套接字 socket = (IP地址:端口号)这样一来,TCP连接可以以下式子表示TCP连接 ::= {socket1, socket2} = {(IP1:...转载 2018-05-24 15:48:55 · 18941 阅读 · 0 评论 -
多进程服务器
前面的话 服务器按处理方式可以分为迭代服务器和并发服务器两类。平常用C写的简单Socket客户端服务器通信,服务器每次只能处理一个客户的请求,它实现简单但效率很低,通常这种服务器被称为迭代服务器。 然而在实际应用中,不可能让一个服务器长时间地为一个客户服务,而需要其具有同时处理 多个客户请求的能力,这种同时可以处理多个客户请求的服务器称为并发服务器,其效率很 高却实现复杂。在实际应用中,并发服务...转载 2018-05-29 15:17:11 · 1640 阅读 · 1 评论 -
linux多进程服务器示例
服务器端#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdlib.h>#include <stdio.h>原创 2018-05-29 15:33:11 · 359 阅读 · 0 评论 -
linux多线程服务器
上一篇文章使用fork函数实现了多进程并发服务器,但是也提到了一些问题:fork是昂贵的。fork时需要复制父进程的所有资源,包括内存映象、描述字等;目前的实现使用了一种写时拷贝(copy-on-write)技术,可有效避免昂贵的复制问题,但fork仍然是昂贵的;fork子进程后,父子进程间、兄弟进程间的通信需要进程间通信IPC机制,给通信带来了困难;多进程在一定程度上仍然不能有效地利用系统资源;...转载 2018-05-29 15:55:58 · 2657 阅读 · 1 评论 -
Java网络编程
Java网络编程,我们先来看下面这一张图: 由图可得:想要进行网络编程,首先是服务器端通过ServerSocket对某一个端口进行监听。通过accept来判断是否有客户端与其相连。若成功连上,则通过readline和println函数来进行数据的发送和接收。实现网络编程。 示例如下:服务器端代码:/* * 功能:演示Java网络编程的服务器端 * aut...转载 2018-05-30 22:47:57 · 226 阅读 · 0 评论 -
细说ip地址与同一网段
大学的时候有上过计算机网络的课程,IP这块也有一些接触,但向来不是很好学的我,对于一些问题似是而非的态度,感觉知道,但具体的又说不上,今天就花了点时间彻底把这个问题搞清楚,写在这也算是做个记录吧!接下来我们举例说明,如何去判断A和B两个IP是否在同一网段。原创 2017-09-03 09:49:22 · 21457 阅读 · 0 评论