IP 주소와 패킷 구조

게임 서버 프로그래밍/네트워크 개념정리

2020. 2. 18. 12:27

IP 주소의 정의

Internet Protocol의 약자. 

IP주소는 32비트 숫자로, 주로 사람이 알아볼 수 있게 네 개의 8비트 숫자를 마침표로 구분하여 표시한다.

Ex) www.usc.edu=> 128.125.253.146

 

IPv4

오늘날 네트워크 계층에 필요한 기능을 구현하는 데 가장 널리 이용되는 프로토콜.

논리 주소 체계로 각 호스트마다 개별적인 주소를 부여하며, 서브넷 체계로 주소 공간의 논리적 부분 집합을

나누어 물리적 서브네트워크를 정의하는 데 사용한다.

 

IPv4 패킷 구조

 

Version (4bit)

이 패킷이 지원하는 IP 종류를 표시한다.

 

Header Length (4bit)

IP 헤더 뒷부분에 옵션 필드가 여럿 붙을수 있으므로 헤더의 길이는 가변적이다. 

따라서 길이 필드에 정확히 어디서 헤더가 끝나고 이어 포장된 실제 데이터가 시작되는지 나타내 주어야 한다.

 

Type of Service (8bit)

혼잡 제어나 서비스 식별자 등 다양한 용도로 사용한다.

 

Total Packet Length (16bit)

전체 패킷의 길이를 바이트 단위로 표시한다. 길이는 헤더와 데이터(페이로드)를 더한 것이다.

IP 헤더의 최소 길이는 20bit이므로, IPv4 패킷에서 페이로드가 담을 수 있는 최대 길이는 (65,535 - 20 = 65,515)

 

Identifier (16 bit) - 패킷 분열에 이용

분열된 조각이 원래 어느 패킷에 있었는지 나타내는 숫자.

한 패킷에서 쪼개져 나온 모든 조각은 이 필드의 값이 같다.

 

Flags (3 bit) - 패킷 분열에 이용

마지막 조각을 제외한 모든 조각에 0x04 값(MF Flag)을 부여. 아직 남은 조각이 더 있다는 뜻. 이 플래그가 켜진 패킷을 받은 호스트는 남아있는 다른 조각을 모두 받을 때까지 처리를 미뤄두었다가 다 받은 후에서야 패킷을 다시 재조립 한다.

 

Fragment Offset (13 bit) - 패킷 분열에 이용

오프셋을 8바이트 블록 단위로 나타내며, 원래 패킷의 시작 지점부터 따졌을 때 이 조각의 위치를 가리킨다.

패킷의 순서가 뒤바껴 올 수 있기 때문에 이 값을 통해 순서를 정립한다.

 

Time To Live (8 bit)

패킷을 전달할 수 있는 횟수 제한을 나타낸다. 

패킷이 라우터를 지날 때마다 횟수를 하나씩 감소시킨다. TTL(Time To Live)가 0이 될 때까지 전송되지 않은 패킷들은 전송할 수 없다고 간주하고, 폐기한다.

 

Protocol ID (8 bit)

데이터(페이로드) 내용을 해석하는 데 어떤 프로토콜을 써야 하는지 나타낸다.

 

Header Checksum (16 bit)

IPv4 헤더의 무결성만을 검증. 데이터(페이로드)의 무결성을 검증하는 것은 윗단층의 몫

링크 계층 프로토콜에서 이미 체크섬으로 프레임 전체의 무결성을 검사하는 경우가 많기에 그다지 쓸모가 없다

 

Source IP Address / Destination IP Address (32 bit)

패킷 발신지와 목적지의 IP 주소.

목적지의 경우 특수 값을 쓰면 여러 호스트에 동시에 패킷을 보낼 수 있다.