컴퓨터통신 - 20. 인터네트워킹(Internetworking)
1. 인터네트워크
- 이전에는 경계가 명확한 어떤 기업에서 관리하는 네트워크에 붙일 수 있는 단말기끼리 통신이 가능했다.
- 인터넷의 등장으로 네트워크의 주인과 경계가 사라졌다.
- 얼마든지 서로 다른 네트워크간의 통신이 가능해졌다.
- 기존에 여러 네트워크 계층 위에서 표준화를 따르도록 함으로써 서로 다른 네트워크 간의 통신을 지원한다.
- 즉 여러 네트워크들을 링크로 간주하고 그대로 사용할 수 있도록 하는 것이다. 그러면 각 네트워크는 자기네 방식대로 통신을 하면되고 다른 네트워크로 넘어갈때 표준을 따르면 된다.
- ip는 양 끝 호스트와 네트워크 경계가 되는 지점에 존재해야 한다.
- 그 계층 바로 아래 직접연결된 각각의 네트워크 계층으로 구성되어있다.
- 통신의 기본은 서로 대칭되는 구조를 따라야 한다.
- N은 자기네 네트워크안에서 통신이기 때문에 굳이 IP가 필요가 없다 다만 end system과 end system에서 다른 네트워크로 이동하는 지점인 L, M은 대칭구조를 따르면서 그 위에 IP가 반드시 필요하다.
- 결국 ip 밑에 3계층이 어떻게 되든 신경쓰지 않고 단지 논리적 링크로 생각한다.
2. Router, Bridge, Repeater
- 리피터는 1계층 장비로 신호->데이터->신호 변환을 수행한다. 반드시 물리적으로 대칭구조를 이루어야 한다.
- bridge는 필터링을 수행하기 때문에 2계층 장비이다. 한 노드 내에서는 대칭일 필요는 없다.
- ip router는 ip 계층까지 올라가기 때문에 아래 구조를 독립적으로 구성할 수 있고 마찬가지로 한 노드 내에서도 대칭일 필요가 없다.
3. 패킷 전달 서비스 모델
- 그럼 이제 인터넷이 데이터를 전달하는 방식을 살펴보자.
- 데이터그램 기반 패킷 전달 모델을 사용한다.
- 인터넷은 모든 서로다른 네트워크간 통신을 지원하기 위해 최소 서비스 기준을 제시한다.
- 모두를 연결하기 위해 최소 기준을 충족시킨다는 목적 때문에 사실상 ip는 신뢰성이 없는 서비스이다.
- 패킷 상실 가능성, 패킷 순서 뒤바뀌어 올 가능성, 중복 패킷 수신, 패킷송신 지연등이 일어나기 쉽다.
- 이 약점을 TCP가 극복하도록 도와준다.
4. IP 패킷 헤더 형식
- 데이터그램 기반 패킷 전달 모델에서 사용하는 ip 패킷 헤더를 살펴보자.
- 데이터그램 방식이기 때문에 가장 중요한건 source ip, destination ip 주소이다.
- ip 패킷은 word단위로 align된다.
- option은 있어도 되고 없어도 되는건데 word단위를 맞추기 위해 padding이 붙는다.
- 패킷은 가변길이 이기 때문에 Hlen로 길이을 알려줘야 한다.
- total length는 패킷의 길이를 나타내며 최대 16 비트를 사용할 수 있다.
- version은 ip의 버전을 말하고 IPv4, IPv6가 이 버전을 나타낸다.
- TOS는 아직 보편적으로 사용되지는 않지만 패킷 간 우선순위를 부여할 필용성을 미리 생각해서 만들어 놓았다.
- TTL : 패킷이 최대로 방문할 수 있는 노드의 수를 제한한다. 이게 왜 필요하냐면 현실적으로 전달이 불필요하거나 불가능한데도 끊임없이 길을 찾는 등의 상황을 방지하기 위해 사용된다.
- protocol은 ip 위의 상위 계층이 누구인지를 상수로 저장한다. 보내는 이가 tcp라면 6을 써서 보낸다. 수신자가 이를 확인하여 바로 tcp상위 계층으로 패킷을 올려보낼 수 있다.
- checksum은 오류검출 코드이다. 함께 보내는 데이터의 오류검출이 아니라 헤더 자신의 오류검출에만 관여한다. IPv6에서는 이게 불필요하다 판단하여 빼버렸다.
5. 단편화와 재조립
- ip가 인터네트워킹을 위해 해야하는 일이다.
- 네트워크를 공평하게 사용하기 위해서 각 네트워크는 나름대로 MTU(Maximum Transmission Unit, 즉 제약)를 가진다.
- 여기서 한가지 문제가 생길 수 있는데 x네트워크에서 데이터를 보냈는데 y에서는 그 크기를 수용할 수 없을 수 있다. (트럭으로 배송을 했는데 자전거밖에 이동이 불가능한 상황)
- 위의 경우 잘라서 보내야 하는데 이를 fragmentation이라고 한다. 그리고 나중에 잘라진 걸 하나로 붙이는데 이를 reassemble이라고 한다.
- 인터넷은 mtu문제를 극복하기 위해 이 방법을 사용한다.
- 라우터 입장에서는 패킷 하나가 들어오고 나갈때마다 인터럽트 때문에 드는 비용이 있다.
- 따라서 IP도 갈수 있을때까지는 쭉 가다가 MTU < Datagram일 경우만 쪼갠다. (필요시에만 분할)
- 재조립은 다시 MTU가 커지면 하는게 아니라 목적지에서 수행한다. (재조립은 마지막으로 미룸) 물론 세번보낼거를 하나로 합쳐서 보내면 이득이지만 분할된 단편을 독립적으로 유지하기 위해 이 방식을 채택했다.
- 당연히 중간에 소실된 부분이 생기면 재조립은 불가능하다.
- IPv6에서는 노드에서 병목을 줄이기 위해 아예 발신자가 미리 쪼개서 보내는 방법을 채택한다. 물론 혹시 모를 상황을 위해 pathMTU도 사용을 한다.(지양해서 사용)
- 패킷을 자를때는 각각 자기가 몇번째인지 식별을 위해 번호를 매긴다. 똑같이 x라는 식별자를 지닌다.
- 조각난 부분들을 단순히 1,2,3으로 매기면 2가 쪼개져야할때 2-1, 2-2등으로 매겨야하는 번거로운일이 생긴다.
- 따라서 offset으로 0으로부터 어느 위치에 있어야 하는가로 순서를 나타낸다.
- 이 방식에 또다른 장점은 패킷이 수신자 입장에서 순서가 뒤죽박죽으로 와도 바로바로 위치를 찾아 grouping할 수 있다.
- reassemble은 loop를 돌며 수행되기 때문에 termination 조건이 필요하다. 1, 0으로 이를 알려주며 more bit라고 한다.
6. Global Address
- ip는 32비트 주소로 되어있다.
- 전화번호의 지역번호만 보고 02 서울 031 경기도로 빠른 파악이 가능하다.
- 이처럼 ip주소 전체를 보지 않고 빠른 처리를 위해 ip를 구분해서 사용한다.
- 이를 계층적 주소라고 한다.
- 예를들면 165.194.xx.xx는 중앙대 대역이고 뒷부분을 알아서 사용자들이 쪼개 사용한다.
- 즉 앞부분은 네트워크를 지칭하고 뒷부분이 특정 호스트를 지칭한다.
- 네트워크 규모에 따라 A, B, C클래스를 나눈다. 호스트가 많은 네트워크는 A클래스로 24비트를 할당한다. B는 16, C는 8비트(256개)를 호스트에게 할당한다.
- 대신 A클래스처럼 큰 네트워크는 네트워크에 7비트 밖에 없기 때문에 많이 존재하기 어렵다.
- 클래스간 network, host가 어디까지인지 구분하기 위해 약속이 필요하다. A는 0으로 시작하고 B는 10, C는 110으로 시작하도록 한다.
- 10을 보면 시작으로부터 14비트까지가 네트워크 주소라고 알수 있게 된다.
- 참고로 D클래스도 있는데 이는 multicast용 주소이다.
- IPv4에서는 네트워크의 크기의 다양성을 반영하기 어렵다. network와 host의 수가 고정되어 있기 때문이다. IPv6에서는 이를 대폭 수정하였다.
- 정리하면 이 방식 덕분에 네트워크 주소만보고 더 빠른 처리가 가능해졌다. 따라서 네트워크에 있는 노드들의 네트워크 주소는 동일해야 한다.