본 내용은 Computer Networking: A Top-down Approach 를 읽고 공부한 내용입니다.
목차
1. 네트워크 계층 개요
1) 포워딩과 라우팅
2) 네트워크 서비스 모델
3) connection, connection-less service
2. VC와 datagram networks
1) VC
2) datagram networks
3) VC vs datagram networks
3. 라우터 내부에는 무엇이 있을까?
1) 라우터 내부 알아보기
2) 입력포트
3) 스위칭 구조
4) 출력포트
4. 인터넷 프로토콜(IP): IPv4, 주소 지정, IPv6 등
1) IPv4 데이터그램 형식
2) IPv4 데이터그램 단편화
3) IPv4 주소체계
4) DHCP
5) 네트워크 주소 변환(NAT)
6) IPv6
7) ICMP
5. 라우팅 SCHEME
1) Broadcast
2) Multicast
3) Anicast
4) Geocast
1. 네트워크 계층 개요
1. 포워딩과 라우팅
네트워크의 근본적 역할은 송신 호스트에서 수신 호스트로 패킷을 전달하는 것이다.
이를 위한 두 가지 네트워크 계층의 중요 기능을 살펴보자
- 포워딩(전달) : 라우터의 입력 포트에서 출력 포트로 패킷을 이동시키는 것
- 라우팅: 출발지에서 목적지까지의 경로 지정
포워딩 테이블은 이 테이블을 참조하여 포워딩이 이루어지고, 라우팅 테이블은 라우팅 알고리즘을 통해 이 테이블이 만들어진다. 구분하자!
2. 네트워크 서비스 모델
신뢰성 있는 네트워크에서의 조건들, 즉 네트워크 계층에서 제공해주는 서비스들에 어떤 것이 있는지 알아보자.
- 제한 지연 이내의 보장된 전달: 이 서비스는 패킷의 전달 보장 뿐만 아니라 호스트 간의 특정 지연 제한(ex. 100ms 이내) 안에 전달한다.
- 순서화된 패킷 전달: 이 서비스는 패킷이 목적지에 송신된 순서로 도착하는 것을 보장한다.
- 최소 대역폭 보장: 이 서비스는 송신과 수신 호스트 사이에 데이터 전송속도를 특정한 비트 속도(ex. 1Mbps)로 일정하게 유지한다.
- 지터: 패킷 간에 도착 시간 간격이 얼마나 일관되지 않고 불규칙하게 변하는가?
2. VC와 datagram networks
TCP, UDP가 전송계층(Process-to-Process)에서의 connection, connection-less service인 걸 알고 있을 것이다. network 계층(Host-to-host)에서도 이와 비슷한 개념이 존재한다. 각각 가상 회선 네트워크(VC)와 데이터그램 네트워크(Datagram Network) 개념이다!
1. VC
송신-수신 간 마치 전화기처럼 작동한다. 전화 통신에서 전화번호를 돌리고 누군가 수화기를 들어 커넥션이 설정되어야 통신이 가능하다. 하지만 통화하는 사람은 전화 통화를 위한 연결 설정이 전화 교환기에서 작동되고 있었다는 것을 알 수 없다. 전화가 성사되기 전에 미리 설정한 경로를 통하여 전송되기 때문이다. VC에서는 포워딩을 위한 수단으로 VC identifier를 사용한다. destination host address X
그리고 어떤 상태인지를 계속 확인할 수 있다.
VC는 switching이 필요없는데, 이미 다 setting되어 있기 때문이다. 이것이 VC의 가장 큰 특징 중 하나인데, call setup이 이루어진다. 즉, 미리 어떤 리소스(통신 회선 등)를 사용할지 예약하고 미리 경로를 미리 설정해서 사용한다. 이후 setup에서 선택한 경로로 maintain 유지 후 , teardown 찢어없애는 생명주기를 가진다. 대표적인 통신 기술에는 ATM(Asynchronous Transfer Mode)이 있다.
VC는 아래의 것들로 이루어져 있다. 위의 사진을 참고하자!
1. 출발지부터 목적지까지의 path
2. VC number, 즉 각 링크마다의 number
3. 경로상 라우터 안에 있는 forwarding 테이블의 entries
위의 그림에서 VC는 어떻게 경로를 탐색할까? 1번 entry로 들어온 패킷이 12번 VC number 를 가지고 있다면, 이는 3번 22 VC Number로 나가라! 라고 말한다. VC 포워딩 테이블은 라우터에 새로운 연결이 설정될 때마다 새로운 엔트리를 꾸준히 추가해주어야 한다.
위의 방법은 요즘 internet에서 잘 쓰지 않는다.
2. Datagram Networks
연결 설정(call set)이 되어 있지 않고, 연결 상태를 유지하지 않는다. 따라서 네트워크 레벨에서 볼 때는 connection을 가지고 있지 않다. 각 전송패킷을 미리 정해진 경로 없이 독립적으로 처리하여 교환하는 방식이다. 위의 VC 방식과 다르게 call setup이 이루어지지 않기 때문에 같은 목적지의 패킷도 같은 경로를 거치지 않고, 서로 다른 경로를 통해서 목적지에 도달하며 설정 단계의 회피도 가능하다.
데이터그램 포워딩 테이블
데이터그램 포워딩 테이블은 단순히 목적지 주소와 출력 링크로만 이루어져 있다. 이 세상에는 40억개의 주소가 있는데, 이를 라우터에 다 들여보낼 수는 없기 때문에 address range를 영역으로 정해서 넣어둔다.
Longest prefix matching
가장 긴 접두어를 가진 address부터 먼저 매칭하는 법칙이다. 직관적인 개념이라 어렵지 않다!
3. VC vs datagram networks
internet에서 datagram을, atm에서 vc를 많이 쓴다. 네트워크에서 별로 많은 일을 안 하도록 되어 있는 것이 datagram이다. 인터넷에서 datagram을 쓴다는 것은 단말이 좋다는 것을 의미한다. atm 망은 단말이 상대적으로 빈약하다. host 단말들은 인터넷 datagram networks가 network 상에서 단순하기 때문에 탄력적이다.
3. 라우터 내부에는 무엇이 있을까?
1. 라우터 내부 구조
- 입력 포트/출력 포트
위 그림에서 입력 포트의 맨 왼쪽 상자와 출력 포트의 맨 오른쪽 상자에서 어떤 기능을 수행하는지 알아보자.
이는 입력 링크의 물리계층 기능을 수행한다.
그리고 중간 상자로 표시되는 곳에서는 입력 링크의 반대편에 있는 링크 계층과 상호운용하기 위해 필요한 링크 계층 기능을 수행한다. 데이터 링크 처리(프로토콜, 캡슐화)
또한 가장 안쪽 상자에서는 검색 기능을 수행하는데, 여기에서 포워딩 테이블을 참고하여 도착한 패킷이 스위칭 구조를 통해 전달되는 라우터 출력 포트를 결정한다. 이후 데이터그램이 스위칭보다 더 빠르게 도착할 경우 queuing을 수행하여 - 스위칭 구조
위의 그림과 같이 라우팅의 입력포트와 출력포트를 연결한다. - 라우팅 프로세서
이 아래에 있는 것들이 하드웨어 쪽이라면 라우팅 프로세서는 소프트웨어 쪽으로, 데이터를 제어(routing)하면 아래에서는 실제로 switching/forwarding한다.
아래에서 입력포트, 스위칭 구조, 그리고 출력포트에 대해 더 알아보자!
2. 스위칭 구조
패킷을 입력 버퍼로부터 적절한 출력 버퍼로 이동시킨다. 이 이동속도를 switching rate라고 한다. memory, bus, crossbar의 3가지 유형으로 나뉜다.
memory 방식은 읽고 쓰는 데 2번의 시간이 걸린다. port 3번으로 가라고 memory에 쓰여 있으면 쓰여있는 대로 따라서 가면 된다.
bus 방식은 한 대만 쓰므로 어느 한 순간에 한 쪽 pair 밖에 쓸 수 없다. 따라서 경쟁이 일어나 다른 애가 못 쓰기 때문에 충돌/경쟁이 일어날 수 있다. 이렇게 버스 경합이 발생했을 때 각 버스 마스터가 미리 정해진 기준에 따라 순서대로 버스를 사용할 수 있게 해주는 기술을 bus arbitration이라고 한다.
crossbar 방식은 버스를 link 갯수만큼 만든 것으로 bus 방식의 한계를 극복해준다.
반얀 네트워크 방식은 프로세스들을 연결하는 멀티 프로세스로, crossbar의 특징을 가지고 있다.
3. 출력포트
출력포트는 입력포트와 반대로 이루어져 있다. 이 때에도 데이터그램이 스위칭보다 빨리 도착할 경우 buffering(queuing)이 이루어진다. 이 때 헤더에 priority를 줄 수 있어 스케줄러가 결정할 수 있다. 이 때 버퍼의 용량은 RTT를 평균 250으로 보기 때문에 이걸 이용하여 측정한다. 주로 RTT x C / sqrt(N)으로 지정한다. - 링크 전송률 C, flow 양 N
4. 입력포트 queuing - HOL 블로킹
위의 그림에서 동일 입력 포트 안에서 초록색 패킷은 갈 수 있으나 앞의 빨간색 패킷이 대기하고 있어 가지 못하는 상황을 의미한다.
4. 인터넷 프로토콜(IP)
1. 데이터그램 형식
2. IPv4 데이터그램 단편화
네트워크 링크에는 MTU(max transfer size, 링크 계층 프레임이 전달할 수 있는 최대 데이터 양)가 지정되어 있어 큰 datagram을 자르는(fragment) 과정이 필요하다. 이후 final destination에서만 재정렬(reassemble) 하면 된다. 재정렬할 때 필요한 것이 header에 저장되어 있으며 식별자, 플래그, 단편화 오프셋 필드가 그것이다.
ID는 조각을 다시 합칠 때 같은 조각인지를 확인할 때 필요로 하고, flag는 마지막 조각만 0으로(다음 조각없어요~) 할당한다. 오프셋 필드는 조각이 분실되었는지 결정하기 위해/조각을 차례대로 재결합하기 위해 사용된다. 오프셋은 시작오프셋을 8로 나누어 할당된다.
만약 4000byte datagram을 3개의 datagram으로 쪼개서 전송한다고 해보자. 또한 각 datagram은 헤더가 20byte씩 차지한다. 그리고 MTU는 1500byte이다. 그러면 20+1480+20+1480+20+1020=4040 / 3980 이다.(가장 큰 datagram의 헤더가 20을 가져가므로)
3. IPv4 주소체계
이후 HostID의 갯수에 대한 한계를 극복하기 위해 subneting(서브넷팅)이라는 개념을 도입하였다. 이는 IP주소 낭비를 방지하기 위한 원본 네트워크를 여러 개의 네트워크로 분리하는 과정이다. 빠르게 예시로 살펴보자!
IP | 192.168.10.70 |
서브넷마스크 | 255.255.255.0 |
이 정보를 가지고 유추할 수 있는 내용은 다음과 같다.
192.168.10.0 ~ 192.168.10.255까지 사용가능하며
192.168.10.0 의 네트워크 ID
192.168.10.70 의 호스트 ID를 가진다는 것을 의미한다.
즉 서브넷 마스크는 IP 주소의 네트워크 ID 부분을 나타내는 1로 이루어진 비트와 호스트 ID 부분을 나타내는 0으로 이루어진 비트로 구성된다. 255.255.255.0 마스크는 24개의 1로 이루어진 비트를 가지고 있으며, 나머지 8개의 비트는 0이다. 따라서 위의 예시에서 호스트 부분은 0에서 255까지 256개(2**8)를 사용할 수 있다.
서브넷팅이 주는 효과는 무엇일까?
subneting은 IP 주소의 낭비를 방지하기 위해 원본 네트워크를 여러개의 서브넷으로 분리하는 과정을 의미한다고 했다. 즉 subneting은 서브넷 마스크의 bit 수를 증가시키는 것이라고 생각하면 이해가 편하다.
서브넷 마스크의 bit수를 1씩 증가시키면 할당할 수 있는 네트워크가 2배수로 증가하고 호스트 수는 2배수 감소 -> 이건 당연하다. 앞에 있는 것(네트워크)의 하나를 늘리고 뒤에 있는(호스트) 것의 하나를 줄이는 과정을 거치기 때문!
이 서브넷팅을 나타내는 주소할당방식이 바로 CIDR(사이다~)이다. 위에서 본 IP와 서브넷마스크를 우리는 192.168.10.70/24 (32-8이므로) 로 나타낼 수 있다.
4. DHCP
DHCP는 호스트들에게 IP 주소와 네트워크 구성정보를 동적으로 어떻게 할당해줄지에 대한 프로토콜이다. DHCP의 목표는 호스트가 네트워크에 접속하고자 할 때마다 동일한 IP 주소를 받도록 하거나 다른 임시 IP 주소를 할당해주는 것이다. 이 특징은 마치 usb를 꽂으면 usb가 하나의 디스크처럼 보이게 하는 효과와 비슷하다 하여 Plug-and-Play라고 말한다.
한 주소에서 사용할 때 렌트 형식으로 새로 갱신하는 방법도 있다. 사용자가 떠나는 것을 모르기 때문에 1시간만 쓰고, 더 쓰려면 1시간마다 요청을 보내는 형태이다.
DHCP도 3-way shake처럼 DHCP client-server scenario가 존재한다.
과정은 아래와 같다.
client가 우선 broadcast, 대신 dest.port #67은 Is there a DHCP server out there? 하고 질문
DHCP server는 shared media(Ethernet, Wifi)로 연결된 subnet이라면 모든 host들이 메시지를 수신한다.
그러면 메시지를 수신한 DHCP server의 UDP layer의 #67 port에서 메시지를 수신한다.
DHCP server 이제 broadcast. dest. port #68 은 Here's an IP address. you can use it.하고 DHCP offer한다. 그러면 offer 받은 것은 IP address를 lifetime동안 쓸 수 있다. but 아직 미결정
#68 port를 listen하고 있던 Client는 DHCP server의 메시지를 수신한다. DHCP offer
이후 Client가 할당된 IP를 사용하겠다고 #67로 broadcast. -> 내가 이 IP address를 가져갈게!DHCP request
DHCP server가 해당 client에게 IP 주소를 할당한다. -> 그래! DHCP ACK
그러면 이제 Client는 DHCP server에 의해 IP, default gateway router IP, LDNS IP를 setting
5. 네트워크 주소 할당(NAT)
NAT는 network address translation의 약자로 IP 주소의 부족 문제를 해결하기 위해 등장하였다.
우리가 인터넷을 쓰게 될 때에는 공적인 영역(공인 네트워크)과 사적인 영역(사설 네트워크)을 나누어서 쓰게 되는데, 그 두 영역의 경계에서 인터넷 주소를 주고 받으며 네트워크 트래픽을 주고 받게 해주는 것이 NAT이다.
원래는 우리 집에 있는 내 휴대폰, 컴퓨터, 노트북 모두 기기 각각의 IP를 할당하여 사용하게 되는데, 이 때 우리 집에 설치하는 랜선 하나로 1개의 IP로 접근할 수 있도록 하는 것이다. 그러면 각각의 기기들은 어떻게 인터넷에 접속할까?
동작원리
NAT는 1:1 주소 매핑을 수행하기 때문에 NAT 라우터로 들어온 inside -> outside 또는 outside -> inside 패킷만이 주소 전환의 대상이 된다. 이것을 NAT 테이블에 의해 수행한다.
1.왼쪽 그림에서 192.168.0.4 에서 요청을 받았다. 이 내부 ip(192.168.0.1) ip를 기록해둔다.
2.요청한 컴퓨터 ip는 외부에서 접속할 수 없는 사설 ip이다. 따라서 사설 ip를 공인 ip로 변환한다.
3. 이제 공유기는 이 요청을 public ip address(59.6.66.238)로 외부에 요청을 하고, 공유기에서 다시 사설 ip로 보내서 통신을 완료한다.
NAT 의 가장 큰 특징은 외부세계에서는 하나의 IP 주소를 갖는 하나의 장비처럼 동작한다는 것이다. NAT 테이블 안에는 매칭되는 공인, 사설 ip와 포트번호가 들어있다.
NAT가 가지는 문제점으로는 라우터가 3계층까지만 패킷을 처리한다는 점과 종단간의 통신 방법에 어긋난다는 것, 그리고 IP 주소 부족 문제를 해결하기 위해서는 IPv6와 같은 영구적인 대안을 선택하는 것이 더 나을 수 있다는 것, 그리고 포트 번호가 호스트가 아닌 프로세스 주소 지정에 사용된다는 것이다.
6. IPv6
IPv4의 IP 주소 부족 문제를 해결하기 위해 나왔다.
1. IPv6 datagram format
2. IPv4에서 IPv6로 upgrade 되면서 속도 개선을 이루기 위해 변경한 점
40바이트 고정 헤더, 종단에서만 Fragmentation 실시하기, NW Layer checksum 없음
3. 네트워크의 서비스를 중단하지 않고 v4에서 v6로 변경하는 방법
Dual Stack: v4와 v6를 동시에 모두 지원한다.
Tunneling: 다른 버전의 헤더로 캡슐화한다. Edge가 먼저 v6로 변경되는 것이 일반적이므로 v6-in-v4 Tunneling을 통해 v4 네트워크에 v6 데이터그램을 보낼 수 있다.
7. ICMP
ICMP는 호스트와 라우트 사이에서 네트워크 계층 정보를 통신하기 위해 사용된다. ICMP는 일반적으로 오류 보고에 사용된다. 예를 들어 텔넷, FTP, HTTP 세션을 수행할 때 '목적지 네트워크에 도달 불가능' 오류 메시지를 볼 수 있는데 이것이 ICMP가 만든 것이다. 이는 IP보다는 상위이지만 protocol보다는 하위 개념이다.
Traceroute 프로그램은 이 프로토콜의 Echo Request, Echo Reply, TTL expired, Port Unreachable 메시지를 사용하여 출발지에서 목적지까지 경로 상에 있는 라우터 정보를 획득한다.
8. 라우팅 SCHEME
- Broadcast
네트워크에 연결된 모든 컴퓨터에 데이터그램을 동시에 전송한다. - Multicast
한 번의 송신으로 데이터그램을 목표한 여러 컴퓨터에 동시에 전송한다. - Anicast
하나의 송신자로부터 전송되는 데이터그램을 토폴로지 상의 동일한 IP를 갖는 수신자 그룹 안에서 가장 가까운 노드로 연결시킨다. - Geocast
특정 지역의 모든 컴퓨터에 동시 전송한다. Location-based-Multicast와 같은 의미이다.
참고
https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-NAT-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
'CS > 네트워크' 카테고리의 다른 글
[네트워크] Link Layer, Lans (0) | 2023.06.20 |
---|---|
[네트워크] Network Layer : 제어 평면 (1) | 2023.06.18 |
[네트워크] 혼잡 제어 (0) | 2023.04.23 |
[네트워크] 트랜스포트 계층 - 신뢰적인 데이터 전송 (RDT) (0) | 2023.04.22 |
[네트워크] UDP와 TCP (2) | 2023.04.22 |