3. Mac address 사용 레벨
CSMA/CD 방식
struct ethhdr {
unsigned char h_dest[6]; 받는자의 MAC
unsigned char h_source[6]; 보내는자 (내꺼) MAC
unsigned short h_proto; 상위 프로토콜의 식별자(IV4, IP6, ARP, ICMP.. 등등)
}; => 14바이트
4. IP (Internet Protocol)
IP, ARP,ICMP 등등
Connection-less Protocol
Addressing
Fragmentation/Reassemble
Time to Live
IP Fragmentation
데이터 그램의 크기 조절 기능
수신측에서 재조립(reassemble)
헤더에 같은 값의 Identification
MTU(Maximum Transfer Unit)의 길이에 따라 나누어 보냄.
9. UDP (User Datagram Protocol)
- 간단함
- 유연함
- 능률적
- 신속함
- 브로드 캐스트, 멀티 캐스트
- 신뢰성이 떨어짐.
- 다수의 datagram의 연속성이 없음.
- 메시지 크기의 제한 (65535)
10. Select 모델
Process가 Kernel에게 명령하여 다수의 event중 하나를 기다리다 지정된 시간이
지나거나 사건이 발생하면 process를 깨우도록 함.
While(1)
{
Select(..등록된 소켓...);
swtich(이벤트)
{
Case : Accept처리();
Case : Recv처리();
Case : disconnect처리();
Case : 게임로직 처리();
}
}
로직 쓰레드
client DB 쓰레드 DB
Select(...)
11. Overlapped I/O
애플리케이션은 입출력 함수를 호출한 후 입출력 작업의
완료 여부와 무관하게 다른 작업을 진행
12. IOCP(I/O Completion Port)
비동기 입출력 결과와 이 결과를 처리할 스레드에 대한 정보를 담고 있는 구조
1. IOCP 핸들 생성
Iocp핸들 = CreateIoCompletionPort(...)
2. IO완료를 기다리는 복수의 워커 쓰레드 생성
while(1)
{
GetQueuedCompletionStatus(iocp핸들..)
{
Case : Recv처리();
Case : disconnect처리();
Case : 게임로직 처리();
}
}
3. IOCP에 소켓 등록
CreateIoCompletionPort(소켓...)
PostQueuedCompletionStatus(...)
13. ٵ쓰레드
워커 쓰레드
로직쓰레드 ٵ쓰레드 DB
워커 쓰레드
ٵ쓰레드
워커 쓰레드
While(1) While(1)
{ {
GetQueuedCompletionStatus(iocp핸들..) GetQueuedCompletionStatus(iocp핸들..)
{ {
Case : Recv처리(); Case : 캐릭터 처리
PostQueuedCompletionStatus(...) Case : 룸 처리
Case : disconnect처리(); Case :
} }
} }