Wait() 호출 시점에 child process가 없다면, 생성시까지 blocking -> waitpid() 사용 blocking 해결
Signal : system에 특정 상황 발생 -> OS 전달 메시지 => process(signal handler 서유)에 전달
Signal handler : signal 처리 함수 모듈
Sigaction() : signal 발생 -> signal handler 함수 연결
Wait() 호출 시점에 child process가 없다면, 생성시까지 blocking -> waitpid() 사용 blocking 해결
Signal : system에 특정 상황 발생 -> OS 전달 메시지 => process(signal handler 서유)에 전달
Signal handler : signal 처리 함수 모듈
Sigaction() : signal 발생 -> signal handler 함수 연결
Time-Wait :
(ACK의 소멸로 인한) 연결종료 과정에서 Four-Way-Handshaking이 제대로 안되면 Time-Wait 상태가 된다.
ACK를 재전송
Time-Wait 상태일 때 socket은 완전히 소멸되지 않는다. -> bind() error가 생긴다.
SO_REUSEADDR (1 -> True : 새 socket에 ip/port 할당 / 0 -> False : Default)
Nagle's Algorithm :
전송 가능할 때 많이 보낸다.
OFF로 설정 -> 속도가 빠름, 과부하 발생
socket의 종료 :
close() -> 수신/전송 모두 종료
Full Duplex에서 문제 발생 -> Half Close 방법 사용
socket -> host간 연결 -> I/O stream 생성
shutdown() :
half close를 사용하는 이유 : File 전송시 Out Stream 종료 -> EOF 자동 전송
TCP / UDP :
ip를 사용하지만 Flow Control 제공 유/무 차이가 있다
UDP 특징 :
TCP에 비해 속도가 빠름
Flow Control 제공하지 않기 때문
TCP : packet 단위
UDP : datagram 단위
UDP는 Host의 내부에서 port 정보 -> 최종 목적지를 구분
TCP를 사용해야 하는 경우 :
packet 손실이 전체 Data영향을 미치는 경우 ex)압축파일 전송
UDP를 사용해야 하는 경우 :
Muntimedia Data 실시간 전송 (빠른 속도)
TCP가 느린 이유 :
CE, CT, FC
Data 클 경우 TCP가 UDP보다 유리 (session 유지 긴 경우)
UDP :
server - listen(), accept() / client - connect() 필요없음
socket(), bind() 있어야 함
socket 하나
Data 전송 함수 호출시 + 수신 주소 정보 포함 시킴
최초의 sendto() -> ip/port를 할당(종료시까지 유지됨)
connect() 사용 할 수도 있다. -> 속도개선 (kernel -> socket 연결 / 가장 시간 많이 걸리는 작업을 미리 함)
socket :
전이중(Full - Duplex)
three - way - handshaking >> connect() 로 시작
call establish (3way) -> data transfer -> call terminate (4way)
TCP기반 -> Data 경계 모름 -> Pakcet 구성수 모름
Kernel I/O Buffer