네트워크 계층 (1)

이정인·2022년 3월 3일
0

컴퓨터 네트워크

목록 보기
6/11
post-thumbnail

네트워크 계층

애플리케이션 계층의 메시지는 전송 계층의 세그먼트의 데이터 부분에 담기고 세그먼트는 네트워크 계층의 IP 프로토콜의 전송 단위인 패킷에 담기게 된다. 네트워크 계층의 출발지부터 목적지까지에는 라우터들이 존재하는데 이 라우터들은 IP 패킷 형태의 데이터만 인식할 수 있다. 라우터들은 각각 계층을 가지고 있는데 IP 계층까지만 가지고 있다.

라우터

Fowarding

라우터에 인터페이스에 패킷이 들어오면 알맞은 목적지의 방향으로 포워딩 시켜준다. 라우터 내부에는 forwarding table이 존재하는데, 이 테이블에서 라우터의 목적지 주소를 기준으로 알맞은 output link의 방향을 찾아서 보낸다. 이 포워딩 테이블을 채우는 일을 라우팅이라고 한다.

라우터들은 최선을 다해서 포워딩하지만 best-effect가 보장된 것은 아니기 때문에 유실이 생길 수 있다.

Forwarding table

목적지의 주소를 그대로 적으면 너무 길기 때문에 entry는 prefix 단위로 형성된다. 만약 여러개의 prefix와 매칭이 된다면 가장 길게 매칭이 되는 것을 찾아서 그 쪽으로 포워딩한다.

라우터 구조

라우터는 input port에서 알맞은 output port로 옮겨주는데 이때 forwarding table을 참조한다. 이 Fowarding table을 만드는 것이 routing processor이다. routing processor가 만든 forwarding table은 각 input port에 독립적으로 저장된다. 각 input port는 독립적으로 각각 매칭이 되게 된다. forwarding 연산이 빠르지만 패킷이 들어오는 속도가 빠를 수도 있기 때문에 어쩔 수 없이 버퍼링이 일어날 수 있어 input port에는 큐가 존재한다. output port에도 마찬가지로 큐가 존재한다.

IP 프로토콜

IP 패킷의 구조

세그먼트들이 IP 패킷의 데이터 부분에 담기기 때문에 데이터 부분에 맨 앞에 있는 건 세그먼트의 헤더일 것이다. 즉 IP 패킷의 헤더 < 세그먼트의 헤더 < 애플리케이션 메시지의 헤더 로 20 byte + 20 byte = 40 byte의 오버헤드를 가지고 추가로 애플리케이션의 오버헤드를 가진다. 즉 IP 패킷의 최소 크기가 40 byte인 것이다.

예를 들어 영화를 다운 받을 때 클라이언트에서는 보낼 데이터는 없지만 서버로 피드백 ACK을 보내야할 것이다. 이를 위한 IP 패킷의 크기가 40 byte이다.

time to live

라우터가 포워딩할 때마다 -1씩 값을 넣어서 0이 되는 순간에 해당 패킷은 버려진다. 패킷이 무한 루프에 영원히 살아 있는 것을 방지하기 위해서 존재하는 필드이다.

upper layer

데이터 부분에 담기는 게 어떤 프로토콜의 세그먼트인지, 상위 계층의 종류를 알기 위한 필드. TCP ? UDP?

IP Adress (IPv4)

IP 주소라는 것은 외부와의 인터페이스 그 자체를 지칭하는 것이다.

IP 주소는 어떤 식으로 배정되어야 할까?

2^32개의 아이피 주소를 만들어 놓고 필요할 때마다 배정을 한다고 생각해보자. 모든주소에 대해서 어느 방향으로 가야할지 포워딩 테이블에 채워놔야하기 때문에 테이블의 크기가 상당히 커지고 매칭에도 시간이 걸릴 것이다. 이는 scalability 문제를 야기한다. 이를 방지하기 위해서 아이피 주소는 계층화 되어 있다.

Hierarchical Adressing : IP Prefixes

IP 주소는 네트워크 아이디 부분 (= prefiex = subnet) 과 호스트 아이디로 나누어져 있다.

같은 네트워크에 속한 IP 주소들은 네트워크 아이디가 같기 때문에 forwarding table이 훨씬 단순해지고 매칭도 빨라지는 장점을 가진다.

머신이 어디까지 네트워크 아이디인지 이해하기 쉽게 만든 것이 서브넷 마스크(Subnect Mask)이다.

아이피 주소의 크기는 어떻게 정해야 할까? 만약 호스트의 갯수가 많다면 8 bit로는 호스트 아이디를 나타내기가 힘들 것이다. 이처럼 아이피 주소를 고정 시키면 각 기관이 필요한 크기가 다르기 때문에 상당히 비효율적이다. 그래서 현대에는 각 기관의 크기에 맞게 IP 주소를 유연하게 설정해서 주고 있다.

Subnets

  • 같은 네트워크 아이디를 가진 인터페이스들의 집합
  • 라우터를 거치지 않고도 접근할 수 있는 인터페이스들의 집합

라우터의 경우 여러 개의 인터페이스를 가지기 때문에 IP 주소가 여러 개인 디바이스이며 각각의 인터페이스의 서브넷은 다 다르다. 그렇기 때문에 서브넷들의 교집합이고 다른 서브넷으로 넘어갈 때 라우터를 거칠 수 밖에 없는 것이다.

Network Address Translation (NAT)

IPv4의 헤더 안에 있는 헤더의 크기는 32bit로 정해져 있기 때문에 IP Adress가 32bit로 정해져 있었다. 전세계적으로 unique한 주소를 지원하는데에 한계가 생겼고 그래서 IPv6가 새로 생겼다. IPv6의 가장 큰 특징은 패킷 헤더에 존재하는 IP Adress 필드가 128bit라는 것이다. 2 ^ 128개의 호스트를 지원 가능하게 된 것이다. 하지만 우리는 아직 IPv4를 사용한다. 왜일까? NAT 라는 트릭을 이용해서 주소 공간 부족 문제가 살짝 해결되기 때문에 굳이 불편함을 무릅쓰고 IPv6로 갈아타지 않는 것이다. 아픈 부위가 진통제로 해결된다면 굳이 수술을 하지 않듯이!

Network Address Translation의 동작

아이피 주소는 grobally unique 해야 한다. 내부적으로만 unique한 아이피를 사용자에게 배정한다. 해당 주소가 외부로 나갈 때 못 돌아오는 문제가 생긴다. 따라서 이 아이피가 나갈 때 내부 게이트 웨이의 주소로 바꿔준다. 게이트 웨이의 주소는 grobally unique한 주소이다. 마찬가지로 들어올 때도 게이트웨이를 거쳐 변환된다.

소스 주소가 밖으로 나갈 때 게이트웨이에서는 글로벌 유니크한 주소로 변경하고 내부 NAT translation table에 해당 변경 내용을 적어 놓는다. 포트 번호도 겹치지 않도록 한다. 마찬가지로 들어올 때도 NAT translation table를 참조해서 엔트리를 찾아서 다시 변환한다.

만약 하나의 네트워크를 사용하는 사용자들이 구글에 동시 접속한다면 구글에서 받는 IP 주소는 같을 것이다.

NAT는 근본적인 해결 방법이 아닌 트릭이므로 문제점이 존재한다.

  • 서버 운영이 불가능하다

    포트 번호를 호스트를 구별하는데 사용하기 때문에 포트 번호가 IP 주소인 것처럼 동작하므로 포트 번호의 의미가 사라진다.

  • 중간에 게이트웨이가 패킷을 뜯어서 포트 번호를 확인한 후 주소를 변경하기 때문에 계층화의 의미가 사라진다.

하지만 대부분의 사용자가 클라이언트의 역할에 만족하기 때문에 문제가 크게 느껴지지는 않는다.

Dynamic Host Configuration Protocol (DHCP)

그럼 아이피 주소는 누가 어떻게 배정해주는 것일까? DHCP는 호스트를 네트워크 접속할 수 있도록 configuration해주는 프로토콜이다. 만약 아이피 주소가 고정되어 있다면 모든 호스트들이 항상 네트워크를 사용하는 건 아니기 때문에 비효율적일 것이다. 이 때문에 아이피 주소의 전체 갯수를 적당히 유지해주고 그 때 그때 사용자들이 들어왔을 때 동적으로 배정해주는 방식을 사용한다.

DHCP Server의 포트 번호는 67, 클라이언트의 포트 번호는 68로 정의 되어 있다. 모든 디바이스에는 DHCP 클라이언트 프로세스가 동작하고 있을 것이다.

  • 클라이언트는 255.255.255.67로 요청을 보낸다.

    32bits가 모두 1일 경우는 브로드 캐스트의 의미로 같은 서버에 존재하는 모든 호스트들이 목적지가 되게 된다는 뜻이다.

    처음에는 내 아이피 주소를 모르기 때문에 src IP 주소가 0.0.0.0 이다.

    📢 : 나 아이피 주소 필요해요 ~
  • DHCP Server만 해당 요청에 사용할 수 있는 오퍼를 브로드캐스트로 보낸다.

    네트워크 연결에 필요한 중요한 정보들도 같이 보내준다.

    • 내 IP 주소 / 서브넷 마스크
    • 게이트 웨이 라우터의 IP 주소
    • DHCP Server의 IP 주소

    transaction ID로 클라이언트를 찾는다.

  • 클라이언트는 해당 오퍼를 사용하겠다는 요청을 보낸다 .

    DHCP Server가 여러개 있을 수 있기 때문에 오퍼도 여러개 일 수 있다. 따라서 브로드 캐스트로 보낸다.

    📢 : 나 스타벅스 꺼 쓸게요 ~
  • 서버는 해당 요청에 ACK을 보낸다.

IP fragmentation , reassembly

아이피 패킷이 생성이 되서 라우터를 거쳐서 가면서 목적지까지 전달이 된다. 라우터의 링크 마다 지원할 수 있는 최대 패킷 사이즈를 MTU라고 하며 각각 다르다. 따라서 보내려면 패킷 사이즈가 MTU 보다 클 경우 어쨌든 패킷을 전달하기 위해서 패킷은 쪼개진다. 그리고 목적지에 도착되면 다시 조립된다. 이를 위한 기록을 라우터의 두번째 줄 필드에 한다.

  • ID : 원래 한 몸이라 다 같음

  • fragflag: 뒤에 남은 fragment가 있는지

  • offset : 몇 번부터 시작하는지

    offset은 나누기 8을 해서 적어준다. (필드 크기 줄이려고)

참고
http://www.kocw.net/home/search/kemView.do?kemId=1312397
http://www.kocw.net/home/cview.do?mty=p&kemId=1169634

0개의 댓글