목차
제1장 컴퓨터 네트워크 프로그래밍 개요 = 1
1.1 컴퓨터 통신 프로토콜 = 1
1.1.1 컴퓨터 통신 프로토콜의 정의 = 1
통신 프로토콜의 특징 = 2
통신 프로토콜의 종류 = 2
1.1.2 OSI 7 계층 구조 = 3
1.1.3 TCP/IP 개요 = 4
TCP/IP 프로토콜 스택 = 5
인터넷과 서브네트워크 = 7
1.1.4 통신 프로토콜 표현 방식 = 7
필드 정의 = 7
파라미터 정의 = 8
상태 정의 = 9
동작 내용 정의 = 9
1.1.5 네트워크 프로그래밍 계층별 분류 = 10
응용 계층 프로그래밍 = 10
트랜스포트 계층 프로그래밍 = 11
디바이스 드라이버 계층 프로그래밍 = 11
1.2 네트워크 프로그램 구현 모델 = 12
1.2.1 클라이언트-서버 모델 = 12
2-tier 클라이언트 - 서버 모델 = 12
3-tier 클라이언트 - 서버 모델 = 13
n-tier 클라이언트 - 서버 모델 = 13
P2P 모델 = 14
1.2.2 분산객체 모델 = 15
1.2.3 서버 구현 기술 = 15
연결형과 비연결형 서버 = 16
Stateful과 Stateless 서버 = 17
Iterative와 Concurrent 서버 = 17
1.3 네트워크 서비스의 성능 = 18
1.3.1 성능 척도 = 18
최적의 패킷 크기 = 20
1.3.2 통신 자원과 비용 = 20
시스템 자원 = 20
개발 비용 = 21
1.3.3 플랫폼의 선택 = 21
유닉스 플랫폼 = 21
윈도우즈 플랫폼 = 22
자바 플랫폼 = 22
웹 플랫폼 = 23
모바일 플랫폼 = 23
1.3.4 네트워크 프로그램 영역 = 24
1.4 유닉스 프로그래밍 환경 = 24
1.4.1 네트워크 환경 = 24
네트워크 서비스 시작 = 25
ping = 26
arp = 27
host = 28
ifconfig = 28
netstat = 30
traceroute = 32
1.4.2 컴파일 환경 = 34
1.5 연습문제 = 36
제2장 소켓 프로그래밍 기초 = 37
2.1 소켓 개요 = 37
2.1.1 소켓 정의 = 37
소켓번호 = 38
포트번호 = 39
2.1.2 소켓 사용법 = 41
소켓 개설 = 41
C 프로그램 환경 = 44
소켓주소 구조체 = 45
소켓 사용 절차 = 47
2.2 인터넷 주소변환 = 48
2.2.1 바이트 순서 = 48
바이트 순서 확인 예 = 50
2.2.2 IP 주소 변환 = 51
도매인 주소 변환 = 54
gethostbyaddr() = 56
2.3 TCP 클라이언트 프로그램 = 58
2.3.1 TCP 클라이언트 프로그램 작성 절차 = 58
socket(), 소켓 개설 = 58
connect(), 서버에 연결요청 = 59
send(), recv(), 데이터 송수신 = 60
close(), 소켓 닫기 = 62
2.3.2 TCP 클라이언트 예제 프로그램 = 62
daytime 클라이언트 = 62
TCP 에코 클라이언트 = 65
포트번호 배정 = 68
2.4 TCP 서버 프로그램 = 70
2.4.1 TCP 서버 프로그램 작성 절차 = 70
socket(), 소켓의 생성 = 71
bind() = 71
listen() = 73
accept() = 74
2.4.2 UCP 에코 서버 프로그램 = 76
2.5 UDP 프로그램 = 78
2.5.1 UDP 프로그램 작성 절차 = 78
2.5.2 UDP 에코 프로그램 = 79
UDP 에코 클라이언트 = 80
UDP 에코서버 = 81
2.6 Connected UDP = 83
2.7 연습문제 = 84
제3장 유닉스 프로세스 = 87
3.1 프로세스의 이해 = 87
3.1.1 프로세스의 정의 = 87
프로세스의 상태 = 87
3.1.2 프로세스의 메모리 배치 = 88
메모리 영역 = 88
스택과 힙 = 90
3.1.3 프로세스의 생성과 종료 = 91
fork() = 92
fork() 사용 예 = 94
exec 함수 = 95
exec 사용 예 = 97
프로세스의 환경변수 = 98
프로세스의 종료 = 99
exit() = 99
3.2 토크 프로그램 = 100
3.2.1 토크서버 프로그램 = 101
3.2.2 토크 클라이언트 프로그램 = 104
3.3 연습문제 = 106
제4장 고급 소켓 프로그래밍 = 109
4.1 다중처리 기술 = 109
4.1.1 멀티태스킹 = 109
멀티프로세스 = 110
멀티스레드 = 110
4.1.2 다중화 = 111
폴링 = 111
셀렉팅 = 112
인터럽트 = 112
4.1.3 다중처리 예 = 112
채팅 프로그램 = 113
멀티프로세스형 서버 프로그램 = 113
폴링형 서버 프로그램 = 113
셀렉팅형 서버 프로그래밍 = 113
인터럽트형 서버 프로그램 = 113
4.2 소켓의 동작 모드 = 114
4.3 비동기형 채팅 프로그램 = 115
4.3.1 채팅 서버 프로그램 구조 = 115
4.3.2 select() = 117
4.3.3 채팅 서버 프로그램 = 119
통신용 소켓 구분 = 125
4.3.4 채팅 클라이언트 프로그램 = 126
4.4 폴링형 채팅 프로그램 = 130
4.4.1 fcntl() = 130
넌블록 모드 설정 = 130
비동기 모드 = 131
4.4.2 폴링형 채팅 서버 = 132
넌블록 모드 = 132
폴링형 채팅 서버 프로그램 = 134
4.5 연습 문제 = 139
제5장 소켓 옵션 = 141
5.1 소켓 옵션 변경 = 141
5.1.1 소켓 옵션 변경 함수 = 141
5.1.2 소켓 옵션 변경 예 = 142
5.2 소켓 옵션 종류 = 144
5.2.1 SO_KEEPALIVE = 144
5.2.2 SO_LINGER = 145
shutdown() = 147
5.2.3 SO_RCVBUF와 SO_SNDBUF = 148
5.2.4 SO_REUSEADDR = 149
TIME-WAIT 상태에서의 주소 재사용 = 149
자식 프로세스가 서버인 경우 = 149
멀티홈 서버의 경우 = 150
완정 중복 바인딩 = 150
5.2.5 기타 옵션 = 150
SO_OOBINLINE = 150
SO_RCVLOWAT와 SO_SNDLOWAT = 150
SO_DONTROUTE = 151
SO_BROADCAST = 151
TCP_NODELAY = 151
TCP_MAXSEG = 152
5.3 멀티캐스트 프로그래밍 = 152
5.3.1 멀티캐스트 개요 = 152
멀티캐스트 그룹 = 153
5.3.2 멀티캐스트 데이터그램 송수신 = 153
소켓 옵션 지정 = 153
ip_mreq, 그룹주소 = 154
멀티캐스트 데이터그램 수신 = 155
멀티캐스트 데이터그램 송신 = 155
5.3.3 멀티캐스트 채팅 프로그램 = 156
5.4 send()와 recv()의 옵션 지정 = 160
MSG_PEEK = 160
MSG_WAITALL = 160
MSG_OOB = 161
5.5 연습문제 = 161
제6장 데몬 서버 구축 방법 = 163
6.1 데몬 프로세스 = 163
6.1.1 데몬 프로세스 생성 = 163
6.1.2 데몬 서버 종류 = 164
6.2 독립형 데몬 서버 = 165
6.3 inetd를 이용한 서버 구축 = 168
6.3.1 inetd 환경 설정 = 168
6.3.2 TCP Wrapper = 169
/etc/hosts.allow와 /etc/hosts.deny = 169
6.4 xinetd를 이용한 서버 구축 = 170
6.4.1 xinetd 환경 설정 = 171
defaults 부분 설정 = 171
service 부분 설정 = 172
6.4.2 xinetd를 이용한 에코 서버 = 173
xinetd에 서비스를 등록하는 절차 = 174
xinetd 서비스의 특징 = 175
6.4.3 UDP 에코 서버 = 175
6.5 연습문제 = 177
제7장 시그널 = 179
7.1 시그널 처리 = 179
7.1.1 시그널의 종류 = 179
시그널 발생 = 181
7.1.2 시그널 처리 기본 동작 = 181
7.1.3 시그널 핸들러 = 182
시그널 집합 = 182
시그널 핸들러 설정 = 183
Signal-unsafe 함수 = 185
signal() = 185
7.2 시그널 처리 예 = 186
7.2.1 SIGINT 처리 예 = 186
7.2.2 시스템 콜 수행중의 시그널 처리 = 188
7.2.3 중복 블록된 시그널 처리 = 190
7.2.4 SIGALARM에 의한 read()의 timeout 예 = 192
7.3 SIGCHLD와 프로세스의 종료 = 193
7.3.1 프로세스의 종료 = 193
wait() = 194
기본동작으로서 SIGCHLD를 무시하는 경우 = 194
SIG_IGN으로 SIGCHLD를 무시하는 경우 = 195
시그널 핸들러를 등록한 경우 = 195
7.3.2 프로세스의 종료 처리 = 195
기본 동작(시그널 무시) 실행 결과 = 199
시그널 무시(SIG_IGN)를 등록한 경우 = 200
SIGCHLD 시그널 핸들러를 등록한 경우 = 201
시스템 콜 인터럽트 경우 = 203
SA_NOCLDWAIT 옵션 = 203
waitpid() = 204
7.4 시그널 블록 마스크의 조작 = 204
sigprocmask() = 204
sigpending() = 205
sigsuspend() = 205
7.5 연습문제 = 206
제8장 프로세스간 통신 = 207
8.1 파이프 = 207
8.1.1 파이프 생성 = 207
8.1.2 파이프를 이용한 에코 서버 프로그램 = 209
UDP 에코 클라이언트 프로그램 = 213
8.2 FIFO 생성 = 215
8.2.1 FIFO 생성 = 215
8.2.2 FIFO를 이용한 에코 서버 프로그램 = 216
8.3 메시지큐 = 219
8.3.1 메시지큐 개요 = 219
메시지큐 정의 = 219
8.3.2 메시지큐 생성 = 221
msgget() 사용 예 = 223
8.3.3 메시지 송수신 = 224
msgsnd() = 224
msgrcv() = 225
메시지큐 이용 예 = 225
8.3.4 메시지큐 제어 = 228
msgctl() 사용 예 = 229
8.3.5 메시지큐를 이용한 에코 서버 = 231
8.4 공유메모리 = 238
8.4.1 공유메모리 사용 = 238
공유메모리 생성 = 238
공유메모리 첨부 = 240
공유메모리의 분리 = 241
8.4.2 공유메모리 제어 = 241
공유메모리 정보 얻기 = 242
공유메모리 삭제 = 242
8.4.3 공유메모리의 동기화문제 처리 = 243
동기화문제 예제 = 243
8.5 세마포어 = 246
8.5.1 동기화문제 = 247
8.5.2 세마포어 사용 = 248
세마포어 정의 = 248
semget(), 세마포어 생성 = 249
세마포어 연산 = 250
세마포어 사용 예 = 251
8.5.3 세마포어 제어 = 253
IPC_STAT = 253
SETVAL = 254
SETALL = 254
GETVAL = 254
GETALL = 255
GETNCNT = 255
GETPID = 255
IPC_RMID = 255
8.5.4 세마포어 이용 예제 = 256
8.5.5 공유메모리의 동기화문제 처리 = 259
8.6 연습문제 = 264
제9장 스레드 프로그래밍 = 265
9.1 스레드 개요 = 265
9.1.1 스레드 생성과 종료 = 265
pthread_create() = 265
pthread_self() = 266
pthread_exit() = 266
pthread_join() = 267
Posix 스레드 라이브러리 = 268
스레드의 생성과 종료 예 = 269
REENTRANT = 271
9.1.2 스레드의 취소 = 271
스레드의 취소 관련 함수 = 272
int phread_setcancelstate(int state, int *oldstate) = 272
int phread_setcanceltype(int type, int *oldtype) = 272
void pthread_testcancel() = 273
취소요청을 무시하는 예 = 273
지연 취소 = 276
즉시 취소 = 277
9.1.3 스레드의 상태 = 278
9.1.4 스레드의 동기화문제 = 279
스레드 경쟁 예 = 279
플래그 사용 예 = 282
9.2 뮤텍스 = 282
9.2.1 뮤텍스 사용 방법 = 283
뮤텍스 사용 절차 = 283
뮤텍스 선언 및 초기화 = 284
기본 뮤텍스 = 285
Timed 타입 뮤텍스 = 285
Recursive 타입 뮤텍스 = 285
Error Check 타입 뮤텍스 = 285
뮤텍스의 삭제 = 286
뮤텍스와 데드락 = 286
9.2.2 뮤텍스 사용 예 = 286
9.2.3 스레드의 Cleanup 핸들러 = 289
Cleanup 핸들러 등록 = 289
9.3 스레드의 조건변수 = 290
9.3.1 조건변수 사용 방법 = 290
조건변수의 정의 = 290
조건변수의 동작 = 290
조건변수의 생성과 삭제 = 292
9.3.2 조건변수 사용 예 = 292
9.3.3 스레드의 세마포어 = 296
스레드용 세마포어 이용 함수 = 296
9.4 스레드의 시그널 처리 = 298
9.4.1 스레드 시그널 처리 개요 = 298
9.4.2 스레드 시그널 처리 함수 = 298
9.5 멀티스레드 에코 서버 = 299
9.6 연습문제 = 303
제10장 Raw 소켓 = 305
10.1 Raw 소켓 생성 = 305
10.2 Ping 프로그램 구현 = 306
10.2.1 프로그램 개요 = 306
사용자 IP 헤더 작성 = 307
ICMP 에코 요청 전송 = 308
ICMP ECHO 응답 수신 = 309
10.2.2 myping.c 소스코드 = 310
10.3 연습문제 = 316
제11장 패킷 캡쳐 프로그래밍 = 317
11.1 tcpdump = 317
11.1.1 tcpdump 사용 예 = 318
11.2.1 tcpdump 명령 인자 = 319
옵션 설정 = 319
필터링 규칙 설정 = 320
특정 호스트 또는 포트 지정 = 321
11.2 pcap 라이브러리 주요 함수 = 322
11.2.1 네트워크 디바이스 열기 = 322
pcap_open_live() = 322
pcap_lookupdev() = 323
11.2.2 패킷 캡쳐 함수 = 323
pcap_loop() = 323
pcap_dispatch() = 324
11.3 패킷 캡쳐 예제 = 325
11.3.1 pcap_loop() 사용 예 = 325
11.3.2 pcap_dispatch() 사용 예 = 329
11.3.3 pcap_next() 사용 예 = 329
11.3.4 패킷 필터링 = 330
11.4 TCP/IP 헤더 캡쳐 예 = 331
11.4.1 IP 헤더 출력 = 332
11.4.2 TCP 헤더 출력 = 338
11.4.3 UDP 헤더 출력 = 343
11.5 연습문제 = 345
제12장 TCP/IP 프로토콜 = 347
12.1 네트워크 액세스 계층 = 347
12.1.1 이더넷 = 347
12.1.2 PPP = 348
12.1.3 기타 서브네트워크 = 349
12.2 IP 프로토콜 = 350
12.2.1 IP 데이터그램 구조 = 350
IP 헤더 = 350
IP 주소 = 352
12.2.2 IP 계층 기능 = 353
MTU = 353
path MTU = 354
라우팅 = 354
ARP = 355
12.3 TCP 프로토콜 = 356
12.3.1 TCP 특징 = 356
연결형 서비스 제공 = 356
신뢰성 있는 데이터 전달 = 357
스트림형 서비스 제공 = 358
12.3.2 TCP 헤더 = 358
세그먼트 = 358
TCP 세그먼트와 헤더 = 359
12.3.3 TCP 연결설정 = 361
12.3.4 TCP 연결종료 = 362
TIME-WAIT 상태 = 363
리셋 = 363
12.3.5 데이터 송수신 = 364
MSS = 364
TCP 데이터 송수신 = 365
Interactive 데이터 송수신 = 365
흐름제어 = 366
혼잡제어 = 366
12.4 UDP 프로토콜 = 367
UDP 헤더 = 368
UDP의 특징 = 368
부록 UNIX BSD 소켓 시스템 콜 문법 = 371
찾아보기 = 389