본문 바로가기
카테고리 없음

[Network] IP Header

by 321 2021. 5. 27.

 

ip패킷은 ip헤더와 데이터로 구성되어 있고

1 ip헤더 2 데이터

 

그중 ip헤더의 생김새는 아래와 같다.

출처 : https://www.youtube.com/watch?v=QKfk7YFILws 52:50

 

  • Version : 현재 버전 4인 ipv4
  • Header length : 현재 헤더의 길이를 32비트(==4바이트) 단위로 표시한다. 전체길이를 4바이트씩 나누면 몇 덩어리인가?를 물어보는 것
  • Service Type: 상세용도는 rfc1349에 언급되어 있으며 대부분의 시스템에서는 지원하지 않는 영역
  • Total Length : ip패킷길이(ip헤더 + 데이터)를 바이트단위로 표시하는 영역. 이론상으로는 64k 바이트까지 가능하지만 링크계층의 MTU길이에 의해 제한될 수 있다. 이더넷의 MTU는 1500바이트라서 ip패킷길이가 이보다 크다면 ip분할을 해서 여러 조각으로 나눠진다.
  • Identification(ID) : 바로 위에서 말한 경우처럼 ip분할이 발생할 경우 각각의 조각에 id값(16비트)을 부여해서 조립하는 데 사용하도록 한다.
  • Flags : 분할의 관한 정보
    • 0 : 사용 안 함 
    • 1 : df (dont fragmentation) 0이면 분할가능한 패킷 1이면 불가능
    • 2 : M (more) 마지막패킷인지여부
  • Fragment Offset : ip분할이 발생했을 경우 원래 데이터의 시작점으로부터 떨어진 값(차이 절댓값 같은)
  • TTL(time to live) : 패킷이 네트워크에 존재할 수 있는 시간, 게이트웨이를 통과할 때마다 걸린 시간만큼 감소시킨다. 1은 반드시 감소시키며 목적지도달 전에 이 필드의 값이 0이 되면 중간에 라우터나 게이트웨이에 의해 이 ip패킷이 파괴되고... 이때 ICMP를 사용해 송신 측 호스트에 이 사실을 알려준다.
  • Protocol : ip패킷이 전달하는 상위 데이터 프로토콜. -트랜스포트(전송계층)의 프로토콜을 나타내는 것.
    • TCP : 6 (10진수)
    • UDP : 17
    • ICMP : 1
    • IGMP : 2
  • Header Checksum
    • ip헤더 부분에 비트에러가 생겼는지 수신 측에서 확인하기 위한 기능을 제공.
    • ip헤더의 비트에러를 조사하기 위한 목적이며 ip패킷의 데이터영역에 대한 체크섬은 아님.
    • ip에서는 수신 측에서 ip패킷의 데이터영역에 대한 비트에러를 조사할 수는 없음(조사기능은 tcp나 udp가 한다)
    • 수신 측 호스트가 이 필드를 조사하여 checksum에러를 발견하면 이는 수신된 ip패킷의 헤더 부분이 손상되었다는 의미-> 에러 발생하면 송신 측에 이 사실을 알리지도 않고 폐기해 버림
  • Source IP Address : 송신 측 32비트 ip주소(localhost, 등등)
  • Destination IP Address : 목적지호스트의 32비트 ip주소 (웹서버의 ip주소), 브로드캐스트목적일 경우 1로 채워지거나 멀티캐스트경우 멀티캐스트그룹주소가 들어가기도 함.
  • Option : 테스트, 디버깅용도

 

참고 : TCP/IP기초와 JAVA/C#을 활용한 네트워크 프로그래밍 (카오스북)