Unix网络编程
文章平均质量分 93
后台服务器开发
这个作者很懒,什么都没留下…
展开
-
异曲同工的SSH和HTTPS
异曲同工的SSH和HTTPS一、初识 SSHSSH是一种协议标准,其目的是实现安全远程登录以及其它安全网络服务,主要用于计算机之间的加密登录与数据传输。目前市场用的最多的就是开源Openssh这个库;默认端口为22。二、SSH 原理了解SSH工作原理之前,我们先来了解下常用加密算法的常识:对称加密算法对称加密算法就是加密和解密采用同一把秘钥,常见算法有AES、DES等;优缺点:算法公开、计算量小、加密速度快、加密效率高;双方用相同的秘钥,安全性等不到保证;如果秘钥数量多的时候,原创 2021-02-27 09:45:29 · 260 阅读 · 0 评论 -
相伴一生的IP和MAC
相伴一生的IP和MAC一、前言 想必大家对于MAC地址和IP地址并不陌生,但是,当我们提前这两个概念的时候,是不是有一种呼之欲出又不知从何说起的感觉。这种就是我们经常在嘴边说起,但是以前的知识有记忆有点模糊了!这篇文章主要从IP和MAC地址的概念到一个网络包传输过程进行了解。 我先提出几个问题,希望能带着问题去阅读,可能会事半功倍; 1、IP地址、MAC地址、子网掩码、默认网关是什么? 2、我们请求一个网页的时候,网络包在不同网关之间是怎么传输的? 3、IP地址和MAC地址之原创 2020-12-05 09:45:02 · 184 阅读 · 0 评论 -
linux UDP并发服务器
摘要: 本文将讨论UDP的并发实现机制。给出了两种实现方法。第一种是最为常见的,TFTP传输的方式。 第二种是对UDP进一步封装,以达到并发的可能。主要是采用队列、多线程的方法。后面会给出一个简单的实现例子,以供大家参考。功能方面较为简单,以后会慢慢完善。 现将思路整理如下,有兴趣的同学可以一起讨论。代码稍后公布。 众所周知,通常所见的的TCP服务器都是并发实现的,即服务同时...转载 2018-09-06 06:41:06 · 2467 阅读 · 0 评论 -
Linux IO多路复用之poll
Linux IO多路复用之poll前面介绍了select,今天来介绍poll,poll 是一种高级的轮询的方法,通常用于服务器端处理多个客户端的请求的时候。 其作用于 select 很相似,但是较比 select 方法而言,效率更高,并且处理的连接个数不受内核的限制。 若是使用 select 来轮询客户端的连接,可以接受的连接个数与内核中进程所限定的可使用的文件描述符号的个数相同。 ...原创 2018-09-08 07:42:10 · 250 阅读 · 0 评论 -
TCP回射服务器
TCP回射服务器所谓的回射服务器就是说从客户端输入,经过服务器,然后在客户端输出,用一张图来表示最合理。这就是所谓的回射服务器,我们可以去看看《unix网络编程卷一》。它的一个大概思路就是:服务器是一个并发服务器,所以当连接到来时,会fork一个子进程来对客户请求进行处理。其他部分就按简单的客户-服务器通信的步骤来写就行,客户端:socket()—>connect()—&...原创 2018-08-24 07:31:50 · 934 阅读 · 1 评论 -
linux 多线程并发服务器(TCP)
linux 多线程并发服务器(TCP) 所谓多线程并发服务器就是基于线程,每个客户端来了创建一个线程,由线程去处理客户端的请求。相对于多线程服务器来说,多进程服务器在创建进程时要消耗较大的系统资源,所以我们使用线程来取代进程,这样服务处理程序可以较快的创建。 据统计,创建线程与创建进程要快 10100 倍,所以又把线程称为“轻量级”进程。线程与进程不同的是:一个进程内的所有线程...原创 2018-08-27 09:24:10 · 3502 阅读 · 0 评论 -
Linux多进程并发服务器(TCP)
Linux多进程并发服务器(TCP)前言:在Linux环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时 ,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的优点是当客户有请求时 ,服务器能及时处理客户 ,特别是在客户服务器交互系统中。对于一个 TCP服务器,客户与服务器的连接可能并不马上关闭 ,可能会等到客户提交某些数据后再关闭 ,...原创 2018-08-27 06:36:34 · 774 阅读 · 0 评论 -
socket套接字编程
socket套接字编程一、socket概念 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现, socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关...原创 2018-08-17 07:11:00 · 537 阅读 · 0 评论 -
Linux (UDP和TCP)循环服务器
Linux (UDP和TCP)循环服务器参考:https://blog.csdn.net/tennysonsky/article/details/45671215 《unix网络编程》按照处理方式分为:循环服务器和并发服务器·循环服务器:服务器在同一时刻只能响应一个客户端的请求·并发服务器:服务器在同一时刻可以响应多个客户端的请求UDP循环服务器实现方法U...原创 2018-08-26 21:58:30 · 1063 阅读 · 0 评论 -
Linux UDP编程
## Linux UDP编程udp是用户传输协议,无连接的传输协议,提供不可靠的信息传送服务UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层。UDP是面向非连接的协议,它不与对方建立连接,而是直接把我要发的数据报发给对方。所以UDP适用于一次传输数据量很少、对可靠性要求不高的或对实时性要求高的应用场景。正因为UDP无需建立类如三次握手的连接,而使...原创 2018-08-26 21:01:28 · 2227 阅读 · 0 评论 -
linux 网络编程之广播
linux 网络编程之广播转载:https://blog.csdn.net/qdlovecsj/article/details/8805483广播方式主要是指使用UDP套接口发送数据,发送数据的目标地址不是普通的地址,而是所指定网络的广播地址。什么是广播地址?是指IP地址中主机地址部分全为1的IP地址。下面是一个广播发送简单流程图。 如何实现广播发送?一般情况下使用sen...转载 2018-09-12 06:32:43 · 520 阅读 · 0 评论 -
linux网络编程之-----多播(组播)编程
linux网络编程之—–多播(组播)编程转载:https://blog.csdn.net/jmq_0000/article/details/7095727 什么是多播 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通...转载 2018-09-12 07:04:43 · 583 阅读 · 0 评论 -
终于有人把epoll讲彻底了
在此申明一下:我的文章有自己原创的,也有转载的,转载的一般都是我看到比较优秀的文章。这篇文章从头到尾介绍了epoll的原理及应用,很不错的一篇文章,分享给大家。转载自:https://blog.csdn.net/qq_31967569/article/details/89678482https://www.toutiao.com/i...转载 2019-05-16 20:03:33 · 6098 阅读 · 3 评论 -
看懂TIME_WAIT
看懂TIME_WAIT1.time_wait状态是什么简单来说:time_wait状态是四次挥手中server向client发送FIN终止连接后进入的状态我们经常说的三个状态:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。2.TIME_WAIT是怎样产生的?因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关...原创 2018-11-12 21:00:33 · 265 阅读 · 0 评论 -
linux IO复用之epoll
linux IO复用之epoll这篇文章是我查看网上各种文章来总结的,为自己学习来做个笔记!!!大多数来源于:https://www.cnblogs.com/lojunren/p/3856290.html首先,什么事是epoll? epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在...原创 2018-09-11 06:41:17 · 321 阅读 · 0 评论 -
有坑,小心!!!mxml安装记录
转: http://blog.sina.com.cn/s/blog_88ea0ce70101a708.html https://blog.csdn.net/bbzhaohui/article/details/71512599 1.源码获取路径:http://michaelrsweet.github.io/mxml/可以直接下载.tar.gz包解压安装,或者直接通过github for...转载 2018-09-14 08:16:41 · 1909 阅读 · 1 评论 -
cJOSN的安装和使用.md
cJSON的安装和使用cJson文件下载安装和使用1.下载:“https://github.com/DaveGamble/cJSON.git”2.解压 unzip XXX.zip3.cJson.c,cJSON.h拷贝到自定义的目录4.编译:gcc cJSON.c test.c -o test -lm (添加数学库)5.基于JSON相关的c函数库,生成json文件写JSON文件的函数...原创 2018-09-18 07:42:54 · 893 阅读 · 0 评论 -
JOSN基本语法.md
JSON基本语法1.JSON的基本语法数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组2.JSON 名称/值对JSON 数据的书写格式是:名称/值对。名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:"Name" : "John"3.JSON 值JSON 值可以是:数字(整数或浮点数)字符串(在双引号中)逻辑值(true 或 false...原创 2018-09-18 07:39:26 · 907 阅读 · 0 评论 -
Linux IO多路复用之select
Linux IO多路复用之select首先,我我们来介绍一下什么是IO多路复用:IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: 当客户处理多个描述符时(一般是交互式输入和网络套接口),必须使用I/O复用。 当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 如果一个TCP服务器既要处理监...原创 2018-09-07 06:59:54 · 306 阅读 · 0 评论 -
mxml的使用
mxml的使用1. XML的介绍: XML是由互联网联盟(World Wide Web Consortium,W3C)的XML工作组定义的。 “扩展标记语言(XML)是SGML的子集,其目标是允许普通的SGML在Web上以目前HTML的方式被服务、接收和处理。XML被设计成易于实现,且可在SGML和HTML之间互相操作。” HTML的出现极大地推动了世界范围内的互联网的发展,万维网就是...原创 2018-09-16 22:05:28 · 7926 阅读 · 0 评论 -
线程同步之信号量
线程同步之信号量一、线程限号量的概念信号量的本质是一个非负整数计数器,是共享资源的数目,通常被用来控制对共享资源的访问信号量可以实现线程的同步和互斥,通过sem_post()和sem_wait()函数对信号量 进行加减操作从而解决线程的同步和互斥 二、信号量的相关函数信号量数据类型:sem_t#include<semaphore.h>int s...原创 2018-08-16 06:28:32 · 275 阅读 · 0 评论 -
线程同步之互斥锁
线程同步之互斥锁 为什么要线程同步?当多线程共享相同的内存的时候,需要每一个线程看到相同的视图。当一个线程被修改时,其他的线程也可以修改或者读取这个变量,所以就需要对这些线程同步,保证不会访问到无效的变量。举个例子: 由此可见,线程同步的重要性。线程同步之互斥锁的函数:> 1. #include <pthread.h>> 2. int p...原创 2018-08-13 07:51:35 · 341 阅读 · 0 评论 -
【Linux】线程总结:初识、创建、等待、终止、分离
【Linux】线程总结:初识、创建、等待、终止、分离转载: https://blog.csdn.net/a1414345/article/details/70947396这篇文章通俗易懂,转载一下转载 2018-08-13 06:16:23 · 223 阅读 · 0 评论 -
进程篇—fork与vfork的恩恩怨怨
进程篇—fork与vfork的恩恩怨怨标签:fork; vfork;vfork与fork区别一、vfork函数 头文件:#include 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 int a=5; 5 int main() 6 { ...原创 2018-05-04 15:00:29 · 406 阅读 · 0 评论 -
进程篇—你所不知道的fork
进程篇—你所不知道的fork标签:fork一、fork用法 作用是创建进程, 函数原型:include 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 int main() 5 { 6 pid_t pid=fork(); ...原创 2018-05-02 09:11:21 · 230 阅读 · 0 评论 -
三次握手四次挥手状态
#三次握手 客户端向服务器端发送SYN包,客户端进入SYN_SEND状态 服务器端收到客户端发送的包返回ACK+SYN包,服务器端进入SYN_RECV状态 客户端收到服务器端返回的包再发回ACK包,客户端进入ESTABLISHED状态,服务器端收到包也进入ESTABLISHED状态 客户端状态:SYN_SENDE ESTABLISHED 服务器端状态:SYN_R原创 2017-08-21 15:47:28 · 310 阅读 · 0 评论 -
select、poll、epoll之间的区别
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用转载 2017-08-21 15:05:45 · 240 阅读 · 0 评论 -
管道
管道分为有名管道和无名管道1.无名管道(pipe)A.管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道B.只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);C.单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。原创 2017-05-03 22:51:16 · 346 阅读 · 0 评论 -
TCP套接字编程
TCP套接字编程TCP的三次握手,四次挥手图解三次握手:1.确认目的设备存在于网络上;2.确认目的设备有活动的服务,并且正在源客户端要使用的目的端口号上接受请求;3.通知目的设备源客户端想要在该端口号上建立通信会话。过程: 1. 客户端向服务器发送包含初始序列值的数据段,开启通信会话;2. 服务器发送包含确认值的数据段,其值等于收到的序列值加 1,并原创 2016-09-26 23:35:29 · 310 阅读 · 0 评论 -
TCP/IP协议
1.OSI模型和网际网协族 2.TCP . UDP. SCTP 都工作在传输层。3.IPv4(网际协议版本4):32位地址长度,4个字节4.IPv6(网际网协版本6):128位地址长度,16个字节,分8组,每组以4位十六进制方式表示。5.TCP是全双工的,UDP也可以是全双工的。 UDP(用户数据报协议):简单的传输层协议,进程给一个UDP套接字中写入一个消息原创 2016-09-24 23:43:29 · 270 阅读 · 0 评论 -
linux 线程
Linux 线程1.线程概念:一个进程内部的一个控制序列2.特点:一个进程在同一时刻只做一件事情。有了多个控制线程以后,在程序设计时可以把进程设计成在同一时刻能够做不止一件事,每个线程处理各只独立的任务。3.线程的标识:线程ID用pthread_t数据类型来表示,实现的时候可以用一个结构来代表pthread_t数据类型,所以可以移植的操作系统不能把它作为整数处理。4.线程的创建:p原创 2016-09-13 22:47:03 · 225 阅读 · 0 评论 -
进程篇:循环创建N个子进程
进程篇:循环创建N个子进程标签:fork();N个子进程从前面的进程篇——fork()可以了解到fork函数会创建父进程和子进程,并且他们在执行的时候,怎么来控制说是先创建父进程,还是先创建子进程呢?其实根据计算机原理来说,父子进程抢占cpu,谁先得到就谁先执行,其实也有一种说法,是父进程先执行的可能性比较大,但是没有理论依据。好了,费话不多说,我们来看代码。 首先,我们先看这样的一...原创 2018-05-14 00:00:00 · 5020 阅读 · 1 评论 -
进程篇—exec函数族
进程篇—exec函数族关键字:exec函数族首先,我们来看一下什么是exec函数族? 所谓exec函数族,就是以exec开头的函数,比如execl函数、execlp函数等,所以称它为exec函数族。 在exec函数族中,一般是由fork创建子进程后,在子进程中执行,也就是替换子进程中的东西,进程中的空间代码完全被新程序代替,但是调用exec程序不会创建新进程,进程ID也没有发生变化...原创 2018-05-14 13:32:58 · 2706 阅读 · 1 评论 -
孤儿进程与僵尸进程
孤儿进程与僵尸进程 <1>孤儿进程 概念:父进程已经退出,只剩子进程,所以子进程变成孤儿进程,init进程变成孤儿进程的父进程;目的是为了释放用户区空间,自己释放不了PCB,需要由父进程来释放。 这个需要我们使用代码来验证一下: 产生孤儿进程最简单的方法就是:让父进程提前结束进程,所以让子进程sleep(1),保证父进程先结束进程。 1 #include<s...原创 2018-07-22 23:10:03 · 389 阅读 · 0 评论 -
进程间通信之共享内存
进程间通信之共享内存一、共享内存的介绍 共享内存可以从字面上去理解,就把一片逻辑内存共享出来,让不同的进程去访问它,修改它。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一...原创 2018-08-08 07:20:11 · 633 阅读 · 0 评论 -
线程同步之读写锁
线程同步之读写锁一、读写锁的原理读写锁与互斥量类似,不过读写锁有更高的并行性。互斥量要么加锁要么不加锁,而且同一时刻只允许一个线程对其加锁。对于一个变量的读取,完全可以让多个线程同时进行操作 。二、读写锁的状态一把读写锁具备三种状态: 1. 读模式下加锁状态 (读锁) 2. 写模式下加锁状态 (写锁)3. 不加锁状态读写锁的特点如下: ...原创 2018-08-15 07:02:11 · 335 阅读 · 0 评论 -
进程间通信之管道
进程间通信之管道 一、管道的概念 1.本质 (1)内核缓存区 (2)伪文件——不占用磁盘空间 2.特点 (1)两部分: (2)读端,写端,对应两个文件描述符 (3)数据写端流入,读端流出 (4)操作管道的进程被销毁之后,管道自动释放 (5)管道默认阻塞的 3.管道的原理 1.内部实现的方式:队列 环形队列 特点:先进先出 缓冲区大小: - 默认4K ...原创 2018-08-03 06:57:46 · 205 阅读 · 0 评论 -
线程创建
线程创建 1.线程的概念线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。 进程——资源分配的最小单位,线程——程序执行的最小单位” 进程有独立的地址空间,一个进...原创 2018-08-11 07:43:52 · 168 阅读 · 0 评论 -
线程同步之条件变量
linux下的条件变量一、线程同步之条件变量条件变量是用来等待线程而不是上锁的 ,条件变量之所以要和互斥锁一起使用,主要是因为互斥锁的一个明显的特点就是它只有两种状态:锁定和非锁定,而条件变量可以通过允许线程阻塞和等待另一个线程发送信号来弥补互斥锁的不足,所以互斥锁和条件变量通常一起使用。 条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。条件变量上的基本操作...原创 2018-08-14 07:38:36 · 419 阅读 · 0 评论 -
进程间通信之消息队列
进程间通信之消息队列首先,我们来说一下什么是消息队列: 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。一、函数原型msgget函数原型:int msgget(key_...原创 2018-08-06 07:42:03 · 4083 阅读 · 1 评论