우리가 사용하는 인터넷, 즉 네트워크는 매우매우 크고 복잡한 시스템들의 집합이다.
하지만 이렇게 큰 시스템들도 사실 작은 여러 컴포넌트들로 이루어져있는데, 컴포넌트들을 이해한다면 큰 시스템을 자연스럽게 이해할 수 있다.
이를 다른 말로 모듈화된 시스템 계층이라고 말한다. 독립적으로 동작할 수 있으며 상호유기적으로 통합될 수 있는 모듈들로 시스템을 구성하면 크기를 늘리기도 쉽고 유지보수하기도 쉬우며 전체 구조를 모듈을 파악함으로써 쉽게 이해할 수 있다.
모듈화
모듈은 큰 시스템을 구성하는데 있어서 필수적인 방법적 접근방식이다.
모듈끼리 통신하기 위해서는 적절한 인터페이스가 필요하며 이런 모듈은 상-하위 계층이 존재한다.
(이전에 서비스를 주고받으면서 OSI7계층이 동작한다고 했었다!)
상위 계층(모듈)이 하위 계층(모듈)에 서비스를 요청하면 이를 프리미티브로 하위 계층이 상위 계층에게 서비스를 제공한다. 서비스를 제공할 때 값을 직접 변경해서 효과를 내거나, 주변 환경 값을 변경함으로써 부수효과(side effect)를 통해 효과를 낸다.
정리
모듈은 서로 독립적이며 상호유기적으로 통합되어야 함. 모듈의 인터페이스만 유지된다면 모듈의 교체나 수리가 손 쉽게 이루어질 수 있으며 복잡한 시스템을 간단한 시스템들로 유지보수 가능
프로토콜
자 이제 개념적 내용말고 실제 네트워크 호스트 시스템을 보자.
호스트의 각 계층들은 인터페이스를 통해 서비스를 주고받으며 데이터를 전송한다.
하지만 이는 모듈의 단위에서의 소통이고, 호스트라는 시스템의 단위로 데이터를 전송할 때에는 프로토콜이라는 전송규약이 필요하다.
호스트끼리 소통할 때에는 프로토콜을 통해서 데이터를 전송한다. 이 말은 호스트의 같은 n 계층끼리는 같은 n프로토콜을 사용한다는 의미이다.
프로토콜을 설계할 때 고려해야할 중요한 네가지는 주소, 오류제어, 전송흐름제어, 데이터 전달방식이 있다.
주소는 데이터를 전송할 대상인 호스트를 지정하기위해 반드시 필요한 값이다. 특정 호스트끼리 소통시 서로를 구분해주는 구분자로 역할한다. 호스트는 1:1로 소통하기도하고 1:n으로 소통하기도 한다. 1:1 소통시 호스트당 IP는 하나로 지정된다. 1:n 소통의 경우 다수의 호스트를 묶어서 하나의 그룹주소로 표현하는데 연결된 모든 호스트에 데이터를 전송하는 것을 Broadcasting, 특정 사용자를 그룹으로 묶어서 전송하는 것을 Multicasting이라고 한다.
오류제어는 데이터 변형오류와 데이터 분실오류에 대한 대처를 하기 위해 존재한다.
이런 오류는 첫 번째로 물리계층에서의 물리적 원인이 있다. 뭐 전송경로가 잘못됐다던가 선로가 문제가 있다던가..
또한 상위 계층에서 논리적인 전송오류가 원인이 될 수 있다. 이런 원인이 무엇이든 간에 일단 오류가 발생했다는 사실을 인지해야 하는데 수신호스트는 데이터가 분실되서 오지 않은 것인지, 아예 안보낸 것인지 모르기 때문에 보통 송신 호스트가 오류를 감지하고 재전송 기법을 통해 오류를 해결하려 노력한다.
흐름제어는 오류제어를 통해 해결하지 못한 오류를 대처하기 위함이다. 수신자의 수신 버퍼 용량 부족 문제가 그것인데 송신자의 전송 속도보다 수신자의 수신버퍼의 용량이 작으면 당연히 데이터가 저장되지 않고 사라지게 된다. 이에 따라 수신자가 송신자에게 전송속도를 줄여달라는 패킷을 보내 데이터의 흐름을 제어한다.
데이터 전달 방식은 총 3가지가 있는데 A에서 B로만 전송하는 단방향 방식, A와 B 둘 다 송수신이 가능한 전이중 방식, A와 B 둘 다 송수신이 가능하나 일정 시점에서 단방향 방식이 되는 반이중 방식이 있다.
프리미티브
이러한 프로토콜은 위에서 말했듯이 하위 계층이 상위 계층에 서비스를 제공하면서 동작한다.
서비스는 인터페이스 중 하나이며 프리미티브라는 형태로 구현된다.
하위 계층이 상위 계층에 서비스를 제공하는 방식에는 연결형과 비연결형이 있다.
연결형은 먼저 모듈끼리 연결을 설정한 뒤에 데이터를 전송할 수 있고 전송이 끝나면 연결을 해제해야 한다.
비연결형은 데이터를 전송하고 수신받는 두 관계만 존재한다.
연결형을 좀 더 깊게 살펴보자
프리미티브를 다시 말하면 하위 계층 사용법을 정형화 시킨 것이라 할 수 있다. 연결형 프리미티브에는 CONNECT, DATA, DISCONNECT 세 종류가 있으며 각각 REQUEST, INDICATION, RESPONSE, CONFIRM이 있다.
연결 과정을 프리미티브로 다시 한 번 살펴보자
호스트 A와 호스트 B가 있다고 하자. 그리고 A의 N 계층과 B의 N 계층이 서로 연결을 하려고 한다고 하면,
A의 N계층이 B의 N계층에게 CONNECT.REQUEST를 보낸다. 그러면 B의 N-1계층이 이를 인지하고 N계층에게 CONNECT.INDICATION으로 REQUEST가 왔다고 알려준다. 그 후에 B의 N 계층은 요청을 처리하고 CONNECT.RESPONSE를 A의 N계층에 보내준다. 그 후에 A의 N-1계층은 RESPONSE를 인지하고 N계층에게 CONNECT.CONFIRM을 보내주면 A와 B의 연결이 완료된다.
이 과정은 데이터 전송과 연결 해제 과정에서도 동일하게 이루어진다.
보통 연결형 프리미티브를 전화기에 많이 비유한다더라.
발신자가 전화번호를 누르면(REQUEST) 전화벨이 울리고(INDICATION) 전화를 받기위해 통화버튼을 누르면(RESPONSE) 수화음이 끊기면서 연결을 인지한다(CONFIRM)
계층 모델
상하위 모듈끼리, 그리고 같은 계층끼리 소통하는 방법을 알았으니 호스트들이 어떻게 통신하는지 더 자세히 알아보자. 호스트는 컴퓨터 시스템인데 이들은 서로 다른 규격을 가진다. 즉 이런 규격들을 통일된 전송 규격으로 만들어줘야하고 이를 인터페이스와 프로토콜 스택으로 구현해 줄 수 있는 것!
프로토콜 스택이란 OSI 7계층모델을 말하는 것이며 응용 계층에서부터 물리 계층까지 데이터가 계층을 내려가면서 물리계층을 제외하고 모든 계층에서 헤더정보를 추가한다. 헤더 정보는 계층의 규격 케이스 같은 것으로 통신간 필요한 데이터를 담는 케이스라 생각하면 될 것 같다. 수신 시스템은 물리계층으로 데이터를 전송받고, 헤더정보를 제거해 나가면서 (= 정보를 해석해 나가면서) 마지막 응용 계층에선 데이터만 볼 수 있게 된다.
계층 모델은 전송 계층을 기준으로 나누어 진다. 전송 계층보다 상위계층인 응용계층 표현계층 세션계층은 SYSTEM 공간으로 프로그램이나 프로세스로 구현될 수 있다. 전송 계층보다 하위계층인 네트워크 계층 데이터 링크 계층 물리 계층은 KERNEL 공간에 구현된다.
전송계층은 송수신 프로세스간 단대단 연결으로 컴퓨터 내부의 논리적 구축 대상이다. 전송 오류률, 전송 속도, 흐름제어 기능을 수행한다.
물리계층은 전송매체와 인터페이스를 담당하며 하드웨어 시스템으로 구현된다. 전송속도, 호스트 사이의 클록 동기화, 연결 형태의 기능을 수행한다.
데이터 링크 계층은 물리적 오류제어를 담당하며 신뢰성 있는 패킷 전송을 보장한다. 하지만 중개기능이 없어 직접 연결된 노드와 노드사이에서만 작동한다. 데이터는 FRAME의 형태로 전송되며 헤더에는 MAC주소가 담긴다.(흐름제어 기능가능)
네트워크 계층은 데이터의 경로선택을 담당하며 IP주소를 기준으로 경로를 탐색해준다. 경로 탐색방식에는 STATIC과 DYNAMIC이 있는데 경로를 미리 정하냐 아니면 혼잡도에 따라 경로를 변경하냐의 차이이다. DYNAMIC의 경우 혼잡제어 기능 사용시 이용한다. 데이터는 PACKET의 형태로 전송되며 헤더에는 IP주소가 담긴다.
응용 계층은 사용자이다.
표현 계층은 데이터의 의미와 표현방법에 대해 다룬다. 통신 시스템 양 단에서 각기 다른 표현방법을 사용시 변환해 주는 기능을 수행하며 암호화와 압축의 기능도 표현 계층에서 실시한다.
세션 계층은 전송 계층과 비슷한 역할을 하나 원격 전송이나 로그인 같은 좀 더 상위 개념의 연결이다. 대화 제어, 토큰 제어, 동기 등의 기능을 수행한다.
지금까지 설명으로 알 수 있는 것은 계층끼리 직접 소통하는 것이 아니라 하위 계층들의 서비스를 이용하면서 간접 소통한다는 것!
또한 호스트와 호스트가 소통시에 네트워크와 네트워크끼리의 소통으로 커지는 경우가 대다수다. 이 경우 네트워크 중개장비인 라우터를 이용해 경로를 중개해 줄 필요가 있다. 라우터는 헤더 정보를 해석하고 수정해 적절한 경로를 설정해 주는 아주 고마운 친구다.
TCP/IP 모델
인터넷 네트워크에서 TCP/IP 모델을 주로 사용한다. 프로세스가 실행되고 있고 이 프로세스에서 데이터를 전송하고자 하면 프로세스에서 전송계층과 통신을 해야한다. 이때 사용하는 인터페이스로 SOCKET을 사용한다.
프로세스는 SYSTEM 영역이고, 전송계층은 KERNEL영역이므로 SOCKET SYSTEM CALL을 이용해 통신한다. SOCKET SYSTEM CALL을 이용해 TCP와 UDP를 간접적으로 이용가능한데 TCP는 연결형을 지원하고 UDP는 비연결형을 지원한다.
소켓은 전송계층의 프리미티브로 거의 모든 운영체제에 존재하며 소켓마다 부여되는 포트주소를 관리하면서 사용된다. IP주소와 포트주소의 쌍으로 응용프로그램의 고유주소가 결정된다.
그 러 나...!!
데이터를 전송하기에 TCP UDP IP 위 세개만의 프로토콜 만으로는 부족하다... 왜냐면 주소문제와 오류제어문제가 남아있기 때문이다.
주소문제의 경우는 먼저 상대방의 IP주소는 쉽게 알 수 있지만 MAC주소는 알 수 없을 때 IP주소를 통해 MAC주소를 구해야 한다. 이때 사용하는 프로토콜이 ARP이다.
하지만 HDD나 기타 저장장치가 없는 시스템의 경우 자신의 LAN카드에 MAC주소는 기입되어 있지만 IP주소를 저장할 공간이 없기 때문에 IP주소를 알 수 없다. 따라서 MAC주소를 통해 IP주소를 알아내는 RARP 프로토콜이 필요하다.
오류문제는 보통 오류발생을 인지하고 재전송 기법으로 처리하는데, 네트워크 계층에서 오류발생의 인지를 도와주는 프로토콜이 ICMP이다. ICMP는 네트워크 계층이지만 ICMP의 메시지는 IP헤더에 캡슐화 되어 전송된다.
2021-11-09
'Computer Science > Computer Network' 카테고리의 다른 글
데이터 링크 계층 (0) | 2021.11.24 |
---|---|
MAC 계층 (0) | 2021.11.18 |
데이터 전송의 기초 (0) | 2021.11.17 |
네트워크 기술 (0) | 2021.11.12 |
네트워크 시작 (0) | 2021.11.06 |