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로 설정 -> 속도가 빠름, 과부하 발생

http://en.wikipedia.org/wiki/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


TCP :
Transmission Control Protocol (전송과정 컨트롤)

IP :
비연결 지향.
다른 경로 선택 - 경로에 오류 비해 감

TCP는 신뢰성 있는 Protocol
IP 사용하는 이유 -> 길 찾기, 하나의 Packet 전송 가정 -> 순서, 전송 신뢰 불가

IP 기반 Host - Host 의 Data 전송 약속 -> TCP/UDP
TCP 확인 절차 -> IP에 신뢰성 부여


[Server 함수 호출 순서]
socket() -> bind() -> listen() -> accept() -> read/write() -> close()

소켓생성 -> 주소/port할당 -> 연결요청대기 -> 연결수락 -> 읽기/쓰기 -> 소켓닫기

[Client 함수 호출 순서]
socket() -> connect() -> read()/write() -> close()
소켓생성 -> 연결 -> 읽기/쓰기 -> 소켓닫기



IP Address :
32bit
1Byte . 1Byte. 1Byte. 1Byte
A class : 0
B Calss: 10
C Calss: 110
D Class: 1110


Packet :
Network를 이동하는 Data Block
0~1023은 예약
TCP/UDP 따로 구분됨


Process:
Main Memory 상에 실행중인 Program


sockaddr_in.sinfamily = AF.NET
AF(Address Protocol Family)를 사용할 것


Network Byte Sequence :
Motorola 68000 -> Big-Endian 사용
Intel X86 -> Little-Endian 사용
따라서, Data 전송시 통일 시킴 -> Big-Endian 만을 사용


Endian-Conversion :
htons : host byte -> network byte - short
ntohs : network byte -> host byte - short
htonl : host byte -> network byte - long
ntohl : network byte -> host byte - long
WSAStartup :
Windock Version Check -> Library Init


MAKEWORD(2,2) -> 0X0202


socket : socket 생성, Descriptor 반환
bind : Addr, Port
listen : 연결 대기
accept : 연결 수락
connect : 연결요청


int socket(PF, TYPE, PROTOCOL) :
int : Descriptor
PF : socket 통신 환경
TYPE : SOCK_STREAM (연결지향) / SOCK_DGRAM (비연결지향)
PROTOCOL : IPPROTO_TCP (연결지향) / IPPROTO_UDP (비연결지향) => 0


TCP SOCKET -> socket(PF_INET, SOCK_STREAM, 0)
UDP SOCKET -> socket(PF_INET, SOCK_DGRAM, 0)


WSACleanup() :
terminate use of winsock

+ Recent posts