Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Network(4) - Network Layer #14

Open
simoniful opened this issue Mar 30, 2022 · 0 comments
Open

Network(4) - Network Layer #14

simoniful opened this issue Mar 30, 2022 · 0 comments
Labels

Comments

@simoniful
Copy link
Owner

simoniful commented Mar 30, 2022

Network layer

송신자 호스트에서 수신자 호스트로 세그먼트를 transport

  • 송신측: 세그먼트를 datagrams(IP Packet structure)으로 캡슐화
  • 수신측: segment를 transport layer로 전달

2가지 주요 Network layer의 기능

  • 포워딩(forwarding)
    • 라우터의 input포트에서 적절한 라우터의 output포트로 패킷을 이동시키는 것
    • 입력포트, 출력 포트 모두 queue가 있어서 일을 순차적으로 처리
  • 라우팅(routing)
    • 출발지에서 목적지까지 패킷이 이동할 경로를 결정
    • 라우팅 알고리즘을 이용하여 포워딩 테이블을 만드는 작업
      • 라우팅 알고리즘: 경로 결정하는 방식 - 다익스트라 등 최적 거리 고려
      • 포워딩 테이블: 선택된 경로를 일종의 테이블로 저장해 둔 것
        • 모든 주소를 적어놓을 수는 없기 때문에 범위로 엔트리 표현(우편번호 예시)
        • Longest prefix matching: 범위로 적어놓다보니 여러 엔트리에 속하는 경우도 발생, 가장 길게 일치하는 prefix로 출력 포트를 배정

IP Packet, datagram structure

  • packet의 최소 단위
    : packet header(20byte) + segment header(20byte) + Application message
    : 기본적인 40byte의 오버헤드 - TCP Ack의 경우 많은 부분 40byte
  • time to live
    : 각 router를 거칠 때마다 -1
    : 네트워크 오류로 인해 router 내부를 무한히 돌 수 있기 때문에 한정시간 만큼만 돌다가 사라지도록 구성
  • upper layer
    : 상위 레이어의 정보를 기입(transport의 타입이 무엇인지 TCP or UDP + 이외 정보)

IPv4 addressing

  • 머신의 네트워크 인터페이스 카드(NIC)를 지칭하는 고유한 32비트 숫자 - Host를 지칭하는 것이 아님
    • 라우터의 경우 네트워크 인터페이스 카드가 여러 개 있을 수 있기에 여러 개의 IP를 가질 수 있음
  • 32비트를 8비트씩 끊어서 10진수로 바꾼게 우리가 아는 IP 주소
  • Hierarchical Addressing(계층화)
    • 막무가내로 IP를 배정하고 한 곳에서 모든 IP를 관리하면 포워딩 테이블이 엄청나게 커지고 느려질 것, 서버에 문제가 발생 시, 모든 네트워크가 마비됨
    • Network ID(24bits, prefix, subnet ID), Host ID(8bits)로 계층화
      • subnet mask로 어디까지가 Network ID인지 표시
        • Network ID: ex) 12.34.158.0/24 => 32자리 중에 앞 24자리가 Network ID이고 그 값은 12.34.158 입니다.
        • subnet mask: ex) 255.255.255.0 => 32자리 중에 앞 24자리가 Network ID입니다.
      • 같은 네트워크면 호스트 아이디만 틀리고 네트워크 아이디는 동일
      • 확장성이 좋고, 새로운 호스트가 들어와도 말단의 포워딩 테이블에 간단하게 추가

IP 주소 할당의 역사

Class 고정 할당

  • 2^n Class 기반으로 나누어서 고정적으로 할당
    • A: 2^7개의 기관 할당, 2^24개의 호스트 가능
    • B: 2^16개의 기관 할당, 2^16개의 호스트 가능
    • C: 2^24개의 기관 할당, 2^8개의 호스트 가능
  • 유연하지 못하기에 90년대 중반 폐지

CIDR(Classless Inter-Domain Routing)

  • 필요한 만큼 합리적으로 나눌 수 있게 됨 ex) 12.4.0.0/15 ...
  • 서브넷 마스크와 IP 주소를 쌍으로 구성하면서 보다 유연성 있게 할당
  • 라우터의 포워딩 테이블은 prefix 단위로 엔트리가 나뉘어있음 - 라우터의 역할은 Longest prefix matching을 쉬지 않고 반복적 수행

Subnet

같은 prefix를 가진 디바이스의 집합 - 그림에선 6개
라우터를 거치지 않고 직접적으로 접근가능한 호스트들의 집합
라우터는 여러 개의 서브넷에 결절점으로 걸쳐 있는 역할 - 이를 통해 다른 서브넷으로 데이터 전송 가능

NAT - Network Address Translation

IPv4 기반으로 했을 때 32비트 기반, 2^32(약 40억 개)의 할당 주소의 고갈 발생 예상
IPv6의 등장(1996)으로 128비트 기반으로 할당 주소의 보완
모든 IP 주소체계를 IPv6로 갑자기 바꾸는것은 쉬운 일이 아님. 터널링 같은걸 사용하여 조금씩 전환
일종의 트릭으로 현재 IPv4 기반으로 사용하면서 NAT 방식을 활용: 개인 IP를 NAT 기능을 하는 게이트웨이 라우터의 IP로 전환

  • NAT을 거치기전에에 내부에서만 유일한 아이피 주소(외부에선 유일하지 않음)를 사용
  • NAT을 거치면서 전체에서 유일한 하나의 아이피 주소를 바꿔준다
    • 중복적으로 NAT을 거치는 경우가 있으므로 절대적이지는 않음(내부 유일 IP → 내부 유일 IP)
  • NAT을 기준으로 WAN ,LAN을 나눈다
    • LAN: Local Area Network / WAN: Wide Area Network
    • 나갈 때 WAN/LAN 주소를 NAT 내부 translation table에 기록하고, 들어올 때 table을 기준으로 다시 매칭
  • Port 번호까지 바꿔준다: 이유는 내부에서는 IP주소가 고유하지, Port 번호는 고유하지 않을 수 있기 때문 - 동일 프로세스

한계점

  • NAT 내부에 있는 서브넷에선 Server 운영 어려움
    • Client 역할일 때는 나갈 때 NAT table에 기록되기 때문에 문제가 없지만,
    • Server 역할일 때는 먼저 나가는 것이 아니라 요청을 기다리고 있는 입장이기 때문에 NAT table에 기록된 나의 고유한 주소가 없음
    • 그래서 포트 넘버를 찾을 수 없기 때문에 내부에서 서버를 운영하기 어려움
  • 계층화의 핵심이 무너짐
    • 패킷을 뜯으면 안되는데 뜯게되는 룰을 어기는 것
    • Layer로 나뉘어 있는데, 다른 Layer의 정보를 열람해보고 심지어 수정
    • 디자인 상으로 큰 결함

DHCP(Dynamic Host Configuration Protocol)

  • 어디로 이동하던지 호스트를 동적으로 configuration 해준다
  • 네트워크 안의 컴퓨터에 자동으로 네임 서버 주소(DNS), IP주소, 게이트웨이(router) 주소를 할당해주는 것을 의미하고
  • 해당 클라이언트에게 일정 기간 임대를 하는 동적 주소 할당 프로토콜
  • 고정 아이피 할당과 비교해서 address pool을 유연하게 사용할 수 있음
  • DHCP discover -> DHCP offer -> DHCP request -> DHCP ACK
  • 실제로는 게이트웨이 Router 안에서 DNS, DHCP, NAT + Firewall 모두 이뤄짐

  1. 호스트는 맨 처음 자기 자신의 대한 정보, DHCP에 대한 정보도 알지 못한다
  2. DHCP 서버는 같은 서브넷 안에 있으면서 아이피를 제공한다
  3. 서브넷으로 진입하는 호스트는 브로드캐스트로 서브넷에 있는 모든 아이피에게 DHCP discover 메세지를 보낸다
  4. 나머지 호스트들은 이 메세지를 무시하지만 DHCP서버만 의미있게 받는다(나머지는 포트 넘버를 통한 드랍)
  5. DHCP 서버에서 offer 메세지로 응답하기 위해 또 브로드 캐스트로 보낸다 - 여기에 부여할 IP주소를 전달
  6. 여러 DHCP 서버에서 offer 메세지가 올 수 있기 때문에, 호스트가 적합한 IP를 선택하여 서버에 DHCP request를 보낸다
  7. 호스트와 연결되었음을 알리는 ACK 피드백을 DHCP 서버에서 전달한다

IP Fragmentation 단편화 / Reassembly 재조립

image

  • IP packet이 생성되어서 라우터를 통해서 최종 목적지까지 도달하는데
  • 라우터 사이의 링크 계층의 종류에 따라 받아들일 수 있는 맥시멈 프레임 사이즈(MTU, Max tranfer unit size)가 다름

image

  • IP datagram의 헤더에 flags, offset을 활용하여
    • fragment flag: 뒤에 남은 쪼개진 조각이 있을 경우에만 1 / 쪼개지지 않았거나 쪼개진 조각 중 마지막 packet일 경우 0
    • fragment offset: 쪼개진 packet이 전체 packet에서 시작하는 포인트 나누기8(/8) 한 값(header 값 줄이기 위한 노력)
  • 분리하고 재조립하는 과정을 통해 완결성 있는 패킷전송을 가능하게 함

ICMP (Internet Control Message Protocol)

image

  • 사용자 데이터가 아닌 네트워크 상에서 발생하는 이벤트을 알기 위한 컨트롤 메시지들을 전달하기 위한 프로토콜
    • ex. Type: 11, code: 0, TTL: 라우터를 거쳐갈 때 마다 -1 씩 감소하다가 0이 되어 만료되었음을 알림
    • ex. Type: 3, code: 3, Destination 다 와서 포트가 열어있지 않아 Drop
  • 네트워크 진단을 위해 주로 사용
    • ICMP 프로토콜을 사용해서 구현한 유틸리티 - ex. 네트워크 유틸리티 중 trace route

IPv6

image

  • 128bits Address
  • IPv4에 비해 비교적 단순한 헤더
  • IPv4에서 다음 세대 전환에 있어서 과도기적 형태가 있기에 Tunneling 과정을 통해 IPv4 형식으로 메세지 전환 필요
    • 두 가지 프로토콜을 모두 이해하는 Tunneling 과정이 가능한 라우터가 필요
      image

라우팅 알고리즘

  • 포워딩을 수행하면서 포워딩 테이블을 보고 라우터의 입력 포트에서 출력 포트로 패킷을 이동시키는 작업을 수행
    • longest prefix matching 을 사용해서 매칭
  • 포워딩 테이블을 구성하는 방식: 라우팅 알고리즘
    • 라우터 사이에 연결된 Network을 그래프로 추상화 하여 인지 가능 - 목적지까지 최적 코스트 산출
    • 노드: 라우터 / 엣지: 커뮤니케이션 링크 / 엣지 값: 링크 코스트
  • 전체 인터넷이 아닌 하나의 도메인에 속한 네트워크 내에서 활용 가능
    • ex) 한양대, 성균관대, SKT

Link State(LS)

  • 네트워크 전체, 모든 라우터의 정보를 아는 경우
  • Dijkstra's algorithm(다익스트라)
  • 모든 라우터들이 전체 네트워크를 향해 자신의 링크 정보를 브로드캐스팅 해서 전체, 모든 라우터의 정보를 알 수 있도록 만듬
  • 각 노드의 코스트가 업데이트 될 때마다 트랜스 픽이 발생하면서 트래픽이 유동적으로 경로 변환

Distance vector(DV)

  • 직접적으로 연결된 이웃 라우터의 경로만 아는 경우
  • Bellman-Ford’s algorithm(베르만포드) - 이웃들과의 자료 교환만으로 계산
  • 각각의 라우터가 자신이 알고 있는 다른 라우터까지의 거리 array(Distance vector)를 이웃에게 전달하여 최단 거리를 알아가는 방식
    • 표에 변화가 있다면 무조건 이웃으로 전달 - 계산 후 갱신
    • 표가 변화가 없을 때 까지 반복
  • link cost가 업데이트 된 경우 - 이웃된 모든 노드가 변화 / 계산 사이클을 반복하면서 표를 갱신하며 안정화
    • 작은 수는 금방 끝나지만, 큰 수로 업데이트가 되었을 때에는 많은 수를 반복하게된다
    • 이로 인해 최소경로가 온 길을 되돌아가는 경로를 포함한 값일 경우 역류(Count-to-infinity)할 수 있으므로, 온 길은 무한대로 업데이트(Poison reverse)하여 역류를 방지

Hierarchical routing

  • 규모의 문제는 계층화로 해결
  • Autonomous Systems(ASes): 쪼개진 각각의 네트워크는 자치권을 가지고 내부 알고리즘(intra-AS routing protocol)을 결정
    • ISP(internet Service Provider) 단위로 이해해도 무방
    • 각각의 AS는 각자 자기자신의 번호(ASNs)를 부여 받음 - 전 세계 약 7만개
  • AS끼리 네트워크를 형성하기에 별도의 적합한 라우팅 알고리즘이 필요(inter-AS routing protocol) - BGP(Border Gateway Protocol)
    • AS 사이의 관계 : Peer - Peer(수평) || Provider - Customer(수직) - 상대적
    • 수직 관계에서는 Customer가 Provider에게 비용을 지불하고 사용, Provider는 비용X
    • 수평 관계에서는 비슷한 규모의 AS 간 관계로 비용을 지불하지 않음
    • 프로토콜 구성에 있어서 정책, 정치, 경제적 논리가 반영

인터넷에서 라우팅 - 프로토콜 기반

파란색 경로로 가면 비용을 안내고 갈 수 있음 경로 선택에 있어서 Peer 보다 Provider → Customer를 더 선호함

AS 내에서는 최단 경로지만, AS 간에는 수입 극대화되는 경로를 찾게됨

  • RIP: Distance vector(DV)를 기반으로 최단경로 목적의 프로토콜을 구현, intra-AS routing protocol
  • OSPF: Link State(LS)를 기반으로 최단경로 목적의 프로토콜을 구현, intra-AS routing protocol
  • BGP: 최단 경로가 아닌 AS간에는 수입 극대화되는 경로를 찾는 알고리즘 기반으로 프로토콜을 구현, inter-AS routing protocol
@simoniful simoniful changed the title Network(4) - Network(4) - Network Layer Mar 31, 2022
@simoniful simoniful added the CS label Mar 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant