Linux
文章平均质量分 71
Cecilia3333
这个作者很懒,什么都没留下…
展开
-
tcpdump学习笔记(二)
序言单独总结tcpdump抓包的常用命令主要语法过滤主机/IP: tcpdump -i eth1 host 172.16.7.206抓取所有经过网卡1,目的IP为172.16.7.206的网络数据 过滤端口: tcpdump -i eth1 dst port 1234抓取所有经过网卡1,目的端口为1234的网络数据 过滤特定协议: tcpdump -i eth1 udp抓取所有经过网卡1,协议类型...原创 2018-05-31 16:49:04 · 493 阅读 · 0 评论 -
网络基础——TCP与UDP的对比
TCP与UDP的基本区别(1)基于连接与无连接;(2)TCP要求系统资源较多,UDP较少;(3)UDP程序结构较简单;(4)面向字节流(TCP)与面向数据报(UDP);(5)TCP能保证传输的可靠性,UDP不能;(6)TCP能保证数据的按序到达,UDP不能。TCPTCP编程的服务器端一般步骤是:(1)创建一个socket,用函数socket();(2)设置socket属性,用函数setsockop...原创 2018-05-22 20:02:17 · 308 阅读 · 0 评论 -
网络基础——应用层
协议是一种“约定”。socket api的接口在读写数据时,都是按字符串的方式来发送接收的。原创 2018-05-31 10:27:26 · 415 阅读 · 0 评论 -
netstat详解
netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具。它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。netstat可以用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接状况。netstat相关命令:1.netstat -a:显示所有网络连接和侦听端口。2.netstat -l:显示监控中的服务器的socket。3....原创 2018-05-13 19:09:38 · 1911 阅读 · 1 评论 -
网络编程套接字(7)——多线程版本的简单TCP网络程序
通过每个请求创建一个线程的方式来支持多连接:server.c:#include <stdio.h>#include<pthread.h>#include<sys/socket.h>#include<netinet/in.h>#include<unistd.h>#include<string.h>#include&l...原创 2018-05-06 20:32:24 · 278 阅读 · 0 评论 -
网络编程套接字(6)——多进程版本的简单TCP网络程序
在上一篇博客中,我们实现了单进程版本的简单TCP网络程序。这种程序一次只能连接一个客户端,具有局限性。所以现在我们来实现多进程版本的简单TCP网络程序,通过创建子进程的方式来支持多连接。server.c:#include <stdio.h>#include<sys/socket.h>#include<netinet/in.h>#include<uni...原创 2018-05-06 20:06:48 · 209 阅读 · 0 评论 -
网络编程套接字(8)——TCP协议通讯过程
下图为基于TCP协议的客户端/服务器程序的一般流程:服务器初始化: 调用socket,创建文件描述符; 调用bind,将当前的文件描述符与ip/port绑定在一起。若此端口已被其他进程占用,则绑定失败; 调用listen,声明当前的文件描述符作为一个服务器的文件描述符,为后面的accept做准备; 调用accept,阻塞式等待客户端连接过来。...原创 2018-05-06 20:34:42 · 320 阅读 · 1 评论 -
网络编程套接字(5)——单进程版本的简单TCP网络程序
下面我们来实现一个简单的阻塞式的网络聊天工具:TCP服务器server.c的作用为接受client的请求,并与client进行简单的数据通信。#include <stdio.h>#include<sys/socket.h>#include<netinet/in.h>#include<unistd.h>#include<string.h&...原创 2018-05-06 19:52:18 · 313 阅读 · 0 评论 -
网络编程套接字(4)——地址转换函数
我们只介绍基于IPv4的socket网络编程,sockaddr_in中的成员struct in_addr sin_addr表示32位的IP地址。在日常生活中,我们常用点分十进制的字符串来表示IP地址。以下函数可在字符串表示和in_addr表示之间转换。字符串转in_addr的函数in_addr转字符串的函数其中inet_pton和inet_ntop不仅可以转换IPv4的in_addr,还可以转...原创 2018-05-06 13:04:33 · 885 阅读 · 0 评论 -
网络编程套接字(3)——简单的UDP网络程序
UDP服务器#include <stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include<netinet/in.h>#include<stdlib.h>void service(int sock){ char...原创 2018-05-06 11:55:32 · 288 阅读 · 0 评论 -
网络基础——TCP的各种机制
确认应答机制(ACK) TCP将每个字节的数据都进行了编号,即为序列号。每一个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据,下一次你从哪里开始发。超时重传机制 主机A发送数据给B以后,可能因为网络拥堵等原因,数据无法到达主机B;如果主机A在一个特定时间间隔内没有收到B发来的确认应答,...原创 2018-05-22 00:49:20 · 5539 阅读 · 0 评论 -
网络基础——连接管理机制
在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接。在之前的博客中,我们已经介绍过了TCP三次握手以及四次挥手的过程,现在我们就这个问题,从传输层的角度来探讨一下。 三次握手(1)客户端向服务器发送SYN信号,请求建立连接;(2)服务器端接收到客户端的请求后,发送SYN+ACK信号,表示确认建立连接;(3)客户端收到服务器端的反馈后,向服务器端发送ACK字段表示确认...原创 2018-05-17 22:54:52 · 1068 阅读 · 0 评论 -
网络基础——TCP协议
TCP协议的全称为“传输控制协议”,是一种面向连接的、可靠的、基于字节流的运输层通信协议,主要是对数据的传输进行一个详细的控制。TCP协议段格式...原创 2018-05-17 19:24:52 · 290 阅读 · 0 评论 -
网络基础——UDP协议
UDP协议端格式原创 2018-05-17 08:47:56 · 323 阅读 · 0 评论 -
pidof简介
pidof是Linux系统中用来查找正在运行进程的进程号(PID)的工具。我们可以通过查询man手册来了解:语法:pidof [进程名]常用选项: -s 表示只返回1个 pid -x 表示同时返回运行给定程序的 shell 的 pid -o 表示告诉 piod 表示忽略后面给定的 pid ,可以使用多个 -o 。...原创 2018-05-17 00:23:33 · 887 阅读 · 2 评论 -
网络基础——ICMP协议
ICMP是“Internet Control Message Protocol”(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,属于网络层协议,用于在IP主机、路由器之间传递控制消息,包括报告错误、交换受限控制和状态信息等。一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通。但是IP协议并不提供可靠传输,如果包丢了,IP协议并不能通知传输层是否丢...原创 2018-06-03 13:10:43 · 631 阅读 · 0 评论 -
网络基础——NAT技术
NAT即Network Address Translation,网络地址转换。之前我们讨论过了,在IPv4协议中,IP地址数量不充足的问题。NAT技术是解决当前IP地址不够用的主要手段,是路由器的一个重要功能。NAT能够将私有IP对外通信时对外通信时转成全局IP,也就是一种将私有IP和全局IP相互转化的技术方法。全局IP要求唯一,但是私有IP不需要。在不同的局域网中出现相同的私有IP是完全不影...原创 2018-06-03 15:16:59 · 451 阅读 · 0 评论 -
tcpdump学习笔记(一)
基本概念tcpdump是Linux中强大的网络数据采集分析工具之一。用简单的话来定义tcpdump,就是dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助去掉...原创 2018-05-31 16:40:20 · 237 阅读 · 0 评论 -
NAT技术与代理服务器技术的区别
NAT技术 NAT技术是一种网络地址转换技术,网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的...转载 2018-05-31 11:47:12 · 972 阅读 · 0 评论 -
常见网络攻击手段原理分析
TCP SYN拒绝服务攻击 一般情况下,一个TCP连接的建立需要经过三次握手的过程,即: 1、建立发起者向目标计算机发送一个TCP SYN报文; 2、目标计算机收到这个SYN报文后,在内存中创建TCP连接控制块(TCB),然后向发起者回送一个TCP ACK报文,等待发起者的回应; 3、发起者收到TCP ACK报文后,再回应一个ACK报文,这样TCP连接就建立起来了。 利用这个过程,一些恶...转载 2018-05-31 11:35:53 · 1000 阅读 · 0 评论 -
高级IO——I/O多路转接之epoll
epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。根据man手册的说法,epoll是为处理大批量句柄而作了改进的poll。epoll是在205044内核中被引进的,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 e...原创 2018-08-04 11:42:17 · 550 阅读 · 0 评论 -
网络基础——ARP协议
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络上实际上传输的是“帧”,帧里面是有目标主机的Mac地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的Mac地址。但这个目标Mac地址是如何获得的呢?它就是通过地址解析协议获得的。所谓的“地址解析”,就是主机在发送帧前将目标IP地址转换成目标Mac地址的过程。A...原创 2018-05-24 21:53:27 · 820 阅读 · 0 评论 -
网络基础——DNS
DNSDNS(Domain Name System),意为域名解析协议。是一整套从域名映射到IP的系统。DNS是应用层协议,底层运用的是UDP协议。DNS是Internet上解决网上机器命名的一种系统。就像拜访朋友要先知道别人家怎么走一样,Internet上当一台主机要访问另一台主机时,必须首先获知其地址。TCP/IP中的IP地址是由四段以“.”分开的数字组成,使用IP地址和端口号来确定网络上...原创 2018-05-24 23:16:42 · 284 阅读 · 0 评论 -
网络基础——数据链路层
数据链路层介于物理层和网络层之间,在物理层提供的服务的基础上向网络层提供服务。数据链路层最基本的服务是将源机网络层来的数据可靠地传输到相邻节点的目的机网络层。数据链路层解决的是在局域网内点到点的问题。认识以太网以太网是当今应用最广泛的局域网技术,它不是一种具体的网络,而是一种技术标准。既包含了数据链路层的内容,也包含了一些物理层的内容。以太网中的网线必须使用双绞线。和以太网并列的还有令牌环网、无线...原创 2018-05-24 19:55:01 · 269 阅读 · 0 评论 -
高级IO——IO多路转接之poll
poll是Linux中的字符设备驱动中的一个函数。和select实现的功能差不多,poll的作用是把当前的文件指针挂到等待队列。参数说明:fd是一个poll函数监听的结构列表。每一个元素中,包含了三部分内容:文件描述符、监听的事件集合、返回的事件集合;nfds表示fds数组的长度;timeout表示poll函数的超时时间,单位是毫秒(ms)。events和revents的取值:...原创 2018-06-09 22:36:12 · 205 阅读 · 0 评论 -
高级IO——IO多路转接之select
初识select系统提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监听多个文件描述符的状态变化的。程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变。select函数原型参数解释: 参数nfds是需要监视的最大的文件描述符值+1; rdset,wrset,exset分别对应于需要检测的可读文件描述符的集合,可写文件...原创 2018-06-04 17:31:57 · 245 阅读 · 0 评论 -
网络基础——网络层
网络层提供路由和寻址的功能,使两个终端系统能够互联且决定最佳路径,并具有一定的拥塞控制和流量控制能力。TCP/IP协议体系中的网络层功能由IP协议规定和实现,故又称IP层。网络层介于运输层和数据链路层之间,它在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,从而向运输层提供最基本的端到端的数据传送服务。IP协议基本概...原创 2018-05-22 23:36:44 · 773 阅读 · 0 评论 -
高级IO——重定向
dup/dup2系统调用函数原型如下:使用dup将标准输出重定向到文件中#include <stdio.h>#include<unistd.h>#include<fcntl.h>int main(){ int fd = open("./log",O_CREAT | O_RDWR); if(fd < 0){ perro...原创 2018-06-03 18:08:31 · 265 阅读 · 0 评论 -
高级IO——非阻塞IO
在上一篇介绍非阻塞IO时,我们可以认识到,非阻塞IO在条件不成立时直接返回。通常我们在设置接口是阻塞还是非阻塞的时候,有两种方案: (1)将文件描述符设置为非阻塞式文件描述符; (2)通过传递特殊选项,让接口本身以非阻塞方式调用。fcntl一个文件描述符,默认都是阻塞IO。fcntl的函数原型如下:fcntl可以改变已经打开的文件性质。针对cmd的值,fcntl能够接受第三个参数arg...原创 2018-06-03 17:25:52 · 379 阅读 · 0 评论 -
高级IO——五种IO模型
IO可以分为同步IO和异步IO,在同步IO中又包括阻塞IO、非阻塞IO、信号驱动IO和IO多路转接。为了更好地理解这些IO模型,了解它们的区别,我们在这里可以简单的举一个例子来辅助理解:相信在日常生活中,我们很多人都有过钓鱼的经历。钓鱼是一件考验耐心和毅力的活动,假设有一天,在一条宽广的河边,有很多人在钓鱼。其中小一采用的钓鱼方法是将鱼饵挂到鱼钩上抛至河中后,就目不转睛的看着鱼竿,等着鱼上钩;小二...原创 2018-06-03 16:42:08 · 387 阅读 · 0 评论 -
网络基础——传输层
传输层负责数据能够从发送端传输接收端。端口号端口号(port)标识了一个主机上进行通信的不同的应用程序。 在TCP/IP协议中,用“源IP”,“源端口号”(统称为源端套接字),“目的IP”,“目的端口号”(统称为服务器端套接字),“协议号”这样一个五元组来标识一个通信,可通过netstat -n查看。协议号决定了使用传输层的哪个协议。服务器的端口号是确定的。...原创 2018-05-17 00:07:52 · 294 阅读 · 0 评论 -
网络基础——HTTP协议
每个应用层协议都是为了解决某一类应用问题,而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的应用层的具体内容就是规定应用进程在通信时所遵循的协议。应用层的许多协议都是基于客户服务器方式。客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。客户服务器方式所描述的是进程之间服务和被服务的关系。客户是服务请求方,服务器是服务提供方。HTTP又被称为...原创 2018-06-03 12:31:25 · 494 阅读 · 0 评论 -
重定向
首先我们尝试将文件描述符中的1关闭。#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main(){ close(1); int fd=open("myfile",O_WRONLY|O_CREAT,0644);...原创 2018-03-25 21:52:43 · 362 阅读 · 0 评论 -
进程间通信——管道
进程间通信目的:数据传输:一个进程需要将它的数据发送给另一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件,(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。进程间通信本质:让两个或多个毫不相关的进程看到同一份公共资...原创 2018-04-07 22:01:50 · 150 阅读 · 0 评论 -
进程间通信——消息队列
消息队列提供了一个从一个进程向另外一个进程发送有类型数据块的方法。消息队列的不足:每个消息的最大长度是有上限的,每个消息队列的总字节数也是有上限的,系统上消息队列的总数也有一个上限。IPC对象数据结构 内核为每个IPC对象维护一个数据结构。在/usr/include/linux/ipc.h中可以查看到: 消息队列结构在/usr/include/linux/msg.h中可以...原创 2018-04-07 23:56:05 · 181 阅读 · 0 评论 -
进程间通信——共享内存
共享内存是最快的IPC形式。因为进程不再通过执行进入内核的系统调用来传递彼此的数据,省略了两次内存拷贝。 共享内存数据结构: 共享内存函数: shmget函数 功能:用来创建共享内存 函数原型:int shmget(key_t key,size_t size,int shmflg); ...原创 2018-04-08 20:20:16 · 144 阅读 · 0 评论 -
进程间通信——信号量
信号量主要用于同步与互斥。进程互斥: 由于各进程要求共享资源,而且有些资源要求互斥使用,因此各进程间竞争使用这些资源,进程的这种关系被称作进程的互斥。 系统中某些资源一次只允许一个进程使用,我们可以称这样的资源为临界资源或互斥资源。 在进程中涉及到互斥资源的程序段叫临界区。进程同步: 进程同步指的是多个进程需要相互配合共同完成一项任务。信号量...原创 2018-04-08 22:34:49 · 269 阅读 · 0 评论 -
信号
信号的基本概念: 信号机制是Linux系统中做古老的进程之间的通信机制,解决进程在正常运行过程中被中断的问题,导致进程的处理流程会发生变化。 注意: 1.Ctrl+C产生的信号只能发送给前台进程。一个命令后面加上&即可放到后台运行,这样Shell就不必等待进程结束就可以接受新的命令,启动新的进程。 2.Shell可以同...原创 2018-04-09 10:08:15 · 143 阅读 · 0 评论 -
信号的捕捉
如果信号的处理动作是用户自定义函数,在信号递达时就调用此函数,这成为捕捉信号。sighandler和main函数使用不同的堆栈空间,它们之间不存在调用与被调用关系,是两个独立的控制流程。当进程从内核态返回用户态时,会对信息进行检测并处理。sigaction函数: 功能:读取和修改与指定信号相关联的处理动作。 函数原型:int sigaction(int sign...原创 2018-04-09 18:20:00 · 130 阅读 · 0 评论 -
可重入函数
如上图所示,main函数调用insert函数向一个链表head中插入节点node1,插入操作分为两步,刚做完第一步时,因为硬件中断使进程切换到内核,再次回用户态之前检查到有信号待处理,于是切换到sighandler函数,sighandler也调用insert函数向同一个链表head中插入节点弄得,插入操作的两步都做完之后,从sighandler返回内核态,再次回到用户态就从main函数调用的ins...原创 2018-04-09 22:55:02 · 201 阅读 · 0 评论