[네트워크] NAT

2025. 1. 29. 23:03·CS/Network

 

전공 수업 내용 정리 (문제 발생시 비공개합니다.)

 


Special Addresses

classful addressing에서 일부 주소는 특수 목적을 위해 예약되어 있었다.

classless addressing 체계는 classful addressing에서 이러한 특수 주소 중 일부를 상속한다.

All-zero address

  • Source: 0.0.0.0 ☞ 모든 bit가 0인 주소

아직 IP가 할당되지 않은 PC가 DHCP에게 요청 packet을 보낼 때 시작지점 주소가 할당되어있지 않으므로 0.0.0.0으로 사용하는 것

  • 고정 IPex) 네이버, 다음, 쿠팡, 11번가, 개인쇼핑몰 등...
  • 컴퓨터를 껐다 켜도 IP가 바뀌지 않는 것. 사이트 운영 시 사용.
  • 유동 IP
  • 일반 가정집에서 사용하는 모든 IP. 컴퓨터 부팅 시 마다 누군가에게 할당받아야 함.

 

DHCP(Dynamic Host Configuration Protocol)

  • 클라이언트는 네트워크 부팅과정에서 DHCP 서버에 IP주소를 요청하고 DHCP는 클라이언트에게 동적으로 IP를 할당해 준다.
  • DHCP 서버: 고정 IP가 아닌 유동 IP의 경우 할당을 해주어야 하는데, 클라이언트에게 IP 할당 요청이 들어오면 IP를 부여해주고 할당 가능한 IP들을 관리한다.
  • 예시: 인터넷 공유기

DHCP 프로토콜에는 주소가 할당되지 않은 PC로부터 packet을 받고 다시 보낼 때의 MAC주소 처리 방법 등이 정의되어있다.

 

 

Broadcast

  • 네트워크 상의 모든 호스트들에게 동시에 메시지를 전송하는 방법
  • 전체에게 트래픽을 전달하는 All-to-All 통신 ☞각 송신자가 그룹 내의 모든 수신자에게 메시지를 전송하는 컴퓨터 통신 방법. ↔ 유니캐스트(각 발신자가 하나의 수신자와 통신하는 지점 간 (point-to-point) 통신 방법)
  • 호스트는 도착한 패킷을 확인해 목적지가 본인 ip주소와 동일할 시 수신하고 그렇지 않을 시 무시한다.
  • directed broadcast와 limited broadcast로 나눈다.

Limited broadcast address

출처: https://florescene.tistory.com/160

  • Destination IP address: (255.255.255.255) ☞ IP의 bit가 모두 1인 주소
  • 목적지 DHCP 서버의 주소를 모르기 때문에 1.1.1.1을 Destination으로 사용
  • 로컬 네트워크의 device에게 정보를 전송하기 위해 사용
  • 해당 네트워크의 라우터는 패킷이 다른 네트워크로 전송되지 못하게 block → 그렇지 않으면 해당 네트워크 이외의 전 세계의 네트워크에게 수신된다.

 

Directed broadcast address

  • 네트워크 밖에서 특정 네트워크의 호스트들에게 메시지를 전송하는 방법
  • 라우터가 해당 네트워크의 모든 호스트들에게 보낼 데이터가 존재하는 경우 directed broadcast 사용
  • Destination IP address: 221.45.71. ☞ suffix bit가 모두 1인 주소

 

루프백 주소(Loopback address)

  • 목적지 IP 주소: 127.0.0.1
  • 한 컴퓨터에서 서버와 클라이언트를 모두 실행하는 IP 주소 = 로컬호스트 주소(localhost)
  • 목적지 IP 주소를 127.0.0.1로 설정하게 되면 A의 네트워크 계층은 이 패킷을 외부로 전송하지 않는다. 전송하지 않고 고스란히 자신이 다시 받은 것처럼 처리하여, 상위 계층으로 올려 보낸다. 즉 자신이 송신한 패킷을 그대로 수신한 효과를 준다.
  • 로컬 컴퓨터를 원격 컴퓨터인 것처럼 통신할 수 있어 웹 서버나 인터넷 소프트웨어의 네트워크 동작 기능을 테스트하는 목적으로 사용된다

 

 

사설망(private networks)

  • 사설망이란?
    • 특정 회사나 조직이 소유하여 독점적으로 사용하는 내부적인 네트워크
    • 인터넷과 연결되지 않고 으로만 사용 시 TCP/IP를 자유롭게 사용하고 그 안의 호스트 주소도 사설망 관리자가 마음대로 지정 가능
  • 사설망에서 벗어난 다른 네트워크와 접속하려면 추가적인 장비를 통해야만 인터넷에 접속할 수 있다.
  • 사설망 내 호스트는 본인의 IP가 사설망 관리자에 의해 임의로 부여받은 것인지 다른 네트워크와 통신할 수 있는 IP인지 구분하지 못함 ☞ 사설망 주소를 나타내는 주소를 따로 관리
  • 자주 쓰이는 주소: 192.168.0.0/16, 10.0.0.0/8

 

 

네트워크 주소 변환 (NAT = Network Address Translation)

  • IP 패킷의 포트 번호와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술
  • NAT를 이용하는 이유: 사설망 구축을 위해
  • 패킷에 변화가 생기기 때문에 IP나 TCP/UDP의 체크섬(checksum)도 다시 계산되어 재기록해야 한다.
  • NAT가 호스트 간의 통신에 있어서 복잡성을 증가시킬 수 있으므로 네트워크 성능에 영향을 줄 수 있다.
  • 자동으로 포트포워딩(Port-Forwarding)을 해줌 ex. 공유기 셋팅
  1. 10.0.0.1, 10.0.0.2, 10.0.0.3은 사설망 내 호스트의 IP주소
  2. IP 주소, 포트 번호(10.0.0.1, 3345): 호스트가 사설망 외부 서버에 접속하고자 한다.
  3. Source에 호스트 IP와 Port번호 / Destination에 상대 서버의 IP와 Port번호를 기재한 데이터그램 패킷을 전송한다.
  4. 중앙의 NAT 라우터는 Source IP주소에 외부에서 사용할 수 있는 IP 주소, Port(138.76.29.7, 5001)를 할당해 목적지 서버에 전달한다. 해당 변환 사항은 NAT translation table에 작성해 관리한다.
  5. 서버에게서 응답이 오면 table을 확인해 서버가 보낸 패킷의 목적지(138.76.29.7, 5001)와 매칭되어 있는 사설망 포트 번호, 즉 5001를 찾은 뒤, 해당 주소(10.0.0.1, 3345)로 정보를 전달한다.
  • NAT가 할당해주는 외부에서 사용가능한 IP주소는 NAT 라우터 자기자신의 IP주소이다.
  • 외부에서 사용가능한 Port는 사용하고 있지 않은 번호를 랜덤으로 할당한다.
  • 하나의 컴퓨터에서, 각각 다른 port 번호를 사용하는 호스트들이 동일한 서버에 동시 접속할 때 해당 방법을 통해 호스트들을 구별하고 트래픽을 관리한다.
  • WAN side addr와 LAN side addr은 1:1 매칭된다.
  • 10.0.0.1은 사설망 내에서는 고유하지만, 다른 사설망과는 중복될 수도 있다. 반면 138.76.29.7은 전세계에 하나뿐인 unique한 IP이다.

 

서브넷에 속한 디바이스의 [사설 IP 주소, 포트번호]가 게이트웨이 라우터의 [공인 IP 주소, 포트번호]로 매핑된다는 점에서 NAT와 동일해보이지만, 차이점은 매핑관계가 유지된다는 점이다.

 


참고

P2P(peer-to-peer network)

일반 클라이언트가 서버와 클라이언트 역할을 둘 다 하는 것

내가 서버일 때는 소켓을 만들어놓고 남들이 접속하길 기다리고, 클라이언트일 때는 다른 서버에 접속한다.

 

랑데뷰 서버

  • 제 3의 서버. A2 서버에 접속하기 위해서는 138.76.29.7 / 5002에 접속하면 된다는 정보를 저장해둔다.
  • 클라이언트가 A2 서버에 접속하기 위해서는 우선 랑데뷰 서버에 접속해 A2 서버의 주소 정보를 얻어야 한다.
  • 이러한 기술을 홀펀칭(Hole punching)이라 한다.

 

저작자표시 비영리 동일조건 (새창열림)

'CS > Network' 카테고리의 다른 글

[네트워크] TCP/IP 프로토콜의 핵심을 쉽게 이해해보자!  (0) 2025.02.13
[네트워크] 클래스 기반 주소 지정  (0) 2025.01.29
[네트워크] IP 주소 개요  (0) 2025.01.29
[네트워크] 소켓 프로그래밍: 프로토콜, 클라이언트와 서버의 함수호출  (0) 2025.01.29
[네트워크] 소켓 프로그래밍 개요  (0) 2025.01.29
'CS/Network' 카테고리의 다른 글
  • [네트워크] TCP/IP 프로토콜의 핵심을 쉽게 이해해보자!
  • [네트워크] 클래스 기반 주소 지정
  • [네트워크] IP 주소 개요
  • [네트워크] 소켓 프로그래밍: 프로토콜, 클라이언트와 서버의 함수호출
abyss-s
abyss-s
프론트엔드 개발합니다!
  • abyss-s
    abyss-s의 블로그입니다.
    abyss-s
  • 전체
    오늘
    어제
    • 분류 전체보기 (194)
      • Web (17)
        • JavaScript (6)
        • TypeScript (1)
        • React (6)
        • Vue (0)
        • Storybook (1)
        • Next.js (1)
      • Backend & Infra (8)
        • Database (3)
        • Node.js (2)
        • SpringBoot (1)
      • PS (71)
      • CS (30)
        • OS (13)
        • Structure & Algorithm (5)
        • Network (10)
        • 정보처리기사 (2)
      • Language (18)
        • OOP (1)
        • JAVA (13)
        • C++ (4)
      • Activities (17)
        • 멋쟁이 사자처럼 (2)
        • OSSCA (3)
        • LG U+ URECA (5)
        • Project (2)
        • Conference (2)
      • IT (3)
      • AI (0)
      • Git & Github (5)
      • Notion (1)
      • Statistics (11)
      • Book (5)
      • Diary (1)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
    • Baekjoon
    • X
    • LinkedIn
  • 공지사항

    • abyss-s의 티스토리에 오신 것을 환영합니다.
  • 인기 글

  • 태그

    github
    OS
    React
    그리디
    코드트리
    C++
    백준
    DP
    파이썬
    운영체제
    JavaScript
    통계학
    네트워크
    자바기반응용프로그래밍
    생활코딩
    Python
    BAEKJOON
    BFS
    자바스크립트
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
abyss-s
[네트워크] NAT
상단으로

티스토리툴바