태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
 

 
블로그 이미지
[www.netrain.co.kr]에서 네트워크/보안을 공부하시는 분들을 위해 서비스를 제공하는 블로그입니다 승진아빠
Follow silpir  on Twitter


 
 

'VLAN'이 뭐지?

네트워크 기초 | 2010.04.30 18:06 | Posted by 승진아빠


오늘은 갈등하고 갈등하다 오전에 공지 하나를 올렸습니다. [취업연계 프로젝트]와 관련된 공지였어요. 보통 교육센터들이 돈없고 어려운 미취업자들 두번 죽이려고 취업지원 과정을 오픈합니다.

저도 그렇게 되어서는 안되잖아요. 그래서, 갈등을 하다 다음과 같이 결정을 했습니다. CCNA 40만원, CCNP 120만원, R&S CCIE 250만원, SP CCIE 160만원... 물론 겹치는 과정도 있지만, 총 620만원 과정을 500만원에 강의해주고, 제 인맥 다 동원해서 취업지원 해 주자! 라는 생각이요.

부지런히 뛰어다니면 안되는 일이 있겠습니까? 한달에 1-2명 추천의뢰가 들어온다고 봤을 때, 6개월이면 10명 정도 의뢰가 들어오겠죠. 그 중 취업율을 50%라 예상하고, 부지런히 움직이면 10명 정도 취업이 가능하리라 생각 했습니다. 내년 2월까지 취업을 시키지 못한다면 책임지고 150만원 정도는 돌려줘야겠지요.

물론, 몇몇 분들의 요청에 의해 시작을 결심한거지만 취업연계라는 말... 책임져야지요.

수강생 분들과 교육센터가 서로 VLAN이 달라 통신이 안된다면 문제가 있잖아요. 그쵸?
VLAN이 뭐냐구요? 자 VLAN을 며칠에 걸쳐서 배워보도록 하겠습니다.

※ 왜 Ended 문제를 풀어주지 않느냐고 따지지 마세요. Ended 문제를 보면 VLAN과 관련된 내용이 많은데 메일링 내용이 겹칠까봐 VLAN을 차라리 설명드리자고 결정한겁니다.

오늘은 VLAN에 대한 개념만 설명드리도록 하겠습니다.

VLAN은 아주 간단합니다.1개의 물리적인 Switch를 마치 여러개의 Switch가 존재하는 것처럼 사용하는 것입니다. 그 이상도 그 이하도 없는 아주 단순한 개념입니다.

다음을 한번 보실까요?

1. PC는 자신의 VLAN을 알지 못합니다. VLAN은 Switch가 아는 정보니까요.
   그래서, 다음과 같이 일반 Frame을 전송합니다.



2. Switch는 Frame에 유입된 Interface에 설정되어 있는 VLAN 정보를 붙입니다.



3. Frame이 외부로 나가려고 하는군요. Interface는 내보려는 Frame에 붙어 있는 VLAN 정보와 자신의 Interface에 설정된 VLAN 정보를 비교합니다.



4. VLAN 정보가 동일하면 Frame에 붙어 있는 VLAN 정보는 떼어버리고 Frame만 전송을 합니다. VLAN 정보를 일반 PC는 이해할 수 없을테니까요. ^^



5. 만일 VLAN 정보가 다르면 해당 Interface로 Frame을 내보지 않습니다.



별거 없죠? 이게 VLAN 전부 다랍니다. 서로 다른 VLAN에 연결되어 있는 PC는 상호간에 통신이 안되겠죠? 마치 물리적으로 분리되어 있는 것과 같이요. 많은 분들이 VLAN에 대해 어렵게 생각하시던데, 제가 설명드린 이상도 이하도 아닙니다.

내일은 위와 같이 동작하는 VLAN의 맹점을 생각해보고, 그것을 극복하기 위해 어떤 기술들이 나왔는지 확인해 보도록 하겠습니다.

오늘은 바빠서 메일링을 아침에 못보낸 것이 아니라, 어제 새벽에 보냈다는 착각을 해서 지금 보내게 되었습니다. ^^ 좀 늦었어도 애교로 바주세요.

[RTP] Real-time Transport Protocol의 이해

네트워크 기초 | 2010.04.28 22:33 | Posted by 승진아빠


어렵고 복잡한 이야기는 생략하도록 하겠습니다. RTP는 이름 그대로 실시간으로 전송되는 데이터에 대한 정보를 담고 있는 Protocol입니다. 기본 12 byte로 되어 있으며 Audio나 Video 등 multimedia를 전송하는 경우 사용합니다. 왜 필요할까요?

보통 Multimedia 데이터를 전송하는 경우 UDP를 사용한다고 어제 말씀 드렸습니다. 이 UDP라는 놈이 좀 문제입니다. 첫째 어제 말씀드렸던 것과 같이 Sequence Number가 없어요. 순서가 뒤죽박죽 들어오면 어느 데이터가 먼저 보낸진 것인지 알 수가 없다는 말입니다.

그래서, RTP에는 Sequence Number이라는 것과 Timestamp를 사용합니다.

TCP는 Sequence Number를 어떻게 증가시킨다고 말씀드렸죠? 보낸 데이터의 양만큼 증가를 시켜서 전체 Buffer에서 어느 위치에 속하는지를 알려준다고 설명드렸었습니다. 그런데, RTP의 Sequence Number는 1씩 증가를 합니다. 편하군요.
 
그런데, 문제는 전에 보낸 데이터가 나중에 들어왔을때 재조합을 해야 하는데 그게 어려워요. 생각을 해보세요. 10칸짜리 화물차가 있습니다. 한번 싫은 물건은 다시 내렸다 실는건 불가능하다는군요. 화물차에 실어야 하는 내용물은 '석탄', '옷', '음료수', '과자'인데 순서대로 실어야 하고 각각 몇칸씩 차지하는지 모릅니다.

이런 경우 차례대로 들어오면 상관이 없지만, 음료수가 먼저 들어오면 운에 맡기는 수밖에 없겠죠!

그래서, TCP는 Sequence Number를 이용해서 자신이 어느위치에 들어가야 하는지 알려주도록 설계가 되었는데 RTP는 그렇게 하지를 않은겁니다. 어떻게 해야 할까요? 할 수 없죠. 추가 정보를 넣는 수 밖에요. ^^

그래서 Timestamp 정보를 같이 보내줍니다.  보낸 시간 정보를 주는거죠. 시간정보를 주면 어떻게 아냐구요? 아날로그 신호를 디지털 신호로 변조할 때, 전화같은 경우 1초에 8,000개의 Sampling을 하게 됩니다. 나이퀴스트라는 사람이 만든 법칙이라고 하죠. Max Hz의 2배 이상의 Sampling을 하면 원음에 가까이 복원가능하다는 이론................. 보통 유선전화에서 전달 되는 신호가 300Hz ~ 3400Hz이기 때문에 8000개면 충분하데요. ^^

8,000개의 Sample을 하나하나씩 데이터로 만드는데 1개당 1byte 값을 가지게 됩니다. 다 합치면 8000 byte 겠군요. 1초에 8,000 byte를 전송하려면 8000 X 8 = 64Kbps의 속도가 필요하겠네요.

하여튼 이 8,000개의 Data를 하나씩 전송시키려고 하니 무슨 문제가 발생합니까? 1byte를 보내기 위해 L4 Header, L3 Header, L2 Header를 추가하면... 휴~ 배보다 배꼽이 더 크겠군요. 그래서, IPT에서는 뭉터기로 보내죠. Default로 160개의 Sample을 한꺼번에 던집니다... 그러기 위해서는 1초에 50개의 Packet을 만들어서 던져야 겠네요. 그럼, 데이터들의 Delay는 20ms를 유지해야 정상적으로 들리겠군요.

참 힘들게 삽니다.. 그쵸? ^^

다시 조금 위로 올라가면 1초에 8,000개의 Sample을 만들어서 던지려면 Sample과 Sample 사이에는 얼마의 Delay가 발생할까요? 1초/8,000 = 125us 군요. 이 정보를 싫어 보냄으로써 몇번째 Sample인지 알려주는 방식... 그게 RTP라는 놈입니다. 무서운 놈이죠! 가까이 하고 싶지 않지만, 요즘 하도 UC가 대세라... 담달부터 저도 좀 더 깊숙히 공부하려구요.

UDP가 이 문제만 있을까요? 아니죠. Session을 관리하지 않기 때문에 마구잡이로 들어오면 이놈이 그놈 다음건지, 저놈은 이놈이랑 같은 서비스인지... 정신 하나도 없답니다. 그래서, 또 RTP의 도움을 받는군요.

SSRC와 CSRC 등을 가지고 Source identifier를 판단하고 Session을 관리합니다. 마치 Session Layer에서 Session ID를 통해 관리하는 것과 비슷하군요.

UDP와 RTP 참 힘들게 살죠? ^^ 그래도 상호간 서로 부족한 부분을 메워가며 잘 살고 있잖아요. TCP처럼 혼자 다 해결하려는 놈들...... 나중에 고생할겁니다. 우리도 서로 부족한 부분을 서로가 메워가며 살아가기로 해요.

이상.... 이경태였습니다. ^^

TCP와 UDP는 무슨 차이가 있나요?

네트워크 기초 | 2010.04.28 08:08 | Posted by 승진아빠

SP CCIE 과정이 생각보다 호응이 좋더군요. 저희 교육센터에서는 CCNA도 4분이상 모시고 강의한 적이 없는데, 벌써 SP CCIE 과정을 신청하신 분이 3분, 갈등중인 분이 2분이세요. 노동부 신고 들어가지 않으려고 했는데, 한분이 부탁하셔서 노동부 신고과정으로 변경했거든요. 즉, 160만원에 50여만원 환급받으시는거죠.

계약직으로 능력개발카드가 있으신 분들은 100만원 환급받도록 했고요. 강의의 질을 높이기 위해 최대 인원은 6명까지만 받을 생각입니다.  수강생 분들이 너무 많으면 진도 빼기도 힘들고, 제가 다 챙겨드리기도 힘들거든요. ^^

자, 그럼 진도 나가볼까요? 많은 분들이 다 아시는 내용이겠지만, TCP와 UDP는 TCP/IP의 대표적인 Transport Layer Protocol입니다. 그려면, TCP하고 UDP는 무슨 차이가 있나요? 무엇인가 차이가 있으니까 다른 이름을 붙이지 않았겠습니까!

오늘은 그 차이를 좀 설명 드리려고 합니다.

1. Connection Oriented Protocol vs. Connectionless Protocol

TCP는 3-way handshaking을 통하여 Session을 수립 후에 통신을 하는 Connection Oriented (연결지향형) Protocol 입니다. 그에 반해 UDP는 상대방이 받던 받지 못하던 무작정 데이터를 전송하는 Connectionless (비연결형) Protocol 입니다. 그럼, 언제 UDP를 사용할까요?

예를 들어 DNS 같은 경우 예로 보세요. 누군가 DNS 서비스를 요청할 때마다 TCP처럼 Session을 맺고 통신을 한다면 속도도 느리고, 서버 리소스도 엄청나게 소모될 겁니다. 그런가 하면 NMS(Network Management Server)가 5분에 한번씩 장비 상태를 점검하기 위해 정보를 읽어오는데 수백, 수천대의 장비와 Session을 맺어야 한다면 이것도 마찬가지로 문제가 있겠죠? 그래서, SNMP(Simple Network Management Protocol)는 UDP를 사용하는 Protocol입니다.

2. Reliable vs. Best Effort

TCP는 데이터 전송에 문제가 발생했을 경우, 재전송 요청 등을 통해서 데이터가 정확하게 전송되는 것을 보장하는 Protocol인 반면, UDP는 에러가 생기든 말든... 보내는 놈이나 받는 놈이나 신경을 쓰지 않는 Protocol입니다. 이런, 이따위 Protocol을 어디에 쓸까요?

재전송을 하면 안되는 서비스들이 있습니다. 대표적인 예가 바로 Real-Time Protocol입니다. 전화를 하고 있다고 가정해 보세요. '여''보''세''요'라는 4개의 데이터를 전송했는데, '세'를 못 받았다고 다시 보내달라고 하면 '여보요세'가 될겁니다. 그냥 '여보X요'로 전달하는게 더 낫겠죠?

그런가 하면 Multicast 서비스가 UDP를 사용합니다. 1:N으로 통신하는 방식에서 한놈이 데이터를 받지 못했다고 재전송 요청을 한다고 생각해보세요. 제대로 받은 놈들도 해당 데이터를 다시 받아서 처리해야 한다는 문제가 발생할 수 있습니다. 그래서 UDP를 사용하는거죠!

그리고, UDP는 상대방이 잘 받았는지 못 받았는지 신경을 쓰지 않으니 Ack가 별도로 필요없겠죠? ^^

3. Sequence Number vs. Non-Sequencing

TCP는 데이터 유실 등을 확인하기 위하여 데이터마다 Sequence Number라는 번호를 붙여서 전송을 합니다. 하지만, UDP는 데이터 유실에 관심이 없기 때문에 Sequence Number가 없는 Non-Sequencing Protocol 입니다. 그럼, 데이터를 전송할 때 상이한 경로로 전송되서 나중에 보낸 데이터가 먼저 도착하게 되면 어떻게 되나요? 예를 들어 '여''보''세''요'를 전송했는데 '여''세''보''요' 순으로 도착을 한겁니다.

이렇게 데이터 전송 순서를 알아야 하는 서비스는 RTP(Real-time Protocol)과 같은 Sequence Number 기능을 가지고 있는 기술과 함께 쓰이거나 어플리케이션 수준에서 Sequencing을 수행합니다.
 
4. Half-duplex vs. Full-duplex

Layer 2에서의 duplex가 아니구요, 한개의 Port를 이용하여 [upload/download]가 가능한가에 대한 부분입니다. 원칙적으로 UDP는 Half-duplex이고 TCP는 Full-duplex 입니다. 하지만, UDP도 어플리케이션 개발 방식에 따라 Full-duplex 방식으로도 설계가 가능합니다. 그래서, TCP를 Full-dulpex 방식이라고 이야기하지만, UDP를 Half-duplex 또느 Full-duplex 방식이라고 정의하지는 않습니다.

5. Control vs. Don't care

TCP는 Error-Contol, Flow-Control 등 이것저것 제어를 많이 합니다. 하지만, UDP는 그런건 그냥 짜증스럽고 귀잖을 뿐입니다. 세상 참 편하게 사는 놈이죠! 저는 언제쯤 UDP같이 살 수 있을까요? ^^

오늘은 간단하게 UDP와 TCP의 차이점에 대해서 학습하였습니다. 내일은 RTP(Real-time Protocol)에 대해 간단하게 설명을 드리고, 드디어, 스위치 및 라우터 기술을 학습하도록 하겠습니다.
그리고, 금요일 저녁 19:00 ~ 20:00에는 실시간 온라인 강의를 시험운영해 보려고 합니다. 금요일 카페나 홈페이지 공지를 꼭 확인해 주세요.

[Sliding Window] 개념 이해하기

네트워크 기초 | 2010.04.26 14:49 | Posted by 승진아빠

안녕하세요. 이경태입니다.
지난주는 정말 강행군을 했습니다. 체력의 한계를 느낄 수 있었지요. 군대에서 행군하는 심정으로 매일 살고 있는데, 지난주는 유격을 받은 주라고 할까요?

○ 강의 : 월~금 (11시간), 토(14시간), 일(8시간)
○ 컨설팅 : 최종결과보고서 초안작성 (일일 4~5시간)
○ 출퇴근 등 이동시간 : 3시간
○ 식사/세면 등 : 1시간

밥먹는 시간도 아까워 사발면에 김밥한줄로 해결했는데... 그래도, 아직 할 일이 많이 남았네요. ^^
그래도, 금주부터는 메일링 쓸 2-3시간은 여유가 있는거 같네요. 여러분과 자주 뵐 수 있을 것 같습니다.

자~ 오늘도 주저리주러리 떠들며 좀 늦었지만, 월요일 메일링을 시작합니다.
Sliding Window... 오늘 이놈을 설명해 보려 합니다.

우리가 독거노인 분들의 복지를 위해 연탄을 나르러 갔다고 생각해 보시죠. 사람들이 하나씩 하나씩 들고 나르면 너무 시간이 오래 걸리기 때문에 보통 일정한 간격으로 줄을 서서 연탄을 포워딩합니다. 그런데, 쉬지 않고 계속한다고 일을 한다면 얼마가지 않아 모두 쓰러지고 말겁니다. 그래서, 팀장이 '200장씩 나르고 잠시 쉬자!' 라고 제안을 합니다.

그럼, 처음 연탄을 던지는 사람은 200장을 한번에 던지고, 잠시 쉬겠죠. 그리고, 팀장이 '자, 다시 시작!'이라고 하면, 200장을 다시 던지게 될겁니다. 그런데, 중간에 사람들이 지쳐서 자꾸 연탄을 놓쳐 연탄이 깨지는 겁니다. 그런 상태에서 계속 200장을 한꺼번에 던지는 방식을 유지한다면 안되겠죠? 그래서, 팀장이 다시 제안을 합니다. '이제 100장씩 옮기고 쉬자!'라구요. 그럼, 100장을 던지고 팀장이 계속하자고 할 때까지 기다리겠네요.

체력이 회복되면 150장으로 조금 늘려서 던져보고, 다시 체력이 떨어지면 조금 줄여서 던져보고 하면서 양을 조절하겠죠! 자, 상식으로 생각해 보죠! 100장을 던지고 쉬는 것 보다는 200장을 던지고 쉬는게 쉬는 횟수가 적기 때문에 전송 속도가 빨라지겠죠. 하지만, 200장을 한번에 던져서 문제가 발생한다면 적게 던지는 것보다 비효율적일겁니다.

패킷도 마찬가지입니다. 중간에 Traffic이 몰리는 구간이 있어서 데이터가 계속 Drop된다면 천천히 보내서 Drop이 발생하지 않도록 만드는 것이 훨씬 낫겠죠. 한번에 연탄을 날을 수 있는 양을 우리는 Window라고 부르고, 그것을 늘렸다 줄였다 하는 것을 Sliding Window라고 합니다. 그리고, 이 Sliding Window는 전송속도를 제어할 수 있겠군요. 그것을 멋지게 'Flow-Control'이라고 부르는 것이랍니다.

초창기에는 Flow-Contro을 위해 데이터를 1개 보내고 Ack가 오면 다음 데이터를 보내는 방식을 사용했습니다. Data-Link의 Flow-Control 방식으로 'Stop & Wait'라고 불리는 방식이죠. 그런데, 속도가 너무 느려서 여러개를 한꺼번에 보내는 방식을 만들어 냅니다. 즉, Window를 이용하게 된거죠.

상대방의 Window 양만큼 한꺼번에 전송시키니 속도는 향상되었으나, 초창기 Window는 size가 고정식(Fixeed)이였고, 다량의 데이터를 한번에 전송시킬 뿐이였지, 역시 데이터 한개마다 Ack를 보내는 방식을 벗어나지 못했습니다. 

그러다 '뭐하러 데이터를 받을 때마다 Ack를 던지나... 그냥 Window size만큼 다 받으면 다 받았다고 Ack를 보내고, 데이터를 못받으면 해당 데이터를 다시 보내달라고 Ack를 전송하면 좋지 않을까?' 라는 생각을 하게 되고, 그래서, Sliding Window가 나오게 됩니다. 초창기 Sliding Window도 역시 고정된 Size라는 한계를 가지고 있었습니다. 윈도우OS는 8K를 유지했었죠!

그러다가, Window size를 가변적으로 하면 속도를 제어하기 편하겠군! 항상 똑똑한 놈들이 세상을 변화시키죠. 우리는 그 놈들 때문에 공부하느라 머리 아픈거구요. 그래서, 오늘날의 Flow-control을 하는 Silding window가 나오게 되었고 지금도 계속 연구/발전중이죠......


■ 간만에 여유가 생겨 쓰는 [경태 생각]!!

똑똑한 놈들은 세상을 편하게만 만드려고 노력합니다. 자신의 노력들이 얼마나 많은 사람들에게 피해를 주는지 관심이 없습니다.

세상에 이해가 가지 않는 것들이 몇가지 있죠!

1. 돈 : 종이에 숫자 써 놓고 그것을 서로 가지겠다고 피터지게 싸우죠. 생각해보면 좀 웃기지 않습니까? ^^ 똑같이 그리면 위조래요. 왜요?

2. 부동산 : 처음에 어떤 힘 센 놈이 자기 마음대로 여기서 여기까지는 내땅이야.. 라고 했을겁니다. 어떻게 땅주인이 있을 수가 있고, 왜 땅을 돈주고 사야 하나요? 그리고, 지구는 사람이 주인 맞나요?

3. 아파트 : 땅에 20층건물 지어놓고 층당 돈을 받는게 맞나요? 일반주택보다 '1/20'이 되어야 하는게 맞지 않나요? 그럼 왜 연립주택은 1/N을 하는거죠?

4. 산업발전 : 왜 산업발전을 하는거죠? 발전해서 뭐하려구요? 편하게 잘 살려고 하는거죠... 근데 누가요? ^^

우리도 Silding Window 처럼 Flow-Control을 했으면 좋겠습니다. 통신경로중 한군데 문제가 생기면 모두 함께 Window size를 줄이면서 모든 PC에 동등하게 적용되잖아요. QoS 처럼 잘난 놈 먼저 보내주는게 아니라는 뜻입니다. 나라가 어려우면 모두가 허리 졸리매면서 Window size를 줄이고, 나라가 좀 여유있으면 모두가 Window sizw를 높여 잘사는 세상......

언젠가는 오겠죠!
내일 뵙도록 하겠습니다. ^^

Window size [윈도우 사이즈]의 개념

네트워크 기초 | 2010.04.21 13:10 | Posted by 승진아빠


금주는 너무 정신이 없어서 화, 목, 토요일에만 메일링이 나갈 예정이라고 지난주에 메일을 보내드렸는데 약 30%가 전달이 안되었더군요. 제목에 [공지사항]이라고 써서 Filtering이 되었나 봅니다. ^^

어제 저녁은 피곤한 상태에서 2시에 퇴근하면서 맥주 캔 하나를 마셨더니, 정신이 오락가락 하더군요. 그래서, 메일링 작성을 못했습니다.

아! 시험센터 금주에 홈페이지에 '시험센터 바로가기'를 추가해서 차주부터 진행할 예정입니다. 현재는 VUE 시험센터만 운영되며, 프로메트릭은 추후에 제공될 계획에 있습니다. 저녁 9시에도 시험칠 수 있는 시험센터, 주말에도 시험칠 수 있는 시험센터를 만들도록 하겠습니다.

항상 프로젝트 마무리단계에서는 정신이 없죠! 하루에도 추가로 요청하는 자료가 막 쏟아집니다. 고객이 원하시는거냐구요? 아니요... 고객이 어떤 자료를 원하실지 모르니 프로젝트 PM이 요구하는 겁니다. 고객이 요구한 후에 문서가 만들어지면 프로답지 않잖아요. 고객이 요청했을 때, 그러실줄 알고 이미 만들어 두었습니다.... 얼마나 프로페셔널해 보이나요! 그래서, 정신이 없어요. ^^

요즘 11시간 강의하고 새벽에 프로젝트 보고서를 만들고 있는데, 오늘 강의하다가 다리에 쥐가 나서 휘청~ 얼마나 창피하던지.... 차라리 쓰러질걸 그랬어요. 그러면 조금 더 멋졌을지 모르는데...

오늘은 TCP에서 Window size라는 것에 대해서 학습해 보도록 하겠습니다. 직역하면 [창문 크기]라는군요. 원리는 간단합니다. Window size는 한번에 받을 수 있는 데이터의 양이랍니다. 통신을 할 때 상대방에게 자신의 Windows size를 알려주면, 상대방은 그만큼의 양을 한번에 전송을 하고 상대방이 다 처리했는지 확인 후에 다음 데이터를 전송하는 것이지요. 쉽죠?

TCP Header에 Window size라는 Field가 있는데, 전체 16bit로 되어 있습니다. 즉 2^16까지 표시할 수 있고 단위는 Byte가 됩니다. 65535byte가 최대 표시할 수 있는 용량이겠군요. 즉, Window size의 최대 크기는 64Kbyte가 된다고 생각하시면 됩니다.

하지만, 요즘 1Gbps, 10Gbps 속도가 향상되고 있고, 전송할 데이터의 양도 많아지고 있죠! 그래서, 이 최대값을 변경할 수 있도록 만들었습니다. 그렇다고 TCP Header는 Fixed Header를 가지고 있기 때문에 16bit를 변경할 수 없습니다. 그럼 어떻게 Window size를 변경할 수 있을까요? 뒤의 자리는 무시해 버리는 방식을 사용합니다. 예를 들어 16bit 중 마지막 1bit를 무시한다고 하면 bit를 하나씩 shift 시켜서 2^17 까지 표시할 수 있겠죠.

하지만, 아직까지는 64Kbyte가 최대값이라고 생각하시는게 좋습니다. 그게 기본이니까요.

Default Window size는 시스템마다 다른데 Window Server 2003 같은 경우는 1Mbps 보다 저속에서는 8K, 1-100Mbps에서는 17K, 100Mbps 이상에서는 64K의 Window size를 사용합니다. 물론 1Gbps 이상이 되면 shift를 시켜 더 크게 만들고요.

기억하여야 하는 것은 TCP Header에 들어있는 Window size는 데이터를 받는 PC의 Window size라는 겁니다.  상대방은 그 정보를 보고 나서 Window size만큼 한번에 전송 후에 ACK를 기다리게 되는 것이죠. 그리고, Window size는 고정되어 있지 않습니다. 문제없이 전송이 되면 Window size를 늘리고, 중간에 데이터가 유실되거나 문제가 발생하면 Window size를 줄입니다.

즉, 통신이 잘되면 한번에 많은 데이터를 전송할 수 있는 것이고, 통신에 문제가 생기면 한번에 적은 양의 데이터를 전송하게 되죠. 이것을 우리는 'Sliding Window'라고 합니다.

오늘도 할일이 많아 많은 내용을 메일링에 담지 못하겠군요. 점심시간에 주절주절 써서 보내드립니다.

내일은 메일링을 쉬고, 모레는 CCIE Ended 2문제를 풀어드리고, 금주에 프로젝트가 어느정도 정리되면 일요일에 Sliding Window에 대해 자세하게 설명을 드리도록 하겠습니다.

행복한 오후 되세요. ^^

CCIE Open-Ended 과연 어려운가? (4)

네트워크 심화 | 2010.04.16 12:15 | Posted by 승진아빠

벌써 Open-Ended 4번째 시간이군요. 좀 만만해 지셨나요? 더 자신이 없어지셨다고요? 이론은 아무것도 아닌데 영아에 자신이 없으신가 보군요. 계속 영작하는 연습을 해보세요.

예를 들면 하루에 2-3개씩 단어를 잡으세요.

단어 : Router, VLAN, Packet

그리고, 그걸 한글로 설명할 수 있도록 요약하시고 영작을 해보세요. '어떻게 설명하는 것이 좋을까...'라고 출퇴근 길에 머리속으로 계속 생각하시다 보면 CCIE에 나오는 시험 정도는 영작하실 수 있을겁니다. 못한다고 하면 평생 못하는거고, 할 수 있다고 생각하면 실패하더라도 한번 해보기라도 하는거 아니겠어요? ^^

차주부터는 시험센터가 운영될 듯 합니다. 저녁 9시에도 시험볼 수 있는 학원, 주말에도 시험볼 수 있는 학원이 되겠다고 메일링 초반에 드렸던 약속을 지키겠습니다. 업무중에 눈치보면서 시험치러 오시지 마시고, 야간이나 주말에 편하게 오셔서 시험보고 가세요. 크지 않은 학원에 6대의 Test PC가 있으니까 왠만하면 자리가 있을겁니다.

급한 사정에 의해 당일 등록하시더라도 시험이 가능하도록 해드릴 생각이지만, 잘못하면 오래 기다리셔야 합니다. 최소 하루전에는 등록해 주시고요. 참고로 시험센터는 VUE 입니다. VUE에서 시험보는 과정만 신청해주세요. ^^

그럼, 오늘도 메일링을 시작해 볼까요?

Q1. What circumstances use the tcp intercept?

TCP intercept가 뭐죠?

답부터 말씀드리면 TCP intercept 기능은 DoS attack과 같은 TCP SYN flooding 공격으로 부터 서버를 보호하기 위한 기술입니다. 어떻게 보호하냐구요?

공격자가 서버를 공격하기 위해 TCP SYN packet을 보내면 서버는 당연히 SYN/ACK를 보내게 될 것입니다. 그런데, 마지막 ACK를 공격자가 보내지 않으면 서버는 Session이 완성될때까지 Memory 등 자원을 사용하며 ACK를 기다리게 되죠.

그런데, 이렇게 기다리는 Session이 많아지게 되면 서버의 자원이 Full 사용되어 정상적인 Session에게 할당할 자원이 부족하여 서비스 제공을 못하게 됩니다.

이때, TCP intercept 기능이 enable되어 있는 Router가 공격자와 서버 사이에 있는 경우, TCP 3-way handshaking 상황을 table에 기록하여 정상적으로 Session이 맺어지는지 모니터링을 합니다.

만일, 일정한 시간내에 정상적으로 Session이 완성되지 않는 경우에는 Session을 종료시켜 버리는 것이죠.

자! 그럼 어떻게 동작하는지 잠깐 살펴보도록 하겠습니다.

1. 공격자가 SYN packet을 서버로 전송합니다.

Router는 SYN 정보를 TCP intercept table에 등록한 후, 서버로 부터 ACK가 날아오는지 확인합니다.

2. 서버가 공격자에게 SYN/ACK packet을 전송합니다.

최초 SYN에 대해 ACK가 전달되었고, 새로운 SYN이 전달되었으므로 Router는 'Half-open connection' 상태가 됩니다. 그리고, 공격자로부터 ACK가 날어오는지 확인을 하게 되죠! 만일, ACK가 날아온다면 'Two half-connections'상태가 되어 문제없이 통신을 하게 되는 것이고, ACK가 날아오지 않는다면 Default로 30초간 기다렸다가 Session을 종료시킵니다. 간단하죠? ^^

보다 저 자세한 내용은 추후에 설명드리기로 하고 오늘은 개념만 설명드리도록 하겠습니다. ^^
이제는 답을 적어야죠!

The TCP intercept feature implements software to protect TCP servers from TCP SYN-flooding attacks, which are a type of denial-of-service attack

너무 길다고 생각이 드시면 [To protect TCP servers from TCP SYN-flooding attacks] 부분이 핵심입니다.


Q2. What mode violation is still permitted to forward traffic?

CCNA 문제군요. [violation]은 Port-security를 적용할 때 많이 사용하는 Option이죠? 실제로 Violation은 Port-security외에도 장비에 어떠한 정책을 수립할 때, 함께 사용됩니다. 수립된 정책을 위반했을 때 어떤 동작으로 취하라는 것을 의미하는 것이죠.

예를 들어 Port-security를 설정하여 특정 MAC-address만 통신이 가능하도록 만들었는데, 허락되지 않은 MAC-address가 유입될 때 동작방법을 명시하게 되는 것입니다. Default mode는 'Shutdown' 상태로 Port를 사용하지 못하도록 차단시켜 버리는 거구요. 그럼, 다른 mode는 어떤게 있나요?

문제를 보면 Port-security 정책을 수립할 때를 묻는것 같군요.

Port-security에서 Violation mode는 다음과 같이 3가지가 있습니다. 

1. Protect
[Port-security maximum] command에 의해 설정된 최대 등록가능한 MAC address 초과시, Port-security table에 등록되지 않은 Frame은 Drop시키는 Mode로 table에 등록된 사용자는 통신이 가능한 mode

2. Restrict
Protect mode와 동일하게 동작하나, Protect mode는 Log를 남기지 않는 반면 Restrict mode는 차단된 Frame에 대한 Log를 기록하여 Log Server에게 전송하며, 차단된 Frame Count를 table에 등록하여 잘못된 Frame이 얼마나 많은지 확인 가능한 mode

3. Shutdown
Port-security table에 등록되어 있지 않은 Frame 유입시 Port를 err-disable 상태로 만들어 Port를 더이상 사용하지 못하도록 하는 mode

쉽죠? 답은 mode를 물었으니 다음과 같이 적으면 되겠군요. 철자가 문제겠군요!

Protect mode and 2. Restrict mode

오늘은 메일링이 많이 늦었죠? 오늘 저녁까지 OO증권 컨설팅 제안서를 만들어야 해서요. 오전까지 달라고 해서 부지런히 밤세 만들었더니, 저녁까지 달라네요. 그래서 메일링을 쓰고 있는 것입니다. 또 작업 들어가야죠.

오늘 하루 힘차게 보내시고요, 내일 뵙도록 하겠습니다. 화이팅!!

CCIE Open-Ended 과연 어려운가? (3)

네트워크 심화 | 2010.04.15 09:42 | Posted by 승진아빠

안녕하세요. 이경태입니다. CCIE를 준비중이신 분들은 목, 금, 토요일이 기다려지시겠어요. 덤프를 사려니 비싸고, 샀어도 답이 맞는지 확신이 안서고..... 제가 몇주동안은 CCIE를 준비하시는 분들을 위해 Open-Ended와 Troubleshooting은 아무것도 아니다는걸 알려드리도록 하겠습니다.

CCIE 시험을 준비하지 않으시는 분들도 공부해 두시면 좋으실 겁니다. 그래도 CCIE 시험인데 시스코가 중요하지도 않은 이론을 가지고 문제를 내겠습니까! 나름대로 중요하니까 문제로 만든것이겠지요.

이번주는 컨설팅일 때문에 정신이 하도 없어서 바로 문제 풀이로 들어가도록 하겠습니다. ^^

Q1. CLASS-MAP match-any XXX. What's mean match-any?

CCNP 'ONT' 과정에 나오는 QoS 문제군요. 예전에는 주요 서비스의 품질 보장을 위하여 각 Flow마다 Bandwidth와 low latency를 보장해 주는 방법을 사용해 왔습니다. 그런데, 문제가 생겼습니다. 서비스를 보장해 주겠다고 하나의 Flow마다 10Kbps씩 할당을 해 주었더니, 서비스 수가 증가되어 Bandwidth가 부족하기 시작한거죠. 그래서, 사람들이 새로운 방식을 생각해 냅니다.

Flow마다 주지 말고 서비스마다 Bandwidth를 줘보자!

예를 들면 전체 Bandwidth의 30%는 HTTP 서비스를 위해 보장해 주는거죠. 이렇게 하려면 어떻게 해야하죠? 당연히 HTTP만 분류할 수 있어야 하죠? 이렇게 서비스를 보장해 주기 위해서는 해당 서비스 Packet을 분류해야 하는데 이렇때 사용하는 것이 class-map 입니다.

여기서 사용하는 명령어를 묻는 문제군요. 바로 [match-any]!!

class-map을 설정하는 방법은 다음과 같습니다.

class-map [match-all | match-any] class_name
    
match match_conditon_1
    
match match_conditon_2
    
match match_conditon_3
   .....

이 때 잘 보시면 Option으로 'match-all'과 'match-any'가 있는걸 확인하실 수 있으실 겁니다. 만일, Option을 명확하게 설정하지 않으면 'match-all'로 설정됩니다. 그럼 두개의 차이를 간단히 설명드리고 답을 알려드리도록 하겠습니다.

■ match-all

class-map 안에 있는 모든 match_condition 조건에 일치하여야 해당 class로 분류됩니다. 예를 한번 들어 볼까요?

class-map match-all [미인]
   match [이쁜 얼굴]
   match [작은 얼굴]
   match [달걀형]

이렇게 설정해 놓으면 [미인]이라는 class에는 [이쁜 얼굴], [작은 얼굴], [달걀형] 3가지 조건이 모두 만족되어야 들어갈 수 있는 것입니다. match [와이프] 이렇게 한줄 더 되어 설정되어 있으면 class는 둘중에 하나겠군요. [와이프]만 들어갈 수 있던지 [Empty]던지....^^

■ match-any

class-map 안에 있는 match-condition 조건중 하나만 일치하여도 해당 class로 분류됩니다. 위의 예를 이용해서 만들어 보시죠.

class-map match-any [미인]
   match [이쁜 얼굴]
   match [작은 얼굴]
   match [달걀형]

이제는 [미인]이라는 class에는 [이쁜 얼굴]이거나 [작은 얼굴]이거나 [달걀형]이면 누구나 class에 들어갈 수 있습니다. 무슨 문제가 있나요? 달걀형이면 누구나 들어갈 수 있으니 몸이 달걀형이어도 들어갈 수 있겠군요. 달걀형 얼굴이 아니라 달걀형이 조건이니까요. ^^

자! 그럼 답을 한번 알아볼까요? Cisco Site 내용이 정답이겠죠!

match-any - Only one of the match criteria listed in the class map is satisfied to match the network traffic class in the class map, typically match commands of the same type


Q2. in NAT, the inside local and inside global relationships between and describe its role?

NAT는 Network Address Translation으로 Source IP address를 변경하여 전송할 때 사용을 합니다. 그럼, 왜 IP address를 변경할까요? Source IP address를 변경하면 Spoofing 공격이잖아요! NAT를 하는 경우는 매우 다양한 경우가 있지만 대표적으로 두가지 경우가 있습니다.

■ Case 1. Internet 사용 시

사설 IP address는 누구나 사용할 수 있기 때문에 '10.0.0.0/8'를 그림과 같이 Company A와 Company B가 사용을 하고 있다고 가정해 보시죠. 인터넷망에서 목적지가 '10.0.0.1'인 Packet이 전달되었을 때, ISP Router는 이 Packet을 Company A로 보내야 하는지 Company B로 보내야 하는지 알 수가 없을 겁니다.
 


그럼 어떻게 해야 할까요? Company A와 Company B는 인터넷망을 사용하기 위해서는 공인 IP address를 사용해야 할 것입니다. 즉, 회사 내부에서는 사설 IP address를 인터넷망에서는 공인 IP address를 사용하여야 한다는 이야기죠. 이런 경우 사설망의 Packet이 인터넷망으로 전달되면서 Source IP address가 공인 IP address로 변경되어야 하는데, 이런 경우 사용하는 기술이 'NAT'라는 기술입니다.

■ Case 2. 대외망 연결 시

만일 사설 IP address '10.0.0.0/8'를 사용하는 두 회사간에 업무협조를 위하여 전용회선으로 연결을 한다고 가정해 보시죠. 그럼 다음 그림과 같은 상황이 발생하게 될 것입니다.



Company B의 Router는 '10.0.0.0/8' Network이 자신의 Network이기 때문에 Company B로 전달하지 않을 것이며, 망일 Static으로 '10.1.1.0/24'에 대해 설정을 해서 Company B로 보냈다고 하더라도, Company A에서 Packet을 받은 PC가 응답 Packet을 보낼 때, Company A 내에 있는 10.1.1.1로 보내게 되어 상호간 통신이 되지 않을 것입니다.

그럼, 어떻게 해야 하나요? 예, 인터넷은 Packet이 나갈 때 NAT를 했지만, 이번 경우는 각 회사에서 Packet이 들어올 때 NAT를 해줘야겠지요. 그건 이론이고요 일반적으로 두 회사중 '을'입장인 회사가 들어오고 나갈 때 다 NAT를 수행합니다. '갑'은 장비설정을 최소화하고 싶어하거든요. 그래야 문제가 생겨도 '너희 문제다. 우리는 설정변경한 것이 없다' 라고 말할 수 있을테니까요. ^^

자, 문제로 돌아와서 우리가 NAT를 사용하는데 'inside local'과 'inside global'에 대한 정의와 그 연관관계를 설명하라고 하는군요. 저게 뭐냐구요? 간단합니다. 다음 그림을 보시죠!



인터페이스에 먼저 Inside와 Outside를 설정합니다. 그러면 위와 같이 어느쪽이 Inside이고 어느쪽이 Outside인지 구분이 되겠죠? 그 다음 inside에 있는 장비의 주소가 Local에서 사용하는 주소가 Inside local address이고, Global에서 사용하는 주소가 Inside global address가 됩니다.

그런가 하면 Outside에 있는 장비가 Local에서 사용하는 주소는 Outside local address, Global에서 사용하는 주소는 Outside global address가 되는 것이죠! 별거 아니군요. ^^

그럼 답을 풀어야죠.

이번에는 시스코 공인교재에 있는 말을 가져다 쓰겠습니다. CCNA Press에 있는 정의입니다.

Inside local : the actual IP address assigned to a host in the private enterprise network
Inside global : the IP address to use to represent the inside host as the packet is sent through the outside network
inside local and inside global relationships : A NAT changes the source IP address of a packet sent by an inside host from an inside local address to an inside global address as the pascket goes from the inside to the outside network.

'TCP 3-way Handshaking' 동작원리!

네트워크 기초 | 2010.04.14 08:51 | Posted by 승진아빠

오늘도 벌써 아침 7시 51분이군요. 뜬 눈으로 지새우는 밤이 많아지는 요즘... 어제가 오늘인지, 오늘이 어제인지 헷갈리고 있습니다. 오늘 아침에 회의해야 할 내용은 50%로 만들지 못했는데 시간은 계속 흘러만 가는군요. 언제 이 생활에서 탈피해 자유로운 영혼이 될 수 있을까요? ^^

오늘은 간단히 'TCP 3-way Handshaking'하는 순간의 Packet을 잡아 내용을 확인해 보도록 하겠습니다.
자~ 첫번째 Packet 입니다.

■ [SYN] Packet의 구조



하나씩 보도록 할까요? ^^
Source Port는 58122이고, Destination Port는 80이군요. 누군가 Web-server에 접근하려나 봅니다. 그리고, 'Sequence number = 0'이란게 있네요. Layer 4는 상호간에 데이터가 잘 전송됐는지 확인하는 일을 한다고 했었죠? PC1이 PC2에게 데이터를 3개 보냈는데 중간에 Router가 PC2로 가는 경로를 여러개 알고 있어서 Load balancing을 했다고 가정해보죠. 3개의 데이터가 모두 다른 경로로 전달이 된겁니다.

그런데, 경로 중 하나가 Traffic이 많아서 두번째 데이터가 전송중에 Drop되어 버렸습니다. 그러면, 1, 3번이 PC2에 도착했겠죠. PC2는 두번째 데이터를 다시 받아야할텐데, PC2는 자기가 못받은 데이터가 무엇인지 어떻게 알까요? 알수가 없죠! 그래서, 그것을 알 수 있도록 데이터를 보낼 때 번호를 매겨서 보내도록 만들었습니다. 그것이 Sequence number(이하 'Seq#) 랍니다.

처음 TCP를 만든 사람은 보안 이슈 때문에 초기 Seq#를 랜덤하게 생성하도록 했는데, HTTP 서비스 같은 경우는 일반적으로 랜덤하게 생성하지 않고 '0'번부터 시작을 합니다. Web-Server의 부하를 걱정해서 그렇게 하지 않았나 싶네요. ^^

다음에는 Header Length가 있군요. TCP는 기본으로 20byte의 Header size를 가지고 있지만, 추가 정보를 전달하기 위해 Option을 사용하는 경우가 있습니다. 그런데, 보내는 놈은 추가 Option을 달아서 보낸다고 해도 받는 놈은 Option이 있는지 없는지 알 수가 없겠죠? 그래서, Header의 길이를 알려줌으로서 추가 Option이 있는지 없는지 여부를 전달하는 겁니다. 기본이 20byte인데 지금은 32byte이니 추가 Option이 12byte 있겠군요. ^^

헉... Flag 먼가 내용이 많군요. 하나씩 살펴보도록 하시죠!

Flag는 전체 12개 bit로 구성되어 있는데, 현재 사용중인 bit는 총 9개 입니다. 위에는 8개 밖에 없다고요? 예... 9개에 대해서 정의를 내려 놓았지만, 1개는 역할만 정의내려 놓고 사용하고 있지 않는 상태입니다. 그래서, Capture 프로그램이 해당 bit를 무시하네요. 불쌍한 놈...

12개 bit 중 이름도 없는 놈이 3개 bit 있으니 그나마 다행이라고 생각해야죠!

■ Flag bit

- CWR, ECN-Echo : 전송경로 중에 Congestion이 발생되었을 때 사용됩니다.
※ 향후 ECN을 다룰때 자세히 다루기로 하시죠. ECN을 알려면 WRED를 알아야 하고, WRED를 알려면 QoS를 알아야 하거든요.

- Urgent : 긴급하게 처리를 하라는 bit 입니다. Urgent가 설정되어 있는 데이터를 받으면 다른 일을 멈추고 이 데이터부터 처리합니다. 그리고, Urgent bit가 설정되어 있으면 TCP는 Application에게 Urgent bit가 설정되어 있는 데이터임을 알려줘서 Application이 Urgent mode가 되어 긴급하게 처리할 수 있도록 만들어 줍니다. 물론 Application이 컴파일될 때 Urgent mode가 동작하도록 프로그램되어 있어야겠죠. ^^
예를 들면 다운로드 중에 '앗! 이 파일이 아니네.. 중단시켜야지!' 생각이 들면 Break Key를 눌러서 정지시키려고 하겠죠. 그러면 불필요한 데이터를 전송시킬 필요가 없으니 Break Key 신호가 들어있는 데이터부터 먼저 처리해야 하지 않겠습니까? 그런 경우 Urgent bit를 1로 설정할 수 있겠네요.

- Acknowledgement : TCP는 데이터를 받던 놈의 buffer가 차면 buffer를 처리하면서 마지막까지 잘 받았으니 다음것을 보내달라고 Acknowledgement를 보냅니다. 그리고, 중간에 데이터를 못 받았을 경우에도 어디서부터 보내줘 라는 신호를 보내는데 그런 경우 Acknowledgement bit가 세팅됩니다.

- Push : 원래 데이터를 받던 놈은 buffer가 다 차야 어플리케이션한테 데이터를 던져줍니다. 중간에 데이터를 한두개 못 받을 수도 있으니, 다 받은걸 확인해서 주려고 하는거죠. 그런데 Push bit가 설정된 데이터가 들어오면 buffer가 다 차지 않아도 application한테 던져줍니다. 어떤 경우가 있을까요? 대표적인 예가 마지막 데이터를 보낼 때 Push bit가 세팅되어 전달됩니다. 총 데이터의 Size가 100Kbyte인데 buffer size가 30Kbyte면 30+30+30=90.. 마지막은 30Kbyte buffer 중 10Kbyte만 차겠죠. 더 들어올 것이 없는데 buffer에 차기를 기다리면 안되겠죠? 그런 경우 Push bit를 설정해서 처리해 주는 것이죠. 그런가 하면 Urgent bit는 대부분 Push bit와 함께 움직입니다. Urgent bit가 설정된 긴급한 데이터가 buffer가 다 차기를 기다리면 안되니까요. ^^

- Reset : Session을 강제 종료시키라는 의미로만 아시는 분들이 많은데, 엄밀히 따지면 현재 이 Session에 의해 할당된 메모리 자원(buffer)를 Null 상태로 만들어 시스템에 반납하라는 내용의 bit 입니다. IDS나 방화벽, IPS 등이 공격이라고 생각되는 Session에 대해서 Reset 을 던져 차단시키죠. 그래서 강제 종료라고 아시는 분들이 많으신거 같아요. 하지만, PC1이 PC2에 80 port로 접근했는데 PC2는 80 port가 서비스중이 아닙니다. 그런 경우도 Reset 을 던져서 PC1이 Session을 맺기 위해 할당한 메모리 자원을 없애도록 만들어 줍니다.

- Syn : 상대방과 나 사이에 session을 수립하기 위해 던지는 놈입니다. SYN을 던지고 ACK가 오면 상대방과 Session을 만들어 관리를 하게 되죠.

- Fin : Finish의 준말입니다. 우리가 흔히 Finish 날린다고 말하죠? Finish는 상대방과 통신이 종료되어 정상적으로 Session을 끊을 때 사용합니다. TCP session time이 끝났거나, 프로그램을 종료시켰거나, 아니면, HTTP 같은 경우는 파일 전송이 다 끝나면 바로 Finish를 보내 Session을 끊어 버리죠. TCP는 양쪽에서 SYN을 던져 따로따로 Session을 관리하죠? 그래서 Finish도 양쪽에서 보내져야 정상적으로 종료됩니다. ^^

휴~ 다 끝났군요. windows size가 있다고요? 그거 설명하려면 또 무지 길어요. 다음주에 sliding window를 설명하면서 자세히 설명드리도록 하겠습니다. 

중요한건 실제 데이터가 없다는 겁니다. TCP 3-way Handshaking은 상호간에 통신이 되는지를 확인하기 위한 기술이기 때문에 Session이 완성되기 전까지는 Application과 통신하지 않는답니다. 그러니, 데이터가 필요없겠죠!

■ [SYN/ACK] Packet의 구조



이번에는 두번째 Packet이군요. 상대방이 SYN을 보냈으니 ACK를 보내 응답해야죠. 그 때, SYN에서 보낸 Seq#에 1만큼 추가해서 Acknowledgement number(이하 'ACK#)에 넣어서 보냅니다. 쉽게 이해하시면 되요. ACK는 '0번 받았으니 1번 보내줘!' 라는 의미입니다. 항상 ACK#는 자신이 받고 싶은 데이터의 시작점을 보내게 되어 있거든요.
그러면서 Flag bit를 보니 SYN bit에도 Check가 되어 있군요. 즉, 이놈은 아까 받은 SYN의 ACK이면서 자신도 Session을 관리하기 위해 전송하는 SYN이 됩니다.
■ [ACK] Packet의 구조



상대방이 1번을 보내달라고 했으니 Seq# 1번을 보내주는군요. 그리고 자신도 SYN 잘 받았다고 자신이 받은 SYN에서 1만큼 추가해서 ACK#에 넣어서 전송을 하는군요. 그리고, Flag bit를 보니 이놈은 Acknowledgement 역활만 수행을 하는군요. SYN은 이미 던져서 Session을 관리하고 있으니, 또 SYN을 보낼 필요는 없겠죠. ^^

조금 이해가 되셨나요? 이렇게, [SYN], [SYN/ACK], [ACK]가 전달되어서 상호간에 Session을 수립하고 관리하는데 3번 Packet이 왔다갔다 한다고 멋지게 'TCP 3-way Handshaking'이라고 부른답니다. 메일링도 멋지게 부르려면 'Global Virtural Communication'라고 할 수 있잖아요.

해외에서 메일링 받으시는 분들이 꽤 있으시더라구요. ^^

오늘 메일링은 여기까지 하도록 하겠습니다. 요즘, 존재하지 않는 과정에 대한 문의가 많이 와서 금주 일요일에 대대적인 과정 변경을 하려고 합니다. 주말에 새로운 교육과정 자료를 보내드릴께요. ^^

'TCP 3-way Handshaking'은 왜 필요한가?

네트워크 기초 | 2010.04.13 00:20 | Posted by 승진아빠

처음에는 'TCP 3-way Handshaking 동작원리'라는 제목으로 메일링을 쓰려고 했습니다. 그런데 쓰다보니, 왜 필요한지도 모르는데 동작원리를 알아서 뭐하나.. 라는 생각이 들어 제목을 바꿨습니다. 네이버에서 찾아보면 동작원리는 많은데 필요한 이유가 쓰여 있는 곳이 없는거 같아서요. ^^

이번주는 [네트워크 기초]가 하루정도 부족하겠네요. 몸이 좋지 않았다고 핑계를 대기는 했지만, 모든게 다 제 불찰입니다. 강사는 아프면 안됩니다. 어떻게 아프지 않을 수 있냐고요?

아플 때 아프더라도 수강생분들을 만나서 '제가 몸이 많이 안좋아서 오늘은 쉬겠습니다. 다음에 날을 잡아서 보강을 해 드리겠습니다.'라고 양해를 구하고 집에 가서 쉬어야 하는 것이 정상이 아닌가 생각됩니다. 다음부터는 메일링을 부득이한 사정으로 보내드리지 못할 경우 미리 공지를 통해 알려드리도록 하겠습니다.

이번주는 다음과 같이 일정을 잡았습니다.

화요일 : TCP 3-way Handshaking은 왜 필요한가?
수요일 : TCP 3-way Handshaking 동작원리!
목요일 : CCIE Open-Ended 정말 어려운가? (3)
금요일 : CCIE Open-Ended 정말 어려운가? (4)
토요일 : CCIE Troubleshooting 정말 어려운가? (2)

목, 금, 토에 CCIE 문제에 대해서 설명드리는게 마음에 안드시는 분들은 편하게 말씀해주세요. 하루에 메일링 확인 정보를 Check해 보면, 예상과 달리 CCIE와 관련된 메일링은 50% 정도로 많이 낮아지네요. (평균 메일링 확인율 62%).

자, 하여튼 오늘 메일링을 시작하도록 하겠습니다. 모든 기술은 기본에서 시작합니다. 전에도 잠깐 설명을 드렸지만, Layer 4에서 하는 역활 중 가장 기본이 되는 기능은 [상호간에 통신이 가능한지 확인하는 것]과 [상호간 서비스를 제공할 준비가 되었는가를 점검하는 것]이 가장 기본입니다.

두대의 PC가 다음과 같이 있다고 가정하시죠.




PC1이 PC2에게 데이터를 전달해야 하는데, Layer 3까지는 데이터 전달에 책임을 지지 않습니다. 그냥 Destination address만 보고 보낼 뿐이죠. PC1이 PC2에게 영화 한편을 보내려고 하는데 R1이 PC2로 가는 경로를 알지 못한다면 PC1과 R1구간에 보내지는 영화한편의 데이터는 모두 R1에 의해 Drop되고 말 것입니다. 그럼 어떻게 해야 할까요? 그렇죠! 상대방에게 잘 받았다는 신호를 받으면 되겠군요.

그럼, 데이터를 보내고 신호가 올 때까지 무작정 기다리면 어떻게 될까요? PC1이 보낸 데이터를 PC2가 받지를 못했는데, 또는 PC2가 PC1으로 잘 받았다는 신호를 전달했지만 그 신호가 PC1에 도착하지 못했는데 마냥 기다리고 있을 수만은 없죠!

이렇게 생각해 보세요. 강을 사이에 두고 두 사람이 꽤 멀리 떨어져 있습니다. 그 때 한사람이 소리를 칩니다. "야! 뭐해" 그 소리를 들었는지 반대쪽 사람이 소리를 치죠. "뭐라고? 잘 안들려!" 그리고, 처음에 소리친 사람이 이렇게 소리칩니다. "어! 알았어! 잘 자!" 흠.... "뭐하고 잘려고!"로 들었네요. 통신이 엉망이군요.

그래서, 다음부터는 이렇게 하기로 합니다. 오른손을 들고 소리칠 때, 들리면 오른손을 들고 안들리면 왼손을 들기로요. 그리고, 서로가 들리는걸 확인하고 나면 편하게 대화를 하는거죠. 그리고, 잘 안들리면 그 때마다 왼손을 들면 됩니다. 그럼 다시 말하겠죠! ^^

자, 통신도 마찬가지입니다. 데이터를 보내기 전에 내가 던진 신호를 상대방이 받을 수 있는지를 먼저 확인합니다. [SYN]이라는 Packet을 던져서 상대방에게 전달이 되는지를 확인합니다. 확인용이니 그 안에는 당연히 데이터는 존재하지 않겠지요.

그러면, 상대방도 잘 들린다는 신호를 던져줘야 겠지요. 그 신호가 [ACK]입니다. 그런데, 내가 신호를 잘 받았다고, 즉 내가 잘 들린다고 오른손을 들었다고 가정해보죠. 그거야 상대방이 말하는 소리가 잘 들린다는 신호를 준 것이지, 내가 말하는게 상대방에게 잘 들린다는 이야기는 아닙니다. 상대방이 내 소리를 잘 들을 수 있는지 나도 확인해야 하는 겁니다.

예를 들면, 신호가 잘 들린다고 오른손을 들어 신호를 보내주면서 상대방에게도 묻습니다. "너는 잘들려?" 상대방도 내 소리가 잘 들리면 다시 오른손을 들어주는거죠! 이제야 상호간에 의사전달이 정확하게 될 수 있겠군요. ^^

TCP도 마찬가지로 [ACK]신호를 보내면서 [SYN]신호도 같이 보냅니다. PC2도 PC1이 잘 받는지 확인하는거죠. 그럼 PC1도 PC2에게 응답을 해야 정상이겠죠. 상대방이 잘 받는걸 이미 [ACK]로 확인했으니 더이상 [SYN]을 보낼 필요는 없습니다. 상대방 [SYN]에 [ACK]로 응답만 해주면 끝입니다.

이걸 멋지게 'TCP 3-way Handshaking'이라고 이름 붙였죠.

강의할 때도 사용하지 않던 설명방법을 처음으로 사용해 봤는데 이해가 쉬우셨는지 모르겠네요. 오히려 더 헷갈리시다구요? 내일은 이론으로만 TCP 3-way Handshaking 동작원리를 설명드릴테니, 내일 자세히 배워가세요.

오늘 메일링은 여기까지 진행하도록 하겠습니다. ^^

'네트워크 기초' 카테고리의 다른 글

Window size [윈도우 사이즈]의 개념  (1) 2010.04.21
'TCP 3-way Handshaking' 동작원리!  (0) 2010.04.14
'TCP 3-way Handshaking'은 왜 필요한가?  (2) 2010.04.13
Default-gateway 동작원리  (0) 2010.04.07
ARP의 이해  (0) 2010.04.06
TCP/IP 프로토콜 개요  (0) 2010.04.04

CCIE Troubleshooting 과연 어려운가? (1)

금주의 LAB | 2010.04.12 08:05 | Posted by 승진아빠


주말에 14시간, 8시간 강의하고... 잠시 쉬는데 등 뒤에 담이 와서 어제는 움직일 수가 없었는데, 오늘 아침은 많이 뻐근한 정도군요. 타자치는데는 아무런 문제가 없을 듯 합니다. ^^ 오늘은 CCIE Troubleshooting 문제때문에 왜 사람들이 많이 걱정하나... 확인해 보도록 하겠습니다.

먼저 구성도는 다음과 같습니다.



Q1. R1 can't establish an OSPF neighbor relationship with R2. Fix this problem so that with R2. Fix the problem so that OSPF neighbor relationship.

■ R1 설정

interface Serial0/0
 ip address 172.14.11.1 255.255.255.248
 encapsulation frame-relay
 ip ospf authentication-key 1 md5 cisco
 ip ospf network point-to-multipoint
 frame-relay map ip 172.14.11.3 315 broadcast
 no frame-relay inverse-arp
 frame-relay lmi-type cisco

router ospf 1
 log-adjacency-changes
 area 1 authentication message-digest
 area 1 nssa
 network 172.14.11.1 0.0.0.0 area 1

■ R2 설정

interface Serial0/0
 ip address 172.14.11.3 255.255.255.248
 encapsulation frame-relay
 ip ospf authentication-key 1 md5 cisco
 ip ospf network point-to-multipoint
 frame-relay map ip 172.14.11.1 315 broadcast
 no frame-relay inverse-arp
 frame-relay lmi-type cisco

router ospf 1
 log-adjacency-changes
 area 1 authentication message-digest
 area 1 nssa
 network 172.14.11.3 0.0.0.0 area 1

■ FR_Switch

frame-relay switching

interface Serial0/0
 description "Connected to R1 s0/0"
 no ip address
 encapsulation frame-relay
 clockrate 64000
 frame-relay lmi-type cisco
 frame-relay intf-type dce
 frame-relay route 315 interface Serial0/1 351

interface Serial0/1
 no ip address
 encapsulation frame-relay
 clockrate 64000
 frame-relay lmi-type cisco
 frame-relay intf-type dce
 frame-relay route 315 interface Serial0/0 315

제가 가지고 있는 문제 중 하나는 위와 같군요. 실제 문제가 저렇다면 너무 지저분한 문제죠? 한번 보시죠!
항상 Troubleshooting을 할 때는 Layer 1부터 보시는 것이 좋습니다. 하지만, 시험보다가 'Cable 문제인것 같다'라고 하면 '웃기지 마라'라고 합니다.

그럼, OSPF가 Neighbor가 맺어지지 않는다고 하니... Layer 2부터 봐야 하겠군요.

1. Encapsulation과 Lmi-type은 제대로 설정되었는지 확인 : 문제 없군요.
    - R1 : encapsulation frame-relay, frame-relay lmi-type cisco
    - R2 : encapsulation frame-relay, frame-relay lmi-type cisco
    - FR_Switch : encapsulation frame-relay, frame-relay lmi-type cisco

2. Frame-Relay는 Multi-Access 망이기 때문에 L2 address(DLCI)가 필요하고, L2 address는 L3 address와 MAP이 있어야 합니다. 그리고, Service Provider의 Frame-Relay Swtich는 고객의 DLCI 번호를 보고 본/지점간에 Frame을 Forwarding할 수 있도록 설정되어 있어야 합니다. 확인해 보도록 하시죠!
    - R1 : frame-relay map ip 172.14.11.3 315 broadcast
    - R2 : frame-relay map ip 172.14.11.1 315 broadcast
    - FR_Switch : [R1(s0/0) : 315] → [R2(s0/1) : 351], [R1(s0/0) : 315] → [R2(s0/1) : 315]

※ 일단, 하나를 찾았군요.  R1에서 유입된 DLCI 315번이 R2로 전달시 351번을 달고 나가도록 설정되어 있군요. R2의 DLCI 번호는 315번이기 때문에 당연히 315번을 달아서 내보내야 하죠! ^^
FR_Switch의 's0/0'에서 [frame-relay route 315 interface Serial0/1 315]로 수정

벌써 풀어버렸습니다. 쉬우시죠? 몇가지 더 살표보도록 하시죠.

3. OSPF Network type을 확인
    - R1 : ip ospf network point-to-multipoint
    - R2 : ip ospf network point-to-multipoint

MAP을 잡을 때 broadcast 옵션을 주었으니, NBMA망이 BMA망으로 변경되었군요. 그럼 OSPF network type을 [broadcast]나 [point-to-multipoint]로 바꾸어도 문제가 없겠네요. Frame-relay map 뒤에 broadcast 옵션을 주지 않았다면 저 부분이 틀렸을텐데 안타깝습니다. 하여튼 문제 없습니다.

4. Network command를 확인 : 문제 없군요.
    - R1 :  network 172.14.11.1 0.0.0.0 area 1
    - R2 :  network 172.14.11.3 0.0.0.0 area 1

5. Not-So-Stubby-Area군요. 둘다 설정되어 있는지 확인 : 문제 없군요.
    - R1 :  area 1 nssa
    - R2 :  area 1 nssa

6. Area 1에 인증을 선언하고 Interface에 인증 Password를 설정했군요. 확인해 보시죠!
    - R1/R2 :  area 1 authentication message-digest
    - R1 : ip ospf authentication-key 1 md5 cisco
    - R2 : ip ospf authentication-key 1 md5 cisco

제대로 되었나요? MD5 인증을 하겠다고 선언하고선 Text 기반 Key를 주었군요. 헷갈리게 써 놨지만 [ip ospf authentication-key 1 md5 cisco]라고 선언하면 [1 md5 cisco]가 Password가 되는거죠! ^^ 이런식으로 속이려 하다니, 매우 지저분하군요. 어떻게 바꿔 주셔야 하나요? 그렇죠.. 다음과 같이 바꿔 주셔야죠!
[ip ospf message-digest-key 1 md5 cisco]

휴~ 한문제 풀었군요. Troubleshooting 문제가 8문제인가요? 하지만, 위의 문제를 보시면 아시겠지만, 그리 어렵지는 않습니다. 자신을 가지세요. 저도 타자를 좀 쳤더니 다시 목뒤가 아프기 시작하는군요. 아침 8시군요. 한 20분 산책하면서 근육을 풀어주고 오도록 하겠습니다.

CCIE Open-Ended 정말 어려운가? (2)

네트워크 심화 | 2010.04.10 01:22 | Posted by 승진아빠

어제는 메일링을 쓰지 못했습니다. 메일링을 쓸 수 있는 상태가 아니였거든요. 저희 직원 중 학원을 총괄 운영하던 직원이 집안 사정으로 퇴사를 하고 진주 고향집으로 내려갔습니다. 저와는 3년간 같이 일해왔던 친구로 친형제나 다름없는 사이였거든요.

그 친구가 있었기에 제가 교육센터를 맡겨놓고 컨설팅 및 개인업무들을 자유롭게 할 수 있었는데... 가슴이 너무 아팠고 지금도 너무 아픕니다. 제가 해준게 너무 없었다는 미안함과 집안 문제가 빨리 해결되서 다시 돌아오기를 기대할 뿐입니다. 저는 사람을 잘 포기하지 않습니다. 그게 제가 가진 가장 큰 재산이니까요.

어제 메일링을 보내드리지 못했기 때문에 이번주는 일요일에도 메일링을 보내드리도록 하겠습니다.

자, 그럼 오늘도 CCIE Ended 문제를 2문제 함께 풀어보시죠!

Q1. How to enable SSH server?

우리는 Telnet의 보안취약성때문에 SSH를 통해 장비에 Access하도록 구성을 합니다. 이번 문제는 이러한 SSH 서버로 어떻게 구성하느냐를 묻는 질문이군요. CCNP과목중 'ISCW'에 나오는 내용이군요.

일단, 장비에 SSH를 enable 기능을 enable해야 합니다.

Step 1 : Hostname을 변경해야 합니다.
'Router', 'Switch'와 같은 Default-name에서는 SSH가 enable되지 않습니다.

Step 2 : Domain-name을 설정하여야 합니다.
SSH는 ID를 'hostname.domain-name' 형식으로 전달하기 때문에 domain-name이 설정되어야 합니다.

Step 3 : Key를 생성합니다.
암호화 통신을 하기 위한 Key를 생성해야 암호화를 시키겠지요. ^^

여기까지 하면 SSH가 enable됩니다. 다음은 Server로 가동시켜야 겠군요.

Step 4 : AAA 기능을 enable합니다.
Default로 Router나 Switch는 aaa 기능이 disable되어 있습니다. 단순히 password만 확인하는 방식으로 user를 인증하지요. 하지만, ID/PW 형식으로 인증을 하기 위해서는 aaa 기능을 enable해야 합니다. 물론 aaa 기능을 enable하기 싫으신 경우 'login local' 명령어를 사용할 수도 있지만, aaa 기능을 enable하는 것이 더 권장됩니다

Step 5 : Username과 Password를 설정합니다.
당연히 ID/PW가 있어야 장비에 Access 할 수 있겠죠. ^^

Step 6 : SSH server를 enable 합니다.
SSH로 접속을 허용하도록 하려면 ssh가 사용하는 22번을 Open해야 하지 않겠습니까? Web server를 enable해야 80 port로 접속이 가능한 것과 마찬가지입니다.

Step 7 : SSH로 접속을 허용합니다.
최종으로 해야 할 일입니다. vty는 default로 telnet 접속을 허용하고 있습니다. ssh로도 접속 가능하도록 하용을 해줘야만 ssh로 Router나 Switch에 접근이 가능합니다.

꽤 복잡하군요. 7단계를 command로 표현하면 다음과 같습니다.

SSH server 구성의 예)

1. hostname SSH_Server
2. ip domain-name netrain.co.kr
3. crypto key generate rsa
4. aaa new-model (생략시 line mode 내에 'login local' 명령어를 사용해야 함)
5. username netrain password cisco
6. ip ssh
7. line vty 0 4
   transport input SSH

이제 마지막으로 이 내용을 영어로 적어야 하는군요.
다음과 같이 적어보죠.

1. Configure the hostname (You can't use default name)
2. Configure the domain-name
3. Generate an SSH key
4. Configure 'aaa new-model'
5. Register Users (username/password)
6. Enable SSH server
7. Add SSH terminal-line access


휴~ 다 됐군요. 순서에 대해서 묻지 않았기 때문에 숫자를 없이 적는 것도 방법일듯 합니다. 그리고, 문제가 정말로 'SSH server를 어떻게 enable하느냐'가 핵심이라면 'ip ssh' 명령어가 가장 중요합니다.


Q2. In HSRP, there are config file for R1 and R2, Want to double-team HSRP load sharing, R1 is the ACTIVE, if you want to R2 can be a group of 2 ACTIVE how to solve?

R1
   interface FastEthernet1/0
   standby 1 ip 11.1.1.254
   standby 1 preempt
   standby 1 track Serial0/0
   standby 2 ip 11.1.1.253
   standby 2 preempt
   standby 2 track Serial0/0

R2
   interface FastEthernet1/0
   standby 1 ip 11.1.1.254
   standby 1 preempt
   standby 1 track Serial0/0
   standby 2 ip 11.1.1.253
   standby 2 preempt
   standby 2 track Serial0/0

HSRP에 대해 다 적을 수는 없을 것 같고, HSRP는 Priority가 높은 놈이 Active가 됩니다. CCNP 과목중 'BCMSN'에 나와 있는 내용이지요.

R2를 Active로 만들고 싶다면 둘중에 하나를 하면 되겠군요. R1의 Priority를 R2보다 낮추던지 R2의 Priority를 R1보다 높이던지요. Default 값은 '100'이죠! 어찌되었군 R2의 Priority를 R1보다 높게 만들면 되겠군요.

그럼 영어로 한번 써 보지요. 

Config R2's priority in Group 2 higher than R1 in Group 2

쉽죠? CCNP까지만 제대로 학습하면 어느정도 다 맞출 수 있을 것 같군요. 4문제 중에 3문제를 맞추면 된다고 하니, 한문제는 포기하죠, 뭐! ^^
내일은 CCIE Troubleshooting issue를 가지고 메일링을 보내드리도록 하겠습니다. 드디어 내일부터 저희 교육센터 CCIE 과정이 시작되는군요. 3개월 과정에 수강생은 두분입니다. 기대가 많이 됩니다.

다음달부터 증권사를 컨설팅하게 될 것 같아요. 학원 잘되서 컨설팅일 안하게 해주세요. ^^

CCIE Open-Ended 정말 어려운가? (1)

네트워크 심화 | 2010.04.08 01:28 | Posted by 승진아빠

덤프 문제를 풀어드리려는 것이 아니라, CCIE 시험에 자신을 가지시라고 몇문제 풀어 드리는 것입니다. 저희 직원 중 한명도 영어에 너무 자신이 없어서 CCIE를 포기한 친구가 있거든요.
 
영어... 생각해보면 별거 아닌데, 무척 부담이 되는건 사실입니다. 영어에 너무 자신이 없어서 고민하시는 분들은 시간이 좀 더 필요하시겠지만, Open-Ended 시험이 너무 어려울 것 같아서 포기하시려는 분들을 위해 3주 정도에 거쳐 목요일과 금요일에 하루 2문제씩 같이 풀어보도록 하겠습니다.

1. RIPv2 packets use which UDP port number for transport?

CCNA 그것도 'ICND 1'에 나오는 내용이군요. RIP은 UDP를 사용하고 Port 번호 '520'번을 사용하죠! RIPv1과 RIPv2는  Classful Routing Protocol인지 Classless Routing Protocol인지부터 차이가 조금 있기는 하지만, UDP 520번을 사용하는 것은 변함이 없습니다. ^^

관련자료 : http://www.networksorcery.com/enp/protocol/rip.htm

이제 영작을 해야겠군요. 짧게 쓰는게 불안하면... 문제를 다 써주면 되죠!

Answer : RIPv2 packets use which UDP 520 port number for transport

2. What bgp feature prevents the router from advertising BGP prefixes that are not installed in the RIB

문제의 요지가 뭡니까? 뭘 묻는 문제인지 알아야 문제플 풀죠! ^^
BGP는 Neighbor에게 update 정보를 던질 때, 자신이 Best-Path 인지는 관심없습니다. 타 Routing Protocol의 정보는 신경쓰지 않는다는 말입니다. 다음의 두가지 조건만 만족하면 Neighbor에게 update를 전달합니다.

1. Next-hop으로 가는 경로를 알고 있는지 여부 (반드시 알고 있어야 함)
2. BGP로 받은 정보 중 Best 경로인지 여부

그런데 만약에 Router가 192.168.1.0/24에 대한 정보를 다음과 같이 알고 있다고 가정하시죠!
- BGP의 Next-hop : 10.1.1.1
- Routing table
   O   10.1.1.0/24 [110/10]   via 10.1.2.1   FastEthernet 0/0
   S    192.168.1.0/24   direct-connected  Null 0

'192.1681.0/24'가 실제로 외부 정보일 경우 전달이 될까요? BGP는 10.1.1.1로 가는 경로가 Routing table에 존재하기 때문에 다른 BGP Neighbor에게 [192.168.1.0/24] 정보를 전달을 할 겁니다. 그럼 저 Router를 Best-Path로 알고 있는 BGP Neighbor는 Packet을 보내오겠군요. 
하지만, BGP 정보보다 Static 정보가 더 우선하기 때문에 Routing table에 의해 Packet은 [192.168.1.0/24]으로 전달이 되지 못하고 'Null 0'로 보내져 모두 Drop되어 버릴 것입니다. 이런 경우 BGP table을 확인해 보면 다음과 같이 'r'이라고 표시가 됩니다.

Router# show ip bgp
* r> 192.168.1.0/24 ...

r : RIB의 준말고 Routing table에 등록되지 못했다는 의미로 그 원인을 알고 싶으신 경우 'show ip bgp rib-failure' 명령어를 통해 확인하실 수 있습니다.

이처럼 Routing table에 등록되지 못한 정보가 BGP로 전달되면 통신이 제대로 이루어지지 않을 수 있습니다. 그래서 Risk를 최소화 하기 위하여 'r'로 표시된 정보는 BGP로 update 하지 않도록 설정할 수 있는데 그러한 기능을 무엇이라고 하는지 묻는 것이군요.

제가 가지고 있는 자료에는 답이 'bgp suppress-inactive'라고 적혀 있는데, 이건 이 기능을 실행하기 위한 명령어죠! 이것도 답이라고 처리해 줄지는 모르겠지만, 까탈스러운 사람이라면 기능의 이름을 물었기 때문에 틀리다고 할 수도 있을겁니다. 정확한 Feature의 이름은 다음과 같습니다.

관련자료 : http://www.cisco.com/en/US/docs/ios/12_2s/feature/guide/fs_sbair.html
               (기억이 안나실거 같으면 URL 끝에 약자를 외우시는게 어때요. [SBAIR])

Answer : Suppress BGP Advertisement for Inactive Routes

Default-gateway 동작원리

네트워크 기초 | 2010.04.07 01:30 | Posted by 승진아빠

오늘도 이경태입니다. ^^ 요즘 하도 정신없이 바빠서 뭘 하면서 살고 있는지도 모르겠습니다. 지금 44시간째 깨어 있습니다. 아까 10시 40분에 강의를 마쳤을 때는 너무 피곤해 다리가 휘청하더니, 지금은 좀 괜잖네요. 내일도 6시에 일어나야 하니 오늘은 2시 전에 자야겠습니다.

오늘은 Default-gateway에 대해 학습을 해보려고 합니다. 

예전에 Default-route는 배우셨죠? Default-gateway는 먼가요? 요즘은 대부분 DHCP로 IP를 받아서 사용하시기 때문에 모르시는 분들이 많이 계시던데 네트워크 환경에서 IP를 설정할 때 함께 등록을 하는 정보죠?
다음과 같이요!



'IP 주소'와 '서브넷 마스크'를 설정하고 나면 그 밑에 '기본 게이트웨이'라고 있잖아요. 그게 Default-gateway 입니다. 오늘은 이놈이 뭐할 때 사용되며, 어떤 역할을 수행하는지 간단히 확인해 보도록 하겠습니다.

PC도 Router와 마찬가지로 Routing table에 의해 Packet을 전송시킵니다. 그럼 PC도 Routing table이 있겠네요? 예... CMD 창에서 'route print'라고 치시면 확인하실 수 있습니다. 

그럼, Default-gateway로 설정한 IP address가 Default route 경로로 설정되어 있는 것을 확인하실 수 있으실 겁니다. 다음은 제 PC의 예입니다.

C:\Users\Kenneth>route print
===========================================================================
IPv4 경로 테이블
===========================================================================
활성 경로:
네트워크 대상      네트워크 마스크         게이트웨이            인터페이스       메트릭
     0.0.0.0                  0.0.0.0            192.168.123.254      192.168.123.188        25

그런데, 이것이 오늘 내용의 핵심이 아니라, PC 내부에서 어떻게 동작하느냐 하는 것이 핵심입니다. ^^

PC는 통신을 하기 위해 다음과 같은 일을 수행합니다.

1. Application은 통신을 하기 위한 'Port #'를 Layer 4로부터 할당받습니다.
2. Layer 4 Header 정보를 완성합니다.
3. Layer 3 Header 정보를 완성합니다.
4. Layer 2 Header 정보를 완성하려 하지만, Destination MAC address를 알지 못합니다.

그러면 Destination MAC address를 알아야겠군요. 어제 ARP는 배우셨다고요? 
설마 아무리 피곤해도 같은 이야기를 하겠습니까? ^^

MAC address를 알기 위해 다음과 같은 작업을 PC는 순차적으로 수행합니다.

1. 나와 상대방의 Network 정보를 비교합니다.
※ 비교방법 (AND 연산은 예전에 설명드려서 아시죠? ^^)
    - '자신의 IP address' AND '자신의 Subnet mask' = 자신의 Network address라 판단
    - '상대의 IP address' AND '자신의 Subnet mask' = 상대의 Network address라 판단

2. '자신의 Network address' = '상대의 Network address' 인 경우 → 어제 메일링을 읽어보세요.

3. '자신의 Network address' ≠ '상대의 Network address'인 경우
    - 동일 Network이 아니므로 데이터 전송을 위해 Routing table을 Lookup합니다.
    - 하지만, 대부분의 PC에 다른 Network 정보가 있을리가 없죠.
       (이 부분은 'PC 및 Server Packet Routing' 때 자세히 설명드리겠습니다.)
    - Default route를 찾습니다. 경로는 Default-gateway로 가라고 되어 있군요.
    - ARP table에서 Default-gateway에 대한 MAC address를 찾습니다.
    - 정보가 있으면 Destination MAC address에 해당 MAC address를 채워 전송합니다.
    - 정보가 없으면 Default-gateway에 대한 ARP request를 전송합니다.

왜 Default-gateway MAC address를 넣어야 하냐고요? Default-gateway는 Routing을 수행해서 타 Network과 통신을 가능하게 해주는 Layer 3 장비이기 때문에 Frame의 Layer 2 주소가 자신의 주소와 일치하지 않을 경우 무시하거든요.

참고로 Router는 다음과 같이 동작합니다.



차후에 Router 동작원리 때 자세하게 설명드리도록 할께요.

Default-gateway의 역할에 대해 이해가 좀 가셨나요? 쉽지 않은 부분이지만 굉장히 중요한 부분입니다. 이해가 안가시는 부분이 있으시면 편하게 의견란이나 카페에 글을 남겨주세요.
오늘은 여기까지 진행하도록 하겠습니다. ^^

'네트워크 기초' 카테고리의 다른 글

'TCP 3-way Handshaking' 동작원리!  (0) 2010.04.14
'TCP 3-way Handshaking'은 왜 필요한가?  (2) 2010.04.13
Default-gateway 동작원리  (0) 2010.04.07
ARP의 이해  (0) 2010.04.06
TCP/IP 프로토콜 개요  (0) 2010.04.04
OSI 7 Layer : 'Layer 6'와 'Layer 7'의 역할  (0) 2010.03.31

ARP의 이해

네트워크 기초 | 2010.04.06 02:09 | Posted by 승진아빠


휴~ 아직 할일도 많은데 벌써 1시군요. 메일링 쓰면 3시... 오늘은 정말 뜬눈으로 밤을 지세워야 하겠군요. TP의 강병호 이사님은 늘 2시간 정도만 주무시면서도 건강하게 잘 사시는데, 전 괴물이 아니라 사람인가 봅니다. ^^ 많이 피곤하네요.

오늘은 시간이 없어서 바로 메일링으로 들어갑니다. 오늘 학습할 내용은 ARP죠! 많은 분들이 ARP라는 놈이 왜 필요한지 잘 알고 계시리라 생각됩니다. 하지만, ARP에 대해 잘 모르시는 분들이 있으니 아시는 분들도 정리한다는 차원에서 가볍게 읽어주시기 바랍니다.

회사 동료가 구하기 힘든 자료를 가지고 있는겁니다. 그래서 살짝 공유해 달라고 요청을 합니다. 처음에는 안된다고 하다가 술한잔 산다고 했더니, IP를 알려주면서 FTP서버를 실행시켰으니 빨리 가져가라고 합니다.

"앗싸!"

ALFTP를 다운받아서 실행시키고, 기초 데이터를 입력합니다. 다음과 같이요.



어떤 정보가 있나요? 상대방의 IP address와 서비스 Port 번호가 있군요. 그리고, FTP 프로그램이기 때문에 프로그램 컴파일 당시 TCP 함수를 사용했을 겁니다. (FTP는 TCP를 사용하는 프로그램이거든요.... 향후에 더 자세히 설명드리겠습니다)

그리고, 확인을 눌러 접속을 시도하려고 하면 프로그램은 TCP에게 통신을 하기 위해 사용할 Port를 할당해 달라고 요청을 합니다. 그러면, TCP는 '49152 ~ 65535' Port 중 사용하지 않는 Port를 하나 할당해 줍니다.

※ 자 여기서 프로그램 실행 당시 알고 있는 정보를 나열해 보도록 하겠습니다.

- L4 Protocol : TCP
- Source Port : 50000 (TCP에게 할당받은 Port 번호)
- Destination Port : 21 (프로그램 실행시 등록)
- Source IP address : 192.168.1.2 (자신의 LAN card에 설정된 IP address)
- Destination IP address : 192.168.1.1 (프로그램 실행시 등록)
- Source MAC address : cc01.0f04.0000 (자신의 LAN card MAC address)
- Destination MAC address : ???

이런, 상대방의 Destination MAC address를 알지 못하는군요. 다음은 어떻게 할까요? ARP-table을 검색한다고요? 성급하시군요. 다음과 같은 일을 수행합니다.

1. Source IP address와 Destination IP address가 동일 Network인지 확인합니다.
2. 동일 Network이면, Destination IP address에 대한 MAC address 정보를 내가 알고 있는지 확인합니다.
3. 동일 Network이 아니면 Default-gateway의 MAC address를 내가 알고 있는지 확인합니다.
※ 왜 Default-gateway의 MAC address를 찾아야 하는지는 추후에 설명드리겠습니다.

그 때, 2번과 3번의 경우 MAC address를 내가 알고 있는지 확인하기 위해 ARP table을 검색합니다. ARP table이 무슨 역할을 하는지 감이 오시죠? 바로 IP address와 MAC address 정보를 mapping 시켜 놓은 table 입니다. 거기에 정보가 있으면 바로 Destination MAC address를 채워서 전송을 하겠지요.

이런, ARP table에 정보가 없군요. 그럼 정보를 알아와야겠군요. 정보를 알아오기 위하여 다음과 같은 Packet을 전송합니다.

Destination MAC addres를 Broadcast로 전달하는군요. 왜죠? 당연하겠죠. 그놈을 몰라서 던지는 Packet이니까요. ^^ Network 상의 모든 시스템이 다 받아보고 그중 192.168.1.1이 있으면 MAC address를 알려달라고 Broadcast로 전달을 하는 겁니다.

Packet이 무슨 Packet인지 보니 'ARP(Address Resolution Protocol) request Packet'이라는군요. 그리고, 내용을 보니 5가지 주요 내용이 있군요.

- Opcode : ARP Request(0x0001)인지 ARP Reply(0x0002)인지 구분하는 코드번호
- Sender MAC address : ARP request를 보낸 놈의 MAC address
- Sender IP address : ARP request를 보낸 놈의 IP address
- Target MAC address : ARP request에 응답할 놈의 MAC address
- Target IP address : ARP request에 응답할 놈의 IP address


그런데, Target MAC address가 00:00:00:00:00:00:00으로 설정되어 있네요? 그걸 모르는거니까요. ^^
Broadcast이기 때문에 모든 시스템들이 다 받아본 후에 Target IP address가 자신의 것이 아니면 무시합니다. Target IP address의 주인만이 그 정보에 다음과 같이 응답을 하지요.

이번에는 Broadcast가 아니네요? 처음에 Request Packet을 잘 보세요. 보낼 때 보낸놈의 MAC address를 알려줬거든요. Broadcast로 전송해서 궁금하지 않은 놈들한테 까지 다 알려줄 필요는 없잖아요. 그래서 Unicast로 전송을 합니다.

이번에는 Sender 정보와 Target 정보가 모두 채워져 있군요.

- Sender MAC address : ARP reply를 보낸 놈의 MAC address
- Sender IP address : ARP reply를 보낸 놈의 IP address
- Target MAC address : ARP reply를 받을 놈의 MAC address
- Target IP address : ARP reply를 받을 놈의 IP address


ARP Packet을 받은 장비들은 Sender의 정보를 가지고 ARP table을 만듭니다.

이제 상대방의 MAC address를 알았으니, 데이터 전송이 가능하겠군요. 어렵지는 않으시죠? 아직 설명드리지 못한 부분이 많아서 이해가 잘 안가시는 분들도 계시리라 생각이 되지만, 하나씩 하나씩 따라오시면 제가 다 설명해 드릴께요. 이제 다시 업무를 하러 가야겠군요. 내일 뵙도록 하겠습니다. ^^

'네트워크 기초' 카테고리의 다른 글

'TCP 3-way Handshaking'은 왜 필요한가?  (2) 2010.04.13
Default-gateway 동작원리  (0) 2010.04.07
ARP의 이해  (0) 2010.04.06
TCP/IP 프로토콜 개요  (0) 2010.04.04
OSI 7 Layer : 'Layer 6'와 'Layer 7'의 역할  (0) 2010.03.31
OSI 7 Layer : 'Layer 5'의 역할  (0) 2010.03.30

TCP/IP 프로토콜 개요

네트워크 기초 | 2010.04.04 18:45 | Posted by 승진아빠

안녕하세요. 또, 새로운 한 주가 시작되었습니다. 몇 주간은 좀 재미없는 메일링이 될 가능성이 높습니다. 그래서, 심화학습과 LAB 부분에 TCP/IP가 끝날때 까지 R&S CCIE Ended 문제와 Troubleshooting을 몇문제씩 풀어드릴까 합니다. CCIE를 독학하시는 분들께 조금이나마 도움이 되었으면 합니다.

- 4월 5일 : TCP/IP 프로토콜 개요
- 4월 6일 : ARP의 이해
- 4월 7일 : Default-gateway의 동작원리
- 4월 8일 : R&S CCIE Ended 문제 과연 어려운가? (1)
- 4월 9일 : R&S CCIE Ended 문제 과연 어려운가? (2)
- 4월 10일 : R&S CCIE Troubleshooting 문제 과연 어려운가? (1)

요즘 CCNA, CCNP, CCIE를 혼자 독학하시는 분들이 많이 계신거 같습니다. 독학하시는 분들께 한가지 드릴 말씀은 CCNA를 정확하게 이해하시면, CCNP, CCIE는 아무것도 아니라는 말씀을 드리고 싶습니다. 기초 지식을 얼마나 정확하게 이해하고 있는냐가 중요한 것이지, 나머지는 모두 가지에 지나지 않기 때문입니다.

새로운 기술이 나오면 항상 공부하실 수 있나요? 점점 기술은 다양해지고 광범위해지고 있습니다. 그것들을 다 공부한다는 것은 사실상 불가능한 일입니다. 그럼 어떻게 해야될까요? 바로 핵심 기술을 정확하게 아는 것입니다.

예를 들면, OSPF와 ISIS를 공부하는 것보다 중요한건 Link-State Routing Protocol의 특징을 정확히 이해하는 것이 더 중요합니다. 제가 강의를 해본 경험상 Link-State Routing Protocol을 정확하게 이해하시고 계신 분은 OSPF와 ISIS를 하루면 이해하시지만, 그렇지 못할 경우에는 굉장히 어려워하시고 이해시간도 오래 걸립니다.

앞으로 한발자국씩 전진해 나가는 것도 중요하지만, 활시위처럼 뒤로 잠시 물러났다 더 고속으로 전진하는 방법이 있다는 사실... 잊지 마시기 바랍니다. ^^

그럼, 오늘 메일링을 시작하도록 하겠습니다.

TCP/IP는 지금도 계속 새로운 표준이 생기고, 수많은 논문들로 발전해 나가는 Protocol입니다. 다음과 같이 전체 4개의 Layer로 구분되어 있으며, 실제로 관여하는 영역은 2개 Layer (Internet Layer, Transport Layer) 뿐입니다.



위에 적은 Protocol은 핵심 Protocol만 적은 것이고, 자세한 것들은 하나하나씩 알아보도록 하겠습니다.

TCP/IP는 산업표준(Industry-Standard)이며 오늘날 가장 많이 사용하는 Protocol입니다. 1960년대에는 상호간 통신을 위해 Repeater 등을 통해서 Cable을 연결 후 사용하는 Local Network 구조였습니다. 물론 Remote로 떨어진 Network과 통신을 하기 위하여 전화선을 이용하여 전송하는 방식도 있었지요. 그런데, 가장 큰 문제는 통신중 발생하는 Error과 Speed 문제였습니다.

Error를 체크하기 위하여 bit 사이에 parity bit를 넣어서 통신하는 방법을 사용했는데, 전송 중에 Error가 없다고 나왔는데도 데이터는 Error가 있는 경우가 많았던거죠. 그래서, 통신상 Error를 종합적으로 관리할 수 있는 방법은 없을까를 고민하기 시작합니다.

그래서, Packet을 통째로 전달하고 받은 쪽에서 Error를 확인하는 방법을 써보자고 생각하기 시작합니다. 그리고 이것을 수행하기 위해 Defense Advanced Research Projects Agency (DARPA)라는 것을 만들고, internetworking 프로젝트를 시작합니다.

연구결과 1971년 NCP host-to-host Protocol이 개발되고 1973년 'TCP/IP Protocol'이라는 이름으로 초기 버전이 나오게 됩니다. 오늘날의 TCP/IP 형태는 더 개발되어서 1978년에 발표가 되지요. 그리고, 드디어 1980년에 ARPANET이라는 Packet Switching (over radio networks)망에 적용을 시작해서 1983년에 적용을 마치고, 'Internet'이라는 이름으로 세상에 나오게 됩니다.

TCP/IP를 기반으로 '통신 표준 모델'인 DoD(Department of Defense) Model을 만들었지만, 이것으로는 부족하여 보다 세분화하여 1983년에 OSI 7 Layer를 만들었죠!

데이터 통신사가 굉장히 짧죠? 그리고, TCP/IP는 초창기 기술입니다. 개인적으로 조만간 전혀 다른 Protocol로 바뀔 것이라고 생각합니다. 그래도, 현재 사용하고 있는 Protocol은 알아야 하지 않겠습니까? ^^

IP address 체계는 이미 학습하셨고, 나머지 부분에 대해서 저와 오랫동안 학습해 보도록 하시죠.

'네트워크 기초' 카테고리의 다른 글

Default-gateway 동작원리  (0) 2010.04.07
ARP의 이해  (0) 2010.04.06
TCP/IP 프로토콜 개요  (0) 2010.04.04
OSI 7 Layer : 'Layer 6'와 'Layer 7'의 역할  (0) 2010.03.31
OSI 7 Layer : 'Layer 5'의 역할  (0) 2010.03.30
OSI 7 Layer : 'Layer 4'의 역할  (0) 2010.03.29

LAB으로 확인하는 BGP update 시간!

금주의 LAB | 2010.04.03 01:00 | Posted by 승진아빠

오늘은 술한잔 하고 들어왔습니다. 세상이 어렵다 보니 본의든 본의가 아니든 회사를 그만두시는 분들이 많으시네요. 그래도 이 업계에서 한시대를 풍미하시던 분들이 한두분씩 퇴직을 하니 마음이 너무 아프군요. 은퇴하시는 대 선배님들을 모시고 대화를 나눌만한 포럼이 하나쯤은 있어야 하지 않나 하는 생각이 드는 우울한 날이군요.

우울한 기분에 빨리 메일링을 쓰고나서 소주한잔 더 빨고 자야겠습니다. 저를 만든 것이 선배님들이고 제가 도와 드려야 하는 분들이 후배님들 아니겠습니까? 혼자 잘나서 설치는 사람들은 Network 엔지니어 자격이 없다는 생각이 강하게 드는 오늘....... 메일링을 시작합니다.

어려분은 Network에 변화가 발생하면 그 정보를 빠르게 동기화 하는 것이 최상이라고 생각하십니까? 세상에 장점만 되는 것과 단점만 되는 것은 없다고 생각합니다. 장점은 단점이 되기도 하고, 단점은 장점이 되기도 합니다. 

BGP라는 Routing Protocol은 오히려 빠르게 동기화 하는 것이 단점이 됩니다. 왜냐구요? BGP는 전세계의 Network 정보를 동기화하는 Routing Protocol입니다. 만일, 특정 Network이 Cable이나 Port 불량으로 UP/DOWN을 반복하여 Network 변화가 자주 발생된다면 엄청난 정보가 전세계에 뿌려지게 되며 불안정해지게 될 것입니다. 그래서 BGP는 update 정보를 batch 형식으로 전달을 합니다. 무슨 말이냐구요?

오늘은 술도 한잔 했겠다, 크게 중요하지 않은 부분이라 제가 강의할 때 구체적으로 설명하지 않는 부분이지만 설명을 해 드리도록 하겠습니다. 내용은 짧고, 이해는 깊게... 화이팅!

한번 LAB을 통하여 확인해 보도록 하겠습니다.
구성도는 다음과 같습니다.


[R1 설정]

interface Loopback0
 ip address 1.1.1.1 255.255.255.255
interface Loopback1
 ip address 11.11.11.11 255.255.255.255
interface FastEthernet0/0
 ip address 10.10.12.1 255.255.255.0
interface FastEthernet1/0
 ip address 10.10.13.1 255.255.255.0
router ospf 1
 log-adjacency-changes
 network 1.1.1.1 0.0.0.0 area 0
 network 10.10.12.1 0.0.0.0 area 0
 network 10.10.13.1 0.0.0.0 area 0
router bgp 1
 no synchronization
 bgp log-neighbor-changes
 network 11.11.11.11 mask 255.255.255.255
 neighbor 2.2.2.2 remote-as 1
 neighbor 2.2.2.2 update-source Loopback0
 neighbor 3.3.3.3 remote-as 1
 neighbor 3.3.3.3 update-source Loopback0
 no auto-summary

[R2 설정]
interface Loopback0
 ip address 3.3.3.3 255.255.255.255
interface Loopback1
 ip address 33.33.33.33 255.255.255.255
interface FastEthernet0/0
 ip address 10.10.23.3 255.255.255.0
interface FastEthernet1/0
 ip address 10.10.13.3 255.255.255.0
router ospf 1
 log-adjacency-changes
 network 3.3.3.3 0.0.0.0 area 0
 network 10.10.13.3 0.0.0.0 area 0
 network 10.10.23.3 0.0.0.0 area 0
router bgp 1
 no synchronization
 bgp log-neighbor-changes
 network 33.33.33.33 mask 255.255.255.255
 neighbor 1.1.1.1 remote-as 1
 neighbor 1.1.1.1 update-source Loopback0
 neighbor 2.2.2.2 remote-as 1
 neighbor 2.2.2.2 update-source Loopback0
 no auto-summary

[R3 설정]
interface Loopback0
 ip address 2.2.2.2 255.255.255.255
interface Loopback1
 ip address 22.22.22.22 255.255.255.255
interface FastEthernet0/0
 ip address 10.10.12.2 255.255.255.0
interface FastEthernet1/0
 ip address 10.10.23.2 255.255.255.0
interface FastEthernet2/0
 ip address 10.10.24.2 255.255.255.0
router ospf 1
 log-adjacency-changes
 network 2.2.2.2 0.0.0.0 area 0
 network 10.10.12.2 0.0.0.0 area 0
 network 10.10.23.2 0.0.0.0 area 0
router bgp 1
 no synchronization
 bgp log-neighbor-changes
 network 22.22.22.22 mask 255.255.255.255
 neighbor 1.1.1.1 remote-as 1
 neighbor 1.1.1.1 update-source Loopback0
 neighbor 1.1.1.1 next-hop-self
 neighbor 3.3.3.3 remote-as 1
 neighbor 3.3.3.3 update-source Loopback0
 neighbor 3.3.3.3 next-hop-self
 neighbor 10.10.24.4 remote-as 2
 no auto-summary

[R4 설정]
interface Loopback1
 ip address 44.44.44.44 255.255.255.255
interface FastEthernet0/0
 ip address 10.10.24.4 255.255.255.0
router bgp 2
 no synchronization
 bgp log-neighbor-changes
 network 44.44.44.44 mask 255.255.255.255
 neighbor 10.10.24.2 remote-as 1
 no auto-summary

자... EBGP와 IBGP로 나누어서 짤막하게 진행해 보도록 하겠습니다.

※ Update 정보를 확인하기 위하여 모든 Router에 'debug ip bgp updates'를 실행해 놓았습니다.

1. EBGP Neighbor의 경우

■ 첫번째 Network 변화 (Shutdown)

R1(config)# interface loopback 1
R1(config-if)# shutdown
Apr  2 00:02:37.635: BGP(0): route 11.11.11.11/32 down : 다운되었군요!
Apr  2 00:02:37.635: BGP(0): no valid path for 11.11.11.11/32
Apr  2 00:02:37.639: BGP(0): 2.2.2.2 send UPDATE 11.11.11.11/32 -- unreachable : 바로 전달하는군요!

R2#
Apr  2 00:02:38.267: BGP(0): 1.1.1.1 rcv UPDATE about 11.11.11.11/32 -- : IBGP로 정보를 받았군요!
Apr  2 00:02:38.275: BGP(0): 10.10.24.4 send unreachable 11.11.11.11/32 : EBGP로 바로 전달하는군요!

Interface를 shutdown 하자 마자 IBGP Neighbor에게 바로 전달을 하고, 그 정보를 받은 Neighbor는 EBGP에게도 바로 전달을 하는군요. 즉, Triggered update가 바로바로 전달되는 것을 확인할 수 있습니다. 그럼, 뭐 OSPF나 EIGRP와 같은 IGP Routing Protocol하고 똑같네요! 그런가요?

예. BGP도 처음 Network 정보가 변경된 경우에는 Triggered Update를 통하여 바로 Network 변경정보를 전달합니다. 바로바로 전달해서 Network 정보를 동기화하는 것이 중요하니까요!

이번에는 한번 Interface를 한번 살려볼까요?

R1(config)# interface loopback 1
R1(config-if)# shutdown
Apr  2 00:02:46.231: BGP(0): route 11.11.11.11/32 up : Down된지 9초 후에 UP이 되었군요!
Apr  2 00:02:46.235: BGP(0): 2.2.2.2 send UPDATE (format) 11.11.11.11/32, next 1.1.1.1, metric 0, path : IBGP로 바로 전달하는군요!

R2#
Apr  2 00:02:47.147: BGP(0): 1.1.1.1 rcvd 11.11.11.11/32 : IBGP로 정보를 받았군요!
Apr  2 00:03:09.199: BGP(0): 10.10.24.4 send UPDATE (format) 11.11.11.11/32, next 10.10.24.2, metric 0, path : EBGP로 22초 후에 정보를 전달하는군요! (22초 + 9초 = 약 30초군요)

R1은 자신의 Interface에 변화가 있을 때, 바로 Triggered Update를 실시하지만,  R2는 EBGP로 정보를 보낼 때 22초나 있다가 전달을 하는군요. 왜 그럴까요? BGP는 Update 정보를 받은 후에 동일한 Network에 대하여 변경된 정보를 30초 이내에 받으면, EBGP로는 첫번째 정보를 받은 후 30초가 지나기 전까지 Update를 하지 않습니다.

보통 쉽게 설명하기 위하여 IBGP로 받은 정보를 EBGP로 넘길 경우 30초의 시간을 대기한다고 하지만, 정확한 설명은 첫번째 Network 변경은 바로 Update를 실시하고, 30초 이내에 동일한 Network에 대해여 변경된 정보를 인지하는 경우에는 30초가 지나기 전에는 Update하지 않는다가 정확한 설명입니다.

중요한 것은 Network의 변화에 바로바로 대응하는 것이 아니라 EBGP는 30초단위로 Network 변화를 Check해서 Update를 함으로써 BGP는 안정성을 우선으로 고려한 Routing Protocol이라는 점입니다.

2. IBGP Neighbor의 경우

R1(config)# interface loopback 1
R1(config-if)# shutdown
Apr  2 00:00:13.755: BGP(0): route 11.11.11.11/32 down : 다운되었군요!
Apr  2 00:00:13.759: BGP(0): 3.3.3.3 send UPDATE 11.11.11.11/32 -- unreachable : 바로 전달하는군요!

R3#
Apr  2 00:00:13.323: BGP(0): 1.1.1.1 rcv UPDATE about 11.11.11.11/32 -- : IBGP로 정보를 받았군요!

역시 EBGP와 마찬가지로 바로 Triggered Update를 실시하는군요.

다시, 살려볼까요?

R1(config)# interface loopback 1
R1(config-if)# no shutdown
Apr  2 00:00:15.831: BGP(0): route 11.11.11.11/32 up : Down된지 2초 후에 UP이 되었군요!
Apr  2 00:00:19.835: BGP(0): 3.3.3.3 send UPDATE (format) 11.11.11.11/32, next 1.1.1.1, metric 0, path
: 4초후에 Update 정보를 전달하는 군요! (2초 + 4초 = 6초군요)

R3#
Apr  2 00:00:19.235: BGP(0): 1.1.1.1 rcvd UPDATE w/ attr: nexthop 1.1.1.1, origin i, localpref 100, metric 0

첫번째 Network 변화가 발생한 경우에는 바로 Triggered Update를 실시하지만, EBGP와 마찬가지로 Network 변화가 자주 일어나니까 첫번째 변화가 있었던 시점에서 부터 일정한 시간이 지나야 Network이 변경되었다는 정보를 전달한다는 사실을 아실 수 있습니다. 그 시간이 5초랍니다.
왜 6초가 되었냐구요? 저에게 BGP 배우신 분은 아시죠... ^^

오늘의 숙제입니다. IBGP도 그렇고 EBGP도 그렇고 30초, 5초로 알고 있는데 왜 1초 정도가 더 추가되었을 까요?

보통 강의할 때는 'BGP는 매번 Triggered Update를 하지 않으며 이유는 안정성 때문이다.' 라는 수준에서 강의를 하는데.. 술이 웬수입니다. 오늘은 KT와 같은 Service Provider에서 강의할 때 설명하는 수준의 깊이였던거 같습니다. 너무 어려워 하지는 마시고요... 궁금하신게 있으면 언제든지 물어보세요.

DNS 서비스 파헤치기

네트워크 심화 | 2010.04.02 12:22 | Posted by 승진아빠

안녕하세요. 이경태입니다. 오늘은 다른 날보다 많이 피곤하군요.
6시간이 넘는 회의를 마치고 숨가쁘게 달려왔습니다. 빨리 교육센터가 자리잡아야 컨설팅 일을 좀 줄일 수 있을텐데 이것저것 다 하려니 체력이 바닥을 슬슬 드러내는군요. 영어 안되는 사람한테 해외 컨설팅 3년을 가라고 제안을 받아 정중히 거절 하려다가 내일 만나보자고 했습니다. ^^

저희 회사 직원들 다 가지 않으면 못간다고 했으니 저한테 떨어질 가능성은 높지 않아요. 만일, 가게 된다 하더라도 CCIE 과정 신청해 주신 분들은 무조건 CCIE 만들어 드리고 갈테니 걱정하지 마시고요, 해외 가 있어도 메일링은 계속될겁니다. ^^

하여튼 오늘은 DNS에 대해서 알아보도록 하겠습니다. DNS가 뭐죠? 'Name' 정보를 가지고, IP 주소를 가져오는 서비스가 DNS죠. 우리는 인터넷상의 모든 IP address를 다 기억할 수도 없고, 개인 PC에 저장해서 관리할 수도 없습니다. 그럼, DNS는 모든 IP address 정보를 다 가지고 있을까요? 그렇지 않습니다. 그럼 어떻게 IP address를 받아 올 수 있는건가요? 하나씩 알아보기로 하시죠!

■ Web-brower에 http://www.netrain.co.kr을 입력했습니다.

1. 자신의 'hosts file'에 등록되어 있는가를 확인합니다. 
윈도우 계열은 'hosts file'이 C:\Windows\System32\drivers\etc에 위치해 있습니다. 많은 회사에서 DNS 서비스 장애시에도 주요 업무서비스를 원할하게 운영할 수 있도록 하기 위하여, Client 프로그램 설치시나 PC관리서비스 등을 통하여 'hosts file'을 변경하기도 하죠.

2. 'hosts file'에 등록되어 있지 않으면 PC에 등록되어 있는 Local DNS 서버에게 Query를 보냅니다.
[Local DNS server]


[DNS Query]


마지막 줄에 www.netrain.co.kr에 대해 Query가 날아가시는 것을 확인하실 수 있습니다.
만약에 Local DNS의 cache에 해당 domain에 대한 정보가 기록되어 있다면 바로 정보를 전송하여 줍니다.

[DNS Query Reponse]


IP address가 '211.196.153.52'라는 군요. ^^ 그리고, 이렇게 DNS server와 clinet 사이에 통신을 할 경우에는 UDP 53번을 사용하게 됩니다.

3. 그럼, Local DNS server가 domain에 대한 정보를 모를 경우는 어떻게 될까요? 그런 경우에는 DNS Server는 Root DNS에게 문의를 합니다. Root DNS는 전세계 13개가 존재하는데 그 이유는 UDP를 사용하는 DNS Packet의 최대 size를 512byte로 제한하였는데 그 안에 넣을 수 있는 최대 정보가 13개이기 때문입니다.
 
만일 정보가 많아서 512byte를 넘는 경우는 DNS는 자동으로 TCP Port 53번을 통해서 다시 재전송을 하기 때문에 속도나 Resource 측면에서 문제가 되겠죠! 물론 PC와 Server 통신에서 보다는 DNS server간 통신에서 자주 발생하는 문제일 겁니다.

※ Root DNS 목록


그러면, Root DNS는 Level 1 domain인 'kr'을 담당하는 DNS server의 IP address를 Local DNS에게 알려줍니다. 그 다음 'kr'을 담당하는 DNS에게 Query를 던지면 Level 2인 'co.kr'를 담당하는 DNS server IP address를 Local DNS에게 알려줍니다. 그 다음에 또 질의를 하면 'netrain.co.kr'을 담당하는 DNS server IP address를 알려주게 되죠. 휴~ 복잡하군요.

현재는 이러한 복잡성을 단축시키기 위해 'co.kr'을 모두 'kr' DNS가 관리하여 한번에 던져주고 있습니다.

드디어 'netrian.co.kr'까지 왔습니다. 여기까지 찾은 것이 Public domain 주소입니다. 이제 그 집에 가서 sub-domain을 묻습니다. 마지막으로 'www.netrain.co.kr'이 누구냐고 물으면 최종적으로 IP address를 알려주게 되는 것입니다.

어렵지는 않으시죠? 요즘 DNS를 이용한 공격이 많으니 조심하세요. Network 엔지니어는 원리만 이해하면 되지만, 보안 담당자 분들은 각종 공격방법에 대응하는 방법도 아셔야 하잖아요. 원리는 저한테 물으세요. 공격방법은 인터넷에서 검색하시고요. 거기까지 공부할 시간이 없습니다. ^^

내일은 BGP에서 update 시간이 어떻게 진행되는지 LAB을 통하여 알아보도록 하겠습니다. ^^

DHCP 서비스 파헤치기

네트워크 심화 | 2010.04.01 01:00 | Posted by 승진아빠

DHCP 서비스가 뭐죠? 그렇죠! IP address를 자동으로 부여하는 것이 'DHCP'죠. 자동으로 IP를 할당받는 방법은 많습니다. DHCP 말고 다른 방법도 있냐구요?

예전에 Multi-Access 망에서 많이 사용하던 RARP, PPP Protocol의 IPCP 기능을 이용한 IP address 할당 (RFC1332) 등 다양한 Protocol이 통신을 위해 IP address를 할당하고 있습니다. 그 중에서 가장 보편적으로 사용되는 DHCP 서비스를 오늘 자세히 파헤쳐 보도록 하겠습니다.

DHCP는 Bootstrap protocol(Bootp)을 사용하여 IP address를 할당하는 서비스입니다. 어떻게 IP address 정보를 상호간에 전달하는지 살펴보도록 할까요?

다음은 DHCP packet을 Capture한 화면입니다.

공유기와 Router에서 DHCP를 구동시키고 capture를 해봤는데 결과에 차이가 좀 있군요.

[Cisco Router]

[공유기]

웃긴건 CCNA 책에는 Cisco Router 형식으로 쓰여 있고, BSCI 책에는 공유기 형식으로 쓰여 있다는 겁니다. 뭐가 정답일까요? 정답을 모를 때는 RFC를 찾아봐야겠죠. RFC2131 입니다.

RFC보면 뭐가 많이 써 있는데 중간부분에 이렇게 쓰여 있습니다.

If 'giaddr' is zero and 'ciaddr' is zero, and the broadcast bit is set, then the server broadcasts DHCPOFFER and DHCPACK messages to 0xffffffff. If the broadcast bit is not set and 'giaddr' is zero and 'ciaddr' is zero, then the server unicasts DHCPOFFER and DHCPACK messages to the client's hardware address and 'yiaddr' address.  In all cases, when 'giaddr' is zero, the server broadcasts any DHCPNAK messages to 0xffffffff.

무슨 말인지 모르시겠다고요? 조금 다르기는 해도 쉽게 설명을 드리면 이미 Client가 Server의 DHCP table에 등록이 되어 있는 경우라면 Server는 Clinet에게 packet을 Unicast로 전달하고, 그렇지 않은 경우에는 Broadcast로 전달한다는 이야기입니다.

DHCP Discover, Offer, Request, ACK가 뭐냐구요? DHCP는 다음 4단계를 처려 IP address를 할당받습니다.


1. DHCP Dicover : '누가 나 IP address 좀 줘라!' IP address를 요청하는 Packet
2. DHCP Offer : '여기 IP address 있다.' IP address를 할당하는 Packet (아직 DHCP table에 등록하지 않음)
3. DHCP Request : '이 IP address 쓰면 되냐?' 할당받은 IP address를 사용해도 되냐고 요청하는 Packet
※ DHCP Request Packet을 받았을 때 Client가 IP address를 받았음을 확인하고 DHCP table에 등록함
4. DHCP Ack : '그래, 그 IP 너 써라' IP address 사용을 허가하는 Packet

Packet을 하나씩 볼까요?

[DHCP Dicover]

UDP를 사용하고 Port 번호는 2개를 사용하는군요.
- bootpc(bootp clinet) - 68
- bootps(bootp server) - 67

[DHCP Offer]


[Your IP address]를 통하여 IP address를 할당해 주었군요. DNS 정보, Default-gateway 정보 등 다양한 정보를 option에 넣어서 전달을 해 주는군요.

[DHCP Request]


자기가 받은 IP address를 확인하기 위해 Requested IP address에 넣어서 사용해도 되냐고 문의를 하고, Host name 등 자세한 정보를 Server에게 알려주네요. DHCP Server가 Table에 등록하는데 필요한 추가 정보를 보낸다고 보시면 됩니다.

[DHCP Ack]


마지막으로 써도 된다는 메세지를 던지면 해당 IP address를 사용할 수 있게 되는 거랍니다.

별로 어렵지 않죠? 그런데, 잘 보시면 DHCP Server는 IP address를 할당해줄 때, 수동으로 설정한 IP address와 같은 IP address를 줘서 충돌나는 경우가 많지 않다는 사실을 발견하게 됩니다. 어떻게 된 일일까요? 수동으로 IP address를 설정한 PC에서 DHCP한테 자신의 정보를 보내지 않을텐데요.

DHCP는 IP address를 할당할 때, ICMP나 SNMP message 등을 던져서 자신이 할당할 IP address를 누군가 사용하고 있는지를 확인하고 IP address를 할당하는 Option이 있습니다. 대부분 DHCP Server에 이 기능이 enable되어 있습니다. 물론, 요즘은 OS 방화벽 기능 때문에 제대로 동작하지 않는 경우가 많지만요.

오늘은 DHCP에 대하여 알아보았습니다. 향후에 'Router를 이용한 DHCP Server 만들기', 'Router를 이용한 DHCP agent 만들기', 'DHCP client가 된 Router' 등을 통하여 보다 자세하게 알아보도록 하겠습니다. 내일은 DNS에 대해서 알아보도록 하시죠. ^^