개정판: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

+ Recent posts