1、nslookup和host基本相同,用来查询一台机器的IP地址和其对应的域名。该命令有两种模式:交互式和非交互式。若命令不带参数,则会进入交互模式。
2、tcpdump是网络运维人员查找问题的关键。通过不同的命令行选项来改变抓包状态。利用正则表达式组合成多种过滤报文的的条件,数据包满足正则表达式的条件就会被捕获。如果没有给出任何条件,则网络上的所有数据包将会被截获。
#tcpdump tcp port 80 and host 119.75.219.38 > net_stat.txt
还可以将抓获的包保存到pcap文件,使用图形界面的网络协议工具例如Wireshark进行数据分析。
#tcpdump tcp port 80 -s 0 -w http.pcap
3、网络应用程序与linux内核如何进行交互通信?
通过一个软中断,中断号是0x80。通常是应用程序都是使用具有标准接口定义的C函数库。它间接的使用内核的系统调用,也即应用程序调用C函数库中的函数,C函数库中再通过int 0x80进行系统调用。
4、linux进程布局中一些概念
4.1 栈内存 “运行时栈”(临时分配,临时释放)
一个函数被调用时会在栈顶分配一帧内存,用于存放该函数内定的局部变量以及所有形参,函数调用完毕,它所占用的那帧内存就会被释放。主要存放进程执行过程中的局部变量,包括函数嵌套调用中函数切换时当下的代码空间和相关的寄存器值。栈的大小有限制一般是8MB.
4.2 堆内存 “运行时堆”
是自由内存,堆大小没有限制,最大值取决于系统的物理内存。
4.3 数据段 (一直占用内存直到进程退出)
.bss段存放未初始化的静态数据,它们被初始化为0;.data段专门存放已经初始化的静态数据(所有的全局变量和static型局部变量),这个初始值从程序中复制而来;.rodata段用来存放只读数据,也就是常量,如字符常量,整形、浮点型常量。
4.4 代码段
.text段存放用户程序代码;.init段用来存储系统给每一个可执行程序自动添加的“初始化”代码(这个段当中的代码默认只会执行一遍,完成之后所占据的内存就会被立即释放,以便节省系统资源),这部分代码功能包括环境变量的准备,命令行参数的组织与传递等,并且这部分数据放在栈底。
5、堆中分配动态内存
int *p=(int *)malloc(1*sizeof(int));
int *p_=(int *)realloc(p,size*sizeof(int));
free p;
free p_
堆的分配和扩展以及释放。