May 06 2008

linux下网卡驱动的安装

Category: 技术ssmax @ 17:00:32

这两天装一台服务器,主板太另类了,在一台1u的机箱里面装了两台机器,每个都是4u的X3210,主板是X38ML,在intel首页上面都没多少介绍,找了半天才找到网卡驱动,安装debian的时候不能用网络安装,气死了,难道要下载20多张cd?最后把cd1下载回来,听说debian是按照使用频率排cd的,cd1基本需要都全了。。。

用u盘安装,grub4dos带kernel启动安装,只是装了基本的包,然后到系统里面把iso文件mount上,linux虚拟光驱太方便了一点。。。

moute -o loop -t iso9660 /path/to/iso/file /mnt/cdrom

然后用dselect来选择安装包,把kernel header啊、build之类的装上。。。就可以开始编译驱动的了。

----------------------------------------------------

一开始还不知道,去官网下载了些source来搞,其实也是可以的,该版本内核的配置在/boot/config-xxxx,复制到src/.config,然后也可以用make-kpkg来编译,以前也搞过,就是通不过。。。

cp /boot/config-2.x.y-flavour .config
make-kpkg –append-to-version “-flavour” –revision 2.x.y-z –config old configure

----------------------------------------------------

编译驱动就是按步骤来了

2. Untar/unzip archive:

     tar zxf igb-x.x.x.tar.gz

3. Change to the driver src directory:

     cd igb-x.x.x/src/

4. Compile the driver module:

     make install

   The binary will be installed as:

     /lib/modules/<KERNEL VERSION>/kernel/drivers/net/igb/igb.[k]o

   The install locations listed above are the default locations.  They
   might not be correct for certain Linux distributions. 

5. Load the module using either the insmod or modprobe command:

     modprobe igb

     insmod igb

   Note that for 2.6 kernels the insmod command can be used if the full
   path to the driver module is specified.  For example:

     insmod /lib/modules/<KERNEL VERSION>/kernel/drivers/net/igb/igb.ko

   With 2.6 based kernels also make sure that older igb drivers are
   removed from the kernel, before loading the new module:

     rmmod igb; modprobe igb

 

本来modprobe之后应该能找到eth0之类的设备了,但是这个驱动是for rehl的,debian貌似不会自己加上去,只有手动修改/etc/network/interfaces 了,

auto lo

iface lo inet loopback

auto eth1 eth2

iface eth1 inet dhcp

iface eth2 inet dhcp

 

联想的机器就是奇怪,在windows下面能看到3张网卡,linux下面貌似只有两张,是eth1和eth2,不知道eth0死哪里去了,lspci看到一堆驱动还没有装的。。。intel官网也没有就不管了。。。明天继续做性能测试。。。


May 05 2008

Grub4dos命令索引

Category: 技术ssmax @ 17:46:03

blocklist

<pre>blocklist FILE</pre> 打印出文件 FILE 的“块清单”表达法(该表达法也是合法的 GRUB 文件名,并且完全等价于 FILE)。

boot

<pre>boot</pre> 引导已加载的操作系统或扇区链式加载器。

bootp

<pre>bootp [–with-configfile]</pre> 通过BOOTP初试化网络设备。如果使用了`–with-configfile’参数,此命令将会试图去加载一个特定的配置文件。

cat

<pre>cat [–hex] [–skip=S] [–length=L] [–locate=STRING] FILE</pre> 显示指定文件的内容,或者显示文件中指定字符串的位置。

cdrom

<pre>cdrom –add-io-ports=P | –init | –stop</pre> 初始化或者停止所有的 ATAPI CDROM 设备, 或者为一个可能的 ATAPI CDROM设备设置附加的 IO 端口。P 的高字指定设备控制寄存器组的端口基址,P 的低字指定设备命令寄存器组的端口基址。”

chainloader

<pre>chainloader [–force] [–load-segment=LS] [–load-offset=LO]

[--load-length=LL] [--skip-length=SL] [--boot-cs=CS] [--boot-ip=IP]
[--ebx=EBX] [--edx=EDX] [--sdi] [--enable-a20] FILE</pre>

加载链式加载器 FILE。若指定了 –force, 则强制加载而不检查第一扇区尾部的合法引导标签(55 AA)是否存在。LS:LO 用于指定有别于 0000:7C00 的启动映像加载地址。LL 用于指定启动映像的长度(在 512 字节至 640K 之间)。SL 用于指定装入启动映像之前需要从映像开头跳过的长度(以字节计数)。CS:IP 用于指定让启动映像获得控制需要跳转到的地址。EBX/EDX 分别用于指定在启动映像获得控制的那一刻 EBX/EDX 寄存器应有的值。用 –sdi 可以强制把 FILE 当作 Windows XP 的一个内存启动文件格式(System Deployment Image)来对待(请参考微软相应文档)。如果你希望在控制传递给启动映像时切断 CPU 的地址线 A20,可以用 –disable-a20 参数做到。

cmp

<pre>cmp FILE1 FILE2</pre> 比较两个文件, 并且报告两者之间的不同的信息。

color

<pre>color NORMAL [HIGHLIGHT]</pre> 改变菜单的颜色。Normal 用于指定菜单项的未选中时的颜色,HIGHLIGHT 则用于指定菜单项的被选中时的颜色。如果你未指定 HIGHLIGHT 色,那么我们将使用 NORMAL 的反色值。颜色值的格式是 “FG/BG”。FG 和 BG 是颜色的名称,如下:black(黑), blue(蓝), green(绿), cyan(青), red(红), magenta(粉红), brown(棕), light-gray(亮灰),dark-gray(暗灰), light-blue(浅蓝), light-green(淡绿), light-cyan(淡青), light-red(明红), light-magenta(浅红), yellow(黄) 和 white(白)。注意,BG 的值只能是前八个。另外,若想使用闪烁的前景色,你在 FG 前使用前缀 “blink-” 即可。

configfile

<pre>configfile FILE</pre> 把文件 FILE 作为配置文件立即加载执行(只有当加载失败时才返回)。

debug

<pre>debug</pre> 打开/关闭 DEBUG(调试、除错) 模式。

default

<pre>default [NUM | `saved’ | FILE]</pre> 设置默认启动的菜单入口项为 NUM (0 代表第一项),或者由 savedefault 所保存的入口项(如果指定了关键字 saved),或者先前保存在文件 FILE 中的入口项。当指定了 FILE 时,后续的 savedefault 命令都将把入口项保存到 FILE 中。

device

<pre>device DRIVE DEVICE</pre> 声明BIOS驱动器对应的实际物理设备。这条命令只用于grub命令行。

dhcp

<pre>dhcp</pre> 通过DHCP初试化网络设备。

splashimage

<pre>splashimage FILE</pre> 图形模式下载入背景图片文件。

foreground

<pre>foreground RRGGBB</pre> 设置图形模式下的前景色。RR 代表红色, GG 代表绿色, BB 代表蓝色。这些数值都是用十六进制来表示的。

background

<pre>background RRGGBB</pre> 设置图形模式下的背景色。RR 代表红色, GG 代表绿色, BB 代表蓝色。这些数值都是用十六进制来表示的。

clear

<pre>clear</pre> 清屏幕。

displayapm

<pre>displayapm</pre> 显示 APM BIOS 的相关信息。

displaymem

<pre>displaymem</pre> 显示 GRUB 所判断到的当前系统的内存分布,包括所有物理内存区域。

dump

<pre>dump FROM TO</pre> 显示诸多文件的内容。注意,FROM 所指定的必须是一个 GRUB 文件,TO 所指定的必须是一个 OS 文件。这条命令只在 grub shell 中才有。

embed

<pre>embed STAGE1_5 DEVICE</pre> 如果设备是个驱动器, 则将Stage 1.5嵌入到主引导扇区之后。如果是个FFS分区, 则可嵌入到该设备饿`引导代码’区中。并输出 Stage 1.5所占的扇区数。

fallback

<pre>fallback NUM</pre> 进入无人干预启动模式:如果默认启动入口项出错失败,立即用入口项 NUM 来启动(这里的“入口项”与 default 命令中的“入口项”意义相同)。

commandline

<pre>commandline</pre> 进入命令行提示符方式。

find

<pre>find [–set-root] [–ignore-floppies] FILENAME</pre> 在所有分区上查找文件名, 并显示包含该文件的设备。如果使用了 –set-root 选项, 那么当在某个设备上找到 FILENAME 时, 立即停止查找, 并将此设备设定为新的 root 设备。如果指定了 –ignore-floppies 选项, 那么查找过程将略过所有的软盘。

fstest

<pre>fstest</pre> 切换文件系统的试验模式。

geometry

<pre>geometry DRIVE [CYLINDER HEAD SECTOR [TOTAL_SECTOR]]</pre> 输出驱动器的相关信息. 在 grub shell 中, 你可以用这条命令设置驱动器参数为任意值。如果你省略了总扇区数, 它将由 C/H/S 的值自动计算出来。

halt

<pre>halt [–no-apm]</pre> 关闭系统。如果APM(高级电源管理)功能存在,将使用 APM BIOS 关闭系统,除非指定了 `–no-apm’ 选项。

help

<pre>help [–all] [PATTERN …]</pre> 显示内部命令的帮助信息。要查看所有命令的帮助,请使用 `–all’ 参数。

hiddenmenu

<pre>hiddenmenu</pre> 隐藏菜单。

hide

<pre>hide PARTITION</pre> 通过在分区类型上置隐藏标志,隐藏指定分区。

ifconfig

<pre>ifconfig [–address=IP] [–gateway=IP] [–mask=MASK] [–server=IP]</pre> 指定 IP 地址, 子网掩码, 网关和服务器地址。不带参数时,将显示当前的网络配置。

impsprobe

<pre>impsprobe</pre> 探测 Intel 多处理器规范 1.1/1.4 配置表并使所找到的各处理器启动进入闭循环。

initrd

<pre>initrd FILE [ARG …]</pre> 加载Linux格式的初始化虚拟盘, 并设置必要的参数。

install

<pre>install [–stage2=STAGE2_FILE] [–force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE] [REAL_CONFIG_FILE]</pre> 安装STAGE1到指定设备上,安装加载STAGE2需要的块列表到STAGE2上。如果使用了选项’d’, STAGE1总是试图使用安装STAGE2的驱动器, 而不是启动盘。STAGE2将加载在指定地址上, 如果未声明地址, 则自动检测。如果使用了选项 ‘p’ 或给出了配置文件, 将修改STAGE2的第一个数据块, 修正实际Stage2启动时使用的配置文件位置。对于Stage 1.5, 该值为Stage 2的路径。如果安装的是Stage 1.5, 且指定了实际配置文件, 则将该配置文件路径写入Stage2中。

ioprobe

<pre>ioprobe DRIVE</pre> 侦测指定设备的 I/O 端口号。

kernel

<pre>kernel [–no-mem-option] [–type=TYPE] FILE [ARG …]</pre> 尝试载入主引导影像文件。其它项将被作为内核的命令行参数而传递给内核。使用此命令以前,内核所用到的模块应该被重新载入。参数 –type 用于说明内核的类型,包括 “netbsd”, “freebsd”, “openbsd”, “linux”, “biglinux” 和 “multiboot”。参数 –no-mem-option 用于说明不必自动传递 Linux 的内存参数。

lock

<pre>lock</pre> 如果用户未被认证,则终止命令的执行。

makeactive

<pre>makeactive</pre> 将 root 设备置为活动分区。当然,此命令只对 PC 的硬盘主分区有效。

map

<pre>map [–status] [–mem[=RESERV]] [–hook] [–unhook] [–rehook] [–floppies=M] [–harddrives=N] [–ram-drive=RD] [–rd-base=ADDR] [–rd-size=SIZE] [[–read-only] [–fake-write] [–unsafe-boot] [–disable-chs-mode] [–disable-lba-mode] [–heads=H] [–sectors-per-track=S] TO_DRIVE FROM_DRIVE]”</pre> 对设备进行映射。这对于扇区链式引导是很有用的功能,比如 DOS。这里,目的驱动器 TO_DRIVE 可以是一个磁盘文件(注意,当没有指定 –mem 时,这要求磁盘文件是连续存放于介质中的。另外,若使用了 –read-only 参数, 该功能将使仿真磁盘处于只读; 若使用了 –fake-write 参数,该功能将使仿真磁盘处于假写,即简单地返回“写入”成功,但实际上不执行写入操作; 若使用了 –unsafe-boot 参数,该功能将使仿真磁盘的第一扇区处于可写; (默认时仿真磁盘的第一扇区被保护,不能经由 int13/AH=03h 而写入)。若使用了 –disable-chs-mode 参数,CHS 访问功能将被禁用; 若使用了 –disable-lba-mode 参数, LBA 访问功能将被禁用; H 和 S 指定了虚拟磁盘的物理参数。若使用了 –status, –hook, –unhook, –rehook, –floppies, –harddrives, –ram-drive, –rd-base, –rd-size, –memdisk-raw, –safe-mbr-hook, –int13-scheme 诸参数之一,那么其它的命令行参数将被忽略。–floppies 用于修改 BIOS 数据区 0x410 处的软盘个数位域。–harddrives 用于修改 BIOS 数据区 0x475 处的硬盘个数字节。 –mem 参数指定使用内存来仿真磁盘(此时 TO_DRIVE 可以是 gzip 格式的压缩文件)。–ram-drive 用于修改代表内存盘的 BIOS 磁盘号码。–rd-base 指定内存盘的起始地址。–rd-size 指定内存盘的大小(以字节计数)。如果 RESERV <= 0, 那么至少保留 (-RESERV * 512) 字节的内存用来存放该内存盘的扇区数据;如果 RESERV > 0, 该内存盘将起始于绝对物理地址 (RESERV * 512),而终止于该起始地址所在的连续内存块的结尾(通常等于或接近于物理内存的结尾)。

md5crypt

<pre>md5crypt</pre> 产生一个 MD5 格式的密码。

module

<pre>module FILE [ARG …]</pre> 为多重启动映像格式的引导映像加载启动模块文件 FILE(对该文件的内容不作任何解释, 因此使用这条命令的用户必须了解所提到的内核映像的要求)。其余参数作为“模块命令行”传递, 就像 kernel 命令那样。

modulenounzip

<pre>modulenounzip FILE [ARG …]</pre> 与 module 类似, 但是自动禁用了解压缩。

pager

<pre>pager [FLAG]</pre> 没有参数时,切换页模式。如果使用了 FLAG 参数,那么它为`on’ 时为开启, 为 `off’ 时为关闭。

partnew

<pre>partnew PART TYPE START LEN</pre> 创建一个新的主分区。START 为起始扇区号,LEN 为其包含的扇区数,TYPE 为其分区类型。

parttype

<pre>parttype PART TYPE</pre> 改变指定分区(PART)的分区类型(TYPE)。

password

<pre>password [–md5] PASSWD [FILE]</pre> 设置密码。当其处于菜单文件的首项时,将禁用所有的交互式菜单编辑功能,包括编辑菜单项(`e`)/进入命令行(`c`)。当正确输入密码 (由PASSWD指定)后,载入新的菜单文件(由FILE指定)。如果你没有指定 FILE 项,那么上述被禁用的功能将被启用了。当然,你也可以将此命令用到某个菜单项里,用以提高系统安全性。参数 –md5 说明密码(PASSWD)是使用md5crypt 加密的。

pause

<pre>pause [–wait=T] [MESSAGE …]</pre> 打印信息 MESSAGE,然后等待,直到按下一键,或者 T 秒过后,命令结束,控制返回到 GRUB,继续执行下一条命令。

quit

<pre>quit</pre> 如果 GRUB 先前是从 DOS 启动的,就返回到 DOS。

rarp

<pre>rarp</pre> 用 RARP 初始化网络设备。

read

<pre>read ADDR</pre> 从内存的指定位置读取一个 32-bit 的值,并以十六进制形式显示出来。

write

<pre>write ADDR VAL</pre> 写一个 32 位的值 VAL 到内存地址 ADDR。

reboot

<pre>reboot</pre> 重启系统。

fontfile

<pre>fontfile FILE</pre> 指定中文字体文件,并切换到简体中文显示方式。

root

<pre>root [DEVICE [HDBIAS]]</pre> 设置根分区。设置根分区为指定设备(DEVICE), 然后尝试挂接该分区以得到分区大小(用于在ES:ESI中传递, 扇区链式启动方式要求这样)。BSD 驱动类型用于启动 BSD 的核心启动), 和确定 BSD 子分区所在的 PC 分区。可选的磁盘偏移参数, 用于 BSD 核心确定有多少个控制器在当前控制器前。比如: 假设同时有一个IDE和SCSI盘, 而BSD根分区在 SCSI盘上, 那么磁盘偏移就为1。

rootnoverify

<pre>rootnoverify [DEVICE [HDBIAS]]</pre> 类似于“root”指令, 但不尝试挂接该分区。这用于有些操作系统安装在 GRUB 能访问到的磁盘区域之外,或者其文件系统不能被 GRUB 识别出来,但你仍然想把这个设备强制设置为 root 设备的情况。说明:这样一来,原来在 root 命令中尝试挂接的那些项目,现在将不起作用了。

savedefault

<pre>savedefault</pre> 如果没有指定参数,就把当前菜单项保存为默认的引导项。如果指定了参数 NUM,那么保存的就是它。如果指定的是关键字 fallback,那么保存的是 fallback 命令所指定的菜单项。如果 T 不是 0,将提示用户按下 Y 键来确认写盘操作,如果在 T 秒之内没有按键,或者按键不是 Y,那么写盘保存的操作将被取消。

serial

<pre>serial [–unit=UNIT] [–port=PORT] [–speed=SPEED] [–word=WORD] [–parity=PARITY] [–stop=STOP] [–device=DEV]</pre> 初始化一个串口设备。UNIT 用于指定要使用的串口设备 (如,0 == COM1); PORT 用于指定端口号; SPEED 用于指定通讯的数率; WORD 为字长; PARITY 为奇偶类型(取 `no’, `odd’ 和 `even’ 之一的值。); STOP 是停止位的长度值; 选项 –device 仅用于命令行模式,用以指定 tty 设备的文件名。默认值是这样的,COM1, 9600, 8N1。

setkey

<pre>setkey [TO_KEY FROM_KEY]</pre> 改变键盘映射关系。把FROM_KEY映射为TO_KEY。这里的键必须是字母, 数字, 和以下特殊键: escape(转义), exclam(!), at(@), numbersign(#), dollar($), parenright ()) , caret(^), ampersand(&), asterisk(*), plus(+), percent(%), minus(-), underscore(_), equal(=), parenleft[(], backspace(退格), tab(制表), bracketleft([), braceleft({), bracketright(]), braceright(}), enter(回车), control(控制), semicolon(;), colon(:), quote(‘), doublequote(“), slash(/), backquote(`), tilde(~), shift(换档), backslash(\), bar(|), comma(,), less(<), period(.), greater(>), question(?), alt(交互), space(空格), capslock(大写), Fx(功能键) 和 delete(删除)。

setup

<pre>setup [–prefix=DIR] [–stage2=STAGE2_FILE] [–force-lba] INSTALL_DEVICE [IMAGE_DEVICE]</pre> 自动安装GRUB. 这条命令使用更灵活的install命令将GRUB安装到指定设备上。如果给出了映象设备,将在该设备寻找GRUB,否则使用缺省的根设备。根设备可用 root指令指定。如果你确认系统的 BIOS 应该支持 LBA 模式, 但是 GRUB 却没有工作于该模式, 则请指定 `–force-lba’ 参数。如若你在命令行中已安装了一次 GRUB 可是,你却无法卸载 GRUB 程序所在的分区,请指定 `–stage2′ 参数。

terminal

<pre>terminal [–dumb] [–no-echo] [–no-edit] [–timeout=SECS] [–lines=LINES] [–silent] [console] [serial] [hercules] [graphics]</pre> 选择一个终端。当指定了多个终端以后, 按任意键方可继续操作。如果控制台和串口都被指定了, 那么你首先在其中按下键盘的终端将被首先选中。如果没有指定任何参数, 那么此命令将显示出当前的终端设置; 参数 –dumb 用以指定一个哑终端, 否则即为 vt100 兼容型; 若使用了 –no-echo 参数, 屏幕上将不会回显输入的字符; 若使用了 –no-edit 参数, the BASH-like 的编辑功能将被禁用; 若使用了 –timeout 参数, 该命令将等待数秒钟(由SECS指定); 可使用 –lines 指定最大的行数; 可使用 –silent 选项关闭消息显示。

terminfo

<pre>terminfo [–name=NAME –cursor-address=SEQ [–clear-screen=SEQ] [–enter-standout-mode=SEQ] [–exit-standout-mode=SEQ]]</pre> 指定终端的功能。如果此终端为 vt100 兼容型的,则可指定换码顺序 (即使用 \e 代表 ESC, ^X 代表控制码); 在未给任何参数的情况下,将给出当前配置信息。

testload

<pre>testload FILE</pre> 描述: 以多种不同的方式读取文件(由FILE指定)的整个内容,并予以比较,以测试文件系统的代码。输出看起来会有点儿混乱,但是,如果没有错误的话,`i=X, filepos=Y’ 里的 X 和 Y 最后必得相等。如果测试即告成功,下一步即可试图载入内核了。

testvbe

<pre>testvbe MODE</pre> 测试所指定(MODE)的 VBE 模式。

setvbe

setvbe MODE_3D 为后续的每个 kernel 命令行设置 VBE 模式 MODE_3D(例如 1024x768x32)。

tftpserver

<pre>tftpserver IPADDR</pre> 指定 TFTP 服务器的 IP 地址。

timeout

<pre>timeout SEC</pre> 设置在自动启动缺省菜单前所等待的秒数。

title

<pre>title [NAME …]</pre> 命名菜单项。

unhide

<pre>unhide [PARTITION]</pre> 通过清除隐藏标志,解除指定分区(PARTITION)的隐藏。默认的分区是当前的根设备。

uppermem

<pre>uppermem KBYTES</pre> 强制 GRUB 承认系统中只安装了 (KBYTES) KB 的上位内存。略过任何形式的系统内存地址区域查找步骤。

vbeprobe

<pre>vbeprobe [MODE]</pre> 侦测 VBE 的信息。如果指定了一个模式(MODE 不为空),则仅显示其信息


May 05 2008

” 没有有效系统分区被找到 ” WinPE 用于安装 Windows 时出现错误信息

Category: 技术ssmax @ 14:26:01

症状

当您运行 Winnt 32 .exe 命令以启动安装当您尝试使用 Microsoft Windows 预安装环境 (WinPE) 功能和 Diskpart 工具来部署 Windows Server 2003 映像, 您收到以下错误信息:

找到没有有效系统分区。 安装程序无法继续。

原因

如果您使用 Diskpart 之前运行 Winnt 32 .exe 来创建分区可能会发生此问题。

解决方案

要解决此问题, 编辑安装脚本或批处理文件来准备安装硬盘上。 要这样做, 向 Winnt 32 .exe 命令脚本中添加下面的项

/syspart:X:

其中 X 是硬盘与要在安装 Windows 的驱动器号:。 注意, 冒号必须出现之后驱动器号。


May 04 2008

开始很累了

Category: 乱up当秘笈ssmax @ 22:04:16

今天向总给我们找了一台amd的台式机,在杭州机房申请了一台amd的服务器,要测试amd的CodeAnalyst ,从汇编到java一层好像都可以测试,很强大。。。

然后下午又找了一台联想的服务器,要我们测试性能,1u的机箱里面装了两个主板,两只4核的X3210,冗余电源就变成一个主板一个了,就是1u机箱装两台机器,也不错,就是要测试一下性能看看,可能以后就转用这样的服务器了。

还有游戏销售那边猪头的改动,tnnd什么都堆到一起了,日。


May 03 2008

解决TIME_WAIT过多问题

Category: 技术ssmax @ 23:12:59

解决TIME_WAIT过多问题

#netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ 

LAST_ACK 14
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122 

状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

也就是说,这条命令可以把当前系统的网络连接状态分类汇总。

下面解释一下为啥要这样写:

一个简单的管道符连接了netstat和awk命令。

——————————————————————

先来看看netstat:

netstat -n

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT

你实际执行这条命令的时候,可能会得到成千上万条类似上面的记录,不过我们就拿其中的一条就足够了。

——————————————————————

再来看看awk:

/^tcp/
滤出tcp开头的记录,屏蔽udp, socket等无关记录。

state[]相当于定义了一个名叫state的数组

NF
表示记录的字段数,如上所示的记录,NF等于6

$NF
表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT

state[$NF]表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数

++state[$NF]表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一

END
表示在最后阶段要执行的命令

for(key in state)
遍历数组

print key,”\t”,state[key]打印数组的键和值,中间用\t制表符分割,美化一下。

如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vim /etc/sysctl.conf
编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p 让参数生效。

net.ipv4.tcp_syncookies = 1 表示开启SYN cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

下面附上TIME_WAIT状态的意义:

客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口
状态为TIME_WAIT

是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢?
有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?

主动关闭的一方在发送最后一个 ack 后
就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间
这个是TCP/IP必不可少的,也就是“解决”不了的。

也就是TCP/IP设计者本来是这么设计的
主要有两个原因
1。防止上一次连接中的包,迷路后重新出现,影响新连接
(经过2MSL,上一次连接中所有的重复包都会消失)
2。可靠的关闭TCP连接
在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发
fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以
主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。

TIME_WAIT 并不会占用很大资源的,除非受到攻击。

还有,如果一方 send 或 recv 超时,就会直接进入 CLOSED 状态


May 03 2008

打错字是一项很严重的事情

Category: 乱up当秘笈ssmax @ 21:04:34

昨晚被吓死了,白头发又多了几根。。。


May 02 2008

思考着

Category: 乱up当秘笈ssmax @ 23:39:34

从浙江回来了,这几天都没有上网,人也晒黑了一点,那边的空气很好,天也很蓝,凉风吹过,很容易让人迷失在田野之际,看了很多,虽然几百度的近视眼看得模糊,听了很多,虽然没有几个句子能完整听懂,大家都很和蔼,客气,饭菜味道不错,小笼包确实是值得回味。


« Previous Page