IPv4 header

2022. 4. 4. 00:40Network

- Version(4bits)

IP버전을 나타내고 IPv4, IPv6가 올 수 있음

IPv4의 바이너리 패턴은 0100[4]

 

- IHL(4bits)

 IPv4 헤더 길이를 나타냄

헤더의 길이는 추가된 옵션의 수에 따라 다르기 때문에 모든 IPv4 헤더의 길이가 동일 X (옵션은선택사항)

헤더의 길이는 4바이트 블록 수로 계산. 길이를 계산하기 위해 바이트 수를 4로 나누면 됨.

ex) 20바이트가 포함된 경우 4바이트 블록의 헤더 길이 -> 5 = (20/4)

필드값이 5이면 헤더의 길이 -> 5 * 4 =20바이트, 필드값이 10이면 헤더의 길이는 -> 10 * 4 = 40바이트

IPv4 옵션이 길이가 4바이트의 정수배가 아닌 경우 나머지 바이트는 패딩 옵션을 통해 채워짐

IPv4 헤더의 최소 크기는 20바이트, 모든 옵션을 포함한 헤더의 최대 크기는 60바이트

이 값에 5를 곱한 바이트 단위 크기가 전체 IP 헤더의 크기

 

- Type of Service(8bits)

서비스 품질 기능을 제공하기 위한 정보를 전달됨

높은 값을 우선으로 처리하기 때문에 음성 -> 영상 -> text순으로 처리함 [TCP의 Urgent Pointer과 유사함] 

P|P|P|D|T|R|C|0

8bits중 앞 3bits(P) 우선순위, D(delay)->지연(0->정상지연, 1->낮은지연), T(troughput)->처리량(0->정상처량, 1->높은처리량), R(reliability)->신뢰성(0->정상신뢰도,1->높은신뢰도), C(cost)->비용(0->정상비용,1->최소비용), 마지막bit는사용 X

 

- Total Length(16bit)

IPv4 데이터그램의 길이(바이트)를 식별하는 16비트 필드이고 헤더의 길이+헤더가전달하는 데이터가 포함됨

IPv4 데이터그램의 최소 길이는 20바이트(IP 헤더의 최소 크기는 20바이트 = 데이터가 없는 IPv4 헤더의 경우), 최대 길이는 65,535바이트(16비트의 경우 가능한 최대 값) 

TCP와 달리 실제의 데이터길이를 예측할 수 있음[Total Length - IP Header(HLEN*5)] 

 

- Identification(16bit)

식별 필드는 16비트를 사용하며 조각에서 재조립될 때 특정 패킷을 식별하는 데 도움이 되도록 발신자가 고유하게 설정패킷이 하나만 있고 단편화되지 않은 경우 해당 특정 식별 값을 가진 유일한 패킷이 됨. 조각난 패킷의 경우 값은 모든조각에서 동일하며 대상 장치에서 데이터를 재조립하는 데 사용됨

 

- IP FLAGS(3bit)

3개의 비트로 이루어져 있음

첫번째 비트 -> 0[항상사용X]

두번째 비트 -> DF[0으로 설정되면 IPv4 데이터그램이 조각화, 1은 조각화X]

세번째 비트 -> MF[더 많은 조각이 진행 중임을 나타내는 플래그. MF가 0 -> 더 이상 조각을 보낼 필요가 없음, 1->조각 더 있음]

 

- Fragment Offset(13bit)

쪼개진 패킷들의 순서들을 알려줌[쪼깨진 패킷들의 순서는 상대적임]

8바이트로 쪼개지며 첫번째 패킷은 offset에 0이라고 표시됨

만약 오리지널 데이터 4000바이트를 3개로 단편화할경우 각각 단편화된 앞자리의 주소값들이 있을거임. 그 주소값과 8을 나누면 그게 Fragment Offset값이 되고 단편화 수가 많아 질수록 값이 누적해서 증가함.

 

cf) 2번째라인 필드[Identification ~ Fragment Offset]을 단편화하는 필드라고함. 

3개의 필드를 정리해보면 아래그림처럼 나온다.[A(Identification), 녹색(IP FLAGS), 노란색(Fragment Offset)]

 

- TTL(8bit)

ip 패킷의 생존시간을 나타냄

-> 홉 수를 나타내며 해당 홉까지 데이터가 안나오면 드롭시킴 

라우터를 거칠때마다 패킷의 값이 1씩 감소해 0이 되면 drop시킴 - > 라우팅 루프를 방지할 수 있음

 

- Protocal(8bit)

IP 데이터그램의 데이터(페이로드)에 담겨져 있는 상위 계층의 프로토콜을 알려줌

대표적으로 UDP, TCP 등이 해당됨

 

- Header Checksum(16bit)

헤더에 에러가 있는지 검사를 함

헤더패킷을 16비트단위로 잘라서 체크섬과 비교한 후 일치하지않으면 패킷을 폐기함

패키헤더체크섬 계산방법으로는 16비트씩 자른값[체크섬이 16비트니이니깐]을 모두 더한 후 체크섬에 들어갈 수 있는 16비트 값이 넘어가면 초과된 값은 16비트로 세팅된 값 뒤에 둔다음  2의 비트로 변환하여 1의 보수로 변경함

-> 즉 계산방식은 version 필드 값부터 마지막 필드인 목적지 IP 필드값까지 모두 더함 - Version 필드~ 목적지 IP 필드( Checksum 필드 제외) -> 16진수 인코딩된 값[체크섬이 16비트니이니깐]들을 2진수로 변경 -> 1의 보수로 변경

 

- Source Address(32bit)

패킷을 보내는 ip adress


- Destination Address(32bit)

패킷의 목적지의 ip adress

 

- IP Option

필드는 주로 테스트, 디버깅 및 보안에 사용되는 여러 선택적 헤더 설정을 지원함

 

- Padding

ip헤더는 4바이트단위로 잘라야 되는데 IP Option값에 따라 4바이트로 잘라지지 않을때 

4바이트로 만들어 줄 수 있음

'Network' 카테고리의 다른 글

TCP header  (0) 2022.04.05
Ipv6 header  (0) 2022.04.04
Proxy  (0) 2022.03.27
Portforwarding  (0) 2022.03.26
NAT  (0) 2022.03.26