본문 바로가기
📝Computer Science/network

네트워크 계층(3) _ DHCP, MTU, IP 단편화

by haegomm 2023. 7. 17.

 NAT 문제점 복습 

 

  • 여러사람이 같은 주소를 사용하게 함으로써 주소 공간문제를 해결하는 것
  • 같은 네트워크 안에 있는 사람들은 각자 고유(내부)의 IP주소를 부여받음
    • 그러나 부여받은 주소는 내부에서만 유일 한 것이고 외부적으로 봤을 때는 유일한 것이 아님

예) 구글 서버에 패킷을 보낸다고 쳤을 때 보내는 패킷의 source IP는 10.0.0.1 이고 dest IP는 구글

가긴 가는데 돌아올 때가 문제가 된다. 왜냐하면 사용하고 있는 IP주소는 유일한 주소가 아니기 때문이다. 따라서 내부에서 외부로 나갈 때와 외부에서 내부로 들어올 때는 Gateway Router를 거쳐 NAT과정을 거쳐야한다.

Gateway Router은 패킷이 나갈 때 자기 자신의 IP주소(이건 전 세계적으로 public한 주소임)로 바꿔준다. 나가는 패킷의 source IP가 10.0.0.1임에도 불구하고 source IP를 자기 자신 138.76.29.7로 바꾸는 것이다. 그러면 구글은 이 패킷을 받고 보낼 때 138.76.29.7에서 온 패킷이라 생각하여 138.76.29.7로 패킷을 리턴한다. 패킷이 돌아오면 Gateway Router은 변환과정 NAT를 기억하기 때문에 다시 source IP를 바꿔줘서 패킷을 보냈던 곳( 10.0.0.1 )으로 다시 돌려준다.

 

⚠️ 발생하는 문제점

  • 계층 디자인 규칙 위반
  • 외부 환경의 클라이언트의 내부 서버 접속 어려움

 DHCP (Dynamic Host Configuration Protocol) 

  • 동적 호스트 설정 프로토콜
  • IP를 필요로 하는 컴퓨터에게 IP를 할당해서 사용할 수 있도록 하고, 사용하지 않으면 반환받아 다른 컴퓨터가 사용할 수 있도록 함
    • 비교적 적은 갯수의 IP주소를 가지고 활용할 수 있다
    • 고정 IP 방식에 비하여 Address Pool을 더 유연하게 사용할 수 있다
  • Plug and Play 방식이라고도 함
    • 호스트가 네트워크에 접속 할 때마다 동적으로 IP를 할당해주기 때문~!
  • 고정된 IP 주소를 사용하는 경우에는 DHCP가 필요없음

 

 DHCP client-server scenario 

  • DHCP 기능이 필요한 호스트는 처음으로 네트워크에 연결이 되면, 알고있는 것이 아무것도 없기 때문에 정보가 필요하다고 브로드캐스트를 통해 DHCP 서버에게 알려야한다.

 

1️⃣ DHCP discover

  • src: 0.0.0.0, 68
    • 아직 IP 주소를 할당받지 못했고, DHCP 클라이언트로써 68번 포트에서 활동하고 있음을 의미한다.
  • dest: 255.255.255.255, 67
    • 목적지는 브로드캐스트(255.255.255.255)
      • 브로드캐스트란 동일 서브넷에 있는 모든 주소에게 이 메시지를 전송하는 것이다.
    • DHCP 프로토콜의 번호는 67번을 사용한다. 따라서 DHCP와 관련없는 다른 호스트들은 67번 포트를 닫아놓았기 때문에 이 메시지를 무시한다. DHCP 서버는 67번 포트를 열어놓고 있기 때문에 브로드캐스트 메시지를 수신할 수 있다.
  • transaction ID: 654
    • 클라이언트가 랜덤으로 선택한 ID

 

2️⃣ DHCP offer

  • discover메시지를 받은 DHCP 서버가 응답으로 offer를 전송한다.
  • src: 223.1.2.5, 67
    • DHCP 서버 자신의 IP주소와 포트 번호
  • dest: 255.255.255.255, 68
    • 브로드캐스트
    • 서버는 그저 어디선가 날라온 브로드캐스트 메시지를 받았기 때문에 누가 클라이언트인지 아직 모른다.
    • 따라서 브로드캐스트로 offer를 전송하되, 포트를 68번으로 설정하여 DHCP클라이언트만 이 메시지를 수신할 수 있도록 한다.
  • yiaddr: 223.1.2.4 / lifetime: 3600 secs
    • 새로 지정해준 IP 주소
    • 223.1.2.4 라는 IP주소를 3600초 동안 사용할 수 있도록 대여해준다는 것을 의미한다.
  • router, DNS, subnet mask의 IP 주소들도 offer에 포함되어있다.
    • 클라이언트는 DHCP ACK가 온 순간부터 이들을 사용할 수 있다.
  • 만약에 DHCP가 여러개 있다면 그 여러개로 DHCP 서버로부터 각각 offer가 온다. 그러면 클라이언트는 이 offer들 중 하나를 선택하여 request를 보내면 된다.

 

3️⃣ DHCP request

  • offer를 받은 클라이언트가 이를 수락한다는 의미로 보내는 request 메시지
  • src: 0.0.0.0, 68
    • 아직 IP 주소가 확정되지 않았기 때문에 IP주소는 무명
  • dest: 255,255,255,255, 67
    • 여러 개의 DHCP 서버에게 클라이언트가 선택한 DHCP서버의 존재를 알리기 위해 브로드캐스트로 전송한다.
  • yiaddr: 223.1.2.4 / lifetime: 3600 secs
    • offer와 동일
    • 서버가 제안한 IP 주소와 lifetime을 클라이언트가 수락한다는 의미
  • transaction ID: 655
    • 클라이언트의 원래 transaction ID + 1
      • 이전의 오퍼를 수락한다는 의미로 이전의 transaction ID에 +1하여 리퀘스트 보내준다.

 

4️⃣ DHCP ACK

  • offer 설명 동일
  • transaction ID만 +1
  • 서버가 DHCP request를 받고 ACK를 보낸 순간부터 클라이언트는 배정받은 IP주소를 사용할 수 있게 된다.

DHCP 서버를 따로 두기 보다는 통상적으로 라우터가 처리한다. 게이트웨이 라우터는 포워딩만 담당하는거였으나 NAT, DNS 뿐만 아니라 DHCP 역할까지 담당하고 있다. 집에 있는 무선 공유기가 게이트웨이 라우터이다. NAT, DNS, DHCP기능을 가지고 있다. 집 바깥의 NAT 조차 또 다른 NAT의 sub 네트워크 일 수 있다. 즉, nested NAT 구조일 수 있는 것이다. IPv4의 고갈로 현재 임시방편인 NAT에 종속되어 있는 상태이고 NAT를 안쓰기도 IPv6으로 바꾸기도 어려운 상황이다.


 MTU Maximum Transfer Unit 

 

  • Identifier, flag, fragment offset은 MTU를 위해 사용되는 필드
  • Link Layer에서 전달할 때 MTU를 넘기는 패킷이 전송될 수 없다.
  • 따라서 하나의 패킷을 여러 독립적인 패킷으로 분리(IP fragmentation) 하여 전달한 다음, 전달 받았을 때 다시 조립(reassembly)한다
    • 이 때 Identifier, flag, fragment offset 필드들을 사용한다.

 IP fragmentation and reassembly (IP 단편화) 

  • Identification(2byte)
    • 나누어져 보내진 패킷을 식별하기 위한 필드
  • flag & fragment offset(2byte)
    • flag
      • 따라오는 fragment 패킷이 있는지 아닌지 판단하는데 사용된다.
      • 001 MF( More fragment ) : 뒤에 분할된 데이터가 있다는 뜻
      • 000 MF( More fragment ) : 뒤에 분할된 데이터가 없다는 뜻
      • 010 DF( dont flagment ) : 데이터를 분할하면 안된다라는 뜻
    • fragment offset
      • 쪼개지기 전 데이터가 어디부터 시작되는지 지칭하는데 사용된다.
      • offer를 바로 쓰기보다 그 값에서 나누기 8을 해주는데 비트를 줄이기 위해서이다.
      • 2000byte를 분리했을 때
        • 1500바이트짜리 정보는 flag001 offset 0
        • 500바이트짜리 정보는 flag000 offset 1500
  • 헤더의 크기는 20byte이므로 패킷은 실질적으로 3980이다.
  • MTU가 1500byte 이므로 4000byte의 데이터는 3개로 나뉘어진다.
    • 1500, 1500, 1040
    • 마지막 1000에 +40은 헤더가 포함되기 때문~!
    • 따라오는 fragment 패킷이 있는지 아닌지 판단하는데 사용된다.

 

❓ 쪼개진 패킷이 일부 유실되어 재조립이 되지 않는다면?

❗ 만약에 3개 중 2개만 수신 네트워크 레이어에 도착하고 나머지 1개는 도착하지 않았다고 해보자. 그렇다면 수신측에서는 네트워크 레이어에서 해당 패킷의 전체 재조립을 할 수 없으므로 전송 계층으로 올릴 수 없다. 그래서 도착한 2개의 패킷은 드랍되고, 수신측 전송 계층에서는 패킷을 받지 못하기 때문에 timeout 또는 duplicated ack로 재송신 요청을 하게 될 것이다.

 

❓ 에러가 발생하여 마지막 패킷 그리고 중간 패킷의 flagflag가 0으로 바뀐다면?

❗ IP 헤더에서 checksum을 제공하기 때문에 해당 에러가 감지되어 드랍된다.

 

 

 


참고자료

네트워크 계층 3

 

네트워크 계층 3

11. 네트워크 계층 3

velog.io

DHCP(Dynamic Host Configuration Protocol)

 

DHCP(Dynamic Host Configuration Protocol)

* DHCP(Dynamic Host Configuration Protocol) - 네트워크 관리자가 중앙에서 IP주소를 관리하고 할당하며 컴퓨터가 네트워크의 다른 장소에 접속되었을 때 자동으로 새로운 IP주소를 보낼 수 있게 해준다.- IP

xn--ex3bt1ov9l.kr