Public/tip & tech 122

TCP Status

TCP연결시에는 알다시피 3way handshaking을 한다. close시에는 client, server 가 각각 FIN을 보낸 후 ACK를 받는다(총 4번의 트랜젝션). TCP연결에는 여러개의 상태가 있는데, netstat으로 확인할 수 있는 상태들에 대해 간단히 정리해보면, 서버에서 listen()이 호출되면 상태는 LISTEN으로 바뀐다. 이 때 client에서 SYN을 보낸 후 SYN_SENT로 상태가 바뀌면 서버에서 이를 받고 SYN_RCVD로 바뀌고 SYN ACK를 보내준다. 그리고 client에서 SYN을 다시 받게 되면 비로소 ESTABLISHED로 바뀐다. 이 후 send(), recv()군의 함수들로 계속 통신을 하다가 client에서 close()호출로 인해 FIN 을 보내고 FIN..

Public/tip & tech 2008.06.24

Socket Option

소켓 사용시 여러 옵션을 줄 수 있는데, 아래 함수를 통해 set, get이 가능하다. int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int s, int level, int optname, void *optval, socklen_t *optlen); 설정할 수 있는 옵션은 영역이 매우 다양한데(이를 테면, TCP에서의 옵션이라던가, IP레이어에서의 옵션이라던가 등...), 어느 영역에서의 옵션을 설정할 것인지를 두번째 인자인 level에서 선택할 수 있다. 몇개의 옵션들은 아래와 같다. SOL_SOCKET SO_BROADCAST SO_REUSEADDR TCP의 TIME_WAIT상태의..

Public/tip & tech 2008.06.24

CLOSE_WAIT/TIME_WAIT

CLOSE_WAIT 클라이언트가 데이타를 전송함과 동시에 close할 경우 FIN이 붙어서 동시에 전송되는 경우가 있다. 이때 서버는 CLOSE_WAIT 상태로 계속남아있어서 이 패턴이 반복되면 통신자체가 되지 않게된다. 1. send 이후 약간의 시간을 두고 close하거나 2. send/recv/close 패턴의 경우는 문제가 없어보인다. 3. SO_LINGER 옵션을 이용하면 된다. TIME_WAIT TCP의 서버 프로그램을 종료한 바로뒤 다시 서버를 기동하면 bind에서 에러(Address aleady in use)로 끝날 때가 있다. 서버에서 active close를 한 경우(클라이언트가 active close하면 상관없음). 이때는 2 * MST를 기다려야한다. 이 문제는 TCP 자체 사양에 ..

Public/tip & tech 2007.11.12

컴파일 옵션

-D 는 소스 상에 ifdef _MMAP 를 활성화 하기 위한 옵션입니다. -mt 와 -D_REENTRANT 는 쓰레드 보호모드로 컴파일 하기 위한 옵션이고 -lsocket -lnsl 은 소켓을 사용하기 위하여 libsocket.so 와 libnsl.so 를 링크하라는 말이고 -lpthread 는 pthread 를 사용하기 위하여 libpthread.so 를 링크하라는 말이고 -lrt 는 세마포어를 사용하기 위하여 librt.so 를 링크 하라는 말입니다.

Public/tip & tech 2007.11.05

FIN_WAIT_2 에 대한 대책

개요 TCP socket connection 상태의 종류 FIN_WAIT_2 에 대한 대책 개요 TCP는 UDP와는 달리 connection-oriented protocol인 관계로, 연결을 맺거나 특히 끊을 때, 많은 확인 절차를 거치게 됩니다. 이로 인하여, server와 client 간에 약간의 overhead가 있을 수 있습니다. 특히, web server로 사용되는 system의 경우, 대부분의 client들이 그리 안정적이지 않은 PC client이므로, connection을 맺던 client application이 crash되는 경우 web server에는 다소간의 문제가 발생할 여지가 있습니다. 가장 대표적인 문제가 FIN_WAIT_2 상태입니다. 여기서는 이 상태가 무엇을 뜻하는지, 이로..

Public/tip & tech 2007.11.05

성능테스트

차례 1절. 소개 2절. IPC 테스트 2.1절. 테스트할 IPC 설비의 종류 2.2절. 테스트할 내용 2.3절. 테스트 방법 2.4절. 테스트 시스템 환경 2.5절. IPC 별 테스트 2.5.1절. Unix Domain Socket 2.5.2절. FIFO 2.5.3절. Message Queue 2.6절. 테스트 결과 2.6.1절. 테스트 결과 1 (71 바이트) 2.6.2절. 테스트 결과 2 (512 바이트) 2.7절. IPC 성능 테스트결과에 대한 분석 2.8절. 무엇을 선택하는게 좋을까? 1절. 소개 IPC 는 매우 다양한 종류가 존재하며, 각 IPC 설비 종류마다 장/단점을 가지고 있다. 그러므로 어떤 일을 하는 프로그램들이냐에 따라서 거기에 적당한 장점을 가지고 적당한 성능을 보여주는 IPC 설..

Public/tip & tech 2007.09.28

찾기 귀찮은 Network 기본

차례 [+] Network의 기본 클라이언트와 서버구조 TCP/IP IP 도메인 주소 Port 루프백(loopback) MTU Path MTU TTL TCP 연결 (Three-way Handshake) TCP 연결 종료 소켓 API 소켓 API란? 소켓 주소 구조 바이트 순서(Byte Ordering) 소켓기술자란? TCP 소켓 소켓옵션 에코 프로그램 에코 서버 에코 클라이언트 I/O 모델 Blocking I/O Non-Blocking I/O I/O Multiplexing Signal Driven I/O Asynchronaus I/O I/O Multiplexing 예제 POSIX Thread Thread vs Process Basic Thread Functions TCP Echo Server를 위한 클라..

Public/tip & tech 2007.08.28