안녕하세요~!! 이렇게 주말도 지나갔군요.

주말이 지나가도~ 포스팅은 계속됩니다~ to be continue(시간아 멈춰라 plzplzplz )


이번 포스팅은 네트워크 계층에서 사용하는 ip주소, 즉 IPv4주소에 대해서 이야기 해보려고 합니다.


IP주소의 길이는 4Byte(32Bit)입니다. 그럼 전 세계에 있는 IP주소의 갯수는 몇 개일까요? 2의 32개 승 입니다.(약 42억 개)

42억개라는 IP의 갯수는 많아 보이지만, 스마트폰의 개발 이후로 , 스마트 폰의 갯수보다 IP의 갯수가 적어졌습니다. 전 세계에 있는 모든 사람들이 스마트폰 혹은 노트북이 있다고 가정하면, IP가 부족하다는건 누구나 다 아는 사실입니다.

이것을 대체하기 위해서 IPv6이 나온겁니다.

하지만 IPv6이 사용되지 않는 이유는, 우리나라의 어느 기관이 IPv6으로 버전업을 시켰다고 해도, 미국에 있는 구글은 IPv4를 사용하고 있으면 통신이 되지 않습니다( 하나는 32Bit고 하나는 128Bit이기 때문이죠.)

전 세계적으로 IPv6을 사용하기 위해서는 어떻게 해야 하냐면..

전 세계에 있는 모든 기기를 동시에 종료하고, 동시에 IPv6으로 업그레이드 한 후 부팅하면 IPv6으로 작동하게 됩니다.


이미 저희가 사용하고 있는 컴퓨터,스마트폰에는 대부분 IPv6주소가 다 들어가 있습니다!  하지만 중간에 있는 라우터는 IP주소를 보기 때문에 옛날 라우터는 새 IPv6을 인식하지 못하기 때문에, 지금은 전 세계에 있는 장비들이 IPv6으로 변경이 된다면, 동시에 리부팅 한다고 계획되어 있다고 합니다. (허브,스위치는 아닙니다! IP주소를 보지 않습니다 !! )

하이튼 그렇고, 본론으로 들어가면


IP주소는 각 바이트당 점(도트)로 구분합니다. IP는 처음에 클래스 개념을 적용하여 IP주소를 지정했습니다. 아직 대부분의 인터넷은 클래스 기반의 주소를 사용하고 있고, 아닌곳도 있습니다.






클래스는 총 5개의 종류가 있습니다. - > 클래스 A,클래스 B,클래스 C,클래스 D,클래스 E


IP주소는 전체적으로 42억개가 있습니다. 그리고, 이 IP주소를 사용하기 위해서 5개의 클래스로 나누죠. ( 설마 5등분으로 나눈다고 생각하시진 않으시겠죠..?) 

컴퓨터는 2진법이기 때문에, 2등분 하는 것이 가장 좋다고 알려져 있습니다( android에서 image cache할 때도 2의 제곱으로 많이 하죠.)

그렇기 때문에 A클래스는 21억개가 되고, 나머지 21억개를 B,C,D,E클래스가 갖습니다.

그 다음 21억개(2의 32승 -1개) 를 반을 나눠서  B클래스에 10.5억개를 , 나머지를 CDE클래스들에게 줍니다. 또 반을쪼개서 C클래스와 DE, 반을쪼개서 D와 E . 이런식으로 나눕니다.(그림 참조 , D클래스부턴 공간을 위해 가로로 그렸습니다.)


이렇게 나누면 저희가 볼 땐 더 힘들어 지는 느낌이 팍팍 드는데!!! 하지만 이렇게 나눔으로써 계산이 참 편리해집니다.!!!!(어처피 내부에서 일어나는 거니까 우리랑 상관없찡)

다음 그림은 메모리를 표시해준 그림 입니다. 그리고 4Byte일 경우를 생각해서 그림에 Bit를 표시해 봤습니다. (해당 그림에선 비트를 생략했기 때문에 혼란이 있을 수 있으나, 32비트를 그리다가 더러워질 것을 생각해서 생략했습니다. 그리고 E클래스는 D클래스와 같은 넓이를 갖고 있지만, 사실상 E클래스가 D클래스보다 ½배 작습니다.)

이렇게 A클래스와 B클래스의 차이는 , 맨 왼쪽 Bit가 1이냐 아니냐의 차이 입니다. 

그리고 B클래스와 C클래스는 앞쪽의 bit의 갯수가 1개냐 2개냐에 따라서 좌지우지 하는 것 이죠.

이렇기 때문에 컴퓨터에서 모든 값을 2로 나누는 것이 제일 효율적인 겁니다.


그니까! 좀 더 쉽게 보면!!!

맨 앞쪽의 Bit가 0이면! A클래스 이다!

맨 앞쪽의 Bit가 1이면! 다음 Bit도 검사! 그 다음 Bit가 0이면 B클래스! 1이면 C클래스! 이런식으로 검사 하는것!

-> 이런것들을 분할 정복 알고리즘으로 많이 쓰기도 하지..

C언어에서는 Bit operation ( shift 연산자 )로 많이 사용하죠! - Bit operation을 사용하기 때문에 속도도 엄청 빠르죠!





그럼 여기에서 , 사용자가 보고 있는 10진수의 주소는 몇에서 몇 까지가 무슨 클래스인지를 인식할 수 있어야 합니다. 보통 저희가 사용하는 인터넷은 192.x~~, 172.x~~를 많이 사용합니다. 그럼 이제부터 알 수 있죠! 우리가 몇 클래스의 ip를 받아서 사용하고 있는지.

저희는 192와 172로 시작하는 IP를 많이 보게되죠!

192.x~로 시작하는 사용자는 C클래스 , 172로 시작하는 ip를 부여 받은 사람은 B클래스를 부여 받은 것 입니다.




위의 그림처럼 IP주소는 해당하는 각각의 클래스들( A,B,C,D,E클래스) 에 대해서, Netid와 Hosid로 나뉘어져 있습니다.. 이건 즉 사람도 성과 이름으로 이루어 져 있는 것 처럼말이죠. (일단 그룹핑을 한 것입니다.)

데이터가 계층화 되어 있는겁니다! ( 단계층 되어 있는건 이름만 있고 성이 없는 것! - 우리나라의 옛날 평민들이 성이 없는것과 같죠 .)

왜 이렇게 사용했냐면, 이름을 줄 때, 이름을 유일성때문에 이런 방법을 선택했습니다. 

이 세상에 유일성을 보장하고, 만약 성이 없다는것을 가정하면. 전 세계에 있는 사람들은 제가 이미 기호라는 이름을 선택했기 때문에, 다른 사람들은 기호라는 이름을 선택하지 못합니다. 하지만 성이 있다고 가정하면, 이기호,박기호,권기호 라는 이름을 갖을 수 있게 됩니다. (충돌이 나지 않는 것 입니다.)

IP주소는 전 세계에서 유일해야 하기 때문에 다음과 같은 방법을 선택한 것이죠. 그래서 IP도 사람과 같이 hosid와 netid로 나눈겁니다. - 3계층에서 IP로 상대방을 구분할 수 있어야 되니까요!


A클래스에서는 성을 표시하는 Network id가 1바이트, 그리고 이름을 표시하는 Hostid가 3바이트 입니다.

-A클래스에서는 성을 128개만 표현할 수 있지만( 왜 128개인지 잘 숙지 해야합니다!! ), 이름은 2의 24승개를 표현할 수 있습니다.

B클래스에서는 성을 표시하는 Network id가 2바이트 이름을 표시하는 Hostid가 2바이트 입니다.

- B클래스에서는 성을 2의 24개승을 표현할 수 있지만, 이름은 2의 24개승 밖에 표현을 하지 못합니다.

C클래스에서는 성을 표시하는 Network id가 3바이트 이름을 표시하는 Hostid가 1바이트 입니다.

-A클래스와 반대로 생각할 수 있죠!



여기서 생각을 해보고 넘어갑시다.

A클래스는 성 1개당 2의 24개승의 이름을 표기할 수 있습니다. 이 말은 즉, 그만큼 더 많은 자식을 갖을 수 있다는 뜻 입니다. 하지만 A클래스는 현재 미국에서( 미국에 달파라는 곳에서 인터넷이 시작했기 때문이죠 ,초기의 연구용 네트워크가 퍼진 경우. ) 거의 다 가지고 있습니다.

B클래스는 유럽, 일본, 그리고 한국도 조금 가지고 있습니다. 거의 1980년대에 B클래스까지 다 할당을 받아갔죠.

제가 다니고 있는 단국대학교는 C클래스 입니다. 그렇기 때문에 저희 학교 학생들이 다 사용하기에는 터무니 없이 부족하기 때문에 저희에겐 가상 IP를 발급해 줍니다. ( 192~ 172~ 이런 아이피들이죠. 이것들을 사설 아이피라 부릅니다. )



각 클래스는 고정된 수의 블럭을 갖습니다.

각 블럭은 고정된 크기를 갖는데, A클래스는 128개(2의 (8승 -1)개 ( 여기서 -1개를 하는 이유는 , 각 클래스마다 앞에 자신의 클래스를 나타내는 bit가 있기 때문에 자신의 클래스를 나타내는 bit를 빼준겁니다. 즉 A클래스에서는 맨 앞의 0이 A클래스를 나타내 주죠.))  , 블럭은 사람으로 보면 성씨를 갖고 있어야 자손을 퍼트릴 수 있죠. 이 성을 블럭이라 부릅니다.

컴퓨터는 2의 지수승으로 쪼개면, 뒷쪽은 똑같은 패턴으로 반복되고, 앞쪽은 0,1,2,3으로 순서가 증가가 됩니다.

이런 똑같은 블럭이 A클래스엔 128개가 있는겁니다.

그럼 A클래스는 이름 하나당.. 1600만개(2의 24승)의 IP를 갖을 수 있는거죠

여기서 못쓰는 IPid가 있습니다.

IPv4에서 Netid 0번,10번 ( 사설IP에서 사용) , 127번(루프백) 은 사용하지 못합니다. (A클라스에서 1600만개 *3개의 아이피를 사용하지 못합니다.)


그렇다면, 각 IP는 73.0.0.0 부터 255.255.255.255까지 IP를 줄 수 있다는 말이 되죠?

근데 여기에서도 또!!!!! 또~!!!!!!!!!!!!!! 사용하면 안되는 IP가 있습니다. 바로 73.0.0.0 ( 끝이 0 )인 경우는 그 집의 네트워크 주소( 권씨집안의 주소라 생각하면 편하죠! ) 입니다. 73.0.0.1부터 사용이 가능합니다. 그리고 255.255.255.255는 모두 라는 뜻 입니다.( 권씨집안의 모든 사람들은 들어라! 라는 뜻!) 이 주소는 같은 네트워크 주소 속에 있는 모든 컴퓨터들에게 데이터를 써서 보낼 때 이 주소를 사용합니다. - 보통 라우터를 254번을 줘버립니다.


정리를 해보면,

A클래스에서는 0,10,127 Netid를 못 쓰고, 블럭으로 들어가면 시작주소인 0번지와 맨 끝번지인 255번을 사용하지 못합니다 그리고 254번은 라우터한테 줘버립니다.


B클래스는 블럭의 수가 2의 14승개( 약 16000개) 입니다.(16-2개, B클래스를 나타내는 bit가 2개라서)

C클래스는 블럭의 수는 2의 21승(24-3) 약 200만개가 있습니다. 한 개의 블럭당 IP는 256개를 받을 수 있습니다. (수가 너무 적기 때문에, 교수님들의 사무실, 행정실 이런곳에만 공인IP가 들어가고 나머지 실습실 이런곳에는 사설IP가 들어가게 됩니다.)

C클래스는 보통 가정집 혹은 벤쳐에서 사용하게 됩니다.


D클래스는 멀티캐스트( 유료채널에서만 사용!)

E클래스는 미래에 사용하기 위하여 남겨둔 클래스 입니다.


벌써 세시 반을 넘겼네요~

포스팅을 대충써도 세시간이 넘다니~

상세하게 적으면 더 오래 걸리겠네요 ㅎㅎㅎㅎ

좀 더 자세한 포스팅은 아침 수업 다녀오고나서  랩실에서... 좀 더 상세하게 작성하도록 하겠습니다~


모두 굿나잇~

안녕하세요!


오늘만 두번째 포스팅이네염 

이번 포스팅은, 근거리 통신망의 전통적인 이더넷 구현 형태에 대해서 알아보겠습니다.


전통적인 이더넷 구현 형태는 3가지가 있습니다.

1. 10Base5 ( 굵은 이더넷) : 전송 매체로 굵은 동축 케이블을 이용한 접속 형태.

2. 10Base2 (얇은 이더넷) : 전송 매체로 얇은 동축 케이블을 이용한 버스 접속 형태

3. 10BaseT ( 꼬임쌍선 이더넷) : 허브(Hub)에 꼬임 상선(Twisted Pair)으로 연결된 스타형 접속 형태.


요즘 굵은 이더넷과 얇은 이더넷은 볼 일이 거의 없습니다. 왜냐하면 요즘은 10BaseT를 많이 사용하기 때문이죠. (아프리카 같은 곳에 자원봉사 하러 가면 볼 수도 있을겁니다)






10Base5(Thick Ethernet) - 1988년대에 많이 사용.

- 버스 토폴로지

- Thick Cable(RG-8) 사용

- 각 세그먼트는 최대 500m까지만 통신이 가능.

- 버스를 최대로 연결할 수 있는 길이는 2500m이다.

- 각 스테이션(PC)은 2.5m이상 떨어져야 함.


-> 각 각의 10Base5 선은 500m까지만 지원이 가능합니다. 그래서 각각의 10Base5를 연결하기 위해서는 리피터를 사용했습니다.




10Base2 (Thin Ethernet)

- 버스 토폴로지.

- Thin Cable(RG-58)사용

- 10Base5보다 설치가 쉽고 비용 저렴

- 최대 거리는 185m ( 10Base5 보다 짧음 ) - 약 200m라 외우시면 됩니다!





10BaseT

- 가장 널리 사용되는 방식

- UTP 케이블 사용

- 스타형 구조(허브나 스위치 사용)

- 최대 거리 100m

- RJ-45 커넥터 이용 ( RJ-45는 랜선에 있는 캡 이름임)

- 설치가 용이.


10BaseT의 연결 방법!




연결장치.


인터넷 구성

1. LAN과 WAN으로 구성 

-> Lan이 모여서 인터넷이 되고, 인터넷을 묶어주는애가 WAN

2. 다음의 연결 장치 필요 

-> 리피터(Repeater), 허브(Hub), 브리지(Bridge), 라우터(Routher), 스위치(Switch)

얘들을 구분하는 기준은 OSI7계층으로 구분합니다.


Repeater는 1계층만 갖는 놈입니다.(허브라고도 부릅니다)

Bridge는 1,2계층을 갖는 놈입니다.(보통 브릿지는 포트가 2개입니다. 포트가 여러개 인 것은 2계층 브릿지- swtich라고도 합니다!)

Router는 1,2,3계층을 다 갖는 놈 입니다. ( 하드웨어적으로 가까운 얘를 3계층 스위치라고도 하죠! )







Repeater : 물리계층에서만 동작하는 장치입니다! 거리가 멀어지면 신호가 약해집니다. 네트워크 내에서 정보를 전달하는 신호는 신호의 감쇠가 데이터 무결성을 훼손하기 전까지는 고정된 거리를 이동할 수 있습니다. 리피터는 신호가 너무 약하게 되거나 훼손되기 전에 신호를 수신하여 원래의 비트 형태로 재생(위 그림이 참고)합니다. 그런 다음 리피터는 새롭게 생성된 신호를 전송합니다. 과거에는 이더넷 LAN이 버스형 접속형태를 이용할 때 동축케이블의 길이 제한을 극복하기 위해 LAN의 두 세그먼트를 연결하는데 사용되었습니다. 그러나 오늘날 이더넷 LAN은 성형 접속형태를 이용합니다. 성형 접속형태에서 리피터는 허브(Hub)라는 다중포트 장치입니다. 

일상 생활에서 거리가 멀어지면, 멀리 있는 사람이 제 이야기를 못 듣는 것과 같죠! 그러면, 멀리 있는 사람에게 제 이야기를 들려주기 위해서는 중간에 제 말을 전달해 줄 사람이 필요합니다. 위의 그람과 같이 repeater는 그런 역활을 하죠!

1. 물리 계층에서만 동작하는 장치.

2. 거리가 멀어지면 신호 감쇠(신호 약화)발생

3. 신호 감쇠는 데이터 손상의 요인

4. 약화된 신호를 원래 크기로 증폭하는 기기

-> 리피터는 연결할 수 있는 팔이 2개입니다(서로 다른 두 기기만 연결할 수 있음 팔이 많아지면 허브라 부름.)

5. 리피터는 LAN 세그먼트를 연결(10Base5에서 사용)

6. 필터링 기능이 없어서 모든 패킷을 전송( 이게 단점 입니다! )






허브(Hub) - 트리구조로 엄청 많이 연결할 수 있다. 

1. 다중 포트 리피터 ( 10BaseT 등에서 사용)

- start형 포톨리지에서 다 들어오는 놈이다.

Cost가 낮으며 성능면에서 엄청 떨어진다.(다른 놈이 사용할 경우 성능이 급격히 떨어진다)

만약  A라는 컴퓨터가 B에게 데이터를 전송하게 되면, 같은 허브에 연결되어 있는 다른 컴퓨터들은 데이터를 동시에 수신할 수 있습니다.

리피터는 모든 비트를 내보내지만 필터링 기능을 갖고 있지 않습니다.(해당 그림 참조!)


허브나 리피터는 물리 계층 장치입니다. 이들은 데이터링크 주소를 가지고 있지 않고, 수신된 프레임의 데이터링크 주소를 확인하지 않는다. 단지 훼손된 비트를 재 생성하여 모든 포트로 내보내기만 합니다.





브릿지(Bridge)

브릿지(bridge)는 물리 계층과 데이터링크 계층에서 동작합니다. 물리 계층 장치로써 수신하는 신호를 재생합니다. 데이터링크 계층 장치로는 프레임 내에 포함되어 있는 프레임의 발신지,목적지 물리주소(MAC address)를 검사할 수 있습니다. 주소를 검색하여 필터링 기능을 제공합니다.( 브릿지 테이블 관리 수행 -> 인터페이스와 호스트 주소를 관리하는 테이블 )  - 아 ! 그냥 브릿지에는 학습 능력이 없습니다!

브릿지도 Repeater처럼 LAN 세그먼트를 연결합니다.

포트를 2개 갖고 있으며 필터 기능이 없는것(1계층) -> 리피터 | 브릿지 <- 포트를 2개 갖고 있으며 필터 기능이 있는것(1,2계층)

필터링 : 브리지와 리피터의 기능이 무엇이 다른가 하는 질문이 있을 수 있습니다! 브릿지는 필터링(filtering)기능을 가지고 있습니다. 브리지는 프레임의 목적지 주소를 검사하여 그 프레임을 어느 포트로 내보내야 하는지를 결정합니다.

브릿지는 필터링 결정에 사용되는 테이블을 가지고 있습니다.

브릿지도 팔이 두개뿐이 없습니다.

투명브릿지 ( Transparent Bridge)

- 오늘날의 브리지로 학습 브릿지라 한다.

- 초기에는 테이블이 비어있다가 프레임 송 수신을 통하여 인터페이스와 호스트 주소를 학습하여 테이블을 관리한다.

요즘 대세인 인공지능이 대중화 되었다고 생각해 보자!

인공지능이 공장에서 생성이 되어서 우리 집으로 배송이 딱 완료된 상황이라 가정하면!!! 배송이 막 완료된 인공지능은 머리속이 비어져 있죠?! 이 인공지능은 앞으로 행동하기 위하여 모든것을 학습해야 합니다.( A가 B에게 전송한다. C가 D에게 전송한다 이런식으로!)

이것을 학습하기 시작하면, 브릿지는 A,B가 내 왼쪽에 있구나! 라는걸 인식하게 되고, C,D는 내 오른쪽에 있구나! 이런것을 학습하게 됩니다.

이것이 계속적으로 학습하게 되면, 신호가 서로 넘어가지 않도록 합니다.(성능이 업그레이드 됩니다) 서로 넘어가지 않는 다는 것은 필터링이 되었다는 뜻이고, 서로 자신의 구역에서만 통신이 이루어 졌다는 뜻이고, A,B가 대화 하는 것은 C,D는 듣지 못한다는 뜻 입니다.

초창기 브릿지는 정적인 전달 테이블을 가지고 있었습니다. 시스템 운영자가 브릿지를 설치할 때 각 테이블 항목을 직접 손으로 입력했습니다. 이 과정은 간단했지만 실용적은 아닙니다. 새로운 컴퓨터가 추가되거나 컴퓨터 하나가 제거될 때 테이블은 다시 운영자가 수작업으로 변경해야 했기 때문이죠. 만약 한 컴퓨터의 MAC주소가 변경되면 마찬가지로 같은 상황이 발생하는데, MAC주소의 변경은 드문 일이 아니였기 때문에 큰 문제는 되지 않았죠.

정적 테이블보다 더 좋은 해결 방법은 주소를 포트로 자동적으로 변환해주는 동적 테이블입니다. 테이블이 동적으로 만들려면 프레임들의 이동을 보고 점차로 배워가는 브릿지가 필요합니다. 이 일을 하기 위해서는 브릿지는 목적지와 추발지 주소를 둘 다 조사해야 합니다. 목적지 주소는 테이블 확인(table lookup)을 이용하여 프레임 전달 방향을 결정하는 데 사용되며, 출발지 수소는 테이블에 새로운 항목을 추가하거나 변경하는 데 사용합니다.


(학습 브릿지)


1. 컴퓨터 A가 프레임 하나를 컴퓨터 D로 전송할 때, 브릿지는 A,D의 항목을 갖고 있지 않습니다. 이 프레임은 세 포트에 모두 전송되는 , 즉 네트워크에 플러딩(flooding)을 하게됩니다. 그러나 출발지 주소를 보고 브릿지는 컴퓨터 A가 1번 포트에 견결된 LAN에 있다는 것을 배웁니다. 이것이 의미하는 것은 A로 가는 프레임들은 다음부터는 포트 1를 통하여 전송된다는 것을 배웁니다. 브릿지는 이 항목을 테이블에 저장하여 첫 번째 항목이 되게 합니다.


2. 컴퓨터 D가 프레임 하나를 컴퓨터 B로 보낼 때 브릿지 B에 대한 항목이 없으므로 브릿지는 이 프레임을 또 네트워크에 플러딩 하고 테이블에 항목 하나를 추가하죠.


3. 이 학습은 테이블이 모든 포트에 대한 정보를 가질 때 까지 계속 됩니다.


그렇지만 이 학습 과정이 오랜 시간이 걸릴 수 있습니다. 예를 들자면, 만약 어떤 컴퓨터가 프레임을 전혀 보내지 않는다면(거의 없다는 거죠!) 이 컴퓨터는 테이블에 항목을 가질 수 없습니다. 투명하다는 뜻은 안 보인다는 뜻 입니다. 유리를 정말 깨끗히 닦아놓으면, 유리가 있는지 없는지 모릅니다. 이것이 투명한것이죠!

예를 들면, 우리 입장에서 인공지능이 투명한 것 입니다. 인공지능이 부팅 되서 얼마나 학습이 되었는지 신경쓸 필요가 없습니다. 그냥 저희 인간끼리 대화를 하면 인공지능이 알아서 학습을 하는 것 이죠. ( 우리는 인공지능을 전혀 생각할 필요가 없어집니다 )  이해됬나염?


음~ 브릿지지는 2계층 교환기 이죠?( 2계층 switch라고도 부르며, 원래의 브릿지는 포트가 2개가 있습니다. 포트를 여러개로 늘린것을 2계층 브릿징 스위치 , 2계층 스위치라 부릅니다 )

교환기는(switch)라는 용어를 사용하면 스위치가 두 가지 서로 다른 의미를 가지므로 조심해야 합니다. 이 용어는 장비가 동작하는 계층에 추가하면 명확해 질 수 있습니다. 교환기는 2계층 교환기와 3계층 교환기가 있습니다. 2계층 교환기는 물리 계층과 데이터링크 계층에서 동작하는데 보다 빠른 포워딩 기능을 갖는 브릿지가 됩니다.




라우터.

라우터는 1,2,3계층까지 커버하는 장비입니다. 라우터는 IP주소를 쳐다보게 됩니다. ( 브릿지는 물리 계층 주소를 쳐다봅니다 ) , 라우터는 소프트웨어 적인 프로그램이라 생각하면 됩니다. 라우터(router)는 물리 계층, 데이터링크 계층, 네트워크 계층에서 동작하는 3계층 장치입니다.. 물리 계층 장치로써, 수신한 신호를 재생하고. 데이터링크 계층 장치로써, 패킷 안에 포함된 물리 주소 ( 발신지와 목적지 ) 를 검사합니다. 네트워크 계층 장치로써 라우터는 네트워크 계층 주소 ( IP 계층의 주소 ) 를 검사한다. 브리지는 충돌 도메인을 변경하지만 라우터는 브로드캐스트 도메인을 제한한다.

라우터는 3계층(물리 계층, 데이터링크 계층, 네트워크 계층)장치이다.

라우터는 LAN들을 연결할 수 있으며 WAN들을 연결할 수 있고 LAN과 WAN을 연결할 수도 있습니다. 즉, 라우터는 네트워크 간 연결장치로, LAN과 WAN을 서로 연결할 수 있습니다. 라우터는 인터네트워킹 형태로 독립적인 네트워크를 연결하는 인터네트워킹 장치입니다. 이 정의에 따라 라우터로 연결한 두 개의 네트워크(LAN과 WAN)은 네트워크 또는 인터넷으로 연결이 됩니다.

리피터 또는 브리지는 LAN의 세그먼트를 연결합니다. 라우터는 인터네트워크(인터넷)을 구성하기 위해 독립적인 LAN 또는 WAN을 연결합니다.

라우터는 인터네트워크(인터넷)를 구성하기 위해 독립적인 LAN또는 WAN을 연결합니다.


라우터와 리피터 또는 브릿지는 세 가지의 중요한 차이가 있습니다.

1. 라우터는 각 인터페이스를 위한 물리,논리(IP) 주소를 가지고 있습니다.

2. 라우터는 물리적 목적지 주소가 패킷이 도착하는 인터페이스의 주소와 일치하는 패킷에서만 동작한다.

3. 라우터는 패킷을 전달할 때, 패킷(발신지와 목적지)의 물리 주소를 변경한다. - (앞 포스팅에서 말 했다 싶이, 서로 연결되어 있는 두개의 장치에서는 다른 프로토콜을 사용할 수 있기 때문에, 변환해 주는 작업도 필요합니다.)



1계층 - 리피터 (팔이 많아지면 허브)

2계층 - 1,2계층을 더해준 놈! 필터링 해주는애! 브릿지! 요즘은 스타형으로 팔이 많은놈을 쓰는데 이놈을 2계층 스위치라 한다! ( 보통 포트가 2개지만 많아지면 스위치!)

3계층 - 소프트웨어적으로 3계층까지 갖고 있는놈을 라우터라 하는데, 이것을 속도를 향샹시키기 위하여 하드웨어 화 한 것이 3계층 스위치 입니다.

3계층 스위치는 더 좋은 성능을 제공하기 위해 설계를 개선한 라우터 입니다. 3계층 교환기는 기능은 동일하지만 전통적인 라우터보다 더 빠르게 패킷을 수신하고, 처리하고 전송할 수 있습니다.


라우터는 패킷의 물리 주소를 변경합니다.




집에 있는 허브는 다중 포트 리피터 입니다.

다중 포트를 브릿지는 2계층 스위치 입니다.




이 포스팅은 TCP/IP프로토콜 제 4판(McGraw-Hill Korea 출판사)를 기반으로 작성되었습니다.

이번 포스팅은 근거리 통신망의 이더넷 프레임에 대해서 이야기 해보겠습니다!

앞 포스팅의 기초지식 복습 한문장!

OSI의 각 계층의 봉투는1 2계층 패킷(프레임) 3계층패킷 (데이터그램) 4계층 패킷(세그먼트)를 사용합니다!

이더넷 프레임 시작합니다.


프레임 형식

이더넷 LAN에서 보내지는 패킷을 프레임(Frame)이라 합니다. 이더넷 프레임은 7개로 구성되어 있습니다~!! 구성되어 있는 것들은

서문(preamble) , SFD , DA , SA , 데이터단위의 길이 또는 유형, 상위 게층의 데이터, CRC입니다. 

여기에서의 2계층의 프레임은 DA~CRC까지 입니다.

이더넷은 신뢰할 수 없는 매체에서 사용되는 수신된 프레임의 확인응답 매커니즘은 제공하지 않습니다. 확인 응답은 상위 게층에서 구현되어야 합니다.


이더넷 프레임의 형식을 볼까요!(Mac 프레임의 형식이라고도 하죠!)



* 여기 이후로 나오는 지국 은 목적지/발신지의 컴퓨터라고 생각하시면 됩니다


Preamble(서문) 

0과 1이 반복되는 7바이트(56bit)가 들어있는 802.3 프레임의 첫 번째 필드는 시스템의 들어오는 프레임을 수신하게 하고, 입력 타이밍을 맞추게 합니다. 패턴은 단지 경고와 타이밍 펄스를 제공합니다. 56bit 패턴은 프레임의 시작으로 지국이 일부 비트를 놓치는 것을 허용합니다. 실제로 서문은 물리 계층에서 추가 되므로, 프레임의 일부가 아닙니다.


Start Frame Delimiter(SFD - 시작 프레임 식별자)

두 번째 필드(1Byte-10101011)는 프레임의 시작을 알립니다. SFD는 지국이나 지국자들에게 동기를 맞추는 마지막 기회를 제공합니다. 마지막 두 비트 11은 수신자에게 다음 필드는 목적지 주소임을 알립니다. SFD도 물리 계층에서 더해집니다.

프레임은 Destination address에서부터 시작합니다. ( 대부분의 프로토콜에서는, 제일 앞에 목적지 주소가 오게 됩니다. 왜냐하면, 이 데이터가 원래 저에게 보내려고 했던 데이터 인지 아닌지를 판가름 하기 위해서 입니다.)

통신을 할 때 기계는 이 소리 저소리 어떤 소리든 자연에서 오는 소리인지, 혹은 다른 컴퓨터에서 발송되는 소리인지 구분하기 위하여 패턴을 사용합니다. 

만약 패턴이 있으면, 인공적인 것이고(지능을 갖고 있는 놈이 만드는 것이고) 패턴이 없으면 자연에서 우연히 만들어 진 거라고 생각합니다.

이해를 돕기 위하여~! 저희가 컴퓨터라 생각해 봅시다! 

전선에 신호가 신호가 들어오는지 인식하고 있다고 하면(CS 을 하고 있다고도 하죠!- Carrier Sence), 이 전선에 들어오는 데이터가 계속 들어오지만 데이터인지 잡음인지 인식하기 위해서는 규칙성으로 인식을 해야 합니다.

왜 이렇게 인식을 할까요~? 이건 외국인이 저희에게 말을 걸 때, 처음에 뭐라고 시작 했는지 기억이 안나는 것과 같습니다.

외국인이 What~~~~ Where~~ 이라고 물어보면 멍 때리고 있었던 저희는 그 첫 문장을 못 듣고, 뒷 부분만 듣게 되죠.

신호가 (2계층 프레임이) 들어오기 전에 신호를 계속해서 줍니다(01010101 이런식으로). 그럼 기계는 이 패턴을 초기에 인식을 하든, 몇 bit혹은 몇 byte를 놓히고 나서도 패턴을 인식한 후, 이렇게 생각합니다 "아 누가 나한테 말을 할란갑네~~!!!!??"

여기에서 패턴의 종료를 위에 그림과 같이 10101011 이런식으로 패턴의 종료를 11로 끝내버립니다. ( 1과 0이 연속해서 들어오다가 1이 두번 들어오면 Data의 시작이라는 것을 알 수 있죠.)

그럼 Destination address부터 CRC까지 인식할 수 있습니다.

인간으로 치면 , 누군가가 말을 하기 전에 헛기침을 하면서 시작한다던가, "주목~!!"이라는 말로 시작을 하는 것과 같은거죠.(이런 패턴은 많은 곳에서 활용합니다.)



Destination Address(DA - 목적지 주소)

목적지 주소 필드는 6Byte이고, 패킷을 수신하는 목적지 지국(컴퓨터) 또는 지국(컴퓨터)들의 물리 주소가 들어가 있습니다.


Source Address ( SA - 발신지 주소)

SA필드도 6바이트이고, 패킷 송신자의 물리주소가 들어가 있습니다.

여기에서 목적지 주소와 발신지 주소는 똑같이 6byte입니다. 하지만 모든 프로토콜이 6byte는 아닙니다. 이더넷과 무선랜이 6byte입니다.(다른것도 6byte일 수 있고, 혹은 길거나 짧을 수 있다는 소리죠.)


LengthPDU( or length or type , 발신지 주소)

이 필드는 길이 또는 유형 필드를 나타냅니다. 원래의 이더넷은 이 필드를 MAC 프레임을 이용한 상위 계층 프로토콜을 나타내는 유형 필드로 사용합니다. IEEE 표준에서는 데이터 필드에 있는 바이트의 수를 나타내는 유형 필드로 사용합니다. 이 두가지 이용은 오늘날 공통으로 사용합니다. 목적지 주소와 발신지 주소 이후에 데이터의 길이가 오는 이유를 알아야 합니다. 길이는 저희가 코딩하면서도 넣을 수 있습니다.  코딩을 하면서 넣어야 할 때는, 정보의 길이가 가변적일때 필요합니다. (길이의 정보가 고정적이면 길이가 필요 없죠!)

C언어로 예를 들면, 메모리에 어디부터 어디까지 데이터를 가져갈 것 인가에 사용하죠. 그 가져갈 만큼의 길이 정보를 LengthPDU에 넣어둡니다. 그리고 데이터를 읽어들일 때 LengthPDU 를 읽은 후, 그 만큼의 데이터를 읽어오죠. LengthPDU가 Destination address와 Source address 뒤에 나오는 이유는, 이더넷 프레임은 Destination과 Source address가 고정적으로 각 각 6byte이기 때문입니다. 이해됬쥬?


Data and padding ( data - 데이터)

데이터 필드는 상위 계층 프로토콜로부터 캡슐화된 데이터를 전달합니다. 최소 길이의 제한은 간단하게 이야기 해줄테지만, 정확한 CSMA/CD동작에 필요한 것입니다. 이더넷 프레임은 최소 512Bit 혹은 64Byte길이를 요구합니다 이 길이의 일부는 헤더와 트레일러 부분입니다. 만약에 헤더와 트레일러의 초소 길이(발신자 주소 6바이트,목적지 주소 6바이트, 길이 또는 유형 2바이트 CRC 4바이트)를 생각해 본다면 18바이트가 되는데 그러면 상위계층으로부터 온 데이터의 최소 길이는 46바이트 입니다. 만약 상위 계층 패킷이 46바이트보다 적다면 이를 만들기 위해 패딩이 이루어 집니다.

Data and padding의 길이는 최소 46byte 최대 1500byte입니다. 여기에서 최소 46byte라는건 무슨 뜻일까요? 많이 익숙하지 않죠? ( 보통 컴퓨터에서는 2진수로 표기되어 2의 배수에 익숙하죠.. 저도 여기에서 뭐지??라는 생각을 많이 했습니다ㅎㅎ)

Destination address(6Byte 이하 B) + Source address(6B) + LengthPDU(2B) + ~(데이터의 길이) + CRC(4B) 에서 가변적인 데이터의 길이를 제외하면, 18Byte입니다.


그럼 18Byte+46Byte=64Byte가 되는거죠.( 헐..넘나 쉬운것.. - 쉽죠?ㅎㅎㅎ)

프레임의 전체 크기를 봤을 때 64Byte부터 시작합니다. 그러기 떄문에 데이터의 최소 길이는 46Byte가 될 수 있는거죠!



그럼 여기에서 최소 데이터길이가 46Byte가 되어야 한다고 나와있습니다. 그럼 이런 생각도 갖을 수 있죠! " 그럼 만약 데이터의 길이가46Byte가 안된다면?? "

그래서 padding이라는 개념을 사용합니다. 데이터 뒤에 붙은 bit를 0으로 채워주는 거죠.


(뒤에서 다시 포스팅 하겠지만, LengthPDU는 여러종류가 있습니다. 정확한 Frame의 길이를 나타내 주기도 하고, Data and padding의 길이만 나타내 주기도 하며, 모



마지막으로 CRC가 뭔지 알아보겠습니다!

CRC는 지금 학습하시는 분들에게는 많이 중요하지 않습니다. CRC는 프레임의 오류 검출 필드라 부르는데, 2계층의 트레일러와 같습니다. (앞 포스팅에서 말 했다 싶이, 트레일러는 오류검출을 하기 위해서 Bit를 짝수로 맞춰주는 역활을 합니다.)


마지막 수정 2016-04-20

안뇽안뇽 시간 빠르네염~ 벌써 포스팅하고 있구 ㅎ.ㅎ

빨리 공부하고 끝냅시다!

근거리 통신망은 어느 거리를 근거리 통신망이라 할까요? 근거리 통신은 초 중 고등학교, 아파트 등등 저희가 평소에 사용하는 통신망이 다 근거리 통신망 입니다.


랜은 대학교, 혹은 회사 같이 규모가 조금 있는 곳에서 사용합니다. 랜은 제가 다니고 있는 멀티미디어 공학과 전용 랜 이런식으로 빼서 사용하죠.

그런 단과대학의 랜들이 모여서 단국대학교의 랜이 됩니다. 대표적인 랜이 이더넷 입니다. 이더넷은 버스형입니다. 토큰링은? 링형입니다. 무선랜은? 스타형 입니다.

뜬금없는소리

이더넷은 사무실과 집에서 사용하고 공장은 토큰링을 사용합니다. 무선망은 와이파이 입니다.

뭐.. 그니까!! 이더넷은 세계적으로 가장 많이 쓰는 인터넷 입니다


오늘은 이더넷에서 발생하는 이슈중에 하나인 CSMA/CD 에 대하여 포스팅 하려 합니다.


CSMA/CD ( Carrier Sence Multi Access Collision Detection )

처음 쉽게 설명하고 시작 하겠습니다. 이건 이전에 눈치게임을 생각하시면 됩니다.

4명의 학생에서 눈치게임을 했을 때 , 겹칠 확률도 있지만, 보통 순서대로 1 , 2 , 3 , 4 이런식으로 외치게 됩니다.

이런경우 어떤 알고리즘으로 동작 했을까요? 

공기로 누가 말을 하나 안하나 캐리어 센스(다른 사람이 말 하나 안하나 보고 느끼는것)를 한 것 입니다. 만약 다른 사람이 말을 하고 있으면, Chanel이 Busy하다고 말을 하고, 말을 안하고 있으면 Chanel이 free하다고 이야기 합니다.

Carrier Sence Multi-Access - 여러명이 공기를 통하여 일단 말을 합니다.

Collision Detection - 그리고 서로 겹쳤나 느끼는 겁니다. 충돌이 안 났으면 행복한거고, 충돌이 난 경우 다시 게임을 해야 합니다.


쉽죠?


이더넷 통신 네트워크를 사람과 빗대어 이야기 해보겠습니다.

만약 특정한 장소에서 제 친구가 말을 하면, 다른 사람들도 그 말을 듣습니다. 그리고 저도 그 말을 듣고 대답을 하지만, 다른 사람들은 자신과 상관이 없으면 무시를 합니다. 근데 어떤 사람들은 대화 내용을 바탕으로 나쁜짓을 합니다. 

예를 들면, 어떤 커플이 인터넷 상으로 데이트 장소를 정하고 있습니다. 그리고 그 인터넷은 암호화가 안 되어 있으면 소리를 다 들을 수 있습니다. 이런 뜻이죠. 인터넷은 이런식으로 동작합니다.

여기서 이런 질문을 던질 수 있겠죠.

뭐...뭐?! 내가 말을 한 것을 다른사람들이 다 들을 수 있다고!? 그럼...내가 지금까지 말 했던것은 다 다른사람들이 보고 있었던거야!? 헐?! 뭐야!!!? 비효율적 아니야!?

답 : 이전 포스팅을 참고하시길 바랍니다.


그럼, 만약 두개 이상의 PC가 프레임을 송신하면 어떻게 될 까? 컴퓨터는 당연히 못알아 먹죠 ㅋㅋㅋㅋ(두개의 소리가 섞여서 못 알아 먹음.) 이렇게 못 알아 듣는 말을 충돌이라 합니다. 충돌이 났을 경우 수신이 불가능하다고 하는 것 이다!(뒤에서 이야기 할 테지만, 이럴때 jamming signal을 던진다)


다시 정리하면, 

Carrier Sence(데이터를 보내기 전에, 전송 매체가 사용중인지 알아낸다.-내가 말하기 전에 공기가 사용중인지 확인한다)

Multi Access(전송 매체가 사용중이 아니라면, 내 귀가 사용중이 아니라면 누구든 사용 가능하다.)

Collision Detection (내가 말 하고 있는 도중에 다른 사람이 말을 하면 충돌이 났다고 기계는 생각한다.)


이것이 CSMA/CD 입니다.


그래서 사용하는 기법이 RTS / CTS가 있습니다 

station ready to send clear (RTS - 보낼 준비가 완료되었다)

clear to send - CTS

A라는 컴퓨터가 B라는 컴퓨터에게 데이터를 보내기 위해서 먼저 말을한다

B야!! 나 데이터 보낼꺼니까 준비해!!

그래서 어떤 특정한 선에다가 신호를 써서 보낸다.( 그럼 RTS가 1로 쭈욱~~ 들어온다 , 다른 예로는 수업중 교수님에게 질문 하려고 손 드는것! 그리고 교수님이 손 내리라고 하는것이 신호를 내리는 것(clear)!)


캐리어 센스 하면 2가지 중 하나이다. 이미 쓰고 있거나 아니면 쓰지 않고 있거나!

안 쓰고 있다는 것이 채널이 free 하다는 것이고, 쓰고 있으면 채널이 busy 하다는 것이다!

채널이 비면 CTS를 보내준다!


Trasmit gamming signal

한 100개서 통신을 하면 충돌이 많이 날 것인데, 이것을 정하는 기준이 되게 어렵다.(나중에 포스팅 하도록 하겠다)


컴퓨터 ABC가 있다. ABC가 다 데이터를 전송 하려고 한다. 그래서 ABC가 Carrier Sence 한다!(전송이 가능한지 듣는것!) 그리고 나서, 공기가 비어 있다고 생각하면 서로 보낼 수 있다고 생각한다 (Multi-Access) 그리고 A와 C가 데이터를 보낸다! 그럼 중간에 충돌이 발생할 것이지!(Collision Detection) 그럼 충돌이 난 사실을 누가 알고 있을까!? 

정답은 아무도 모른다!

왜 그럴까!?  정답은 "충돌은 내가 말을 할 때 내 귀에도 다른 말이 들리면 충돌이다! "라는 말을 생각해 보자. 컴퓨터도 말을 하고 있지만, 아직 신호가 들어오지 않았습니다.B는 말은 안하고 있고 신호만 있습니다. C는 아직 말하고 있지만 A의 데이터가 도착하지 않았으니 충돌이 나지 않았다고 생각을 한다.


그런데 시간이 지나서 A의 데이터가 C로 도착하거나 C의 데이터가 A로 도착하면 충돌이 난 것을 알 수 있다.

그러고 나서 다른놈에게 도착하면 충돌이 난 것을 알고 Gamming signal을 보낸다. 그리고 생각합니다 " 나 말고도 숫자를 외친 애가 있구나 .. 조금 기다려야지"

이러면서 B가 어부지리로!!!!!!!!!!! 신호를 보냅니다. 


우리 집에서 이런 일이 계속 발생한다.

만약 나를 괴롭히는 형이 지금 영화를 실시간 스트리밍으로 보고 있다고 생각하자.

그럼 우리는 무선랜에 파일 다운을 걸어버린다. 그럼 영화가 엄청 끊길 것이다 ㅋㅋㅋㅋㅋㅋ (데이터가 왔다가 멈췄다가 할 거기 때문에)

여기에서 저런 젬 신호가 왔다갔다 하면서 싸우는 것이기 때문이죠 ㅋㅋㅋ 

이건 옛날에 누나가 인강들을때 저도 동영상 켜놓고 막 이럣던 기억이 있네여 ㅋㅋㅋ


포스팅 내용은 실시간으로 변경될 수 있습니다. 조금 맞지 않는 개념 혹은 틀린 개념이 있으면 언제든지 댓글 달아주세요!

마지막 수정 : 2016-04-20

방금까지 OSI 7계층 (OSI 7 Layer)에 대해서 조금 살펴봤습니다.

포스팅이 너무 길어서 잘라서 포스팅 할 까 생각도 했지만, 한번에 다 읽으시는 분들도 계시니까ㅎㅎ


그래서 이번 포스팅은 가장 코어(core)적인 것만 작성해 보도록 하겠습니다.

OSI 7계층 종류.


1계층 : 물리계층

2계층 : 데이터 링크 계층

3계층 : 네트워크 계층

4계층 : 전송 계층

5계층 : 세션 계층

6계층 : 프리젠테이션 계층

7계층 : 응용계층(표현계층) 

1~4계층은 TCP/IP의 4계층이라고도 부르며, 5~7계층은 개발자가 직접 개발(코딩)하는 부분입니다.



데이터 단위.(봉투단위)


1계층 - Bit ( 비트 )

2계층 - Frame ( 프레임 )

3계층 - Datagram ( 데이터그램 )

4계층 - Segment ( 세그먼트 )



각 계층의 주소지정.- 봉투에 주소를 작성한다.


2계층 - 물리 주소지정(MAC주소) 

3계층 - 논리 주소지정(IP주소) 

4계층 - 서비스 지점 주소지정(Port 번호)




OSI 7계층의 신뢰성을 보장하는 계층

4계층 - 전송 계층은 발신지 대 목적지 레벨에서 오류 제어와 흐름 제어를 통하여 순서대로 도착하는 것을 보장한다.

-> 경우에 따라서는 2계층에서도 재 전송을 하기도 합니다(LTE)


주소 작성.

4계층에서 보내는애, 받는 애의 포트번호를 작성한다.(프로세스 - 프로세스 통신이기 때문에)

3계층의 주소는 ip주소를 작성.

2계층은 받는 애의 물리주소를 작성.




포스팅 제목을 작성하려 하면 항상 어떻게 작성해야 할 지 고민되네요ㅋㅋ

이번 포스팅에서는 TCP/IP의 제 1계층인 물리계층에 대하여 좀 더 추가적으로 설명하는 방향으로 작성하려고 합니다.


OSI 7계층 중

1계층인 물리계층 , 2계층인 데이터 링크 계층은 알고보면 같은 하드웨어가 제어합니다.

보통 아직까진 전 세계적으로 이더넷 칩으로 많이 들어가 있습니다.

 처음에는 이더넷 보드로 많이 들어가 있었습니다. 하지만, 이더넷 보드가 점 점 줄어들고, 그냥 보드 속으로 들어가기 시작했습니다.

요즘에는 칩셋에 많이 들어가기도 합니다. 


TCP/IP가 막강한 이유는,

하위 계층( 물리계층, 데이터링크 계층)이 무엇이 오든 상관이 없습니다. 


만약 어느 회사에 신입사원으로 A,B라는 사람이 최종 면접까지 오게 되었습니다.

그런데 회사 면접에서, A라는 사람은 " 저는 제 아래에 누굴 붙혀주셔도 열심히 근무할 수 있습니다!" 라고 대답을 하였고,

B라는 사람은 "저는 아래에 꼭 붙힘성이 좋아야 되는 사람이 붙혀주셔야지 일할 수 있습니다."라고 이야기 했다.

그럼 당신이 사장이라면 누구를 뽑겠습니까?
아무것이나 올 수 있다는 것은 엄청난 것입니다. 즉, 미래에 아직 개발되지 않은 무언가가 개발이 된다면 "언제나 갖다 붙힐 수 있다"라는 엄청난 강점이 있다는 거죠. ( 모듈화 쨩..)

TCP/IP가 문제가 많은 프로토콜임에도 불구하고 지금까지 살아남을 수 있는 이유는 이러한 이유입니다..


그럼 하부에 무엇을 붙힐 수 있을까요?


1.LAN - Local Area Network ( ex wifi )

- 보통 AN은 Area Network의 줄임말 입니다. 그 지역을 커버하는 네트워크 라는 뜻입니다.

이 앞에있는 L은 네트워크의 크기를 말해주는 것입니다.

우리집 같은 경우도 로컬, 벤쳐도 로컬, 학교도 로컬 , 대기업속에서 사용하는 인터넷이 로컬단위입니다

2.MAN - Metropolitan Area Network (미국 NY 근처의 위성도시드를 Metropolitan 지역이라 말하죠! 우리나라로 따지면, 서울특별시 같은곳 이랄까..??ㅎㅎ ) 

- LA의 시장이나, 아니면 어디 주의 주지사가 자기의 마음을 먹고 그 동네에 통채로 네트워크를 설치하면 그것이 메트로 폴리탄 네트워크 입니다.

3.WAN - Wide Area Network - (LTE)

- 나라 전체를 커버하는 네트웍입니다. 우리나라같은 경우죠.

4. PAN - > Persnal Area Network  개인영역의 네트워크.

5. BAN -> Body Area Network.


1. 물리 계층과 데이터 링크 계층.

물리 계층 통신 형태.










와.. 그림 정말 직관적이죠?!ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 그리는데 진짜 힘드네여.. 댓글좀 꼭 달아주세요ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ
bit으로 되어있는 스트림을 A에서 시작되고, B까지 보내는 것.

A에서 시작한 데이터는, 각 링크를 따라서 데이터가 전송이 됩니다. 물리 계층의 통신 형태로만 봤을 경우는 통신은 이렇게 진행됩니다.

TCP/IP는 물리 계층과 데이터링크 계층에서 특정 프로토콜을 규정하지 않고, 모든 표준과 기술적인 프로토콜을 지원합니다. 이 레벨에서 통신은 hop - to - hop / node - to - node 이거나, 컴퓨터 라우터 간의 통신입니다. 물론 통신 단위는 비트이며, 두 노드 간에 연결이 설정되면 비트 스트림이 연결에 따라 흘러가게 됩니다. 그렇지만 물리 계층은 각 비트를 개별적으로 처리합니다. 위에서 보신 그림은 노드간의 통신을 보여줍니다.

이 시점에서, 두 대의 컴퓨터 간의 서로 라우터 R1,R3,R4를 통하여 서로 통신하기 위한 가장 효율적인 방법을 알게 된다고 가정합시다.여기서 가장 큰 문제는, 효율적인 방법을 알아내는 것입니다.

만약 노드가 n개의 링크에 연결되어 있다고 하면, 각 링크 당 하나씩 n개의 물리 계층 프로토콜이 필요합니다. 

그림은 통신에 단지 하나의 물리 계층만 포함되어 있는것만으로 보여줍니다 각 컴퓨터는 단지 하나의 링크에 포함되어 있고, 각 라우터는 두 개의 링크에만 포함되어 있습니다. 그림에서의 컴퓨터 A,B간의 비트의 연결은 4개의 독립적이고 짧은 여행으로 이루어 집니다. 라우터 R1은 세 개의 물리 계층(두 개는 우리의 시나리오에서 보여준)을 갖습니다. 링크 1에 연결된 계층은 링크1에 사용되는 프로토콜 형식에 따라 비트를 받습니다. 링크3에 연결된 계층은 링크 3에서 사용되는 프로토콜 형식에 따라 비트를 보냅니다.. 포함되는 다른 두 개의 라우터도 같은 상황입니다.

물리 계층의 통신 단위는 비트이다.


여기에서 데이터 링크 계층의 통신 형태로 보면 조금 차이점이 있습니다.

데이터 링크 계층

먼저 그림 보고 갈게요..

데이터 링크 계층의 통신 형태








Datalink계층에서 데이터는 Datalink->physical -> physical -> Datalink  이런식으로 반복적으로 이동하게 됩니다. 


2계층이니 hop - to - hop으로 전송을 하게 됩니다.


TCP/UDP는 데이터링크 계층에 대해 특정 프로토콜을 규정하지 않습니다. 모든 표준과 프로토콜들은 이를 지원합니다. 이 레벨에서도 통신은 (두 홉 or 노드) 간의 통신입니다. 그렇지만 통신 단위는 프레임(Frame - 2계층의 봉투)이라는 패킷입니다. 프레임은 네트워크 계층으로부터 받은 데이터에 헤더가 더해지고 트레일러가 더해짐으로 캡슐화가 된 패킷입니다.

통신 정보 가운데 헤더는 프레임의 발신지와 목적지를 포함합니다. 목적지 주소는 노드들이 링크에 연결되어 있기 때문에, 프레임의 정확한 수신자를 규정하는 데 필요합니다. 발신지 주소는 프로토콜에 의해 요구될 수 있는 가능한 응답이나 확인응답을 위해 필요합니다.

컴퓨터 A 와 라우터 R1 간의 이동하는 프레임은 라우터 R1 과 R3 간에 이동하는 프레임과 다르다는 것을 주목해야 합니다.

프레임이 라우터 R1에 의해 수신될 때, 이 라우터는 왼쪽에 나타나있는 데이터 링크 프로토콜로 프레임을 전달합니다.(왼쪽 - Link1에서 사용하는 프로토콜로 전달 한다는 것) 프레임은 개방되고 데이터는 제거 됩니다. 그러면 데이터는 라우터 R3로 보내지는 새로운 프레임을 생성하기 위하여 오른쪽(Link2에서 사용하는 프로토콜을 사용하여 ) 에 나타나 있는 데이터링크 프로토콜로 보내집니다. 이유는 링크 1과 링크 3이 서로 다른 프로토콜을 사용하게되면 서로 다른 형식의 프레임이 요구됩니다. 또, 그림에는 프레임의 물리적인 이동은 보여주지 않았습니다. 물리적인 이동은 물리계층에서만 이루어 집니다. 두 노드는 데이터링크 계층에서 논리적으로 통신하는 것이지 물리적이 아닙니다. 

다시 말하면, 라우터 R1에 있는 데이터 링크 계층은 프레임을 컴퓨터 A에 있는 데이터링크 계층으로부터 직접 보낸 것으로 생각합니다.

A에서 R1으로 보내지는 것은 한 물리 계층에서 다른 물리 계층으로 가는 비트 스트림입니다. A에서 프레임은 비트 스트림으로 변환되어 지고, R1에서 비트들은 프레임으로 전환되는데, 이는 프레임이 교환되는 두 데이터링크 계층을 이해하는 데 도움을 줍니다.

데이터 링크 계층에서의 봉투 단위는 Frame입니다.




3계층으로 와봅시다.

네트워크 계층.


네트워크 계층의 통신 형태



2계층까지는 방금 그림처럼, 하드웨어로 제어가 됩니다. 근데 3계층은 1,2계층처럼 어렵진 않습니다. 

3계층의 TCP/IP는 인터넷 프로토콜(IP)를 지원합니다.

IP : Internet Protocol - TCP/IP 프로토콜에서 사용되는 전송 메커니즘.

- 인터넷은 수 없이 많은 프로토콜로 구성되어 있습니다. 그 중 프로토콜의 하나의 이름이 IP라는 놈이 있습니다. 막강한 놈이죠!!! 얘가 있기 때문에 지금까지 다른 프로토콜이 살아남을 수 있었던 겁니다!!!(이유는 나중에 한 포스팅으로 따로 분리하여 설명하도록 하겠습니다.)

(ARP,RARP,IP,ICMP,IGMP)

IP는 한 문장으로 말할 수 있습니다. "신뢰성 없는 비연결형 데이타그램 (Datagram) 프로토콜! "

한국 사람이 데이터그램을 "떠돌이"라고 정의를 했습니다. 인터넷이라는 바다가 있습니다. 우리가 구글에 패킷을 딱! 쏘면~ 패킷이 구글까지 가야되는데, 구글까지 가는동안 패킷이 바다를 둥둥~~ 떠다닙니다. 이러다가 어떻게든 구글에 도착하고, 구글이 응답을 하면 이 응답도 바다에 둥~둥 떠다니다가 우리에게 응답이 오게 됩니다.

떠돌이는 가족이 없습니다. 그렇기 때문에 이 세상에서 자기만 혼자이기 때문에 다른 사람과 연관이 없습니다. 이렇기 때문에 인터넷에 엄청난 수의 떠돌이들이 돌아다닙니다. 그러다가 중간에 죽기도 하고(손실) 도착도 하기도 합니다.

그리고, 중복될 수 있습니다. ( 죽었다 라고 생각됬지만, 알고보니 살아있던거죠ㅋㅋㅋ. 3계층에서 죽을 수 있었지만, 4계층이 신뢰성을 보장하기 때문에 재전송을 할 수 있습니다. - IP는 경로를 기록하지도 않고, 자신의 목적지에 도착하면 데이터그램을 재조정하는 기능을 가지고 있지 않습니다.)

이와 같이 에러가 발생할 수 있기 때문에 에러가 많은 프로토콜이라 생각합니다.( 다른 이유도 많죠.)

하지만 IP는 이렇게 말합니다  "나는 !! 최선을 다 했어!! -Best-Effort!!" - 하지만 오류검사나 추적을 제공하지 않습니다.

매우 안좋게 보이죠?

하지만 이것이 전 세계를 석권했습니다. 그 이유는. Internet를 관리하는 곳을 본 적이 있나요??

우리 학교 네트워크는 학교에서 관리하고, KT는 KT에서 관리하고, 이런 네트워크가 모여서 Internet이 됩니다.

하지만 이걸 다 묶어서 한번에 관리해 주는 사람이 없습니다. 그렇기 때문에 저희가 노트북으로 AP를 종료하고, 연결하고 할 때 따로 승인을 받거나 이러지 않아도 되는겁니다.(지금 이 순간에도 어느 네트워크는 부팅되고 있고, 어떤 네트워크는 종료되고 있다는게 그 증거죠.)

종료된 네트워크에는 도착할 수 없기 때문에, 전송된 데이터는 죽습니다. 그럼 이런 궁금증을 갖을 수 있죠.

종료된 네트워크에 무조건 도착을 해야한다면? -> 그렇다면 종료된 네트워크가 켜지기 전 까지 데이터를 기다려줄 저장공간은? 종료된 네트워크에 어떠한 요청이 올 줄 알고? 주소를 잘못 작성하여 잘못 요청이 왔다면? 어떻게 할겁니까? - Super Count Example!!! 훗훗훗훗훗 메롱~


IP에 대해서 설명이 조금 길어졌죠??ㅎㅎㅎ;;






ARP(Address Resolution Protocol)

->전화번호를 생각하면 쉽습니다. 전화번호에 우리가 이름을 넣으면 전화번호가 나옵니다.( ip주소를 넣어주면 물리주소로 알려준다)

그리고 전화번호가 생각나지만, 이름이 생각나지 않을 수 있습니다. 이럴경우를 대비해서

RARP(Reverse ARP)가 있습니다. (물리주소 - > IP주소로 변환)

->4월 말이나 5월 초에 포스팅 할꺼에여..

ICMP (Internet Control Message Protocol) - 문제점을 통지할 필요가 있을 경우, 문제점을 알려주는 프로토콜이다. 



A가 B에게 데이터를 전달 하려고 하면, R1,R3,R4를 걸쳐서 전달 되죠?  이 경로를 찾아주는 것이 3계층의 역활입니다.

경로가 결정 되면, A는 R1에게 전달 하라고 2계층에게 전달합니다. 그럼 R1에게 전달 되고, R1의 네트워크 계층이 다시 R3에게 가라고 2계층에게 명령을 하면, 전달되고 하는 방식으로 전달이 됩니다.


네트워크 계층에서의 통신과 데이터링크나 물리 계층에서의 통신 간에 주요 차이점이 있습니다. 네트워크 계층의 통신은 종단 대 종단인데 반하여 다른 두 계층 간의 통신은 노드 대 노드입니다. 컴퓨터 A에서 출발하는 데이터그램은 컴퓨터 B에게 도착하게 됩니다. 라우터의 네트워크 계층은 가장 최적의 경로를 찾기 위해 패킷의 발신지와 목적지를 조사할 수 있습니다. 그러나 이들은 패킷이 내용을 변경하는 것은 허용하지 않습니다. 물론, 통신은 논리적인 것이지 물리적인 것은 아닙니다. 

컴퓨터 A와 B의 네트워크 계층이 데이터그램을 보내고 받는 것으로 생각하지만 실제 통신은 물리 계층에서 이루어집니다.




전송계층

전송 계층의 통신 형태.


전송 계층과 네트워크 계층 사이에는 큰 차이점이 있습니다. 물론 네트워크에 있는 모든 노드들이 네트워크 계층을 갖는 것이 필요하지만 단지 두 컴퓨터만 전송 계층을 가질 필요가 있습니다. 네트워크 계층은 컴퓨터 A로부터 컴퓨터 B까지 개별적인 데이터그램을 보내는 책임을 갖지만, 전송 계층은 A에서 B까지 사용자 데이터그램, 패킷, 세그먼트라는 전체 메시지를 전달하는 책임이 있습니다. 세그먼트는 몇 개 또는 몇십 개의 데이터그램으로 이루어질 수 있습니다. 세그먼트는 데이터그램으로 나뉠 필요가 있고 각 데이터그램은 전송을 위해 네트워크 계층으로 전달되어져야 합니다. 인터넷은 각 데이터그램에 대해 서로 다른 경로를 지정하므로 데이터그램은 순서가 바뀌어 도착하거나 손실될 수도 있습니다. 컴퓨터 B에 있는 전송 계층은 모든 데이터그램이 도착되어, 조립되고, 세그먼트로 만들어질 때 까지 기다려야 합니다.

우리는 두 전송 계층이 서로 세그먼트를 이용하여 통신하는 것으로만 생각하지만 통신은 물리 계층에서 비트 교환을 통하여 이루어 집니다.


전통적으로, 전송 계층은 TCP/IP프로토콜에서 두 개의 프로토콜에 의해 표현됩니다.( 최근에 SCTP(Stream Transmission Protocol)라는 프로토콜이 발표되긴 했습니다.)



전송계층에는 2개의 프로토콜이 있습니다.

1. TCP/IP

2. UDP


UDP는!

우리가 소켓 프로그래밍 할 때 두개중 하나를 많이 선택합니다.

선택을 할 때, 이름을 주의깊게 보면 좋습니다. 그 중 UDP는 User Datagram Protocol 입니다. 이름 중 Datagram이 붙어 있으니, 떠돌이 입니다. 떠돌이들은 서로 연관관계가 없기 때문에 신뢰성이 없습니다. (전체적으로 신뢰성이 없는 프로토콜 입니다.) Datagram Protocol 입니다. Datagram이 포함되어 있지만, IP와 구분이 되기 어려워서 User가 붙었습니다. 그래서 IP위에 있다고 해서 User Datagram Protocol입니다.

특징.

- 데이터 그램의 상호 연관성 없이 단순 전달한다.

- 패킷의 손실, 중복 전달, 비 순서적 전달 발생 가능합니다.


TCP는!

Transmission Control Protocol 의 줄임말입니다.

제가 이전에 들었던 미쳐버린 파닭 사장님의 이야기와 비슷합니다.

제가 친구에게 1000원을 전달해 주라고 하면, 그 돈이 전달되었다고 하기 전 까지 1000원을 계속해서 전달해 주는겁니다.( 이터가 갈 때 까지 계속 전송한다. - 전송을 제어하는 프로토콜이라 말한다.)

특징.

- 연결 설정 후, 스트림(Stream) 형태로 데이터 전달.(우리가 전화를 하면, 계속적으로 연결되어 있다. 말을 안해도 주변 잡소리들도 다 전송이 된다. 그렇기 때문에 연결되어 있는 시간대로 요금이 청부된다.)

- 패킷들은 상호 연관성을 가짐

- > 즉,순서 정보를 가진다. 순서 정보를 가지고 있으면, 누가 없어졌는지 알 수 있다. 예로들면, 우리가 어릴 때 소풍을 가면 번호대로 많이 앉아 있다. 다른반 쌤들은 그 번호를 이용해서 누가 빠졌는지 확인할 수 있었다.

-> 빠져있는 데이터를 받을때 까지 재전송한다.

-> 하지만 전송 중, 빠졋다고 생각되는 데이터가 뒤늦게 도착 하여도, 수신자는 그 데이터를 무시한다( 버려버림!!) 


전송 계층의 통신 형태


전송계층은 통신을 하지 않는다. 전송계층은 end - to - end 통신이기 때문이다. 전송 계층은 중간 노드를 방문하지 않음. 그렇기 때문에 우리가 응용프로그램을 만들 때, end 와 end이 통신할 수 있도록 프로그램을 만들어야 합니다.




정의 인용 및 참고한 서적 : TCP/IP프로토콜 제4판(Behrouz A. Forouzan) - MccGraw-Hill Korea 출판사.


하이시떼루여~~ 굿! 할뤼이데이 데쓰네여~~


어제는 OSI와 프로토콜에 대해서 간단히 포스팅을 했습니다.

지금부터 OSI 7 Layer(OSI 7 계층)에 대해서 공부하죠. ( 상남자 멋쪄잉ㅎ..ㅎ )

OSI 7 Layer는 통신 프로토콜을 코딩(작성)하기 위해서는 반드시 필요한 개념입니다.

저 또한 레시피 큐레이션 서비스(Flook)를 개발하고 소멤에 발표 준비를 할 당시, OSI모델에 대해서 공부를 했었어요!

OSI 모델은 쉽게 말하면 Pear - to  - Pear 통신이라 말 할수 있어요! 즉 7계층은 7계층끼리만 이야기 할 수 있고, 6계층은 6계층끼리, 이런식으로만 이야기 할 수 있기 때문에, 특정한 계층이 변경이 되어도 다른 계층에는 전혀 영향을 주지 않습니다.

OSI 7 Layer를 이해하기 위해서는 그림이 반드시 필요하다고 생각합니다 ( 저도 급해서 그림만 외운 기억이 있네요.)




인터넷에 떠돌아 다니는 그림이 많지만, 마음에 드는 그림이 없어서 직접 타이핑 했습니다.


아래서 위로 1계층~ 7계층 입니다.(물리,데이터링크,네트워크,전송,세션,표현,응용 계층이라 부릅니다)


7개의 계층은 3개의 그룹으로 나눌 수 있습니다. 

- 1,2,3계층은 물리계층,데이터링크 계층, 그리고 네트워크 계층으로 한 장치에서 다른 장치로 데이터를 전송할 때 필요한 물리적인 면(전기적인 규격,물리적인 연결,물리 주소,전송시간과 신뢰도) 을 처리합니다.


- 5,6,7계층인 세션계층,표현 계층, 응용 계층은 사용자 지원 계층으로 생각될 수 있습니다. 이들은 서로 관련이 없는 소프트웨어 시스템간의 상호 연동을 가능하게 합니다!.


- 4계층인 전송계층은 지금 설명한 두 그룹을 연결하고, 하위 계층에서 전송한 내용을 상위 게층이 사용할 수 있는 형태가 되도록 보장한다. OSI 모델의 상위 계층은 거의 대부분 소프트웨어로 구현된다. 하위 계층은 대부분 하드웨어로 구성되는 물리 계층만 제외하고 하드웨어와 소프트웨어의 조합으로 구성된다.



1계층 - 물리계층(Physical Layer)

해석을 먼저 조금 갈까요..? To transmit bits - bit 단위로 보낸다. over a medium 매체 위에서. to provide mechanical 한 기계의(기계적으로) and electrical specifications 전기 규격에 의해서. (물리계층 - > 물리계층으로 전송)

즉, 직역하면 물리 계층은 물리 매채를 통하여 비트 스트림을 전달하는 데 필요한 기능들을 조정한다. 여기서는 전송매체와 인터페이스의 기계적이고 전자적인 규격을 다룬다.


물리계층의 특징.

1. 인터페이스와 매체의 물리적인 특성.

- 물리 계층은 장치와 전송 매체 간에 인터페이스의 특성을 규정한다. 이는 또 전송 매체의 유형도 규정한다 (다음주 중 자세하게 포스팅 할 예정)


2.비트의 표현.

- 물리계층은 해석되지 않은 비트의 스트림(0과 1의 연속) 으로 구성되어 있다. 전송되기 위해서 비트는 신호로 부호화 되어야 한다. 물리 계층은 부호화(encoding)의 유형을 규정한다( 0과 1로 어떻게 바뀌는지.)


3. 데이터 전송률 

- 전송률(초당 보내지는 비트의 수)도 물리 계층에서 규정된다. 다시 말하면, 물리 계층은 비트가 얼마나 길게 유지되는 가인 비트의 주기를 규정한다.


4.비트의 동기화

- 송신자와 수신자는 같은 비트율을 사용할 뿐만 아니라 비트 레벨에서 동기화( 시간적으로 )되어야 합니다. 만약 송신자가 12시 0분에 전송을 했어도, 수신자가 12시가 아닌 12시 1분, 혹은 11시 59분부터 전송된 데이터를 받는다고 가정하면 데이터의 이질감이 생기기 때문입니다.


5.회선 구성.

- 물리 계층은 매체에 대한 장치들의 연결과 관련 있다.

점 - 대 - 점(point to point configuration) 에서 두 장치는 전용 링크를 토하여 연결된다.

( 여기에 자세한 설명이 나와 있어용~> http://blog.naver.com/ryungtek/40111437571 )

다 중 점 (multipoint configuration) 에서 링크는 여러 장치에 의해 공유된다.

다중점은 , 수업시간에 교수님과 학생들이 이야기 할 때, 강의실에 있는 모두가 같이 대화할 수 있는것을 다중점이라 한다.


6. 물리적 접속형태

- 물리적 접속 형태는 장치들이 네트워크를 만들기 위해 어떻게 연결 되는지를 규정한다. 종류들을 살펴보자.

1. 그물형 접속형태(mesh topology - 모든 장치는 다른 모든 장치들과 연결되어 있음.)  - 그물형 접속 형태는, 특정한 장치는 모든 장치랑과 연결이 되어 있기 때문에, 어느곳이나 한번에 갈 수 있다. 속도가 매우 빠르며 비용이 많이드는 접속형태이다. (완전 연결형이라 부르기도 한다. 슈퍼컴퓨터에서 사용.) -( 점 대 점 )

2. 성형 접속형태(star topology - 장치들은 중앙 장치를 통하여 연결) - 성형 접속 형태는 , 연결해 있는 중앙 장치가 있기 때문에 모든곳이 한번을 거쳐서 갈 수 있다. 하지만 중앙장치가 고장이 나면, 모든 곳의 통신이 두절된다. - 주로 가정의 공유기로 예를 들 수 있다. ( 점 대 점 )

3. 링형 접속형태 (ring topology - 각 장치는 링을 구성하도록 이웃하는 장치와 연결) - 한 장치는 2개의 연결상태를 가지며, 원형 큐 (Circular Queue)형태로 연결되어 있다. 한 장치가 고장이 나더라도, 고장나지 않은 방향으로 모든곳의 통신이 가능하다. 하지만 두 개 이상이 고장이 나면 통신이 두절된다. - 많이 사용하는 곳은 공장이다. 공장의 노드가 고장이 날 확률이 1%라고 하자. 그러면 두 개 이상 고장이 날 확률은 0.01%이기 때문에 공장에서 많이 사용한다. ( 점 대 점 )

4. 버스형 접속형태 (bus topology - 모든 장치가 공통 링크 상에 있음.)  - 모든 장치는 하나의 연결 통로를 공유하는 형태이다. 옛날 학교와 같은 곳에서 사용하던 방법이다. 이 연결이 제일 저렴하다.( 다중점 )


7. 전송 모드

-물리 계층은 두 장치사이의 전송 방향(단방향,반이중,전이중)도 규정한다. 

단방향 모드(simplex mode - 학교방송) 에서 어느 한 장치는 보내기만 할 수 있고 다른 장치는 받을 수만 있다. 단방향 모드는 한 방향 통신이다. ( 학교 방송 )

반이중 모드(half duplex mode-무전기) 에서 두 장치는 보내고 받을 수 있지만 같은 시간에는 안 된다. 양방향 통신이다.( 무전기 )

전이중 모드(full-duplex mode - 전화 )에서는 두 장치는 같은 시간에 보내고 받을 수 있다. 양방향 통신이다.( 전화기 )




1계층에 대해석 간략하게 설명 했는데요. 이 부분은 소프트웨어 개발자들이 필수적으로 알아야 할 사항보단, 전자과 학우들이 알아야 할 부분이라고 생각합니다. 하지만, 개발자들도 기초지식은 이정도는 알아야 한다는 부분을 작성했습니다.




2계층 - 데이터 링크 계층(Datalink Layer)

To organize bits into frame - bit를 frame 단위로 만든다(구성한다). 보통 2계층의 단위는 Frame이다. 하나의 봉투 혹은, 쌀 가마 라고 생각하면 쉬운데, 쌀 하나하나(bit)를 쌀 포대(Frame)에 담어서 윗 계층에게 주는 역할을 한다.

to provide hop-to-hop delivery - 홉 단위로 전해준다, 라는 의미이다. 여기에서 홉을 어떻게 설명해야 할까 고민을 많이 했었다. 그러던 도중 이어 달리기가 생각이 났다. 이어달리기는 출발점 부터 바통을 들고 먼저 결승점을 통과해야 하는 경기이다. 여기서 바통은, 첫 주자가 다음주자에게, 그 다음주자는 다다음 주자에게, 이렇게 전달이 된다. 이런식으로 전달이 되는것을 hop- to - hop이라 부른다.

(여기에서 데이터 링크가 물리 계층에게 포장되어 있는 쌀을 줄 때, 쌀을 한톨 한톨씩 주는 것이 아니라, 그 쌀 포대의 위치(포인터)를 준다.)



-> 물리계층의 있는 그대로의 전송 설비를 신뢰할 수 있는 링크로 변환한다. 이는 상위 계층인 네트워크 계층에게 오류 없는 물리 계층으로 보이도록 한다.

데이터 링크 계층에 대해서 자세히 보자.


우리가 매일 사용하는 데이터 링크 계층은 신뢰성이 있을까??

우리가 사용하고 있는 데이터 링크 계층은, 무선랜 , LTE , 이더넷이 있다.

이 중 무선랜과 이더넷은 재전송을 하지 않는다. 하지만 LTE 같은 경우는 신뢰성 있는 통신을 보장한다.(LTE는 우리가 돈을 내고 쓰는 비싼 자원이기 때문에 신뢰성을 보장한다.-2계층에서 재전송을 해줌.)

이더넷과 무선랜은, 4계층 행님께서 재전송을 책임져 주신다..^^;;다행이죠?

재전송을 하기 위해서는 헤더를 이용하는데, 여기에서 특이한 점이 있다면, 2계층은 트레일러(T)를 사용한다. 


1. 프레임 구성.

- 네트워크 계층으로부터 받은 비트 스트림을 프레임(frame)이라는 데이터 단위로 나눈다. : 사실 이 부분은 OS의 지식이 필요합니다. 실제로 3계층과 2계층은 따로따로 개발된 모듈입니다. 즉 그렇다는건, 3계층에서 실행되고 있는 프로세스와 2계층에서 실행되고 있는 프로세스끼리 통신을 해야 한다는 뜻이겠죠. 2계층과 3계층이 통신하는 방법을 알려면 OS의 대한 기초지식이 있어야 합니다. OS 지식을 활용하여, 두 계층간의 통신 방법은 두가지가 있습니다.  첫번째는, 메시지 패싱이 있고, 두번째는 쉐어드 메모리가 있습니다.

사실 쉐어드 메모리는 구현하긴 어렵지만 이론상으론 쉬우니까 쉐어드 메모리로 설명을 해보죠ㅎㅎ

쉐어드 메모리는, 메모리에 데이터를 씁니다.그리고, 3계층이 2계층에게 "야~ 데이터 써놨으니까 가져가라~~" 이런식으로 Signal을 보내고 / 호출을 합니다.

그리고 2계층은 그 메모리에 가서 데이터를 읽어옵니다.( 그 주소는 포인터겠죠!?- 이 부분을 모르면 자료구조를 알아야 해염.. )

- 2계층의 봉투의 이름은 Frame이다 - 이 봉투에 헤더를 작성해야 하는데, 그 내용은 물리주소 작성(받는 사람과 받는 사람의 주소)한다. 

- 물리주소는 가지고 있는 하드웨어의 갯수만큼 있으며, LTE,무선랜,블루투스 주소가 각각 존재한다.

- 주소는 16진수로 표기되며 MAC(Media Access Control)주소라고도 부른다.



2. 물리 주소 지정.

-프레임이 네트워크 상에 서로 다른 시스템에 분배되어진다면 데이터링크 계층은 프레임의 송신자 그리고/또는 수신자를 지정하기 위해 프레임에 헤더를 더한다(encapsulation) 만약 프레임이 송신자 네트워크가 아닌 다른 네트워크에 있는 시스템이라면, 수신자 주소는 다음 네트워크로 가도록 연결된 연결 장치의 주소가 된다.


3. 흐름 제어.

- 수신자에 의해 처리되는 데이터율이 송신자가 보낸 데이터율보다 낮으면 데이터링크 계층은 수신자가 흐름 제어 메커니즘이 수행된다.

-> 인강을 x2배속으로 하면 귀에 잘 들어올리가 없다. 즉, 모든 세계에 있는 모든 컴퓨터가 속도가 같을 순 없다. 속도는 cpu와 메모리에 따라서 많이 차이가 난다.

그럼, 한 컴퓨터가 다른 컴퓨터에게 데이터를 보낼 때, 성능 좋은놈이 성능 안좋은 놈한테 자기의 최고 속도에 맞춰서 데이터를 보내면, 속도가 느린놈이 데이터를 다 받아들이는 것은 아니죠.  그렇기 때문에, 느린놈(수신자)의 속도에 맞춰서 보냅니다.. -> 이러면 속도 차이에 의해서 없어지는 데이터는 없어진다. - 그렇기 때문에 어렸을떄 눈높이 학습지를 엄청나게 풀었죠!!!!!!!!!!!!!



4. 오류 제어.

- 데이터 링크 계층은 손상되고 손실된 프레임을 탐지하고 재전송(Trailer 사용)하는 매커니즘을 수행함으로써 물리 계층의 신뢰성을 더합니다. 이는 또 중복된 프레임을 인식하기 위한 매커니즘도 이용한다.

방금 말한 2계층에는 유일하게 트레일러가 있습니다. 헤더는 앞에 붙고, 뒤에 트레일러가 붙는거죠~

트레일러는 에러를 검출하기 위해서 사용합니다. 그럼 트레일러는 어떻게 에러 검출을 할까요? 흔히 우리가 발견할 수 있는 통신 에러는 손상,손실이 있습니다. 이 두 에러에 대해서 구별할 수 있으신가요?? 깨진 데이터가 손상이고, 데이터가 유실(잃어버린것)이 손실=입니다.

즉 , 도착을 안했거나, 아니면 도착을 했는데 깨졌거나 둘 중 하나일 것입니다.

신뢰성 통신을 하기 위해서는 보낸 데이터에 대해서 응답이 와야 합니다.

시간이 지나서 답이 오지 않으면, 손실로 생각을 하고 답을 오긴 했지만 데이터가 깨져서 왔으면 손상으로 생각합니다. 이런 검사들을 트레일러가 해주죠.

( 여기에서 트레일러의 역할이 중요한데요, 전송하는 데이터는 bit 단위로 날라갑니다. 트레일러는 bit의 갯수를 짝수개로 맞춰주는 역할을 합니다.

만약 0101의 데이터가 날라간다면, 트레일러는 0일테고, 0100의 데이터가 날라가면 트레일러는 1이라 맞춰져 있을 겁니다.)

-> bit의 1의 갯수가 짝수가 아니라면 손상 혹은 손실이다.


5. 접근 제어

- 둘 또는 그 이상의 장치가 같은 링크에 연결되어 있을 때 데이터링크 프로토콜은 어떤 주어진 시간에 어느 장치가 제어권을 갖는지 결정하는 것이 필요하다.

접근제어는 눈치게임을 생각하면 됩니다. 공기라는 매체에 소리를 내지만, 소리의 충돌이 발생시키지 않도록 하는 것이죠.(공기에 대한 접근을 제어한다.)




3계층 네트워크 계층(Network Layer)

To move Packet (패킷도 봉투의 하나라 생각하면 된다.) from source to destination.(원천지?소스?데이터?가 목적지로 가는데 있어서) 
다들 1계층 물리계층이 전송을 담당한다고 말했지만, 이 글을 읽으 시는 분들은 "물리계층이 보내는 목적지를 어디에서 정하는거지? "라는 의문이 들었기를 기대합니다ㅎㅎ!! 바로 여기! 그 목적지를! 네트워크 계층에서 결정합니다.

네트워크 계층은 네비게이션(어디 길을 통해서 목적지 까지 가는 길이 제일 빠른지 와 같은것)이라 생각하면 된다. 목적지를 결정 해야 Hop - to - Hop으로 전송을 하지 않겠는가? 

네트워크 계층은 다중 네트워크(링크)를 통하여 전달되는 발신지 대 목적지 전달을 책임집니다. 데이터링크 계층이 같은 네트워크(링크)상에서 두 시스템 간에 패킷을 전달을 책임지지만 네트워크 계층은 각 패킷이 발신 지점에서 최종 목적지까지 갈 수 있도록 보장합니다.

만약 두 시스템이 같은 링크에 연결되어 있다면, 항상 네트워크 계층이 필요는 없습니다. 그렇지만 두 시스템이 네트워크(링크)간에 연결 장치를 통하여 서로 다른 네트워크에 연결되어 있다면 발신지 대 목적지 전달을 위해 네트워크 계층이 필요하다. 그 밖의 네트워크 계층의 주요 기능을 살펴보자.


4계층이(신뢰성 있는 놈이) 보내라 하면, 봉투에 넣고 주소를 작성하고, 주소를 통하여 길을 찾습니다. 길을 찾은 후에는, 찾은 길에 대해서 다음 길로 이동하죠.

1. 논리 주소 지정.(ip)

- 데이터링크 계층에 의해 구현된 물리 주소지정은 내부적인 주소지정 문제를 처리합니다. 만약 패킷이 네트워크의 범위를 벗어난다면 발신지와 목적지를 구분하기 위한 또 다른 주소지정 시스템이 필요하다. 네트워크 계층은 상위 계층으로부터 오는 패킷에 송신자와 수신자의 논리 주소를 포함하는 헤더를 더한다.(자세한건 뒤 쪽에서 좀 더 상세하게 나온다.)

-> 물리적인 주소의 대응되는 주소이다.

2. 경로 지정.

-독립된 네트워크나 링크를 네트워크 간 연결 (internetworks) 또는 규모가 큰 네트워크를 만들기 위해 서로 연결하려고 하면 연결 장치(라우터 또는 스위치)는 패킷의 최종 목적지까지 경로지정이나 스위칭하게 된다.

즉 , 발신지로부터 목적지로부터 경로를 지정한다. 경로를 지정하게 되면, 모든 패킷은 그 경로로 지나간다 ( 경로 찾는것은 다음 포스팅에서 자세히 나온다.)

   




4계층 전송 계층.(Transport Layer)

To provide reliable (신뢰성을 제공한다.) process- to -process (프로세스 간의 -프로세스는 실행되고 있는 프로그램이다.) message delivery and error recovery (메세지 전달 중 에러가 발생하면 에러를 복구한다.)

이것은, 내가 미쳐버린 파닭집에 외상을 해서, 룸메에게 외상비를 대신 갖다 달라고 돈을 줬다. 하지만 룸메가 없어진 것. 미쳐버린 파닭 사장님도 도착했다는 말이 없다. 여기에서 룸메는 미쳐버린 파닭에 가는 중, 길이 막혀서 늦게 도착할 수 있지만, 우리는 룸메가 길이 막혀서 늦게 도착하는 것을 모를 수 있다.

여기에서는 이렇게 해야 한다.

내가 돈을 보내는 것을 사장님에게 미리 말을 한다(사장님!! 돈 보낼께용!!) - 이것을 연결을 맺는 것이다(connection setup)

그리고 돈을 보낸다! 그리고 여기서부터 시간을 잰다. 하지만, 왕복할 시간을 훨씬 더 많이 지난다. 이럴 경우, 전송계층은 reliable(신뢰)성 있어야 하기 때문에, 다시 외상비를 다른 친구한테 보낸다. 그러므로 신뢰성이 성립한다.

물론 이 예에서는 돈을 다시 보낸것은 엄청난 불 이익이 있을 수 있습니다. 하지만, 패킷을 재 전송하는 것에 대해서는 큰 손실이 없기 때문에 가능하다.

네트워크 계층이 패킷의 발신지 대 목적지 전달을 책임지지만, 이들 패킷간의 관계는 인식하지 않는다. 이는 각 패킷을 각 단편이 분리된 메시지에 속하는지 여부에 따라 독립적으로 처리한다. 다시 말하면, 전송계층은 발신지 대 목적지 레벨에서 오류 제어와 흐름 제어를 통하여 순서대로 도착하는 것을 보장( 쉽게 생각하면 Queue처럼.)한다. 

즉 , 인터넷은 보낸 순서대로 도착하지 않는다. 그래서 전송계층이 그것을 순서대로 붙혀준다.(UDP는 순서대로 붙혀주지 않고 그냥 다 받아버린다.)

데이터를 큰 조각을 내서 보내주고, 그 조각들을 맞춘다.

그 밖의 전송 계층의 책임은 다음과 같다.


1. 서비스 지점 주소지정.

- 컴퓨터는 같은 시간에 여러 개의 프로그램을 실행한다. 이러한 이유 때문에, 발신지 대 목적지 전달은 하나의 컴퓨터에서 다음 컴퓨터까지 전달하는 것뿐만 아니라 한 컴퓨터상에 특정 프로세스(실행 중인 프로그램)에서 다른 컴퓨터에 있는 특정 프로세스(실행 중인 프로그램)까지 전달을 의미한다. 그래서 전송 계층 헤더는 서비스지점(service-point) 주소(또는 포트 주소)라는 주소 유형을 포함한다. 네트워크 계층은 정확한 컴퓨터에 각 패킷을 갖게 하지만 전송 계층은 컴퓨터상의 정확한 프로세스에게 전체 메세지를 갖게 한다.

즉, 우리는 컴퓨터에 프로그램을 많이 실행시킨다. 하지만 이런것들이 다 멀티태스킹이 가능하지 않는가? 실제로 컴퓨터의 통신은 컴퓨터+프로세스 : 컴퓨터+프로세스 의 통신이다.

좀더 추가 설명을 하겠다.

우리가 컴퓨터에 IE를 2개를 실행시켰다. 그리고 한개는 daum, 하나는 naver를 지정해서 검색을 탕! 하면? 당연히 다음과 네이버가 나올 것 이다.

컴퓨터가 이것을 어떻게 정확히 실행시켜주는 것인가? 어떤것이 먼저 요청을 보내고 어떤것이 먼저 응답이 올 지 모르는데? 힝?

여기에서 통신은, 컴퓨터-컴퓨터 통신은 구별이 안된다. 우리의 컴퓨터는 공통적인 요소인데, 이것을 구분하기 위해서, IE브라우저 A가 네이버에 접속, IE브라우저가 B에 접속 하는것을, process에 번호를 붙혀서 그 프로그램을 구분한다. 이 번호를 서비스 지점 주소라 한다!

이것을 포트번호라 부르기도 한다.(포트번호 ~~ 쓰세요~ -> 서비스 지점 주소 ~을 적으세요~ ==같은 맥락이다.)


2.분할과 재조립

- 메시지는 각 세그먼트가 순서 번호가 들어있는 전송 가능한 세그먼트로 나눈다. 이 순서 번호는 전송 계층에 메시지가 목적지에 정확하게 도착하여 재조립되고 패킷이 전송 중에 손실되거나 교체된 것에 대한 식별이 가능하게 합니다. 여기에서 분할은 세그멘테이션. 리 어셈블리는 다시 합치는것이라 부릅니다.

음~~ 그니까 여기는~ 데이터를 보내기 위해서는 조각을 내고, 받으면 다시 합쳐야된다는거죠~

-> 이게 매우 큰 일이다.


3. 연결 제어.

- 전송 계층은 비연결형이거나 연결형일 수 있다. 비연결형 전송 계층은 각 세그먼트를 독립적인 패킷으로 처리하고 목적지 기계에 있는 전송 계층에 전달한다. 연결형 전송 계층은 패킷을 전달하기 전에 먼저 목적지 기계에 있는 전송 계층과 연결을 만든다. 모든 데이터가 전송된 후에 연결이 종료된다.

쉽게 설명하면,

4계층은 연결을 맺는놈, 연결을 맺지 않는놈으로 구분을 한다.

맺지 않는놈은 도착한 애들을 독립된 애들로 보는거고,

연결형은 순서가 마구잡이로 도착해도, 순서대로 나열해주는 것이다.

-> 이것을 UDP( 비연결형 ) , TCP(연결형) 이다.

UDP에서는 같은 놈이 계속 데이터를 보내도, 같은놈이 데이터를 보냈다고 생각하지 않는다. 

TCP에서는 여러명이 계속 데이터를 보내도, 각각의 사람들을 인식하여 사용자들이 보낸 데이터들을 사람별로 순서대로 받아들인다.

그럼 어떻게 순서대로 도착했는지 알까?

-> 포스팅 후 링크 이 자리에 작성해 두겠습니다 ㅎㅎ


4. 흐름 제어

- 데이터링크 계층처럼 전송 계층은 흐름 제어를 책임집니다. 그렇지만 이 계층에서 흐름 제어는 단일 링크라기보단 종단 대 종단에서 수행되죠.

흐름제어는 2계층에서도 할 수 있지만 4계층과 구분할 줄 알아야 합니다.

4계층의 흐름제어는 종단을 연결하는 경로의 상태에 따라서 전송률을 좌지우지 합니다.

만약 4개의 경로가 있다고 생각 해봅시다.

4개의 컴퓨터는 모두 속도가 다르고, 가장 빠른놈, 제일 느린놈이 존재하기 마련입니다.

그렇다면, 가장 빠른 속도의 컴퓨터가 자신의 속도에 맞춰서 데이터를 보내면?
가장 느린놈은 데이터를 다 받지 못하여 손실이 발생할 것이죠 ㅋ 갑질ㅋ

2계층은 내가 전송할 놈의 속도만 보면 되는데, 4계층은 통신할 상대방의 사이에 있는 사람 모두를 고려해야 합니다.

-> 종단 을 연결하는 경로의 상태에 따라 전송률을 결정한다. 

4개의 컴퓨터(A,B,C,D)가 있다고 가정하자.

컴퓨터 A에서 D까지 데이터를 보낼 때 어떤 속도에 맞춰야 하냐면.. 아! 속도는 A는 100개 B는 75개 C는 150개 D는 125개 이다.

속도는 A가 D에게 보낼 때, 그 경로에 있는 모든 컴퓨터의 속도를 신경써줘야 한다.

2계층의 흐름제어와 차이점을 꼭 알아두세요!





5. 오류 제어

4계층은 손상되거나 손실된 애들을 다 재전송 합니다. (정확한 것은 다음 포스팅에서 할꺼얌!!)

데이터링크 계층처럼 전송 계층은 오류 제어를 책임집니다. 이 계층은에서는 오류 제어는 단일 링크를 따라 수행되기보다 프로세스 대 프로세스로 수행합니다. 보내는 전송 계층은 전체 메시지가 수신측 전송 계층에 오류(손상,손실,중복)없이 도착하는 것을 보장합니다. 오류 교정은 항상 재전송을 통해 이루어 집니다.


사실 여기까지 하면 TCP/IP의 모든것을 배운거나 마찬가지 입니다.

5계층부터 7계층까지는 논리적인 모델로써, 개발자가 직접 코딩해야 하는 부분입니다.


5계층 세션계층 (Session Layer)

서론 .우리가 전화를 할 경우, 전화는 서로 연결이 계속 되어야 합니다(Connection). Session은~ 음~!! 화상 전화를 할 경우, 비디오와 오디오가 날아가야 할 두개의 Connection이 필요하죠? 그런 여러개의 연결이 합쳐져서 하나의 서비스가 되면, 그것을 세션이라 부릅니다. 쉽게 말하면, 전송계층에서 음성Connection이나 영상Connection만 연결을 해줄 수 있는데, 이것들을 유지하기 위해서는 Session이 필요합니다 ( 정보를 계속 남기는거죠). 보통 5계층 부터는, 소프트웨어 개발자가 코딩을 해야 하는 부분입니다


처음 네 계층( 물리, 데이터링크 , 네트워크 , 전송 계층) 에 의해 제공되는 서비스는 일부 프로세스에 대해 충분하지 않습니다.

세션 계층은(5계층 , session Layer)는 네트워크 대화 제어기(dialog controller)입니다. 이는 통신 시스템 간의 상호대화를 설정하고, 유지하고, 동기화 합니다. 세션 계층의 주요 책임은 다음과 같습니다.

1. 대화 제어.

- 세션 계층은 두 시스템이 대화하는 것을 허용합니다. (두 시스템 간의 대화 허용) 이는 두 프로세스 간에 반이중이나 전이중 모드로 통신하는 것을 책임집니다.

만약 사용자가 무전기 앱(혹은 웹 서비스 를)을 개발하려고 하면, 사용자가 대화 제어 기능을 직접 개발해서 넣어야 합니다( 어떤 사람이 말 할때 다른 사람이 말 못하게 하는 등.)

반이중 - > 우리가 인터넷에 주소를 입력하면, 우리가 입력한 주소가 서버로 날라가서 결과가 화면에 나옵니다.


2. 동기화

- 세션 계층은 데이터 스트림에 확인점(synchronization point)를 추가하는 것을 허용합니다. 예를 들면, 어떤 시스템이 3000페이지 파일을 보내려고 한다면, 100 페이지마다 각각의 확인점을 추가합니다. 이럴 경우, 파일을 전송하는 과정 중, 644번 페이지에서 끊기게 되면  601~644까지의 정보는 삭제한 뒤, 600번 부터 다시 재전송 하게 됩니다.

- 추가적으로 패턴을 이용하여 동기화를 하기도 합니다. 패턴을 주로 bit으로 많이 사용합니다. 예를 들면, 1이 8개가 오는 부분을 자르겠다고 패턴을 설정합니다.

그럼 전송하는 부분 중, 11111111 이런 패턴이 오면 데이터에 동기화를 걸어주는데, 이 쯤에서 이런 생각을 하실겁니다 

"그럼 원래 보낼려고 했던 데이터에 1이 연속적으로 8개가 오면 어떻하지????"

-> 그건, 원래 1이 8개가 오는 데이터는 11110000 / 00001111 이런식으로 나눠서 전송하게 되고, 이 부분을 합쳐주는 방식을 사용합니다.

주로 패턴을 이용한 동기화는 많이 사용하지 않고, 페이지 갯수(사이즈로) 많이 나눠서 사용합니다.



6계층 표현계층 (Presentation Layer)

데이터를 transelate(번역) 하고, encrypt and terimate 하는것. 표현계층을 볼 때는, Cpu 제조사의 bit 표현법이 생각납니다. 빅 엔디언과 리틀 엔디언의 bit을 count하는 방법은 서로 방향이 틀렸던 것 처럼!(이부분은 C과 매우 연관성이 있는데, 이 부분은 따로 포스팅 하나로 빼야하니 뭐 ㅠㅠㅠ..;;) 각 계층에는 봉투가 필요하다! 받는사람 ~~ 누구 보내는사람 ~~ 누구 이렇게. 그래서 데이터가 내려오면, 7계층 데이터가 보내면, 6계층은 자신만의 봉투에 넣고, 정보(헤더)를 적는다. 이건 러시아인형이랑 같다. (인형을 열면 인형이 나오고, 인형이 나오면 인형이 나오고) .


표현 계층은 두 시스템 간에 교환되는 정보의 구문(Syntax)과 의미와 관련이 있다.


1. 변환.

-두 시스템에 있는 프로세스(실행중인 프로그램)은 항상 문자 스트링,숫자 등의 형식으로 정보를 교환한다. 정보는 전송되기 전에 비트 스트림으로 변경되게 된다. 서로 다른 컴퓨터는 서로 다른 부호화 시스템을 사용하기 때문에 표현 계층은 서로 다른 부호화 방법간에 상호 운용성을 책임진다. 송신자의 표현 계층은 송신자의 의존 형식을 공통 형식으로 변경한다. 수신하는 기계의 표현 계층은 공통 형식을 수신자 의존 형식으로 변경한다.

옛날에 IBM,HP두개의 컴퓨터는 서로 통신이 되지 않았다. 이게 빅 엔디언과 리틀 엔디언의 차이이다. 이런 경우, 서로 통신을 할 때 다른 방향으로 해석을 하게된다.

2. 암호화.

중요한 정보를 전달하기 위해서 시스템은 프라이버시를 보장해야 한다. 암호화는 송신지가 원래의 정보를 다른 형식으로 변환하고 변환된 메시지를 네트워크를 통하여 보내는 것을 의미한다. 복호화는 메시지를 원래 형식으로 되돌릴 수 있도록 변환하는 반대과정이다.

3. 압축.

데이터 압축은 정보에 들어 있는 비트의 수를 줄여준다. 데이터 압축은 텍스트,오디오, 비디오와 같은 멀티미디어 전송에 매우 중요하다.


7계층 응용 계층(Application Layer)

응용 계층은 사용자가 네트워크에 접속하는 것을 가능하게 한다. 전자우편, 원격 파일 접속과 전송, 공유된 데이터베이스를 제공한다. 응용 계층에 의해 제공되는 특정 서비스는 다음과 같다.

1. 네트워크 가상 터미널

- 네트워크 가상 터미널은 사용자에게 원격 호스트에 로그온을 허용하는 물리적인 터미널의 소프트웨어 버전이다. 그렇게 하기 위해 응용은 원격 호스트에 이야기 하고, 교대로 호스트에게 이야기 하고 또는 그 반대로 이야기한다. 원격 호스트는 자신의 터미널 중 하나와 통신하는 것으로 믿고 로그온을 허용한다.

*터미널에는 input과 output만 있다.


2. 파일 전송,접근,관리(FTAM)

- FTAM(에프탐)은 OSI 7 Layer의 기준이다. 산업 기준으론 FTP라고 부른다. 이것은 사용자에게 로컬 컴퓨터에서 사용하기 위해, 원격 컴퓨터로부터 파일을 검색하기 위하여, 자체적으로 원격 컴퓨터에 있는 파일을 관리 하거나 제어하기 위하여 원격 호스트에 있는 파일 접근(데이터를 읽거나 변경하기 위하여)을 허용한다.

3.기타 서비스.

- 카톡의 메시지 전송 서비스, 전자우편 서비스, 디렉토리 서비스 등이 있다.




해당 포스팅은 McGraw-Hill Korea 출판사의 TCP/IP프로토콜(4판)의 많은 부분을 참고하여서 포스팅 했습니다.


감사합니다.

안녕하세요~ 벌써 주말이네요 ㅎㅎ 어제 포스팅 하려 했는데 늦어써~

앞으로 얼마동안 포스팅 할 주제는 OSI7계층과 TCP4계층 입니다.

오늘은 첫번째로 OSI와 프로토콜에 대해서 필요한 기본지식에 대하여 이야기 해보겠습니다.





다들 통신이 어렵다고 하는 이유는, 통신은 약어가 너무 많아서 어렵다고 생각하는 듯 싶습니다.

하지만 통신에 사용하는 약어들이 없다면, 전공자들이(혹은 실무자가) 통신에 대하여 이야기를 할 때면, 많은 어려움이 있지 않을까 생각됩니다.


그래서 통신 용어들에 대해서 알고 있어야 하는데, 혹시 표준화에 대해서 알고 있나요?


지금 일상생활에서 사용하는 표준은 여러가지가 있습니다. 예를들어 길이를 나타내는 cm, km 그리고 국제 표준언어의 5개 등등이 있죠 ㅎㅎ

표준화 된 것들은 많지만 표준화 되지 않은것들도 어럿 있습니다. 

전 그 중 표준화가 되어야 할 점은 아이폰과, 갤럭시의 충전 잭이 표준화가 되어야 된다고 생각합니다ㅋㅋㅋㅋ 다들 공감하시죠?

이와같이 표준이 되지 않아서 불편한 점이 많아유 ㅠ


(출처 : https://plus.google.com/u/0/+iso/posts)


그래서!!!!!! 이것들의 표준을 정해주는 곳이 있습니다. 

그 곳중 하나인 ISO(International Organization for Standardization-국제 표준화 기구)가 있죠 ㅋ

여기서 만든 표준이 여러개가 있는데, 그 표준중, 운이 좋게도 통신에 대한 표준은 ISO를 뒤집은 OSI(Open System Interconnection)입니다.


읽으시는 분은 분명 이렇게 생각하시겠지?ㅋ "명사들의 연속이긴 한데 무슨뜻이지? 연결을 열어주는 시스템? 개방되어 있는 시스템?" 이라고 다양한 생각을 하게찡?ㅋㅋㅋㅋ(귀염귀염)

이럴 때 OSI를 그냥 OSI라고 생각하지 말고, 방금 언급한 "연결"이냐 "개방"이냐 라는 것에 대해서 조금 고민해 보는것도 좋을 것 같습니다ㅎㅎ(전 개방되어 있는 시스템이 좀 더 가깝다 생각 합니다)


그건 그렇고 화제를 변경시켜 다음으로 넘어가죠.


Interconnection은 Inter + connection으로 이루어진 단어 입니다.

유사한 단어로 Internet이 있는데, 보통 여러분은 Internet 이 한 단어라고 생각하고 있었을것 같아요!(제가 그랬어요..늉늉

하지만 Internet은 Inter+network이 합쳐져서 만들어진 단어입니다.

inter(상호간의)+network(네트웤)= 네트워크와 네트워크가 서로 연결이 되서 큰 네트웤이 된 것이다. 이것이 인터넷입니다.( ㅋㅋㅋㅋ넘나 쉬운것?)

즉, 큰 네트워크 하나는 시스템과 시스템이 연결 된 것입니다.


System들 간이 interconnection이 되어 있는데(서로 연결되어 있는데) 이것들이 Open(개방)되어 있다는 것은, "나는 누구와도 연결될 수 있다"라는 뜻이 되죠.


이해를 돕기 위해 한 예제를 들어보겠습니다.


수업이 진행되고 있는 강의실에 교수님과 학생들이 있고, 그 학생들과 교수님을 각각의 하나의 시스템이라 생각해 봅시다.

학생들과 교수님은 (시스템과 시스템은) 서로 연결이 되어야 이야기가 가능합니다.

학생들은 교수님이 이야기 하시는 내용을 듣고(이해하고) 있다는 것은 연결이 되어 있기 때문에 가능하죠~!!?

이러한 연결이 Open되어 있고, 어떤 학생(시스템은) 강의실에 있는 누구와도 말할 수 있습니다.

이것은 교수님, 그리고 학생들 간의 이야기 방식이 표준화 되어 있기 때문에 가능합니다(시스템-시스템간의 통신 방법이 표준화 되어 있기 때문이죠.)


하지만 여기서 이런 생각을 하시는 분이 있을 것 같네요.

"만약 말레이시아 사람이나 혹은 중국사람과 같은 다른나라 사람들이 있어도 이야기 하는 방법이 표준화 되어 있다고 할 수 있는건가? 학생이 다른나라 사람일 수도 있잖아!!" 하면서.

그래, 이 부분에 대해서는 말하는 방식이 표준화 되어 있지 않기 때문에 OSI(Open System Interconnection)가 아닌 것이라고 말 할수 있겠네요. 우리는 강의실의 언어가 표준화 되어 있기 때문에 소통이 되고 있다고 하지 않았느냐!!!!!!!!!!!!!!!!!!!!!!!!!!!


그럼 OSI를 한 문장으로 요약해보면?

-> 시스템들이 네트워크로 서로 묶이기 위해서 오픈되어 있는 모델이다.



OSI의 목적 : 하드웨어가 소프트웨어 기반의 논리적인 변화에 대한 요구 없이, 서로 다른 시스템간의 통신을 원활하게 하는 것.


서로 다른 시스템 간의 통신을 해야 하는데, 두 기기간의 통신이 표준화 되어 있으면 아무 문제가 없죠. 하지만 표준화가 되어 있지 않는 경우가 많습니다. 앞서 말한 안드로이드와 아이폰의 충전 잭 처럼.

이런 경우는 보통 하드웨어를 변경해야 하죠.ㅜㅜㅜㅜ ( 아이폰 만쉐~~ )

하드웨어도 그렇고, 여러가지가 있죠~!!

아이폰과 안드로이드가 블루투스 통신을 한다면? 하드웨어를 변경 을 할 필요는 없지만, 블루투스를 이용하여 서로 전송하는 앱이 다르면(통신을 하는 앱이지만, 삼성은 삼성앱, 애플은 애플앱 서로 다른 앱을 깔았을 경우 통신이 안 될 확률이 높습니다 - 서로 협의가 안되었다면 )이 때 소프트웨어적인, 논리적인 변화를 요구한다. 앱을 바꾸라든가 이런 요구를 하겠죠??ㅋㅋ

이런거 요구 없이 통신을 하기 위해선 표준화가 필요합니다. 표준화를 준수하여 개발을 진행한다면, 방금 말한 것 처럼 서로 협의가 안 되어 있는 상황은 발생하지 않겠죠?

 


프로토콜.

프로토콜이 무엇인가요? 프로토콜은 한마디로 말하자면. 통신규약입니다.

개발자라 그런지, 평소에 선배나 친구들이랑 이야기 할 때 " 프로토콜 이렇게 정하자 " 라면서 이야기 많이 하는데, 여러분은 안그런가요??


프로토콜은 ~~ 이렇게 발생한 일은 ~~ 이렇게 처리하라 라고 약속을 하는 것 입니다.

조금 길게 설명하면, 두 사람 또는 두 장치 간에 이루어지는 통신의 일련의 프로토콜이 필요한데, 프로토콜은 통신을 주도하는 규칙들의 집합 이라고 말할 수 있습니다. 

ㅋㅋ 무슨 말 인지 모르겠죠?? 쉽게 설명해 드리겠습니다.

경찰도 프로토콜을 갖고 있고, 군대도 프로토콜을 갖고 있고, 특정한 기관들은 프로토콜을 가지고 있습니다.(불이나면 ~~이렇게 움직여라! 테러가 발생하면 ~이렇게 하라! 등등)

그럼 통신 규약은 무엇인가요?

우리의 핸드폰에 어떤 사람으로부터 전화가 온다면, 우리의 핸드폰은 진동(혹은 벨)이 울립니다. 그리고 우리는 전화를 받거나 거절을 합니다. 그리고 이 행위를 상대방에게 알려주는 것(전화가 연결되거나 뚜~~뚜~~ 하는것) 이것이 통신규약 입니다.


여기서!!! 잠깐!!

OSI모델은 이렇게 상세한 프로토콜은 아닙니다. 큰 틀에서 이렇게 따르어라! 하는 것이죠 ㅋ

이 시스템과 저 시스템이 통신하기 위해서는 이러한 모델을 가지고(기반하고) 구체적인 프로토콜을 만들어라! 그럼 전 세계의 모든 장비가 통신을 할 것이다.라는 뜻 입니다.

즉 , OSI는 모델이지 프로토콜이 아닙니다. OSI는 유연하고(면접볼 때 유연한 사람은 어떠한 상황에도 잘 대처하고) , 상호 연동 가능한(누구와도 이야기 할 수 있는) 모델입니다.





참고자료 : TCP/IP 프로토콜 4th Edition(McGraw-Hill Korea)

+ Recent posts