Veritas Volume Manager 정리(VxVM, 3.2 기준)
VxVM의 Physica disk는 두 부분으로 구성됨
- private : VxVM의 환경과 관리 정보 저장, default로 3번 slice가 사용됨
- public : 데이터 저장, default로 4번 slice가 사용됨

- private region
# private region을 구성하는데는 하나의 cylinder가 필요함.
# VTOC(Volume Table Of Contents)를 조회하여 확인 가능하다.(ex. # prtvtoc /dev/dsk/c0t0d0s2)

-- private region 의 이용
# disk header : 하나의 디스크에서 private region의 정보를 저장하는 하나의 block.
- 디스크의 현재 소유자 : 지정된 호스트에서 사용중인 디스크가 디스크 그룹의 일부일 때 그 디스크는 사용 중인 host id가 저장.
만약 다른 VxVM이 이 디스크에 access하면 host id가 일치하지 않으므로 사용 중인 시스템에서 host id를 해제하기 전까지는 access 불가능하다.
- disk identifier : 64byte로 구성된 디스크의 고유한 식별자
# configuration database(configdb)는 디스크 그룹의 환경 정보 저장. default로 VxVM은 디스크 그룹당 4개의 복사본을 저장함.
- dgname : disk group name, 관리자가 지정
- dgid : 64byte의 식별자로 디스크 그룹이 생성될 때 VxVM이 생성함.
- Records : 디스크 그룹을 위한 VxVM Virtual structure information.
# Kernel Log
- transaction commit, plex detaches, dirty-region og failure, first write to a volume, volume close information 등이 저장.
- 시스템이 reboot 되거나 crash날 경우 disk group의 상태를 복구에 사용.

- VxVM 초기화
# 최소 요구사항 : 최소한 하나의 디스크를 포함하는 rootdg라는 디스크 그룹이 존재 해야함.
· system boot disk를 encapsulation
· 디스크를 초기화 하고 rootdg 디스크 그룹에 넣음.
# 초기화 과정
· VxVM에 의해 디스크가 초기화 될 때 디스크는 표준 VxVM 환경 설정으로 다시 파티셔닝됨.
· 초기화된 디스크는 3번과 4번 slice로만 구성
· 3번 slice의 크기는 매우 작고 VxVM환경이 저장됨.
· 4번 slice는 데이터가 저장됨.
※ vxinstall : 디스크의 encapsulation이나 초기화하는 유틸리티

- 특정 장치를 VxVM이 사용하지 않게 설정
# Limited Exclusion
· /etc/vxvm에 다음 파일을 설정하면 vxinstall, vxdiskadm유틸리티에서 초기화 시키는것을 제외할 수 있다.
· enclr.exclude : enclosure를 제외(ex. sena1)
· cntrls.exclude : controller를 제외(ex. c2)
· disk.exclude : 특정 디스크를 제외(ex. c0t3d5)
# Global Exclusion
· /etc/vx/vxvm.exclude, /etc/vx/vxdmp.exclude // 직접 편집하면 안된다.
· vxinstall이나 vxdiskadm명령어로 편집됨

- boot 디스크를 encapsulation하기 위한 필요사항
# boot 디스크는 최소한 사용하지 않은 2개의 slice를 포함해야 한다.
# boot 디스크는 slice 2와 root, swap, var, opt, usr를 제외한 다른 slice를 가져서는 안된다.
# boot 디스크의 시작이나 끝에 어떤 파티션에도 속하지 않은 최소한 2048 섹터의 공간 필요

1. 설치
- 패키지 구성
1. VRTSfsdoc : VxFS 문서
2. VRTSlic : Veritas 라이센스 유틸리티
3. VRTSvmdev : VxVM 헤더와 라이브러리 파일
4. VRTSvmdoc : VxVM 사용 문서
5. VRTSvmman : VxVM 맨페이지
6. VRTSvmsa : VxSA 프로그램
7. VRTSvxfs : VxFS 프로그램
8. VRTSvxvm : VxVM 프로그램

- 패키지 설치
# pkginfo -d .
# pkgadd -d .
※ 패키지 설치 순서 : 2 8 6 3 4 5

- License 등록
# vxlicense -c // license 등록
# vxlicense -p // 등록된 license 확인

# /opt/VRTSvlic/bin/vxlicinst // license 등록
# /opt/VRTSvlic/bin/vxlicrep // 등록된 license 확인(3.5 이후부터)
# vxlicrep -g | -s | -e // -g는 일반적, -s는 짧게, -e는 자세히


- vxinstall 유틸리티
# 시스템을 확인하고 모든 디스크 controller를 확인.
# default로 root 디스크를 포함한 모든 디스크를 encapsulation하기 때문에 Quick Installation은 권장되지 않는다.
# boot disk의 encapsulation
· VxVM 초기화 과정에서 boot 디스크는 encapsulation되고 rootdg 디스크 그룹에 포함된다.
· 준비사항
- boot 는 root와 swap만 포함해야 한다.
- boot 디스크에 10800개의 빈 block이 있어야 한다.
- primary boot 디스크를 제외한 모든 디스크는 /etc/vx/vxvm.exclude, /etc/vx/vxdmp.exclude에서 제외시켜야 한다.
· encapsulation을 위한 응답이 끝나면 2번 재부팅됨.

- VxVM 환경
# VxVM이 설치 되면 /etc/system 파일에 아래와 비슷한 환경이 추가된다. 필요하지 않거나 존재하지 않는 드라이버는 에러가 발생하므로 *를 붙여 주석 처리할것.
* vxvm_START (do not remove)
forceload: drv/vxdmp
forceload: drv/vxio
forceload: drv/vxspec
forceload: drv/sd
forceload: drv/scsi
forceload: drv/pci
forceload: drv/ssd
rootdev:/pseudo/vxio@0:0
set vxio:vol_rootdev_is_volume=1
* vxvm_END (do not remove)

# /etc/rc.*에 VxVM 등록
· /etc/rcS.d/S25vxvm-sysboot // 부팅 단계에서 /와 /usr를 구성, 환경구성 가능한 디버깅 parameter도 포함된다.(vxconfigd daemon)
· /etc/rcS.d/S35vxvm-startup1 // /와 /usr이 가능한 상태에서 다른 volume들이 가능하도록 한다.(vxrecover)
· /etc/rcS.d/S85vxvm-startup2 // I/O 데몬 실행, /dev/vx/dks와 /dev/vx/rdsk를 재생성. 모든 디스크 그룹을 import, 앞에서 시작되지 않은 모든 volume을 시작한다.(vxrecover)
· /etc/rcS.d/S86vxvm-reconfig // root 파티션에 fsck 유틸리티 실행
· /etc/rc2.d/S94vxnm-host_infod // VERITAS Volume Replicator(VVR)이 설치되고 라이센스된 상태에서 host_infod 프로그램을 실행함.
· /etc/rc2.d/S94vxnm-vxnetd // VVR S/W option이 설치되고 라이센스된 상태에서 vxnetd 실행.
· /etc/rc2.d/S95vxvm-recover // plexes를 붙이고 VxVM watch daemon을 시작.(vxrecover, vxrelocd, vxsparecheck,, vxnotify)
· /etc/rc2.d/S96vmsa-server // remote client s/w에 응답하는 VxVM command server시작.(/opt/VRTSvmsa/bin/vmsa_server파일 실행, 2 jre and 1 cmdserver 시작)
· /etc/rc0.d/K10vmsa-server or /etc/rc1.d/K10vmsa-server VMSA 서버 종료
· /etc/rc0.d/K99vxvm-shutdown // vxconfigd 데몬을 종료하고, vxspec, vxio, vxdmp 드라이버 내림.

# 스크립트와 파일들의 위치
· /opt/VRTS // VxVM man 페이지
· /opt/VRTSlic // VxVM license installation and verification
· /opt/VRTSvxvm // VxVM technical documents and library files
· /opt/VRTSvmsa // VMSA server and client S/W.
· /usr/sbin/vx*
· /etc/vx/bin


- VxVM Object
# VxVM disk drive
· VxVM이 디스크를 관리하게 되면 존재하는 디스크 그룹에 디스크를 추가, 새로운 디스크 그룹에 디스크를 추가, free-disk pool에 디스크를 추가 할 수 있다.
· free-disk pool에 디스크를 추가하는 방법이 제일 쉽다. vxdisksetup는 VxVM format으로 디스크를 변경한 다음 하나의 blank header에 정보 기록한다.
# VxVM disk group
· 공통된 환경을 공유하는 VxVM디스크들의 모음.
· 각각의 디스크 그룹은 하나의 호스트에 종속된다. 현재의 소유권은 모든 configuration records에 기록되고, 디스크 그룹 내의 모든 디스크들은 configuration records의 복사본을 저장한다.
· 디스크 그룹은 하나의 호스트에서 다른 호스트로 옮겨갈 수 있다. 하지만 두번째 호스트가 같은 array에 연결되어 있더라고 현재 소유권을 가진 호스트만이 access가 가능하다. 디스크 그룹을 deport한 후에 다른 호스트에서 import하여 사용.
· Shared disk group : 두 개 이상의 호스트들이 같은 디스크 그룹에 동시에 access 가능하다. 호스트는 node라고 불림. shared disk group은 연결된 어떤 node에서도 import가 가능하고 cluster_naeme이 디스크의 configuration record에 기록되면 모든 연결된 node에서 disk group을 access할 수 있다.
# Subdisks
· 연속된 디스크 블록의 집합. 한 개의 디스크 내에서 하나의 subdisk는 디스크 전체를 의미한다.
· 디스크 그룹 내의 디스크에서 public region은 하나 이상의 서브디스크로 나누어질 수 있다.
· 서브디스크는 public region에서 같은 구획에 중첩되거나 공유될 수 없다.
· 가장 작은 서브디스크의 크기는 1 sector(512byte)이고 가장 큰 크기는 VxVM의 public retion전체가 될 수 있다.
# Plexes
· 여러 개의 서브디스크를 묶어 Plex를 구성할 수 있다.
· Plex는 하나 이상의 물리 디스크 에서 하나 이상의 서브디스크로 구성된다.
· mirroring에는 plex가 구별되지만 기타 다른 RAID level에서는 plex가 volum을 의미한다.
· 하나의 Plex는 초대 4096개의 서브디스크를 포함할 수 있다.
· 하나의 Plex에서 서브디스크들은 Concatenation, Striping, Striping with parity 방식으로 데이터를 저장 가능하다.
# Volumes
· Volumes은 하나 이상의 plex로 구성된다.
· 두개의 plex를 가진 하나의 volume은 mirror된 것임.
· volume은 두개 이상의 mirror를 가질 수 있다.
· RAID-5 volume은 mirroring될 수 없다.
· 데이터 저장에 사용하지 않는 plex는 logging structure될 수 있다.


- 상태 정보를 확인하는 기본 명령
# vxprint // 상태와 구성 정보 출력.
# vxprint -ht // 자세히 출력
· TY : Component type
· NAME : Component name
· ASSOC : Hierarchy association
· KSTATE : component state in kernel records
· LENGTH : component length in disk drive blocks
· PLOFFS : component offset within a plex
· STATE : component operationa state
· TUTIL0/PUTIL0 : Temporary and persistent control bits
# vxprint -spv // -p : plex 정보, -s : subdisk와 sub volume 정보, -v : volume 정보
# vxdisk list // 시스템에 부착된 모든 디스크의 상태와 소유권의 요약 정보 출력.
# vxdisk list c1t3d0s7 // 지정한 디스크에 관한 정보 출력
· online : VxVM 용으로 등록된 disk, error : solaris용 disk
# vxdisk -s list // 자세한 정보 표시
# vxdg list // 모든 디스크 그룹의 일반 정보와 unique identfier 출력.
# vxdg -g DGa free // 디스크 그룹 내의 각각의 디스크의 여유 공간의 양을 출력.
# vxdg list rootdg // rootdg 디스크 그룹 의 자세한 정보 출력

- VMSA
# VRTSvmsa : VMSA관련 패키지.
# Server와 Client로 구성. VMSA server는 VxVM 서버단에 설치. client는 하나 이상의 관리 시스템에 설치
# VxVM의 GUI환경의 관리 소프트웨어.
※ 원격지에서 VMSA 관리 GUI 사용 방법 : setenv DISPLAY 192.168.10.10:0.0
# VMSA 서버의 시작과 종료
· /etc/rc2.d/S96vmsa-server // VMSA서버의 시작 스크립트, vmsa_sercer와 cmdserver의 시작 스크립트이다.
· /etc/init.d/vmsa_server start | stop // 수동으로 시작과 종료
· /opt/VRTSvmsa/bin/vmsa_server // 옵션 설정 가능.
-V : VMSA서버의 버전 표시
-q : 서버가 실행 중인 경우 체크를 위한 쿼리
-k : 서버 프로세스 종료
-r : read-only 모드로 시작
-u : 서버에 연결된 클라이언트 사용자 푯
-h : 도움말 표시
# VMSA Client의 시작
· /opt/VRTSvmsa/bin/vmsa server_name &

- vxdiskadm
# VxVM의 관리와 오류 복구 등을 지원하는 Bourne shell script.

- vxdiskunsetup
# 디스크에서 이전의 VxVM 환경을 제거
# /etc/vx/bin/vxdiskunsetup -C c2t3d0 // 지정한 디스크를 VxVM초기화 이전의 상태로 되돌림. -C는 강제로 제거하는 옵션.

- vxdisksetup
# VxVM이 사용할 수 있도록 디스크를 초기화, 그러나 디스크 그룹에는 포함시키지 않는다.
# 디스크는 free pool에 남아있는다.
# vxdisksetup c2t0d0 // 디스크를 VxVM형식의 파티션으로 repartition만 수행
# vxdisksetup -i c2t0d0 // -i : VxVM의 환경이 private region에 기록된다.
# vxdisksetup -i c2t0d0 privlen=10080 // private영역을 10080 섹터크기로 지정, 기본값은 1024임.

- vxdg
# 디스크 그룹을 생성하고 디스크 그룹에 디스크를 추가 /제거
# vxdg를 통해 디스크를 추가하거나 디스크 그룹을 생성하기 전에 디스크는 초기화되어 있어야한다.
# vxdg init // 디스크 그룹을 생성
# vxdg destory // 디스크 그룹을 삭제
# vxdg adddisk // 존재하는 디스크 그룹에 디스크를 추가
# vxdg rmdisk // 디스크 그룹에서 디스크를 제거
# vxdg import // 디스크 그룹의 설정을 가져옴
# vxdg deport // 디스크 그룹의 설정을 내보냄.

- 디스크 그룹의 생성
# vxdisk list // 디스크의 상태와 소유권의 요약 정보 출력
# vxdisksetup -i c2t1d0
# vxdisksetup -i c2t2d0 // 디스크를 초기화하고 환경을 private region에 기록(-oi)
# vxdg init newDG ndg-01=c2t1d0 ndg-02=c2t2d0 // 디스크 그룹을 생성하고 그룹에 디스크를 추가
# vxdisk -g newDG list // newDG그룹의 상태와 소유권의 요약 정보 출력.
# vxdg list // 모든 디스크 그룹의 일반 정보와 unique identfier 출력.

- 디스크를 추가하거나 제거
# vxdisksetup -i c2t5d0
# vxdisksetup -i c2t16d0 // 디스크를 초기화
# vxdg -g newDG adddisk ndg-03=c2t5d0 ndg-04=c2t16d0 // newDG디스크 그룹에 디스크를 추가
# vxdisk list
# vxdg -g newDG rmdisk ndg-04 // newDG디스크 그룹에서 ndg-04 디스크를 제거. free 상태로.
# vxdisk rm c2t16d0 // c2t16d0를 VxVM에서 제거.

- 디스크 online/offline
# vxdisk online c1t2d0s2
# vxdisk offline c1t2d0s2

- 디스크 그룹의 import / deport
# 하나 이상의 호스트에서 arrary를 공유해서 사용하는 경우에 유용.
# 하나의 호스트에서 장애가 발생하면 다른 호스트에서 import하여 계속 서비스를 제공할 수 있다.
# vxdg list
# vxdg deport newDG // newDG 디스크 그룹을 deport.
# vxdg list // deport된 newDG디스크 그룹은 보이지 않는다.
· 디스크 그룹이 deport되면 디스크 그룹 내의 모든 디스크에 저장된 호스트 ID는 없어진다. 그러므로 시스템이 재부팅 되더라도 자동으로 다시 import되지 않는다.
· 디스크 그룹은 호스트 ID가 지워지지 않고 deport되거나 다른 호스트에서 import되도록 대상 호스트 ID를 지정할 수 있다.
· 만약 deport된 디스크 그룹의 이름을 잊어버렸다면 vxdiskadm 유틸리티와 vxdisk -o alldgs list를 통해 알 수 있다.
# vxdg import newDG // newDG디스크 그룹을 import

- 디스크 그룹의 제거
# vxdg list
# vxdg destory newDG // newDG 디스크 그룹을 제거, 삭제된 디스크 그룹 내의 디스크들은 다른 그룹에 등록되어 사용 가능.
# vxdg list

- 디스크 그룹의 이름 변경
# vxdg list
# vxdg deport newDG // 이름을 변경항 디스크 그룹을 deport
# vxdg -n new oldDG import newDG // oldDG라는 디스크 그룹을 생성하고 newDG를 import
or
# vxdg list
# vxdg -n nwdg deport dg01 // dg01을 nwdg로 이름을 변경하고 deport
# vxdisk -s list

- 디스크 그룹 내에 있는 디스크 이름의 변경
# vxedit -g newDG rename c2t4d0 disk04 // c2t4d0를 disk04로 변경

- 디스크의 이름 변경
# vxedit rename dga01 dbdisk01 // 디스크 그룹 내의 디스크 이름 변경

- Hot spare 지정과 해제
· spare disk는 mirror나 raid5에서 사용.
· spare를 지정하지 않은 경우 여유 디스크를 찾아 자동으로 할당
# vxedit -g newDG set spare=on disk07 // 지정
# vxedit -g newDG set spare=off disk07 // 해제

- 디스크 그룹의 시작과 종료
# vxvol start vol01
# vxvol -g newDG startall // 그룹 내의 모든 volume 시작

# vxvol stop vol01 // 지정한 volume 종료
# vxvol -g newDG stopall

- subdisk 생성
# vxdg -g newDG free // 디스크의 여유 공간과 offset 확인
# vxmake -g newDG1 sd disk1-01 len=100m dmname=disk1 dmoffset=0 // 100MB 용량의 subdisk생성
# vxprint -s // 현재 생성된 subdisk 확인
# vxdg -g newDG free // 설정 내용 확인

- subdisk케 코멘트 설정
# vxedit set comment="Sales Dept" disk1-01

- subdisk 크기 변경
# vxedit set len="20481" disk1-01
# vxprint -l disk1-01

- subdisk의 분할
# vxprint -s
# vxsd -s 50m split disk2-01 disk2-02 disk2-03 // disk2-01을 disk2-02, disk2-02으로 분할

- subdisk의 병합
# vxprint -s
# vxsd -g newDG join disk2-02 disk2-03 disk2-01 // disk02-01로 disk2-02와 disk02-03을 병합.

- subdisk 제거
# vxedit rm disk1-01 // subdisk disk1-01을 제거


-- Volume Operation
- Disk group
# 디스크 그룹은 VxVM이 관리하는 디스크들의 집합이다.
# default 디스크 그룹은 rootdg임.
# volume은 디스크 그룹내에서 생성된다.
# 디스크 그룹의 주요 기능
· 쉬운 관리 : 디스크들을 관리상 편의를 위한 논리적인 집합으로 변경.
· 데이터의 가용성 증가 : 하나의 호스트에서 다른 호스트로 디스크 그룹을 이동 가능.
- 하나의 호스트에서 장애가 발생했을 경우 다른 호스트에서 디스크 그룹을 import하여 디스크 그룹의 data를 계속 access가능하도록 한다.
※ 디스크 그룹의 volume이 open되어 있을 경우(status가 ENABLED or ACTIVE인 경우)에 디스크 그룹은 deport할 수 없다. deport 전에 반드시 stop되어야 한다.
# umount /vol01
# vxvol stop vol01
# vxdg deport newDG
# vxdisk import newDG // 다른 호스트에서
# vxrecover -g datadg -sb (s:start disable volume, -b: background operation)

- Disk group의 요구사항
# 디스크 그룹을 초기화 하기 전 고려해야 할 사항들.
· 모든 시스템에서 모든 디스크 그룹은 유일한 이름을 가져야 한다.
· 하나의 호스트 내에 위치한 모든 디스크 그룹은 유일한 이름을 가져야 한다.
· 각각의 호스트는 rootdg 디스크 그룹을 포함해야 한다.
· 일반적으로 rootdg 디스크 그룹은 작게 유지되어야 한다.
· 모든 디스크 그룹은 최소한 하나의 디스크를 포함하고 있어야 한다.(redundancy를 위해서는 두개 이상)

- volume 생성
# vxassist -g diskgroup_name make volume_name length laylout=stripe,nolog alloc=“disk_name disk_name”
· layout의 종류 : stripe, mirror, raid5, concatenate등. default는 concatenate
· nolog : log disk를 만들지 않음, default는 log disk 생성.
· alloc : volume을 만들 disk를 지정
# vxassist -g datadg make vol01 100m disk01 // concatenate volume 생성
# vxassist -b -t test -g datadg make vol01 100m disk01 // -b : background로 실행 vxtask list로 진행 사항 확인 가능, -t test : task id를 설정.
# vxassist -g datadg make vol01 100m layout=stripe disk01 disk02 disk03 //stripe volume 생성
# vxassist -g datadg make vol01 100m layout=raid5,nolog disk01 disk02 disk03 //RAID 5 volume 생성
# vxassist -g datadg make vol01 100m layout=mirror disk01 disk02 //mirror volume 생성(RAID 1)
# vxassist -g datadg make vol01 100m layout=stripe-mirror //1+0 volume 생성(stripe-pro volume) 0+1일 때는 mirror-stripe
# vxprint -vl vo01 // 생성한 volume의 자세한 정보 확인

- volume 삭제
# umount /data // mount 되어 있는 volume을 umount
# vxprint -v // 현재 volume 상태를 확인
# vxvol stop vol01 -> volume이 사용중이라면 중지시킨다.
# vxedit -g datadg -rf rm vol01 -> datadg disk group에서 vol01이라는 volume을 지운다.

- 관리 모드 또는 손상된 volume의 복구
# vxrecover -g newDG -s vol01
# vxvol start vol01

- volume내의 plex 정지/시작
# vxprint -p
# vxmend off vo1-01 // plex 정지
# vxprint -p
# vxmend on vol1-01 // plex 시작
# vxprint -p
# vxrecover -g newDG -s vol01 // volume 복구
# vxprint -v

- volume내의 plex detach/attach
# vxplex -g newDG det vol1-01 // plex vol1-01을 정지
# vxprint -p vol1-01
# vxplex -g newDG att vol1 vol1-01 // plex vol1-01을 vol1 volume에 attach


- volume의 권한, 소유권 설정
# vxedit -g newDG set user=oracle group=dba mode=660 vol01

- Hot space 공간을 확인
# vxdg -g newDG spare

- Hot spare 구성과 해제
# vxedit -g datadg set spare=on disk07 // datadg 디스크 그룹에 disk07 디스크를 hotspare로 지정
# vxedit -g datadg set spare=off disk07 // 해제.

- volume 이름 변경
# vxedit rename vol02 vol01 -> vol02를 vol01로 변경

- Performance Monitoring
# vxstat -g newDG // 지정한 디스크 그룹의 상태
# vxstat -g newDG vol01 // 디스크 그룹 내의 볼륨 상태
# vxstat -g newDG -d disk01 // 디스크 그룹 내의 디스크 상태

# vxtrace -o disk // 모든 디스크의 I/O나 에러 상태
# vxtrace -o c3t2d0 // 지정한 디스크의 I/O나 에러 상태
# vxtrace vol01 // vol01 volume가 관련된 모든 가상 장치의 I/O나 에러 상태

- controller 확인
# /etc/vx/bin/vxcntrllist
# vxdmpadm listctlr all
# ls /dev/dsk |awk '{print substr($0,0,2)}' |uniq

- A5000 장치 정보 보기
# luxadm probe
# luxadm display /dev/es/ses0

- disk 체크하기
개정판:1.9  날짜 - 1996년 8월 26일


1.0: TCP/IP 정보

2.0:TCP/IP 디버깅
2.1:netstat 명령
2.2:etherfind 및 snoop

3.0:일반적인 방법
3.1:SunOS에서 네트워크 변수를 조정하는 방법
3.2:Solaris2.x의 경우 ndd 네트워크 매개 변수 및 변수 정보

4.0:자주 묻는 질문(FAQ)
4.1:기타 질문
4.2:포트 관련 질문
4.3:netstat에 대한 질문
4.4:웹 서버 운영을 위한 TCP/IP 최적화

5.0:패치
5.1:SunOS의 경우 TCP/IP 패치
5.2:Solaris의 경우 TCP/IP 패치

6.0:알려진 버그 및 RFE 문서
6.1:RFE 문서

7.0:참고 자료
7.1:중요한 매뉴얼 페이지
7.2:Sunsolve 문서
7.3:썬 교육 서비스
7.4:Solaris 문서
7.5:타사 문서
7.6:참고 사항

8.0:지원

9.0:기타 지원


1.0:TCP/IP 정보 =================

이 정보 시트 문서에서는 TCP/IP에 관한 다양한 내용을 다루고 있습니다.
여기서는 썬의 TCP/IP에서 사용 가능한 조정 옵션에 대한 정보와 몇 가지 일반적인
궁금한 사항에 대해 중점적으로 설명하겠습니다. TCP/IP 작업을 주로 하지 않는 사용자
라면 이 문서가 유용하지 않을 수도 있습니다. 하지만 썬의 TCP를 활용할 수 있는
좋은 자료가 될 것입니다.

이 문서에서 설명하는 대부분의 항목은 성능 조정에 관한 내용입니다.
이 분야는 대개 SunService에서는 다루지 않는 영역입니다.
이 문서를 통해 사용자가 직접 조정 작업을 시작하는데 도움이 되었으면 합니다.
내용이 충분하지 않아 도움이 필요한 경우에는 8.0장 및 9.0장에 소개하는 썬 컨설팅
서비스를 참조하십시오.


2.0 TCP/IP 디버깅 =================

2.1: netstat 명령 ------------

netstat 프로그램은 다양한 네트워크 정보를 확인하는데 사용할 수 있습니다.
이 명령의 기본 형식에서 특별한 옵션 없이 실행해도 현재 활성화된 연결을 확인할 수
있습니다.

# netstat

TCP Local Address        Remote Address    Swind Send-Q Rwind Recv-Q  State -------------------- -------------------- ----- ------ ----- ------ ------- localhost.32791      localhost.32796       8192      0  8148      0 CLOSE_WAIT psi.3139             sockem.listen         8760      0  8760      0 ESTABLISHE psi.login            sun-soft.1020         4096      0  9112      0 ESTABLI

여기서 가장 중요한 정보는 로컬 주소(로컬 이름 + 로컬 포트), 원격 주소(원격 이름
원격 포트) 및 상태입니다.
대부분의 경우 포트 번호는 /etc/services 파일에서 정의된 포트 이름으로 대체됩니다.

가능한 상태 정보는 netstat 매뉴얼 페이지를 참조하십시오.
특히 TIME_WAIT 상태의 경우,연결이 완전히 해제되기 전에 지정된 시간(2MSL 시간
이라고 함)동안 이 상태에서 연결 설정을 위해 항상 대기합니다.
이렇게 하면 이전 애플리케이션에 전달되는 패킷이 포트에 도달할 수도 있는 동안 새
프로그램에서 포트를 다시 사용하지 못하도록 할 수 있습니다.

netstat -a 명령을 실행하면 위와 같은 정보를 포함하여 LISTEN 상태에서 대기하고
있는 모든 서버 프로세스를 출력합니다.
Netstat 명령을 옵션 없이 실행하면 비활성화 되어 수신 대기중인 프로세스 정보는
나타나지 않고 활성화된 프로세스만 나열합니다.

netstat 명령은 프로그램이 특정 상태에서 수행을 멈추는 경우 네트워크 성능 문제를
검사하는 디버깅 목적으로 주로 사용됩니다. 즉, netstat 명령의 실행 결과에 나타나는
상태 정보를 확인하면 됩니다.

netstat 명령은 여러 가지 다른 용도로도 사용할 수 있습니다.
netstat -i 명령은 인터페이스 정보, netstat -p 명령은 arp 정보, netstat -r 명령은
라우팅 정보를 확인할 수 있습니다.

2.2: etherfind 및 snoop ------------------------

SunOS의 경우 etherfind, Solaris의 경우 snoop 유틸리티를 사용하여 네트워크를 통과
하는 각 단일 패킷 정보를 확인할 수 있습니다. 이러한 도구는 재전송 정보, 중복된
ACK 정보 또는 그 외 유사한 문제를 파악할 때 유용합니다.etherfind 및 snoop 매뉴얼
페이지에는 이러한 유틸리티를 사용하여 네트워크를 검사하는 방법에 대해 자세히 설명
되어 있습니다. 또한 SunService에는 별도의 정보 시트(기타 프로그램 정보 시트)가
있습니다.
이 문서에는 etherfind 및 snoop에 대한 기본적인 사용 방법에 대해 설명되어 있습니다.


3.0 일반적인 방법 =================

3.1: SunOS에서 네트워크 변수를 조정하는 방법 ----------------------------

3.1.1: 변수 구성 -----------------------

커널에 대한 구성 파일(예를 들어 /sys/sun4c/conf/GENERIC)에서 변수 네 개를 수정할
수 있습니다. 아래와 같은 형식의 행을 추가하여 변경할 수 있습니다.

options 옵션 이름 =값

예를 들어 다음과 같습니다.

options IPFORWARDING =-1

사용할 수 있는 옵션은 다음과 같습니다.

DIRECTED_BROADCAST

네트워크 또는 서브네트워크가 시스템에 직접 연결된 경우 브로드캐스트를 전달할 특정
네트워크나 서브네트워크를 지정합니다.
기본값은 1(True)입니다.

IPFORWARDING

워크스테이션에서 패킷에 대한 라우팅 기능을 수행할지 여부를 결정합니다.
이 변수는 세 종류의 값 중 하나를 선택할 수 있습니다:

-1    전달하지 않음 0     활성화된 인터페이스가 두 개 이상인 경우에만 전달 1     항상 전달

기본값은 0입니다.

IPSENDREDIRECTS

호스트가 패킷을 라우팅하는 경우 ICMP 리디렉션을 전송할지 여부를 결정합니다.
기본값은 1(True)입니다.

SUBNETSARELOCAL

동일한 네트워크에 있는 원격 서브네트워크를 로컬로 포함시킬지 여부를 결정합니다.
기본값은 1(True)입니다.

변경 작업을 수행 한 후 커널을 구성하고 다시 만들어야 합니다.

3.1.2: in_proto.c 변수 ---------------------------

SunOS에서는 /sys/netinet/in_proto.c 파일을 수정하여 다른 네트워크 변수를 변경할
수 있습니다. 이러한 변수는 표준 C 언어의 선언부에 해당됩니다. 변경 작업을 수행한
후 커널을 다시 구성해야 합니다.

tcp_default_mss

로컬이 아닌 패킷(다른 네트워크나 서브넷에 전송되는 패킷)에 대한 최대 세그먼트의
크기를 조정할 수 있습니다. SUBNETSARELOCAL이 설정된 방법에 따라 로컬 정의는 다를
수 있습니다. tcp_default_mss의 기본값은 536바이트입니다.

tcp_keepidle

연결이 계속 유휴 상태인 경우 검사하는 간격을 지정합니다.
기본값은 2시간입니다.

tcp_keepintvl

첫 번째 검사를 실패한 경우 유효 상태의 연결을 검사하는 간격을 지정합니다.
기본값은 75초입니다.

tcp_keeplen

BSD4.2와 호환 가능하게 하려면 호환성 변수는 1로 설정해야 합니다.
기본값은 1입니다.

tcp_nodelack

ACK의 지연 여부를 지정합니다.
기본값은 0입니다.
이 경우 ACK를 지연할 수 있습니다.
값이 1인 경우에는 ACK 지연 기능을 사용할 수 없습니다.

tcp_recvspace

TCP Receive Window의 최대값을 지정합니다.
기본값은 4096바이트(4K)입니다.

tcp_sendspace

TCP Transmit Window의 최대값을 지정합니다.
기본값은 4096바이트(4K)입니다.

tcp_ttl

TCP 패킷에 대한 TTL(Time To Live) 기본값을 지정합니다.
기본값은 60입니다.

udp_cksum

UDP 패킷에 대한 체크섬을 수행할지를 지정합니다.
기본값은 0(False)입니다.
NFS, NIS 등과 같은 UDP 서비스에 문제가 발생하는 경우에는 이 값을 1(True)로 변경
해야 합니다.

udp_ttl

UDP 패킷에 대한 TTL(Time To Live)의 기본값을 지정합니다.
기본값은 60입니다.

udp_recvspace

UDP Receive Window의 최대값을 지정합니다.
기본값은 18000바이트입니다.

udp_sendspace

UDP Transmit Window의 최대값을 지정합니다.
기본값은 9000바이트입니다.



3.2: Solaris2.x의 경우 ndd 네트워크 매개 변수 및 변수 정보 -------------

Solaris에서 대부분의 TCP, IP, UDP 및 ARP는 ndd 명령으로 조정할 수 있습니다.
다음과 같이 ndd 명령에 드라이브 이름 및 ?를 추가하여 수행하면 해당하는 모든 변수
를 나열할 수 있습니다.

%% ndd /dev/arp \?%% ndd /dev/ip \?%% ndd /dev/tcp \?%% ndd /dev/udp \?

참고:Solaris 2.5 이상에서 이러한 변수를 표시하거나 설정하려면 루트 계정을 사용
해야 합니다.

다음과 같이 ndd 명령에 -set 옵션, 변수 이름 및 값을 입력하여 ndd 변수를 변경할
수 있습니다.

%% ndd -set /dev/ip ip_forwarding 0

부팅할 때마다 ndd 변수를 설정하려면 /etc/rc2.d/S69inet 파일에 아래 행을 추가해야
합니다.

%% cat /etc/rc2.d/S69inet ...# # Set configurable parameters.# ndd -set /dev/tcp tcp_old_urp_interpretation 1

또는 선호하는 방법으로 별도의 시작 스크립트를 작성하는 것입니다.
개별 드라이버에 필요한 매개 변수를 지정한 경우에는 ndd 명령을
/etc/rc2.d/S68net-tune에 링크된 /etc/init.d/S68net-tune이라는 새로운 시작
스크립트에 포함시키는 것이 권장하는 방법입니다.

예제:#!/sbin/sh # /etc/rc2.d/S68net-tune -> /etc/init.d/net-tune PATH=/usr/bin:/usr/sbin case "$1" in `start`) echo "Setting local Solaris kernel changes - ndd Tuning " ndd -set /dev/ip ip_path_mtu_discovery 0 ndd -set /dev/tcp tcp_rexmit_interval_max 60000 ndd -set /dev/tcp tcp_recv_hiwat 32768 ndd -set /dev/tcp tcp_xmit_hiwat 32768 ndd -set /dev/tcp tcp_slow_start_initial 2 `stop`) echo "No kernel parameters changed.";; *) echo "Usage:$0 {start|stop}" ;; esac exit 0

대부분의 변수에는 1(True) 또는 0(False)의 두 가지 옵션이있습니다.

참고:아래의 모든 예제에서는 OS 버전이 다르더라도 다음을 입력하여 확인할 수 있습니다.

# ndd device variable ie:# ndd /dev/ip ip_forwarding 0

ndd 변수 사용에 대한 유의 사항:ndd는 고객에게 일반적인 시스템 조정을 제공하기
위한 목적이 아닙니다. 어떤 매개 변수라도 설정하면 시스템 전체에 영향을 미치며
시스템의 여러 요소를 조정할 필요가 있을 수도 있습니다. 일반적으로 Solaris에서
설정된 기본값은 대부분의 상황에 대해 최적화되어 있습니다. ndd는 매우 가변적인
변수이므로 해당 Solaris 버전에서 다른 버전으로 완전히 변경될 수도 있습니다.
아래에 나열된 변수는 가장 유용한 변수이거나 변경할 가능성이 가장 적은 변수이며
OS 최신 버전에서는 수정되었을 수도 있습니다. 여기에 나열되지 않은 변수에 대해서는
ndd 명령으로 확인할 수 있으며 가변적인 변수입니다. 변경을 수행하는 경우에는 나중에
확인할 수 있도록 그 이유를 항상 표기하십시오. 즉, 변경 작업을 할 때는 다른 사용자가
쉽게 알 수 있도록 시작 스크립트에서 변경한 이유를 입력하여 주석 처리해야 합니다.

여기에 소개하지 않은 매개 변수는 일반적으로 더 복잡한 디버깅 기술이나 개발자가
사용합니다.

3.2.1: IP 변수 -------------------

ip_addrs_per_if

인터페이스당 적용 가능한 IP 주소를 제한합니다.
여러 개의 논리 인터페이스를 물리적 네트워크 인터페이스에 연결할 수 있습니다.
(le0:0, le0:2  ..., le0:255,).
Solairs 2.5.1 및 2.6에서 기본값은 256입니다.

ip_enable_group_ifs

Solairs 2.6의 매개 변수는 물리적 인터페이스를 통해 IP 부하 조정이 가능합니다.
ifconfig 2.6 매뉴얼 페이지에서 인터페이스 그룹을 참조하십시오.
즉, 발신지 주소가 지정되지 않을 때는 발신지 주소 선택이 로테이트되며 동일한 그룹에
있는 여러 물리적 인터페이스의 경우 각 IP 목적지 주소를 기준으로 다른 IP 주소에
소통을 분산시킵니다.
기본값은 0입니다. (패치 105786-05 이전의 기본값은 1입니다.)

ip_forwarding

워크스테이션에서 패킷에 대한 라우팅 기능을 수행할지 여부를 결정합니다.
(인터페이스간에 패킷 전달) 이 변수는 세 종류의 값 중 하나를 선택할 수 있습니다.

0     전달하지 않음
1     항상 전달함
2     활성화된 인터페이스가 두 개 이상인 경우에만 전달함

Solaris 2.4, 2.5 및 2.5.1 시스템인 경우 기본값은 2입니다. 하지만 Solaris 2.6에서
if_forwarding의 기본값 2는 제거되었습니다.
/* RFC1122 권고에 따름 */  /etc/rc2.d/S69inet 파일을 참조하십시오.

ip_forward_src_routed

소스에서 라우팅된 패킷(라우트의 부분으로 나열된 특정 시스템 정보를 가지고 있는
패킷)을 전달할지를 지정합니다. 0으로 설정하면 라우터는 소스에서 라우팅된 패킷을
생성할 수 없거나 소스 라우터로서 참여할 수 없습니다.
기본값은 1입니다.

ip_ire_status

현재 IRE((Internet Routing Entries)를 확인할 수 있습니다.
이것은 캐시에서 실제로 사용되고 있는 IP 주소입니다.
디버깅할 때 사용되는 "netstat -rvan" 명령의 수행 결과와 비슷합니다. (읽기 전용)

ip_ire_cleanup_interval

사용되고 있지 않은 라우트를 보관하는 시간을 지정합니다. 즉, 사용되지 않은 특정
라우트를 유지하는 시간을 의미합니다.
기본값은 30000밀리초(30초)입니다.

ip_ire_flush_interval

특정 라우트가 사용되고 있더라도 이 라우터를 유지하는 최대 시간을 지정합니다.
이 시간은 모든 특정 라우팅 정보에서 사라진 이후의 시간입니다.
기본값은 1200000밀리초(20분)입니다.

ip_path_mtu_discovery

과다한 패킷 단편화 현상을 방지하기 위해 사용되는 Path MTU Discovery 알고리즘을
사용할지를 지정합니다.
기본값은 1(True)입니다. RFC 1191 문서를 참조하십시오.
참고:RFC 1191 규약을 지원하지 않는 라우터를 구현한 경우, Solaris를 운용하는 MTU
크기가 다른 네트워크 사이에 FDDI , TR , ATM을 사용하면 IP Path MTU Discovery를
해제하여 단편화를 설정해야 할 수도 있습니다.
    (예: # /usr/sbin/ndd -set /dev/ip ip_path_mtu_discovery 0)

ip_send_redirects

호스트가 패킷을 라우팅하는 경우 ICMP 리디렉션을 전송할지 여부를 결정합니다.
기본값은 1(True)입니다.

ip_strict_dst_multihoming

Strict Destination Multihoming 사용 여부를 결정합니다. 이 변수가 참(True)으로
설정되면 ip_forwarding은 해제되므로, 시스템은 다른 인터페이스에 전달되는 패킷을
제외하지 않습니다. RFC1122를 참조하십시오.
기본값은 0입니다.

3.2.2: TCP 변수 --------------------

tcp_close_wait_interval

변수 이름에서 연상되는 것과는 달리, 이 변수는 대기 시간 간격(2MSL 값)을 실제로
설정합니다.
기본값은 240000밀리초(4분)입니다.

tcp_conn_req_max **대체됨.

이 값은 수신기의 Backlog 크기가 최대로 설정된 이전 버전의 Solaris 2에서 서버에
대해 증가시킬 때 필요한 것으로 잘 알려져 있습니다. 수신 대기 종점에 대기시킬
연결 요청의 최대수를 설정합니다. 이 변수는 Solaris 2.6 또는 2.5.1 w/patch
103582-12에는 없습니다.
**이 변수를 변경하면 서비스 거부로 인한 SYN Flood 공격을 방지할 수 있습니다.
이제는 어느 정도 완전한 연결을 할 수 있도록 하나가 아니라 별도의 큐가 두 개
있습니다.

tcp_conn_req_max_q

해당 프로세스가 CPU 시간을 할당 받는 즉시 접속 요청에서 대기 상태로 전환할 수
있는 완전한 연결의 최대 수를 지정합니다. SYN_RCVD에 있는 연결 요청의 수를 말하는
것으로, 3-Way 핸드셰이크가 완료되고 accept() 호출에서 선택되어 대기하고 있는
"Fully-established" 연결을 의미합니다.
기본값은 128입니다.

tcp_conn_req_max_q0

핸드셰이크 수행이 완료되지 않은 연결의 최대 수를 지정합니다.SYN Flood 공격은
이러한 큐에만 영향을 미칠 수 있으며 특정 알고리즘을 사용하면 유효한 연결을 계속
유지할 수 있습니다. SYN 요청에 대한 응답은 받은 상태이고 3-Way 핸드셰이크를 완료
하기 위해 마지막 ACK를 기다리는 "Half-open" 상태의 연결을 의미합니다.
기본값은 1024입니다.

tcp_keepalive_interval

서버 애플리케이션에서 KEEPALIVES가 설정되어 있고 응답하지 않은 연결이 계속 활성화
된 경우 검사하는 간격을 지정합니다. setsockopt SO_KEEPALIVE를 확인하십시오.
tcp_keepalive_interval에 설정된 시간이 지나면 프로브(probe)가 보내지고 연결이
해제되어 응답하는 클라이언트가 없는 상태인 tcp_ip_abort_interval에 설정된 시간이
될 때까지 tcp_keepalive_interval에 프로브가 다시 보내집니다.
기본값은 7200000밀리초(RFC 11222에 지정된 2시간)입니다.

tcp_ip_abort_cinterval

연결에 대한 제한 시간을 중단(Abort Timeout)합니다.즉, 3-Way 핸드셰이크 방식에서
사용되는 중단 타이머(Abort Timer)입니다.
기본값은 180000밀리초(3분)입니다.

tcp_ip_abort_interval

연결된 후에 사용되는 중단 시간 간격(Abort Interval)으로, 연결된 동안의 중단 제한
시간(Abort Timeout)입니다. 즉, RESET 세그먼트가 보내지기 전에 연결이 설정된 상태
에서 TCP가 재전송되는 최대 시간입니다.
기본값은 480000밀리초(8분)입니다.

tcp_ip_notify_cinterval

TCP가 새 라우트를 찾을 수 있도록 IP에 통보한 후 TCP가 활성화되어 수행되는 제한
시간 값입니다.
기본값은 10000밀리초(10초)입니다.

tcp_ip_notify_interval

TCP가 새 라우트를 찾을 수 있도록 IP에 통보한 후 연결을 지속하는 동안의 제한 시간
값입니다.
기본값은 10000밀리초(10초)입니다.

tcp_largest_anon_port

익명 연결에 사용될 수도 있는 가장 큰 TCP 포트 번호입니다.
기본값은 65535입니다.

tcp_max_buf

SO_SNDBUF 또는 SO_RCVBUF 옵션 사용에 허용되는 최대 버퍼 크기를 지정합니다. 설정된
값보다 큰 버퍼를 사용하면 EINVAL 값 때문에 실패합니다.
기본값은 256K입니다.
이 매개 변수를 애플리케이션에서 요구하는 최대 버퍼 크기보다 너무 크게 설정하면
오동작을 일으키거나 악의적인 애플리케이션에서 커널 메모리를 부당하게 이용하게
될 수도 있으므로 주의하십시오.

tcp_mss_def

로컬이 아닌 TCP 패킷(다른 네트워크나 서브넷에 전송되는 패킷)에 대한 최대 세그먼트
크기의 기본값을 지정할 수 있습니다.
기본값은 536바이트입니다.

tcp_mss_max

MSS와 관련한 로컬이 아닌 TCP 패킷에 대한 최대 세그먼트 크기를 지정합니다.
기본값은 65495바이트입니다.

tcp_old_urp_interpretation **제거됨

TCP Urgent Data Pointer
0 = 이전 BSD 방식의 RFC 793 (포인터는 Urgent Data +1 위치를 가리킵니다.)
1 = 최신 방식의 RFC 1122 (포인터는 Urgent Data 위치를 가리킵니다.)
기본값은 1입니다
** 이전 Solaris 2의 경우
S69inet(ndd -set /dev/tcp tcp_old_urp_interpretation 1) 파일을 확인하십시오.

tcp_recv_hiwat

이 매개 변수는 연결된 동안 사용되는 수신 버퍼 공간의 기본값을 지정합니다. 즉,
수신된 데이터에 대해 할당되는 버퍼 공간의 크기로 사용 가능한 최대 크기를
Receive Window에 알려줍니다. 대부분의 경우 tcp_recv_hiwat 값과 tcp_xmit_hiwat
값은 같습니다.
기본값은 8192바이트(8K)입니다.

tcp_rexmit_interval_initial

초기 재전송의 제한 시간 간격입니다.
기본값은 500밀리초에서 3000밀리초(3초)로 변경되었습니다.

tcp_rexmit_interval_max

재전송을 위한 최대 시간 간격입니다. 두 번 연속되는 전송 과정에서의 최대 대기
시간의 간격입니다.
기본값은 6000밀리초(1분)에서 240000밀리초(240초)로 변경되었습니다

tcp_rexmit_interval_min

재전송을 위한 최소 시간 간격입니다.
즉, 첫 번째 재전송 후 최소 대기 시간의 간격입니다.
기본값은 200밀리초입니다.

tcp_slow_start_initial

최신 TCP Sow-Start Standard(RFC2001)와 호환되지 않는 클라이언트가 Solaris에서
워크어라운드(workaround)를 사용할 경우 지정합니다. 2.5.1 103582-15 이상 버전
에서는 적용되어 있습니다.
기본값은 1입니다.(워크어라운드를 구현하는 경우에는 2로 변경하십시오.)

참고:CP Sow-Start 초기값은 변경할 수 있습니다.

bugid: 4054780 4057676을 참조하십시오.

Solaris를 사용하지 않는 클라이언트에서는 Solaris 서버가 제공하는 서비스를 이용할
때 HTTP와 같이 짧은 시간동안 활성화되는 연결에서 네트워크 성능이 다소 저하될 수도
있습니다. 이러한 문제는 Solaris가 TCP Slow-Start 명세 사항(RFC2001)을 철저히 준수
하기 때문에 발생합니다. 이제 ndd 변수를 조정하여 TCP Slow-Start 초기값을 수정할
수 있습니다.이러한 변수를 조정하는 방법 및 동작하는 방법에 대한 자세한 내용은
http://www.sun.com에서 "Sun On the Net"에 있는 "Sun Performance Information"
항목을 참조하십시오.

tcp_smallest_anon_port

익명 연결에 사용될 수도 있는 가장 작은 TCP 포트 번호를 지정합니다. Solaris에서는
32768 이상의 포트 번호를 할당합니다.
기본값은 32768입니다.

tcp_xmit_hiwat

이 매개 변수는 연결된 상태에서 보낼 때 사용되는 버퍼 공간의 기본값을 지정합니다.
즉, UNACK 데이터를 보낼 때 할당되는 버퍼 공간의 크기입니다. 대부분의 경우
tcp_xmit_hiwat값과 tcp_recv_hiwat의 값은 같습니다.
기본값은 8192바이트(8K)입니다.

tcp_xmit_lowat

TCP 전송 버퍼의 최소값을 지정합니다.
기본값은 2048바이트(2K)입니다.

Solaris 2.6의 TCP Large Window ndd 구성 매개 변수:

TCP Large Window는 RFC1323 규약에 따릅니다. 이러한 지원의 목적은 65535 제한을
초과하는 윈도우를 사용하는 ATM이나 위성 네트워크를 이용한 통신에서의 지연 현상
및 큰 대역폭에서의 성능을 향상시키기 위함입니다.
Solaris 2.6의 TCP Large Window

tcp_wscale_always

이 매개 변수가 0이 아니라면 원격 시스템에 연결되어 있는 경우 Window Scale 옵션이
항상 보내집니다. 그렇지 않으면, 사용자가 64K 이상의 Receive Window 크기를 요청할
경우에만 이 옵션이 보내집니다.
기본값은 0입니다.
이 매개 변수의 값과 관계없이 연결된 시스템이 이 옵션을 사용하는 경우에는 Window
Scale 옵션이 연결 ACK에 항상 포함되어 있습니다.

tcp_tstamp_always

이 매개 변수가 0이 아니라면 원격 시스템에 연결되어 있는 경우 timestamp 옵션이 항상
보내집니다.
기본값은 0입니다.
이 매개 변수의 값과 관계없이 연결된 시스템이 이 옵션을 사용하는 경우에는 timestamp
옵션이 연결 ACK 및 대기하는 모든 패킷에 항상 포함되어 있습니다.

tcp_tstamp_if_wscale

이 매개 변수 값이 0이 아니라면, 원격 시스템에 연결되어 있는 경우 사용자가 64K
이상의 Receive Window를 요청할 때(즉, 0이 아닌 Window Scale 옵션이 사용되는 경우)
timestamp 옵션이 보내집니다.
기본값은 0입니다.

tcp_host_param

이 매개 변수는 지정된 호스트와 연결할 때 사용되는 특정 TCP 매개 변수의 기본값을
비롯하여 IP 주소, 네트워크 정보 및 서브네트워크 정보에 대한 테이블입니다.
(읽기 전용)

3.2.3: UDP 변수 --------------------

udp_def_ttl


UDP 패킷에 대한 TTL(Time To Live)의 기본값을 지정합니다.

기본값은 255입니다.

udp_do_checksum

UDP 패킷에 대해 체크섬을 수행할지를 결정합니다.
기본값은 1(True)입니다.

udp_recv_hiwat

UDP 수신 버퍼의 최대값을 지정합니다. 이 값은 수신된 데이터에 대해 UDP에 할당된
버퍼 공간입니다.
기본값은 8192바이트(8K)입니다.

udp_smallest_anon_port

익명 연결에 사용될 수도 있는 가장 작은 UDP 포트 번호를 지정합니다.
기본값은 32768입니다.

udp_xmit_hiwat

UDP 전송 버퍼의 최대값을 지정합니다. 이 값은 전송하는 데이터에 대해 UDP에 할당된
버퍼 공간입니다.
기본값은 8192바이트(8K)입니다.

udp_xmit_lowat

UDP 전송 버퍼의 최소값을 지정합니다.
기본값은 1024바이트(1K)입니다.

3.2.4: ARP 변수--------------------

arp_cleanup_interval

IP에서 필요한 경우에 한해 ARP가 불필요한 정보를 보유하는 시간입니다.
기본값은 300000밀리초(5분)입니다.



4.0 자주 묻는 질문(FAQ) =================

4.1: 기타 질문 ----------------------------

질문:썬의 TCP/IP가 준수하는 RFC 규약이란 무엇입니까?

대답:썬은 TCP의 경우 RFC 793, UDP는 RFC 768, IP는 RFC 791을 준수하고 있으며
    RFC 1122에 대한 모든 사항을 따르고 있습니다. 2.6 이상에서는 RFC 1323이 구현
    되어 있습니다. 자세한 내용은 6.1장을 참조하십시오.

질문:TCP/IP에서 유휴 상태의 연결을 강제로 종료합니까?

대답:아닙니다.
    연결이 일정 시간동안 유휴 상태가 되면 프로브(Probe)를 보내 원격 시스템이나
    연결이 종료되었는지 확인합니다. 이 경우 모든 부분이 실행 중이면 TCP/IP 연결
    은 영구적으로 지속됩니다.

4.2: 포트 관련 질문 -----------------------

질문:포트가 TIME_WAIT 상태에서 수행을 멈추는 이유는 무엇입니까?

대답:이것은 2MSL 제한 시간 값 때문에 발생하는 것으로 TCP 명세 사항의 일부입니다.
    클라이언트와 서버에 의해 연결이 종료된 후, 포트는 일정한 시간동안 사용할 수
    없는 상태가 되므로 새 프로그램은 이전 프로그램에서 사용하기로 되어 있었던
    패킷을 묵시적으로 가져오지 않습니다.
    Solaris 시스템에서는 /dev/tcp tcp_close_wait_interval ndd 변수를 조정하여
    2MSL 값을 수정할 수 있습니다. 3.2.2절을 참조하십시오.

질문:이전 프로그램에서 사용했던 포트를 다시 사용하려고 하면 "address already in use"
    라는 메시지가 나타나는 이유는 무엇입니까?

대답1:해당 포트가 TIME_WAIT 상태인 경우일 수 있습니다(위의 질문 참조).
     netstat 명령을 실행하여 문제가 있는 포트를 확인할 수 있습니다. 포트가
     TIME_WAIT 상태에 있는 경우라면 이 상태가 해제될 때까지 약 2분 정도
     기다리십시오.

대답2:사용중인 프로그램이 다시 사용될 수도 있는 포트를 잘못 나열한 경우일 수
     있습니다. 프로그램에 SO_REUSEADDR 소켓 옵션이 설정되어 있는지 확인하십시오.

4.3: netstat 관련 질문 ----------------------

질문:netstat 명령을 실행하면 중지 상태가 되는 이유가 무엇입니까?

대답:이 문제는 대개 이름 해석의 오류로 인해 발생합니다. 다음과 같이 -n 옵션으로
    netstat 명령을 실행하여 확인하십시오.

% netstat -n

% netstat -rn

-n 옵션을 사용하여 실행해도 netstat 명령이 제대로 수행되지 않는 경우에는 이름
서비스(DNS, NIS, NIS+ 등)를 검사해야 합니다.

4.4: 웹 서버 운영을 위한 TCP/IP 최적화 -----------------------------

질문:HTTPD 문서에 명시된 Listen Backlog는 어떻게 증가시킬 수 있습니까?

대답:이 작업은 Solaris 시스템에서만 수정이 가능합니다. 이러한 시스템에서는
    /dev/tcp tcp_conn_req_max 변수를 조정하면 됩니다.
    3.2절에 변수를 임시 또는 영구적으로 설정하는 방법이 설명되어 있습니다.

Solaris 2.4 이하에서는 ndd를 사용하여 Listen Backlog를 기본값 5에서 32까지 설정할
수 있습니다.

ndd -set /dev/tcp tcp_conn_req_max 32

커널을 수정하면 Backlog를 더 높은 값으로 설정할 수도 있습니다.

echo "tcp_param_arr+14/W 0t128"   adb -kw /dev/ksyms /dev/mem ndd -set /dev/tcp tcp_conn_req_max 128

이 작업을 수행하기 전에 패치 101945-36 이상이 설치되어 있는지 확인하십시오.
128 이상은 설정하지 않는 것이 좋습니다.
변경 사항을 영구적으로 적용하려면 위 두 행을 /etc/rc2.d/S69inet에 포함시키십시오.

Solaris 2.5에서는 대개 Listen Backlog 값을 1024까지 설정할 수 있습니다:

ndd -set /dev/tcp tcp_conn_req_max 1024

2.5.1 w/ tcp patch 및 2.6에서는 tcp_conn_req_max를 대치하는 큐가 두 개 있습니다.

Solaris 2.5.1 w/patch 103582-11 이상이나 Solaris 2.6을 시작할 때 tcp_conn_req_max
값은 더 이상 존재하지 않습니다.ndd에 사용되는 tcp_conn_req_max 매개 변수는
tcp_conn_req_max_q와 tcp_conn_req_max_q0라는 강화된 두 개의 매개 변수로 대체
되었습니다.

이러한 새 매개 변수의 기본값은 tcp_conn_req_max 값인 1024에 대응됩니다
(tcp patch 103582-11 이전). 이 두 개의 변수는 Solaris 2.5.1 patch:103582
(버전 11 이상)에서 생성되며 Solaris 2.6에 내장되어 있습니다. 이러한 Solaris 패치
는 CERT 권고와 버그 1182957에 명시된 TCP SYN 공격의 위험성에 대비한 것입니다.

w/patch 103582-11 이상에서 연결을 최대로 증가시키려면 다음과 같이 하십시오.

/usr/sbin/ndd /dev/tcp -set tcp_conn_req_max_q 1024

질문:웹 서버의 성능을 향상시키려면 어떻게 해야 합니까?

대답:웹 서버 문서에서 제시하는 대로 Listen Backlog를 조정해야 합니다.
Send, Receive 및 Congestion Window의 크기를 증가할 필요가 있을 수도 있습니다.

ndd -set /dev/tcp tcp_cwnd_max 65535 ndd -set /dev/tcp tcp_xmit_hiwat 65536 ndd -set /dev/tcp tcp_recv_hiwat 65536

Solaris 2.5 이상에서는 tcp_cwnd_max 값이 기본적으로 65535로 이미 설정되어 있다는
것을 주의하십시오. 또한 이러한 ndd 설정은 Solaris에만 적용된다는 것도 알아두십시오.

대답2:Solaris 2.6으로 업그레드하거나 더 빠른 CPU, 메모리 확장, 고속 이더넷 등을
     사용하십시오.



5.0: 패치 =================

다음은 4.1.3, 4.1.3_u1, 4.1.4, 5.3 및 5.4의 TCP/IP와 관련한 모든 패치 목록입니다.
TCP/IP 문제가 있는 경우, 특히 아래에 나열한 일반적인 증상이 있다면 우선 패치를
설치하는 것이 좋습니다.

시스템을 안정적으로 유지하려면 권장하는 패치를 모두 설치하십시오. 사용하고 있는
운영 체제에 권장하는 패치 목록은 sunsolve.sun.com에서 확인할 수 있습니다.

5.1: SunOS의 경우 TCP/IP 패치 -------------------------

Patch-ID#
100584 SunOS 4.1.1,4.1.2,4.1.3:TCP 소켓 및 재설정 문제
101790-01 SunOS 4.1.3_U1:TCP 소켓 및 재설정 문제

TCP 재설정에 대한 일부 문제 및 getsockopt 함수를 사용할 때의 문제를 해결할 수
있습니다.

100584-08 SunOS 4.1.3:TCP 인터페이스 점보 패치
102010-02 SunOS 4.1.3_U1:TCP 인터페이스 점보 패치

TCP 연결과 관련한 여러 문제를 해결할 수 있습니다.

5.2: Solaris의 경우 TCP/IP 패치 ---------------------------

Solaris 2.3 101318-81 SunOS 5.3:커널(libc, lockd 등 포함)에 대한 점보 패치

Solaris 2.4 101945-42 SunOS 5.4:커널에 대한 점보 패치

Solaris 2.5 103447-10 SunOS 5.5:tcp 패치
           103093-22 SunOS 5.5:커널 업데이트
           103399-02 SunOS 5.5:/kernel/strmod/sockmod 패치

Solaris 2.5.1 103582-16 SunOS 5.5.1:/kernel/drv/tcp 및 /usr/bin/netstat 패치
             103597-04 SunOS 5.5.1:/kernel/strmod/sockmod 패치
             103640-20 SunOS 5.5.1:커널 패치
             105097-01 SunOS 5.5.1:usr/lib/libsocket.a 및 usr/lib/libsocket.so.1 패치

Solaris 2.6 105529-03  SunOS 5.6:/kernel/drv/tcp 패치
  105214-01 SunOS 5.6:/kernel/fs/sockfs 패치

이러한 패치를 통해 여러 가지 TCP/IP 문제 및 기타 네트워크 문제를 해결할 수
있습니다. 문제를 해결하려면 네트워크에 연결된 각 시스템에 패치를 설치해야 합니다.



6.0: 알려진 버그 및 RFE 문서 =================

아래에 설명하는 버그 및 RFE 문서는 TCP/IP 관련 문제에 대해 잘 알려진 내용입니다.

6.1: RFE 문서 ---------

1179428 TCPIP 성능에 대한 RFC 1323 구현 요청 이 RFE에서는 위성 또는 지연되는
연결에 대한 성능을 개선시킬 수 있도록 Solaris에 구현된 RFC 1323 요청을 다룹니다.


7.0 참고 자료  =================

7.1: 중요한 매뉴얼 페이지 ------------------------

arp etherfind ip ndd             (Solaris 전용) netstat snoop tcp udp

7.2:Sunsolve 문서 -----------------------

아래에 설명하는 SunSolve 문서에는 이 정보 시트에서 다루지 않는 몇 가지 추가 정보
가 들어 있습니다.

7.2.1: 자주 묻는 질문(FAQ) -----------

1048    IP 인터페이스에 대한 질문과 대답
1202    TCP/IP 애플리케이션에서 비동기 통신을 이용하면 응답이 늦어짐

7.2.2: Infodoc ---------------

2194    인터넷 프로토콜 개요(IP 및 ICMP)
2195    전송 제어 프로토콜(TCP)

7.2.3: SRDB ------------

5819    제한 시간동안 소켓이 활성화되도록 설정하는 방법
6729    NFS에 대한 UDP 체크섬
11416   ndd에서 설정 가능한 ARP 값은 어떤 것입니까?

7.3: 썬 교육 서비스  -----------------------------

TCP/IP 조정에 대한 썬 강의는 개설되지 않았습니다.

7.4: Solaris 문서 --------------------------

TCP/IP 조정을 다룬 Solaris 문서는 없습니다.

7.5: 타사 문서 ------------------------------

TCP/IP Illustrated, Volume 1,
저자 W Richard Stevens,
출판사 Addison-Wesley,
ISBN 0-201-63346-9

이것은 TCP/IP를 다룬 최고의 서적입니다. 이 책은 위에서 언급한 여러 용어에 대한
설명과 네트워크 전반에 대한 유용한 내용을 포함하고 있습니다.

7.6: RFC 문서 ---------

TCP/IP 및 다른 네트워크 프로토콜을 다룬 RFC 문서는 많이 있습니다.

RFC는 여러 가지 일반 네트워크 프로그램의 명세 사항을 정의하는 문서로 인터넷에
실려 있습니다. RFC 문서는 /rfc 디렉토리에 있는 nic.ddn.mi에서 검색할 수 있습니다.

8.0: 지원 ===================

SunService는 사용자의 TCP/IP 환경의 초기 구성 작업에 대한 책임이 없습니다. 또한
SunService는 사용자의 TCP/IP 성능 문제를 진단하거나 TCP/IP 조정 지침을 제안하지
않습니다.

썬에서는 TCP/IP가 제대로 동작하지 않을 때 문제 해결을 도와 드릴 수는 있지만, 이
경우 TCP/IP에 대해 충분한 지식이 있는 시스템 관리자가 문의해야 합니다.

9.0: 기타 지원 =======================

초기 구성 작업이나 TCP/IP 성능 조정 지침에 대한 사항은 가까운 SunService 센터로
문의하시면 도움을 받으실 수 있습니다. 썬 고객 서비스 센터를 이용하시려면 가까운
SunIntegration 사업부나 판매 사업부에 문의하시면 됩니다.
고객 서비스 센터 전화 번호는 800-821-4643입니다.


적용 대상:   하드웨어, AFO Vertical Team Docs/NetAdmin

TCP_Keepalive_Interval Parameter 조정

<현재 서버의 Network Tuning 관련 parameter 설정현황 >


galaxy(K420):/> nettune -l

tcp_keepstart = 300 default = 7200 min = 8 max = 12000 units = seconds

tcp_keepfreq = 75 default = 75 min = 5 max = 2000 units = seconds

tcp_keepstop = 600 default = 600 min = 10 max = 4000 units = seconds



incar90:/>ndd -get /dev/tcp tcp_keepalive_interval

7200000  


incar90은 현재 default 2시간 설정되어있음.

------- Original Message -------

Sender : Kim, Hye-Jin<hyejin.kim@hp.com>

Date : 2004-09-16 16:45

Title : nettune 명령어 관련 입니다.


           안녕하세요 HP RC의 김혜진 입니다.


           문의하신 내용 정리해서 보내 드립니다.

           # nettune s tcp_keepstart 300 에 대해서 문의 하셨는 데요

           TCP session 에서 session이 정상적으로 살아 있는 지 확인하기 위해서

           Keepalive packet을 통해서 서로 ack를 주고 받으면서 확인합니다.

          

           그중 TCP가 keepalive packet를 보내기 시작하는 시간을 조절하기 위해서는 tcp_keepstart,

           packet의 시간 간격을 조절하기 위해서는 tcp_keepfreq 를 변경합니다.

           tcp_keepstop은 보내는 시간과 관계가 있습니다. ( 10.20 에서 해당됩니다. )


    HP-UX 10.20 에서는 nettune 명령으로 TCP keepalive 를 설정하고

    HP-UX 11.0 에서는 ndd 명령으로 설정할 수 있습니다.

    만약 ACK를 10분동안 기다리다가 2분후에 접속을 끊도록 설정하려면


           %HP-UX 10.20

           nettune -s tcp_keepstart 600  ( 10분동안 별다른 내용이 없다면 )

           nettune -s tcp_keepfreq 5     ( 5초 단위로 keepalive packet을 보냅니다. )

           nettune -s tcp_keepstop 120  ( 그 2분을 기달리다가 TCP session이 종료됩니다. )


           %HP-UX 11.0

           ndd -set /dev/tcp tcp_keepalive_interval 600000  ( keepalive packet을 10분 간격으로 보냅니다. )

           ndd -set /dev/tcp tcp_ip_abort_interval 120000    ( 2분 동안 응답이 없으면 TCP session이 종료됩니다. )


           도움이 되시길 바랍니다.

크로스케이블, 다이렉트케이블을 제작하려면 |
출처 블로그 > 나를 위한 내가되기~
원본 http://blog.naver.com/tlqhekd/130001982263
크로스케이블, 다이렉트케이블을 제작하려면
UTP 케이블이 사용된다(UTP케이블은 Category 5 와 Category 6)가 있는데
전송속도면에서 Category 6가 유리하지만 가격의 차이가있다
옆그림은 케이블을 제작할때 필요한
공구와 부품이다

크로스케이블의 제작방법

/   ◀------------▶  
크로스케이블은 위그림을 참고하여
한쪽 콘넥터를(백황,황,백녹,청,백청,녹,백갈,갈)로 연결하고
반대쪽은(백녹,녹,백황,청,백청,황,백갈,갈)색으로 연결한다


다이렉트케이블의 제작방법

/   ◀------------▶   /
다이렉트케이블은 위그림을 참고하여
양쪽 콘넥터모두를(백황,황,백녹,청,백청,녹,백갈,갈)로 연결한다

보통 다이렉트케이블이라 함은 렌선 8가닥이 일대일로 연결 되는것을 말합니다.

PC와 허브연결: 다이렉트

PC와 PC 연결 : 크로스

허브와 허브 : 크로스

+ Recent posts