게임 제작에는 보통 TCP/IP의 상위계층을 다루지만, 최적화를 위해서는 하위계층의 동작과 상위와 하위의 상호작용까지도 알아두는 것이 좋음
인터넷 통신 계층 모델
- RFC 1122: 링크 계층, IP 계층, 전송 계층, 응용 계층
- OSI(Open Systems Interconnection) 7 계층: 물리 계층, 데이터 링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층, 응용 계층
- 게임 개발과 관련해서 계층을 다시 묶으면 물리 계층, 링크 계층, 네트워크 계층, 전송 계층, 응용 계층으로 나눌 수 있음
1. 물리 계층(Physical Layer): 가장 기본적인 하드웨어 전송을 지원하는 계층
- 물리적으로 연결된 매체를 통해 통신을 책임짐
- 물리 계층에서 연결에 이용되는 예: TP CAT-6 케이블(랜선), 전화선, 동축 케이블, 광섬유 케이블 등
- 꼭 물리적일 필요는 없음, 전파/양자 매체 등
2. 링크 계층(Link Layer): 물리적으로 연결된 호스트 사이의 통신 수단 제공
- frame 단위로 송수신을 주고받음
- 특정 목적지에 주소를 부여해서 각 frame에 기재하여 호스트를 식별하는 수단 제공
- frame 포맷 정의(수신 측 주소와 데이터 담음)
- frame의 최대 길이 정의 -> 한 번에 보낼 수 있는 데이터를 상위 계층에게 알려줌
- frame을 물리적인 전기 신호로 변환하는 방법 정의
- frame이 도착 여부를 확인하거나 실패시에 다시 보내는 등의 신뢰성 시도를 하지 않음 -> 링크 계층: 비신뢰성 통신
- 물리적 연결 매체와 링크 계층의 프로토콜 조합이 존재함
물리적 매체 | 링크 계층 프로토콜 |
TP 케이블(랜 선) | 이더넷 10BASE-T, 이더넷 100BASE-T, 이더넷 1000BASE-T |
Twisted copper wire | 구리선 이더넷 통신(Ethernet over copper, EoC) |
2.4GHz 전파 | 802.11b, 802.11g, 802.11n |
5GHz 전파 | 802.11n, 802.11ac |
광케이블 | FDDI(fiber distributed data interface: 광섬유 분산 데이터 인터페이스), 이더넷 10G BASE-SR, 이더넷 10G BASE-LR |
동축 케이블(Coaxial cable) | 동축 이더넷(Ethernet over coax, EoC), DOCSIS(data over cable service interface specification |
- 물리적 연결 매체와 링크 계층의 프로토콜 조합이 존재함
- 이 중 게임 네트워크에서는 이더넷 프로토콜을 반드시 마주치게 됨
이더넷/802.3
이더넷 블루북 표준의 프토토콜 그룹
- 이더넷 프로토콜은 IEEE 802.3 표준으로 정의하고 있음
- MAC (Media Access Control address) 주소 사용: 여러 호스트를 식별하기 위함
MAC 주소
- 이론상 고유한 48비트 숫자
- 이더넷 네트워크에 연결 가능한 장비마다 고유한 값 부여 (고유성이 완벽히 보장되지는 않지만 중복될 가능성은 거의 없다.)
- 이더넷을 제외한 와이파이나 블루투스 등 대부분의 IEEE 802 링크 계층 프로토콜이 MAC 주소를 사용하고 있음
- 송수신 호스트에 각각 MAC 주소를 부여한 후 이더넷 패킷이 구성됨
이더넷 패킷 구조
[0 - 7 바이트]
- 프리앰블(Preamble) 0x55 7바이트 + SFD(Start Frame Delimiter) 0xD5 1바이트 => 55 55 55 55 55 55 55 D5
- NIC 하드웨어가 걸러냄
[8 - 13 바이트]
- 목적지 MAC 주소 6바이트
- 브로드 캐스트: FF:FF:FF:FF:FF:FF, LAN상 연결된 모든 호스트에 전달하고자 할 때 사용하는 특수 MAC 주소
[14 - 21 바이트]
- 발신지 MAC 주소 6바이트 + 길이/종류 2바이트
- 길이 필드로 사용할 경우: 프레임에 포함된 페이로드의 길이를 바이트 단위로 나타냄
- 종류 필드로 사용할 경우: 이더타입(EtherType) 고유 식별자 값을 기록해 페이로드 내 데이터 해석 방법 표시
- 페이로드의 최대 길이 1,500 바이트 (이를 넘어서는 점보 프레임도 있긴 함: 9,000바이트 지원)
- 이더타입의 최솟값: 0x0660(1536)으로 정의함
- 길이/종류 필드 값이 1500 이하이면 '길이'로 해석하고 이상이면 '종류'로 해석함
[22 - ... 바이트]
- 페이로드 46 - 1,500 바이트: 프레임에 담겨 전송되는 데이터 자체
- 원하는 호스트로 전달하고 싶은 네트워크 계층 패킷이 담김
[... - ... 바이트]
- 프레임 체크 시퀀스(FCS: Frame Check Sequence): CRC32값(32bit cyclic redundancy checksum) -> 여러 값에 걸쳐 연산하여 얻은 체크섬 값
- 발신자 주소, 수신자 주소, 길이/종류 필드, 페이로드, 패딩 값 등이 연산헤 포함됨
- 연산 값을 검사하여 전송된 데이터가 손상되었는지 판단하고 손상되었다면 프레임을 폐기시킴
- 결론: 네트워크상 호스트 하나가 해당 프레임을 받았을 때 그 수신자가 자신이면 페이로드에서 데이터를 꺼내어 처리한다.
쓰다보니 내용이 좀 많아져서 네트워크 계층 ~ 응용 계층은 다음편에 이어서 작성함
'게임 개발 > 네트워크' 카테고리의 다른 글
[알고리즘 분석] 1장. 효율, 분석, 그리고 차수 (3) (0) | 2021.10.17 |
---|---|
인터넷 - #2. TCP/IP 스택의 계층 구조 (2) (0) | 2021.09.04 |
인터넷 - #1. 패킷 스위칭 (0) | 2021.08.29 |
네트워크 게임 - #3. <Age of Empires> 결정론적 락스텝 모델 (0) | 2021.08.29 |
네트워크 게임 - #2. <스타시즈: 트라이브스> 네트워킹 모델 (0) | 2021.08.29 |