Computer Network 일부 요약

Chapter 4.


- Transport 층과는 달리 각 호스트와 네트워크의 라우터마다 네트워크 계층의 일부가 존재한다. 곧, 라우터가 지닌 계층은, Application, Transport 계층은 없다. 그 아래 계층인 Network, Data link, Physical 층 세 단계로 이뤄져 있다.


- Transport 층에선 파일에 대한 패키징 작업을 하는데, 패킷 헤더에 가야할 dest 를 기입한다. 이후 Network 층으로 넘겨 진행되고 라우터에선 이를 보고 판단하여 처리.


@ Forwarding(전달) : '단일' 라우터에서 입력 링크로부터 출력 링크로 패킷을 전달하는 것(갈림길!) 각 라우터는 포워딩 테이블을 지니는데, 이 테이블은 라우팅 알고리즘에 의해 결정된다.


@ Routing : 네트워크의 '모든' 라우터들, 출발지로부터 목적지 노드까지의 패킷이 지나가는 경로를 결정. 라우터들의 전체 연동이 포함된다. 덧붙여, 전체 경로를 계산하는 알고리즘을 라우팅 알고리즘(routing algorithm)이라 한다.


@ 네트워크 서비스 모델

송신 호스트에서 Transport 계층에서 Network 계층으로 넘어갈 때 제공될 서비스

- 보장된 전달 : 패킷이 반드시 목적지에 도착함을 보장

- 제한 지연 이내 전달 : 보장된 전달과 함께, 특정 지연 제한(100ms 이내)안에 전달.

출발지와 목적지 사이의 패킷 흐름에 제공되는 서비스

- 순서화(in-order) 패킷 전달 : 송신된 순서로 도착하는 것을 보장.

- 보장된 최소 대역폭, 보장된 최대 지터(jitter, 송신자에서의 두 개의 성공적인 패킷 전송 사이 시간 간격이 목적지 수신 시간 간격과 동일하도록 보장), 보안 서비스(기밀성) 등을 제공한다.

$ 하지만 인터넷 네트워크 계층은 최선형 서비스(Best-effort service)를 제공한다. 곧, 대역폭 보장이 없고, 무손실 보장도 없고, 어떤 순서로 송신, 수신되고 가능하고, 타이밍도 유지하지 않으며 혼잡 암시 또한 없다.


@ 네트워크 계층에서의 명칭

- 연결형 서비스만을 제공 : 가상회선 네트워크(Virtual-Circuit Network)

- 비연결형 서비스만을 제공 : 데이터그램 네트워크(Datagram Network)


@ Virtual Circuit(VC, 가상 회선) : 일반 망에서 특정한 dest까지의 path를 확보하여 통제. 경로에 해당하는 라우터들 모두 이 정보를 전달받아 확보한 뒤 해당 패킷에 표식을 해두고 보낸다. 구성은 아래와 같다.

(1) source와 dest 호스트 간의 경로(일련의 링크 + 라우터들)

(2) path 상 링크(링크다! 링크!)마다 부여되는 가상 번호

(3) path 상에 있는 각 라우터 forwarding table 안의 entry(VC마다 추가됨)

-> 어떤 VC에 속하는 패킷은 그 헤더 안에 가상회선 번호를 갖는다. 단, 이 VC는 각 링크에서 제각기이므로 check point 격인 라우터는(중간-_-) 전달 패킷의 VC 번호를 새것으로 교체. 이는 forwarding table 에서 얻는다.

VC number 부여가 매번 달라지는 이유!

(1) 헤더 필드의 길이가 짧게 유지 될 수 있다.

(2) 하나의 번호로 설정되었을 때 중복에 대해 다른 라우터들에게 모두 메시지 교환해야 하는 번거로움을 해결.


하지만, VC 가 현재 인터넷에 쓰이지 않게 된 단점이 있다.

(1) VC 는 라우터 내 테이블 생성을 위해 사전 약속(call setup)이 있어야 한다.

(2) 패킷 전송 후 이 테이블은 의미가 없어진다.

(3) VC 에 대해 부가적으로 상태 정보를 유지해야 한다. (이는 forwarding table 과는 별개)


@ Datagram Network

- VC 설정이 필요없고, 상태 정보도 필요없다. 목적지 주소를 포함하고 있는데, 이는 32bit 를 사용한다. 그럼 forward table 에 변화가 있는데, 패킷에 대한 lookup(검색) 동작을 살펴보자.

목적지 주소 범위가 40억인데 이를 모두 대응하지 않고, prefix(프리픽스) 대응을 적용한다.

앞만 잘라내서 갈라지는 기준을 잡고 링크 인터페이스과 사상(mapping)한다.

단, 미묘한 문제가 추가적으로 발생한다. 한 목적지 주소가 하나 이상의 엔트리에 대응되는 점이다.

-> Longest prefix matching rule(최장 프리픽스 대응 규칙)이 이 대안인데, 테이블에서 가장 긴 대응 엔트리를 찾고, 여기에 연관된 링크 인터페이스로 패킷을 보낸다.


@ Internet(datagram, 단말이 computer. 설계가 여러망 위의 여러망이 존재)

<-> ATM(VC, 일반 전화와 개념이 유사)


@ 라우터

- 패킷의 헤더 내부 아이피나 포트를 기준으로 분류하는 작업을 한다. 이 작업을 스위칭이라고 명명하며 여기서 다룰 요점은 다음과 같다. 예를 들자. 지하철 개찰구를 생각해보면, 실제 이 개찰구가 없으면(독일 등에선 수금하는 식으로 개찰구가 없다.)사람들이 몰려서 혼잡해지는 일이 훨씬 적을 것이다. 그렇다면, 이 지연을 가장 적게 만드는 방법을 찾자.)


@ 라우터 스위칭 구조

입력에 대해서는 다음과 같다.

- switching via memory : 마이크로프로세서가 패킷을 읽어 주소를 보고 판단하여 분류

- bus : 공통의 버스가 존재하여 하드웨어(logic)적으로 구현. 메모리에 올려 처리하는 시간이 줄어드므로 처리 시간이 단축되나, 한 번에 하나만 올려야 되는 제약이 발생.

- crossbar switch : 회로 구현으로 버스를 보완. 점에 해당하는 곳으로 패킷을 보내주는 로직을 만든다. 비용이 가장 많이 들지만 가장 효과적.

출력에 대해서는 별 다른 언급보다 특정 상황에 고려되는 부분이 생긴다.

- 출력 링크 속도보다 더 빨리 출력 포트에 패킷을 전달할 때 큐잉, 버퍼 관리 기능이 필요하다. 이는, 절대 온 순서대로 나가는 것이 최선의 방법이 아님을 보여주는 Head-of-the-Line(HOL)의 예를 참조하자. 곧, 일부의 순서 변경으로 더욱 효율적으로 처리되는 경우가 존재한다.


@ 네트워크 계층 protocol

- Transport 바로 아래 계층.

- IP protocol : 주소 체계 규약. 데이터그램 포맷.

- ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜) : 네트워크 상태를 알려주는 프로토콜. 네비게이션을 떠올리자. 도로가 변경되면 이는 업데이트를 통해 이 도로가 더 이상 못 가는 길임을 알려야 한다. 네트워크에서는 이 변화가 매우 크다. Timeout 이 발생한 링크는 못 가는 길로 치부하는데 이를 알리는 역할이라고 보면 된다.

- RIP : 경로 선택에 TM이는 라우팅 프로토콜.


@ IP Datagram format

- Transport 계층으로부터 캡슐화된 패킷이 내려오면 이 위에 더 크게 패키징을 한다. 물론 이 새로운 패키징엔 IP protocol 의 규약에 맞는 헤더 등이 포함되게 된다. 4바이트씩 5줄 가량. 20바이트인데 Transport 계층에서 20바이트 가량의 헤더를 사용하면 40바이트로 약 1400바이트로 나가는 이더넷의 최종패킷에서 이 헤더가 차지하는 비율은 약 3% 가량으로, 이 정도의 오버헤드는 존재해도 무방하다 여기자.

TTL : 패킷이 목적지를 못 찾고 뺑뺑이 돌 수도 있다. 여기에 시한폭탄을 달아 시한부 인생을 선고하는 작업.


@ IP 단편화와 재결합(Fragmentation, Reassembly)

- path 에 따라 진행 도중 어떤 프로토콜은 큰 패킷을 다룰 수 있는 반면, 다른 프로토콜은 작은 패킷만을 다룰 수 있다. MTU(Maximum Transmission Unit)는 링크 계층 패킷이 전달할 수 있는 최대 양인데, 전달되는 기점(호스트, 라우터)의 Network 계층의 IP는 이를 미리 탐지해서 패킷을 단편화하여 보낸다. 그럼, 다음 기점에서는 이를 종합하여 다시 판단 후 재전송하는데, 이 단편화에 대한 정보는 다음과 같이 구분하여 받아낸다.

 패킷 내 아이디를 단편화시킨 패킷마다 동일하게 특정값으로 부여한다. fragflag 가 1이면 추가로 더 있다는 의미로 사용한다. (곧, 0일 때는 마지막 단편이라는 의미를 갖고, 곧 이 플래그를 쭉 나열하면 111110, 1110... 식이 될 것이다.) 오프셋은 바이트 단위를 8로 나눈 값을 갖는다. 이 조각 패킷은 원본에서의 시작지점을 이 오프셋을 통하여 파악한다.


@ IP Addressing

- 인터페이스(여기서의 인터페이스는 네트워크가 가능한 단말기기를 의미한다. 컴퓨터 PC에 매겨지는 게 아닌, 랜카드에 매겨지는 개념. 곧, 넷북만 봐도 하나의 단말이지만, 무선랜과 유선랜이 존재함으로써 두 개 이상의 아이피를 가질 수 있다. 이 개념은 라우터에는 특히 여러개의 아이피를 지닐 수 있음을 상기시켜준다.)의 IP 주소는 연결된 Subnet 이 결정!

- Subnet은 호스트간 인터페이스들과 라우터 인터페이스로 연결된 네트워크는 서브넷을 구성한다고 말한다.

- /24 : Subnet Mask. 211.1.1.2, 211.1.1.4 는 동일한 서브넷이라고 할 수 있는데, 이 때 Subnet Mask는 211.1.1.0/24 로 정의하고, ‘/24’가 Subnet Mask이다. 단, 이 서브넷은 호스트에만 한정되는 개념이 아니다. 라우터 간 연결에도 서브넷이 존재한다.


@ CIDR(사이다, Classless Interdomain Routing)

- 위에 Subnet Mask 라고 언급한 부분이 바로 CIDR 이다. a.b.c.d/x 의 형식에서 x 는 서브넷의 길이이자 MSB이다. 이를 해당 주소의 prefix라 부르며 32-x 는 해당 네트워크의 인터페이스들이 각기 구분할 수 있는 값이라고 볼 수 있다. 물론, 이 값은 한 번으로 한정되는 것이 아니라, 나머지 32-x 의 값에서 다시 서브넷을 구성할 수도 있다. (물론 이 값을 다 쓸 수는 없다. 브로드캐스트, 디폴트로 쓰이는 주소들이 있어서 2^(32-x) 중 일부만 사용이 가능하다.) 이전엔 바이트 단위로 끊어 분류했던 클래스 주소체계였으나 기관의 수가 급속히 늘어나 지원해야 하는 양의 급증에 따라 생긴 대안이다.

- 주소 블록을 획득하는 조직 내의 서브 조직들은 이후 ISP 업체를 바꿔도 longest prefix matching rule로 구분되어 받아낼 수 있다.


@ DHCP(Dynamic Host Configuration Protocol) - Plug-and-Play protocol

- 랜 케이블을 꽂을 때마다 사용자가 IP와 관련된 설정을 수동으로 잡아주면 불편할 것이다. 자동으로 아이피 할당 및 네트워크 세팅을 해주는데 이 원리는 호스트가 인터넷에 연결하기 위해 요청하면 서버가 응답으로 IP를 할당하는 기술.

- 시나리오를 그려보면, 클라이언트가 도착했다. 이 클라이언트는 현재 아이피를 모르므로 본 클라이언트 ip 를 0.0.0.0 으로 하고 목적지는 255.255.255.255 로 DHCPDISCOVER (DHCP 발견 메시지), ID 를 임의로 결정하여 보낸다. 그럼 이 메시지는 DHCP 서버에게도 가는데 서버는 yiaddrr 에 할당할 주소를 기입하고 dest 는 역시 브로드캐스트 255.255.255.255 로 발송. offer 메시지이며 받은 클라이언트는 역시 브로드캐스트로 request하게 되며 서버는 ack.


@ ICANN(Internet Corporation for Assigned Names and Numbers)

- DNS 관리, 도메인 이름 등록, 주소 할당 등을 담당하는 국제 기구


@ NAT(Network Address Translation)

- 공유기의 원리를 이해하는 것과 연관되는 부분으로, 공유기 밖에 하나의 아이피만 존재한다. 매달린 단말기가 여러 개고, 공유기 내부에서 스스로 작은 소규모 네트워크를 정의한다.(ex : 인트라넷) 이 때문에 들어오는 주소와 관련하여 NAT table 이 별도로 정의되어야 하며, 이에 대한 시나리오를 하나 보도록 하자.

- 공유기 내부의(이해를 위해 공유기라 했지만 실제 라우터에도 해당하는 일이다.) 단말이 외부로 보내려는 패킷에 대해 헤더를 기입하고 패킷을 발송했다. 이 dest 는 수정될 이유가 없지만, source 는 자체적으로 정의한 내부 체계의 주소이므로 맞을리 없다. 곧, 공유기에선 이 source를 공유기가 물고 있는 실제 외부에서도 공용되는 IP로 바꾸어 보낸다. 이 때 NAT table 에 이 데이터가 기록되고, 수신 때는 NAT table 을 참조하여 공유기 내부의 단말로 보낼 수 있게 된다.

- 단, 공유기 내부의 단말로 외부 단말이 접속을 하려는 때가 있다.(대표적으로 p2p) 이 때는, 해결책이 세 가지 존재.

(1) 미리 내부의 단말에 대해 포트를 각기 부여해서 구분하는 방법이 있다.

(2) 이 값을 미리 부여하지 않고 프로그램 실행과 함께 할당하는 방식인 동적으로 운영하는 방식이 있다.

(3) 스카이프 방식. 공유기 밖에 있는 중간보스 피어(Leader)를 지정하고 이용하는 방법.


@ ICMP(Internet Control Message Protocol)

- 네트워크의 상태가 어떤지 그 정보에 대해 주고받는 프로토콜.

- Network 층에 있으며 곧, IP보다 상위 계층이다. IP 패킷을 이용하여 이를 수행한다.

- 예를 들어 학교에서 아이피가 겹칠 때, 이게 단말의 문제인지, 실제 다른 사람과 겹친건지 판단하는 방법은 ping 메시지를 보내보는 것으로 알 수 있다. (응답이 온다면 누군가 실제 쓰고 있다는 결론) Traceroute 또한 이 ICMP를 이용하여 알 수 있다.


@ Traceroute

- UDP를 이용하여 처음에 TTL을 1로 설정하여 전송하게 된다. 첫 라우터를 만나게 되었을 때 이 TTL은 0이 되는데, 해당 라우터는 패킷이 더 이상 앞으로 나갈 수 없다는 메시지를 송신하는데 이 메시지에는 해당 라우터의 주소 등 정보가 포함되어 있으므로 파악할 수 있다. 그리고 뒤이어 TTL을 2로 설정하여 보내는 반복작업이며 패킷의 실종상황을 고려하여 하나의 TTL에 대해 3개씩 송신해본다. 발송은 쓰이지 않는 포트를 설정해서 보내는데, 최종 목적지에 도착했을 때는 쓰이지 않는 포트이므로 응답 메시지는 여지껏 왔던 메시지와는 다를 것이다. 그로 인해 판단하여 결정.


@ IPv6

- 아무리 공유기를 써도 IP 자원이 고갈될 상황에 놓이게 되자 등장한 대안.

- 중요한 변화는 다음과 같다.

(1) 확장된 주소 : 32bit 주소가 128bit.

(2) 헤더 길이 40byte로 고정.

(3) 단편화/재결합을 제거 : 송신했을 때 해당 라우터에서 소화 못할 사이즈일 때 ICMP 메시지가 송신되고 송신측은 IP Datagram 크기를 줄여서 다시 송신한다.(이전 것은 폐기) 단편화와 재결합 작업이 시간을 지연시킨다는 점에 착안하여 개선하였다. (보안문제도 포함)

(4) 헤더 체크섬 제거 : Transport 계층과 Data link 계층에서 체크섬을 시행하므로 제거해도 무방하다 판단되어 제거됨. IP 패킷의 빠른 처리가 가장 주요하게 작용하였다.

IPv6 Datagram format 은 버전(6), 트래픽 클래스(가중치), 흐름 라벨, 페이로드 길이, 다음 헤더, 홉 제한(TTL), source, dest, data 로 구성되어 있다.

이로 인해 ICMPv6 로 개편되었다.

- 그렇다면 이를 변화해야 하는데, 플래그 데이를 정해서 하루 동안 모두 장비를 끄고 한꺼번에 바꾸자는 제안이 있었으나, 현실적으로 불가능하므로 조금씩 바꾸는 방안으로 현재도 진행중에 있다.

- 현재 병행되는데에 문제가 하나 발생한다. 바로 이전에 IPv4 로 구축된 시스템이 IPv6 를 인식하지 못하는데에 있다. IPv6 는 IPv4 를 고려하여 설계되었으므로 변환이 가능하지만 반대가 안 된다는데 그 문제요지가 있다. 해결방법은 터널링.


@ 터널링(Tunneling)

- IPv6 가 적용된 라우터에는 이 방식을 이용하여 전송된다. 그리고 IPv4 라우터로 가야하는 상황이 되면 이 터널링이 적용되어 IPv4 직후에 나오게 될 IPv6 라우터를 목적지로 설정하고(출발주소 또한 현재 변환작업을 적용하는 라우터의 주소로 바뀐다.) IPv4 의 데이터 필드에 이를 캡슐화하여 저장한다. 그러면 터널로 명명된 IPv4 라우터들을 지날 때는 내부에 IPv6 데이터가 있는지도 모르고 전송시키고 수신측이 된 IPv6 가 가능한 라우터에서 데이터를 참조하여 이를 다시 IPv6 로 복원시켜 최종 목적지로 송신한다.


@ Routing Algorithm

- 송신측의 디폴트 라우터(첫 번째 홉 라우터)와 수신측의 디폴트 라우터까지의 패킷 path 를 최소비용으로 찾아내는 작업.

- 라우팅 알고리즘은 크게 두 가지로 분류된다.

(1) Global : 네트워크에 대한 완벽한 전체 정보를 아는 경우.

-> LS(Link-State) Algorithm(링크 상태 알고리즘)

(2) Decentralized(분산) : 노드가 모든 네트워크 링크의 비용에 대한 완벽한 정보를 알지 못할 때.

-> DV(Distance-Vector, 거리 벡터) Algorithm

또 다른 분류로 정적, 동적 라우팅 알고리즘(네트워크 트래픽 부하, 토폴로지 변화를 고려대상으로 하는 유무로)으로 혹은 부하에 민감한, 둔감한으로 나눌 수 있다.


@ LS Algorithm

- 링크 상태 브로드캐스트 알고리즘으로 정보를 수집. 자기 라우터로 돌아오는 경우와 음수 가중치는 없다고 가정한다.

- Dijkstra's Algorithm : 이 알고리즘은 자료구조에서 배웠으므로 생략하자. 직접 해보는 것은 필수!

- 복잡도는 이다.

- 단, 이 알고리즘은 혼잡이나 지연을 기반으로 한 링크 방식의 진동 문제에 딜레마를 겪는다. 물론, 링크 비용이 트래픽에 의존하지 않게 만드는 방법이 있지만, 이 경우 본질적인 문제로부터 벗어나는 결과를 갖게 된다.


@ DV Algorithm

- 비동기적, 반복적, 자기 종료, 분산 알고리즘.

- Bellman-Ford Algorithm( 단, 1<k<n, ())을 이용.

- 재귀적인 구조로 목적지로부터 값이 되돌아오는 연산 형태를 지닌다.

- 문제가 있다. 링크 비용 변경과 링크 고장이 그 문제점인데, 시나리오를 보자. (대신 링크 비용이 감소하는 소식은 빨리 퍼진다.)

  라우팅 루프가 발생되는 경우인데, 해당 노드간 가중치의 증가 때는, 연결된 두 노드간 라우팅 루프가 일어나 왔다갔다를 반복한다. 이는 Bellman-Ford 알고리즘이 적은 값에 대해서만 업데이트를 적용하고 큰 값은 무시하기 때문에 벌어지는 일인데, 가중치 증가량이 크면 클수록 루핑 타임은 무한해진다. 무한 카운트라고 부른다.

  -> 이 문제는 포이즌 리버스로 해결한다.(poison reverse) 이 방안은 경로 설정이 된 이외의 경로를 무한대라고 다른 라우터들에게 해당 라우터(무한대로 설정할 큰 값의 가중치 간선과 연결된 라우터들)는 이를 전부 알려둔다. 그러면, 다른 곳에서의 경로상 값의 큰 변화가 일어났을 때 그 큰 값에 대해 다른 라우터들에게 알리고 무한대로 설정했던 라우터는 값을 받아 비교했을 때 적은 값이면 즉시 거리 테이블을 수정한다. 이로써 해결할 수 있으나, 일반적인 무한카운트 문제는 많은 노드를 포함한 루프에 대해 포이즌 리버스로는 감지하기가 힘들다.


@ 두 알고리즘의 비교

- 복잡도 : 링크 상태 알고리즘은 , 거리 벡터 알고리즘은 매우 천천히 수렴하고 라우팅 루프에 의한 무한카운트 문제 가능성이 있다.

- LS 는 변경에 대해 전체를 다시 업데이트해야 하고, DV는 변경된 부분에 한해 메시지 교환으로 매번 파악하는 형태. 단, DV는 메시지에 오류가 발생되었을 때 일파만파로 퍼지지만, LS는 잘못된 부분 이외에는 멀쩡.


@ 계층적 라우팅

- 실제로 두 알고리즘은 전 세계 라우터들을 대상으로는 막대한 메모리와 오버헤드를 불러온다. 또한 관리에 대한 자치적인 문제가 침해되는 일이 있다. 이 해결책으로 자치 시스템(AS : autonomous system)이 도입된다.


@ 자치 시스템(AS)

- Intra-AS Routing Protocol : AS 내부에서 동작하는 라우팅 알고리즘

- Gateway Routers : 외부 목적지 AS에 패킷을 전달하는 라우터.

- 이 자치 시스템은 문제를 단순화해서 보자는데 측면이 강하다. 예를 들어 서울에서 부산을 간다고 하자. 그러면 일단 우리는 부산까지의 상세한 루트를 고려하기보단, 밖으로 나가게 될 중요 기점을 먼저 생각하게 된다. 경부고속도로, 국도, 버스 등. 네트워크에선 각각의 이 영역이 별개의 라우팅 알고리즘을 사용해도, 이 영역은 분리되어 있고, 중간 기점은 별개로 이어주는 계층적 형태를 추구하게 된다.

- 다른 측면에서 다시 설명해보자. 전세계의 지도 형태를 아는 네비게이션이 있다고 하자. 이 네비게이션이 다뤄야 하는 데이터량은 매우 방대하다. 여기에 추가로, 네비게이션이므로 각 도로의 교통상황까지 구현해야 한다면, PC로도 힘든 수준에 이를 것이다. 하지만 이 네비게이션은 사용하는 구간이 한정적이다. (최소한 전 세계를 대상으로 해야만 할 경우는 확률적으로도 매우 희박할 것이다.) 곧, 영역별로(AS) 쪼개어 각 구획은 알아서 LS 든, DV 든 처리하도록 맡기고, 영역의 바깥을 결정해야 한다.

- 알아야 하는 기본 정보는 아래와 같다.

1. 가야할 목적지의 존재 여부를 알아야 한다.

2. 목적지의 위치를 알아야 한다. (1과 2는 일맥상통하는 부분이 있다.)

3. 이를 가려면, 해당 AS 에서 어느 게이트웨이 라우터로 가야 할지를 결정해야 한다.

여기에 발생되는 문제가 하나 있다. 목적지로 향하는 게이트웨이 라우터가 여럿이라면, 어느 쪽으로 가야 하는 게 더 빠를 것인가를 결정해야 한다. -> Hot-Potato Routing!


@ Hot-Potato Routing

- 가장 적은 비용의 게이트웨이로 해당 패킷을 빨리 내보내는 방향으로 설계된 라우팅 기법.


@ RIP(Routing Information Protocol, 라우팅 정보 프로토콜)

- DV 이용.

- Hop(홉) : 출발지 라우터에서 목적지 서브넷까지의 최단 경로를 지나는데 지나는 서브넷의 숫자.

- 최대 경로 비용은 15로 제한. RIP를 AS에서 사용하는 경우 15홉보다 작게 설정, AS 내부는 최대 25개 목적지로 제한.

- RIP 광고(Advertisement) 이용, 대략 30초마다 이웃끼리 교환

- RIP table(라우팅 테이블)을 RIP 광고 수신과 수정작업을 함께 병행한다.

- 6번의 반복 송신에 의해 판단하는데(UDP) 180초(30 x 6)동안 이웃에 내게 아무런 RIP 응답 메시지가 없다면 해당 이웃이 없다고 재정의한다. 보낼 예정이었던 패킷들의 경로를 모두 수정하고(물론 이웃한 다른 라우터들에게도 알린다.) 재정의하는 가중치는 16으로 설정. (poison reverse)


@ OSPF(Open Shortest Path First)

- LS 이용.

- 링크 상태가 변경되거나, 정기적으로(30분) Link-State 를 브로드캐스팅 한다.

- 2수준 계층화 : 지역 영역, 백본.

- AS에서 하나의 OSPF 영역만이 백본 영역으로 설정된다.

- OSPF 의 네 가지 유형은 아래와 같다.

1) 내부 라우터 : 백본이 아닌 영역에 있고 intra-AS 라우팅만 수행.

2) 영역 경계 라우터 : 외부 영역으로 패킷 라우팅을 담당. 백본에 속함.

3) 백본 라우터 : 백본 내에서 라우팅하지만 영역 경계 라우터는 아니다. 내부 라우터는 백본 라우터가 주는 영역 정보 브로드캐스팅에 의해서 다른 영역으로의 경로가 있음을 알 수 있다.

4) 경계 라우터 : 다른 AS에 속한 라우터들과 라우팅 정보를 교환. inter-AS를 위해 BGP 사용한다.


@ BGP(Border Gateway Protocol)

- 백본에 해당하는 AS의 경계 라우터가 갖는 알고리즘. 다른 AS의 라우터들과 연결하는데 이 사이의 연결은 영구적인 TCP로 설정.

- 각 AS는 스스로 인터넷에 광고를 하여 자신을 알려 BGP는 인터넷의 모든 AS가 이 서브넷에 대해 어떻게 도달하는지를 알게 해준다.

- BGP의 목적지는 호스트가 아닌 CIDR된 Prefix이다.

- Internal 과 External 로 나뉜다.

- Internal BGP : AS 내 라우터간의 BGP 세션

- External BGP : 두 AS에 걸치는 BGP 세션

- eBGP는 어떤 AS에서 게이트웨이 라우터가 프리픽스를 배우는 eBGP를 수신하면, 게이트웨이 라우터는 자신의 iBGP 세션을 사용하여 그 프리픽스를 자신의 AS 내부의 다른 모든 라우터에게 분배한다. eBGP 에서 보내야 될 대상 정보 데이터는 전파 받은 또 다른 AS 에 대한 데이터를 포함한다. 곧, 인접하지 않은 AS를 파악이 가능.

- ASN : AS 식별번호

- AS-Path : AS가 굉장히 많이 때문에 여러 AS를 지나게 되는데 사이클이 생기는 등의 비효율적인 경로를 만들 가능성이 있다. 이를 별도로 구분하여 효율성 있게 처리하는 알고리즘.

- Next-Hop : 최단 거리라는 보장은 그 어디에도 없으나, 다른 AS의 서브넷으로 데이터를 보내려면 보내는 라우터가 포함된 AS에서 어느 라우터쪽으로 우선적으로 향해야 하는지 결정하는 것.


@ BGP 의 경로 설정

- 결정된 경로에 대해 쓸 것인가, 말 것인가를 판단하는 시스템

- 먼저 BGP 라우팅 정책을 예를 들어보자. 단순한 BGP 시나리오에서 계산된 가중치 값이 더 적더라도, 수신(소비자) 네트워크를 경유해서 가는 경우는 무조건 폐기한다. 또한 수신 네트워크에 다이렉트로 연결되지 않은 공급자 네트워크를 거치는 경우, 해당 공급자가 도울 이유가 전혀 없으므로 이 경우도 폐기 사항에 포함된다.

- 경로의 선택 기준은 4가지로 말할 수 있다.

1. 정책에 따른 선호하던 루트가 선택된다. 라우터에겐 학습 능력이 있으므로 지역선호는 이를 따른다.

2. 같은 지역 선호 값을 지닌 나머지 루트로부터 최단 AS-Path 가 선택된다.

3. Intra AS Algorithm 에 의해 결정된 Path에서 가장 가까운 Next-Hop Router 를 갖는 루트를 찾는다.(비용이 낮은) 이게 Hot-Potato routing.

4. 식별자를 이용하여 루트를 선택한다.


@ Broadcast Routing

- 브로드캐스트는 불특정 다수에게 모두 보내는 것이고 멀티캐스트는 특정 다수에게 보낼 때 해당되는 것이다.(소속집단에게 보낼 때가 그 예)

- 브로드캐스트 폭풍 : 너무나 많은 브로드캐스트 패킷의 증가 때문에 네트워크에 과도한 트래픽이 오는 경우를 의미한다.

- 브로드캐스트 전송에 대해 몇 가지 살펴보자.

1. 근원지 노드에서 복사하여 전송 : 출발지에서 패킷을 복사하여 각기 발송할 때 한 경유지에서 동일 패킷 여럿이 지나가 불필요한 트래픽(자원의 낭비)을 일으키게 된다.

2. 비제어 플러딩 : 노드가 브로드캐스트 패킷을 수신하면 모든 이웃들로 복사하여 발송한다. 하지만 사이클이 존재한다면 이야기가 복잡하게 구성된다.

3. 제어 플러딩 : 받아서 브로드캐스트 적용한 패킷에 대해서는 다시 받았을 때 브로드캐스트 하지 않는다.

   이 제어 플러딩에 대해서도 두 가지 세부적으로 나눌 수 있다.

   1) 순서번호 제어 플러딩 : 패킷에 대해 일련번호를 매겨 보내는 방법이다. 수신 라우터는 이를 검사하여 목록에 없다면 브로드캐스트하고 있다면 폐기하는 방식. 하지만 이 일련번호조차도 양이 많아지면 중복될 가능성이 있다.

   2) 역경로 전달(Reverse Path Forwarding, RPF) : 단순한 아이디어로 최소비용 경로의 간선은 제외하고 나머지에 대해서 다이렉트로 온 라우터의 테이블을 역참조하여 보내지 않는 방법이다.

- 제어 플러딩의 두 가지 방법 모두 브로드캐스트 폭풍을 피할 수는 있지만, 중복 전송은 피할 수 없다.

- Spanning tree 를 생성한다. 이는, 모든 브로드캐스트 노드는 단 한 개의 복사본만을 수신한다는 특징을 갖는다. 하지만 Prim, 크루스컬 알고리즘과 같이 적용하지 못하고 병렬로 적용, Center 노드를 기점으로 퍼져나가는 형태.


@ Multicast Routing

- 유료방송을 생각해보자. 곧, 브로드캐스트이지만 특정 다수에게만 보내야 하는 경우가 이 경우이다. 이 경우 이 멀티캐스트를 위해 대상 라우터만 고른다고 하면, 맵이 끊어질 수 있다. 곧 참여대상에서 제외된 서브넷들만 지닌 라우터 또한 경로상에 있다면 참여해야 한다.

- 이런 멀티캐스트 그룹은 인터넷 그룹 관리 프로토콜(IGMP)에 의해 관리된다.

- 경로 생성을 다익스트라 알고리즘을 이용하여 해당 유니캐스트(센터)에 대해 모두를 구하는데, 이 때 해당하지 않는 라우터 또한 함께 계산하도록 한다. 단, 이 트리 생성은 보내려는 대상 라우터에서 올라온 정보인데, 유향 그래프이기 때문에 그 역 또한 같은 가중치를 갖는다는 보장이 전혀 없으며, 또한 계산할 때는 포함시켰지만 이 중 빠져도 무방한 노드들이 존재한다. -> 이 문제는 리프노드부터 다시 질문해 올라가는 방식이다. 해당 리프노드 아래에 멀티캐스트에 참여하는 노드가 있는지 질의하고 없다면 삭제, 있다면 pass. 작업은 상위 노드를 향해 질의를 반복하는 작업이고, 이 방법을 Reverse Path Forward 라고 한다.

- Steiner Tree : 이 트리는 문제가 있다. 만약, 세 정점 간을 잇는 세 개의 간선이 모두 2의 가중치를 갖는다고 할 때, 이에 새로운 정점을 추가하여 더 최단경로를 생성할 수 있냐는 질문에 대해서 무게 중심을 잡아 설정해주면 된다. . 굉장히 복잡한 문제이므로 실제로 잘 안 쓰인다. 멀티캐스트 특성상 삽입삭제가 잦은데 이 부분이 어렵다.

- Center-based tree : 대상되는 라우터만 포함시켜 지정된 센터(기준점)로 가는 최단 경로를 구하고, 이를 추가하여 만들어주는 방법.



<< CHAPTER 5 >>


MAC address 는 네트워크 단말장치에 부여된 고정된 값으로, 이 값은 IP와는 전혀 별개의 값이며 또한 MAC에서 IP를 참조하진 못한다. (상위 계층)


@ Link-Layer Service

- 흐름제어(들어오는 signal 에 동일 클럭을 적용시켜 많이 들어올 때를 파악), 오류 검출 및 교정, 반이중 전송, 전이중 전송.


@ NIC(Network Interface Card) : 랜카드


@ Parity Checking

- Single bit Parity : 한 비트를 이용하여 홀짝 구분

- Two Dimensional Bit Parity : 행렬 형태를 이용하여 둘 이상을 구분. 하지만 역시 4개는 구분하지 못한다.


@ Checksum : 다 합산한 뒤 그 합을 통해 파악

@ CRC(Cyclic Redundancy Check, 순환중복검사)

- 메인 아이디어는 우리가 어떤 정수 데이터를 보낸다고 가정하자. 송신측과 수신측은 미리 특정한 수를 정하고 입력 받은 수에 대해 나눈 나머지를 둘이 서로 비교한다.

- d 비트로 이루어진 데이터 D를 송신 노드가 수신 노드로 전송할 때, 송신자와 수신자는 G로 표기되는 생성자(Generator)로 알려진 r+1 비트 패턴에 대해서 합의한다. 이 때, 반드시 G의 MSB는 1이어야 하며, 주어진 데이터 D에 대해 송신자는 r개의 추가 비트 R을 선택해서 D의 뒤에 덧붙이며 d+r 패턴은 나누기를 적용하였을 때 정확히 나머지가 R 로 나와야 한다. 여기서의 R은 CRC 비트라고 하며, 다음은 그 예시이다.

D=101110, d=6, G=1001, r=3 일 때.

곧, CRC bit 는 011, 실제 전송되는 9비트는 101110011이다. 이 사이의 연산은 모두 XOR로 진행되는 점과 마지막 CRC bit 는 일반 나머지와 같이 수를 끌어오는 형태가 아님을 유의하자.


@ Multiple Access Protocol

- 공유된 매질을 여러 참여자가 동시에 쓰는 방법이다. 한 순간에는 한 명만 통신이 가능하며 간섭 또한 존재하므로 이를 해결하는 세 가지 방안이 있을 수 있다.


@ TDM, FDM 으로 채널을 분할

- 사용하지 않는 비가용 상황에서도 시간이 할당되는 문제와 주파수 대역 또한 보내는

패킷이 단 하나여도 대역폭이 한정된다.


@ Random Access

- TDM, FDM 모두 감독하는 단말이 존재해야 하는 문제가 있다. 호스트가 늘어나면 재설정 해야 한다는 불편 또한 존재한다.

- 또한 충돌이라는 사건이 발생할 수 있다. 간섭과 상쇄라는 개념과 연관되는데, 이를 보내는 신호와 해당 라인에서 흐르고 있는 신호를 비교함으로써 충돌여부를 판정할 수 있을 때,  ALOHA, CSMA, CSMA/CD 가 있다.


@ Slotted ALOHA

- 모든 패킷은 동일한 크기를 갖는다.

- 모두 동일한 시간대역을 공유한다. (시간 분할이 모두 동일하다.)

- 충돌 발생 시 이를 즉시 감지할 수 있다.

- 충돌이 발생했음을 감지했을 때는 두 발신 호스트가 동시에 패킷을 송신했을 때인데, 두 호스트가 바로 다음 시간대역에 발신하게 되면 다시 충돌이 발생한다. 곧, 두 호스트는 각각 임의의 난수 알고리즘을 통해 재발신 순간을 결정하게 된다. 이로써 충돌의 확률을 낮추는 방법이다.

- 하지만, 이 경우 노는 망이 생길 수 있고, 망이 서로 계속 겹쳐 금방 보낼 수 있는 작업이 많이 지연될 수 있다. 또한 모든 단말의 동기화가 이뤄져야 한다.

prev 1 2 3 4 5 ··· 23 next