티스토리 뷰

IPv4 Header 형식


통상적으로 (상기 그림의 Options가 별도로 붙지 않는 이상) IPv4 Header의 크기는 20bytes이다. 상기 그림의 20bytes 부분이 header 부분이라고 생각하면 된다. 길이는 총 32bit이다.

  • 첫번째 행
    • Version
      • v4의 헤더 형식이기 때문에 4bit를 갖는다.
    • IHL(Internet Header Length)
      • packet 중 Header의 값을 이야기한다. 이 값은 보통 5이고, 전체 길이는 32bit, 즉 4bytes이기 때문에 5 * 4bytes 하여 헤더는 20bytes의 length를 가지는 것이다.
    • TOS(Type Of Service)
      • 서비스의 우선 순위를 제공한다.
    • Total length
      • packet의 길이
      • 16bit이기 때문에 2^16 = 65535
      • 위의 값에서 헤더 길이 20bytes를 빼면 상기 그림의 65515bytes의 값이 나온다.
      • 때문에 이론상 IP Packet은 64KB가 가장 큰 수이다.
  • 두번째 행 - 단편화
    • 단편화란?
      • 어떤 네트워크를 갔더니 packet의 MTU가 1300KB밖에 안되는 경우가 있다면 packet을 이에 맞게 잘라주어야 하는데 이 과정이 단편화이다.
  • 세번째 행
    • TTL(Time to Live)
      • 홉이라는 단위를 만날때마다 감소하는데, 이 값이 0이 되면 이 packet은 버려진다.
    • Protocol
      • L3 Packet Payload 내부에 또 다른 Header가 올 수 있다. 이런 경우 이 안에 있는 header를 어떻게 해석해야하는지에 대한 설명이 protocol에 저장되어 있다.
    • Header checksum
      • 네트워크로 데이터가 송신되는 과정에서 손상이 일어날 것을 대비하여 검사하는 값.

서브넷 마스크와 CIDR

Subnet Mask

192.168.0.10
위와 같은 IP주소를 기준으로 이해해보려고 한다. 먼저 일전에 IP주소의 구조가 24bit(Network IP)와 8bit(Host IP)로 나뉘어진다는 것은 배운적이 있다. 이것을 상기하여 위의 IP 주소를 2진수로 표현하면 다음과 같다.

1100 0000 1010 1000 0000 0000 | 0000 1010
1111 11111 1111 1111 1111 1111 | 0000 0000 -> 255.255.255.0

위의 2진수를 AND 연산하면
1100 0000 1010 1000 0000 0000 | 0000 0000
이렇게 표현할 수 있다.

  • Subnet Mask란?
    • 32bit 숫자로 '0'의 비트는 호스트 부분을 나타내고 '1'의 비트는 네트워크 부분을 나타낸다. 이러한 방식으로 서브넷 마스크는 IP 주소를 네트워크 및 호스트 주소와 분리한다.
    • subnet mask를 기준으로 network ID와 host ID를 잘라내는 것.
    • 서브넷 마스크는 자체 32비트 숫자를 이용하여 IP주소를 마스킹하기 때문에 '마스크'라는 단어가 이용되었다.
  • Subnet
    • 넽워크가 작은 조각으로 쪼개져 있는 경우를 뜻한다.
    • 즉, 작은 네트워크라고 할 수 있다.
    • 성능 개선을 위해 효율적으로 자원을 분배하는 것을 Subneting이라고 한다.
      • C Class Network에서 또 자르는 활동 자체를 뜻한다.
      • Host ID 부분을 보면 0000 0000으로 되어있는데, 이 부분을 00 | 00 0000 으로 또 자르는 것이다.
  • Mask 연산
    • bit 단위로 AND 연산을 해서 잘라내는 것(Host 쪽은 0으로 clear)
      Mask 연산을 통해서 얻은 결과 Network ID가 Packet의 Network ID와 일치한다면 '우리 네트워크로 유입되는 거구나.' 라고 판단을 한다.
  • IP 주소 클래스
    • A Class
      • 상위 8bit를 Network ID + 이후 24bit를 Host ID로 보는 것
    • B Class
      • 상위 16bit를 Network ID + 이후 16bit를 Host ID로 보는 것
    • C Class
      • 상위 24bit를 Network ID + 이후 8bit를 Host ID로 보는 것
  • 이러한 IP 주소 클래스를 잘라내기 위한 방법론으로 Subnet Mask가 사용이 되었다. 잘라낸 후 같다, 다르다를 Mask연산을 한 후 결과 비교 하는 방식으로 사용되었다. 최근에는 컴퓨터 성능이 좋아지니 이러한 개념이 불편해져서 CIDR 개념이 나오게 되었다.

CIDR(Classless Inter-Domain Routing)

이름부터 Classless이다. 위에서 설명한 IP Class가 없는 개념이 도입된 것이다. CIDR 방식에서는 IP 주소를 다음과 같이 표기한다.
192.168.0.10/24
위의 IP주소는 '/를 기준으로 좌측의 24bit를 Network ID라고 한다.'라고 규정을 한다는 뜻으로 해석할 수 있다.
이전에는 MASK연산을 통해서 그 결과 비교를 했다면 현재의 CIDR 방식에서는 ==의 관계 연산을 사용해서 찾아내는 방식을 사용한다.

Broadcast IP 주소

  • Host ID 부분을 모두 1로 채우면(FF가 되면) 192.168.0을 사용하는 network에서 방송주소로 사용된다.
  • Broadcast는 전체에 다 보낸다는 뜻으로 이해하면 된다.
  • 이는 모든 네트워크 장비 전체에 모두 방송을 하기 때문에 효율이라는 관점에서는 Broadcasting을 자주 할수록 효율은 떨어진다.
    • 그렇기 때문에 broadcast 도달 범위를 일정 수준에서 통제해야 한다.
  • 사용할 수 있는 Host IP 주소는 254가지이다.
    • Host ID는 총 8bit이기 때문에 256가지이지만 0은 subnet mast 결과와 일치하게 되고, 255는 broadcast에서 사용하기 때문에 2가지를 뺀 254가지를 사용할 수 있다.

Host 자신을 가리키는 IP 주소

인터넷에 연결된 컴퓨터인 Host가 내가 나에게 접속(연결) 해야만 할 때 이 주체는 Process이다. 이 프로세스가 여러개가 작동하는데, 내 프로세스들 간 통신이 필요할 때가 있다. 그 때 사용할 수 있는 주소가 바로 127.0.0.1이다. 이를 Loop Back Address라고 부른다.
이는 구조적으로 어떻게 이루어질까?
내 PC에서 작동중인 두 개의 프로세스서로 정보를 주고 받으려고 한다. Client, Server라는 두 개의 프로세스가 있고 192.168.0.10 이라는 IP 주소를 사용하고 있다고 가정하자. 이때 Server의 Socket은 수신대기를 하고 있다. 외부에서 연결이 들어오는 경우라면 L1 계층부터 네트워크를 타고 들어오겠지만, 그게 아니라 외부 연결이 아니라 내부로의 연결일 경우 L3 계층의 IP 계층에서 바로 Client -> Server간의 연결이 이루어지는 것이다. 여기서 문제는 IP주소는 변경될 수 있기 때문에 IP주소를 특정하지 말고, 127.0.0.1에 연결하는 것이다. 그러면 IP 주소가 무엇이 됐든 항상 3계층의 IP를 통해서 내부 통신이 이루어지도록 한다는 것이다. 실제로 packet이 L2, L1계층 이하로 내려가지 않는다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함