Transport layer 에서의 가장 핵심적인 키워드는 바로 바로~~ 프로세스와 프로세스간의 연결이었다. 친구랑 나랑 카톡할 때 내가 보낸 카톡 메시지가 상대방에게 문자 메시지로 가는게 아닌 카톡 메시지로 가게끔 하는 것이 이 계층이었다. 그렇다면 network layer는 무엇일까? 고것은 바로 두 호스트간을 연결해준다. 내가 친구 A에게 보낸 카톡이 엄마 핸드폰이 아닌 친구 핸드폰으로 보내는 것과 같다고 생각하면 된다.
정리하자면 network layer를 통해 누구에게 보내는지 명시하고 tranport layer를 통해 상대방이 다루고 있는 여러 프로세스 중 어느 프로세스에게 보낼지 정하고 application layer는 내가 보낸 메시지를 선택된 프로세스를 통해 어떠한 모습으로 보여주는지, 같은 느낌이다. 또한 여기서 누가 누구인지는 그 유명한 IP주소가 바로 식별자가 된다.
대략적인 느낌을 잡았다면! 이 계층에 대해 자세히 다루어볼 예정인데, 크게 항목을 나누자면, 1) 라우터 2) 라우팅 알고리즘 3) IP주소 이렇게 나눌 수 있을 것 같다. 물론 세부적으로는 내용이 꽤 많을 듯,,ㅎㅎ 홧티잉
1. 라우터
새로운 컴퓨터를 만들게 되면 이 컴퓨터와 기존에 이미 있던 모든 컴퓨터들 끼리 각각 연결하는 것이 아닌 이미 뭉텅이처럼 만들어 져있는 인터넷 망에 선 하나를 가져와 새로운 컴퓨터와 연결하는 것이라 다룬 적이 있다. 이때 이 망을 이루는 요소 중 가장 큰 역할을 하는 것이 라우터! 이다.
그렇다면 자연스럽게 라우터의 역할을 짐작 할 수 있다. 인터넷 망을 이루어서 호스트들 간의 중간다리 역할을 하고 있다고 떠올랐다면 당신은 천재! 만약, 추가적으로 라우터는 중간다리 역할만 하면 되니 transport layer라던지 application layer가 필요 없다는 것도 떠올랐다면,, 굳이 이 글 읽을 필요가 없다. 당장 컴퓨터라던지 공유기 분해해서 선 따라가면서 직접 공부해보길 권한다.
라우터는 옆 그림처럼 이루어져 있다. 1대 1로 선이 이어져 있는 것이 아닌 하나의 라우터가 몇 개씩 서로 이어져 있다. 그리고 라우팅 테이블이라는 것이 있어 목적지 IP주소만을 참고해서, 빨간색 선이 그어져 있는 라우터를 기준으로, 2번 선으로 연결된 라우터에 보내야 한다면 글로 보내는 방식이다.
느낌이 왔을 수도 있는데, 라우터는 크게 두가지 일을 하는 것이다. 먼저, 하나의 라우터에서 연결되어 있는 라우터들 중 어느 라우터로 보낼지(forwarding). 다른 일은 전반적으로 A->B로 정보를 보내는데 어떤 경로(들)를 이용할 지(routing). 이렇게 두 가지 이다.
또한 라우터가 다루는 정보의 단위를 datagram이라고 불린다.
1.1 라우터 내부(forwarding)
라우터 내부는 크게 세 부분으로 나뉜다. input 파트, switching fabring, output 파트. switching fabric을 먼저 보자면 아래 사진과 같다. 사진의 경우 두 라우터간에 데이터의 이동을 보여준다. 여러 라우터로부터 연결된 케이블에서 들어온 데이터를 각각 어떤 케이블을 이용하여 다른 라우터로 보낼지 결정해야 한다. 이것이 바로 forwarding.
그림을 보면 화살표 시작점과 끝점에 무지개 네모네모들이 있는데 시작점이 input 파트, 종점이 output 파트라고 생각하면 된다. 이렇게 연결하는 이유는 만약, 인풋 3개에서 동시에 datagram을 보낼 거고 만약 운이 좋아 각기 다른 output들을 골랐다고 하면 충돌 없이 무사히 보낼 수 있게 된다. 직관적으로도 보이니 여기까지만 설명..
인풋과 아웃풋 부분의 빨간색 네모를 buffer라고 여기면 되는데, 만약 input양이 많아 output 버퍼에 많이 차게 되면 delay가 생기기도 하고 만약 꽉 차버린다면,,,, 데이터 손실이 발생한다. 그래서 버퍼링 값을 잘 계산해서 보내게 되는데 굳이 뭐 그냥 수학이라 넘어 가겠다.
또한 만약에 두 input 파트에서 같은 output파트를 보냈다면 사진을 통해서도 알 수 있듯이 output을 연결하는 선은 하나밖에 없으므로 두 input 중에 한 곳은 기다려야 하는데 이를 HOL(head of line) blocking이라고 불린다.
2. 라우팅 알고리즘
장황한 라우팅 알고리즘 이전에 포워딩 알고리즘을 왜 언급 안했냐면 너무 간단해서 항목으로 만들기 민망해서 그랬다.
아무쪼록 라우팅에 대해 이야기 해보자. 말보단 사진이니 옆에 사진처럼 목적지 IP주소가 속하게 되는 범위에 대응하는 output link에 넘겨진다. 쉽지?
라우팅 알고리즘은 크게 두 가지 + 그룹(AS)핑 알고리즘. 이렇게 총 세개라고 생각하면 된다. 각각의 라우터가 자신과 연결된 라우터들과의 거리만을 알고 있다면 벨만-포드 알고리즘을 이용한 RIP를 이용하고 각 라우터가 자신과 같은 그룹(AS)에 있는 모든 라우터와의 거리를 알고있다면 다익스트라 알고리즘을 이용한 OSPF라는 방식을 이용한다. 이 두 방식은 이용하는 알고리즘명에 따라 다른 것 뿐이므로 이것이 무엇일까 싶으면 알고리즘을 검색해보는 것을 추천.
특징적으로는 어떤 라우터 그룹(AS)안에서 A-B로 가는 경로의 값이 감소했다면 RIP방식은 이를 상당히 빠르게 업데이트를 해주지만 경로 값이 증가해 버린다면 꽤 느리게 업데이트가 된다. 이를 방지하고자 poision reversed라고 만약 A,B,C 세 라우터가 이어져 있고 A-B경로 값이 증가한다면, 오히려 B와 C의 경로 값을 무한대라고 두어 업데이트를 진행하면 꽤 빨라진다. 하지만 문제는 한계가 있게 빨라지고 가장 중요한 것은 라우터가 3개일 경우만 가능 하다는 것이다.
물론 OSPF는 어느 경로 값이 증가하건 감소하건 업데이트 속도는 일정하다. (다익스트라니깐) 당연히 OSPF가 훨씬 좋아 보이지만 모든 라우터와의 거리를 유지하고 있는게 쉬운 일이 아니다. 그래서 장단이 있다.
마지막으로 그룹핑 알고리즘은 BGP라는 것이 있다. 계속 은근히 언급했는데 라우터 끼리 그룹으로 묶는다고 했다. 이러하게 하는 이유는 OSPF든 RIP든 이 세상에 있는 모든 라우터 간에 이러한 관계를 계속 유지하고 있는게 상당히 비용도 많이 들 것이고 지리적으로 제약이 많다. 그래서 라우터 끼리 그룹을 묶게 되는데 이 단위를 AS라고 부른다.
놀라운 것은 AS마다 OSPF를 쓰든지 RIP를 쓰든지 상관없이 BGP는 각 AS들을 연결해 준다. 그림에서 3a와 1c 처럼 외부 AS와 연결하는 알고리즘을 eBGP. 내부에서 이용하는 알고리즘을 iBGP라고 부른다.
eBGP는 이 AS가 어떤 AS에 연결 될 수 있는지를 가져오는 알고리즘이고 iBGP는 이 얻어온 정보를 같은 AS에 있는 라우터들에게 서로 전달하는 알고리즘이라고 생각하면 된다!
3. IP의 이야기
IP주소는 상당히 익숙하다. 영화에서도 뭔가 복잡해 보이고 싶으면 IP주소 막 읊기도 한다.
아무쪼록 이 IP의 이야기 중 역사를 이야기 하게 되면 사실 뻔한 이야기가 많다. 그래서 간단하게 숭덩숭덩 이야기를 잘라가며 이야기를 다루자면,, 최초에는 IP주소가 32bit, 8개씩 묶어서 4자리로 표현했다. 10진수로 다루자면 0.0.0.0~255.255.255.255 이다. 그래서 총 2^32개의 컴퓨터에게 이름을 붙일 수 있게 되었다.
이렇게 세상의 모든 컴퓨터를 표현하고자 했다. 우리가 직관적으로도 이 범위의 모든 수들이 흩어져 있다면 찾기 너무 어렵겠지? 그래서 그룹핑을 하기 시작했는데, 첫번째 자리(0.x.x.x~255.x.x.x)끼리 묶기도 하고 두 자리(0.0.x.x~255.255.x.x)끼리 묶기도 하는 등, 앞에서부터 최대 3자리까지 같은 값을 가지는 host들끼리 묶기 시작했다. 그리고 이 그룹명을 표현 하는 부분을 network prefix 라 부르고 그룹명에서 내가 누구인지는 host number가 되었다. 아래 사진 처럼
그래서 만약 앞 한자리만 network prefix로 쓰면 class A / 두 자리 일 경우 class B / 세 자리 일경우 class C가 된다. 이러한 것들을 classful IP address라고 한다.
여기다가 network prefix는 마치 어느 백화점이냐 말을 하는 느낌이다. 이 백화점에는 이거 저거 있어. 근데 너무 분류가 크게 된다. 각 층에는 어떠한 것들을 파는지 명시해주면 더 분류가 잘 될 것 같으니 subnet이라는 부분을 사용하게 된다. 다. 게다가 이를 이용하면 class A나 class B를 사용했을 때 host 수가 적다면 낭비 될 수 있는 비트를 사용해서 뭔가 더 좋아보인다. 그래서 아래 그림처럼 나눈다.
근데 여기서 더 나누자..!! 이거 뇌절아냐? 맞아 뇌절이야.
이제 예를 들어보자.. 어느 그룹에 있는 컴퓨터의 개수가 2^9이라 한다면 당연히 class A를 쓸 수 밖에 없다. 왜냐하면 class A를 이용하고 subnet까지 해서 16개 비트를 사용한다. 만약 class B를 사용하면 24개 비트를 써야되게 되므로 33비트 수를 초과한다. 이런,, 그럼 7개의 비트가 남아돈다. 너무 아깝자나!
그래서 classless인 CIDR을 사용한다. 그냥 그룹에 host 개수 맞춰서 그 앞 부분만 network prefix로 쓰고 몇 개의 비트가 이에 해당하는 지 표시해준다. 마치 127.54.27.3/16 이라 한다면 앞의 16개 비트는 network prefix로서 작동한다. 그래서 현재는 CIDR 방식을 사용한다.
3-1. DHCP
그렇다면 실제로 우리의 컴퓨터, 핸드폰, 노트북, IPTV 모두 자신의 IP주소를 가지고 있을까? 계속? 사실 그러하지 않다. 그 이유는 컴퓨터 꺼져있는데 굳이 자신의 IP주소를 계속 가지고 있을 필요가 없기 때문이다. 그러하니 DHCP 등장! D가 바로 dynamic. 즉, 동적으로 할당 받는다. DHCP server라는 것이 항상 상주해 우리의 컴퓨터가 웹 사이트 접속 전에 DHCP server와 통신하여 그때의 IP주소를 할당 받는다.
3-2. NAT
하지만 이젠 이 세상에 host 들이 너무 많아졌다. 대한민국 보면 뭐 인당 핸드폰 1개, 컴퓨터 0.5개, TV 0.25개 정도 되는 거 같다. 너무 많아! 그래서 같은 local network끼리 하나의 라우터로 묶어 버리기로 한다. 아래 그림처럼
만약에 10.0.0.1이 통신하고자 한다고 하자. 그렇다면 자신을 묶어주는 라우터의 IP주소 138.76.29.7로서 세상 밖으로 나가 통신을 시작한다. 이제 막 통신을 하고 집으로 돌아올때 138.76.29.7은 자신이 10.0.0.1인지 10.0.0.2인지 어떻게 알 수 있을 까?(10.0.0.1 이든지 10.0.0.2 든지 모두 138.76.29.7로 바뀐다.) 바로 port 번호를 이용한다. 이렇게 포트 번호를 이용하여 테이블을 만들어 그룹을 묶어주게 되었지만,,, 사실 포트번호는 trasprot layer꺼지 network layer에서 다루면 안된다. 사실상 선 넘은거다. 이건 진짜 개열받네. 장난해?
그래서 이 방식은 탈락된다. 아니 그럼 이 수많은 host들을 어떻게 표현 하게 될까? 걍 IP주소를 늘리자! 그것이 바로
3-3 바로!
IPv6 라는 IP주소 등장! 사실은 그냥 128bit로 IP주소를 늘리게 되었다. 그럼 기존에 있던 32bit짜리(IPv4)들 날 잡고 128bit로 바꾸었느냐? 사실 그건 너무 비용이 많이 들기에 둘을 같이 쓰게 된다. 아니 그럼 통신할 때는? 아래 그림처럼 한다.
그림처럼 IPv6로 통신하다 IPv4를 만나면 그 안에 쏙 들어가서 IPv4로 동작한다. 그 다음 IPv6 라우터를 만날 때 까지.
이것이 가능한 이유는 IPv4의 정보를 담는 header가 IPv6의 정보를 담는 header보다 더 크기 때문에 가능하다. 어? IPv6가 당연히 더 큰거 아냐? 왜냐면 얘는 40bit를 쓰잖아. 사실 header에는 이 비트들 말고 더 다양한 정보들을 담고 있다. 이에 대해선 찾아보기를 권장한다. 별거 없기 때문이다. 아무튼 그래서 이렇게 쏙 들가는 게 가능하고 이 들어가는 것을 tunneling이라고 부른다.
마무리..
이제 다음 글은 마지막으로 남은 data-link layer이다. 이 정도면 거의 뭐 컴퓨터에 필요한거 다 다룬 거 같은데 더 이상 다룰 게 있어?
data-link layer는 지역적으로 가까운 녀석들끼리 switch라는 장치를 통해 묶는다. 물론 스위치 말고도 다룰 것이 많다. 이 계층이 있어서 사실 엄청난 이득들을 취할 수 있다. 어찌 보면 지역적으로 가까운 녀석들끼리는 굳이 인터넷 망을 이용하지 않고 이들을 묶어주는 스위치 장치를 이용해서 통신하면 인터넷 망의 혼잡도 줄일 수 있고 더 빠르게 통신이 가능해 보이지 않는강~!
암튼 다음 글은 언젠가 또 쓸테니 기대하숑!
'컴퓨터 네트워크' 카테고리의 다른 글
04. Data-Link layer (0) | 2022.01.31 |
---|---|
02. Transport Layer (0) | 2022.01.15 |
01. Application Layer (0) | 2022.01.15 |
00. 컴퓨터 네트워크 전반적 배경 지식 (2) | 2022.01.15 |