패킷을 정확하게 분석하고, 이해하기 위해서는 패킷(packet)과 패킷을 전달하는 네트워크(network)에 대한 이해가 필요하다. 패킷이란 네트워크에 접속되어 있는 컴퓨터끼리 통신을 하여 주고받는 데이터 단위를 말한다. 이 데이터는 약속에 따라 작성되고, 정해진 약속에 따라 송/수신된다. 1990년대 이전 데이터 통신과 네트워크 계층 모델은 OSI(Open System Interconnection)모델이었다. 이후 TCP/IP 프로토콜이 인터넷에서 광범위하게 시험을 거쳐서 사용되면서 지배적인 상업적 구조가 되었고 OSI 모델은 완전히 구현되지 않았다. 이 장에서 먼저, OSI 모델을 간단히 보고, TCP/IP 프로토콜에 대해 중점적으로 설명한다.
통신이 복잡할 때는 복잡한 밈무를 여러 개의 계층구조로 나눌 수 있다. 이 경우에 각 계층 별로 하나씩 여러 개의 프로토콜이 필요하다.
송신 측에 서로 다른 동작이 있고 수신 측 또한 마찬가지다. 여기서 중요한 것은 임무가 계층구조에 주어진 순서대로 행해져야 한다는 것이다.
송신 측에 있는 각 계층은 자신의 아래에 있는 계층의 서비스(service)를 이용한다.
개방 시스템(Open System)은 기반 구조와 관계없이 서로 다른 시스템 간의 통신을 제공하는 프로토콜의 집합니다. OSI 모델은 하드웨어나 소프트웨어 기반의 논리적인 변화에 대한 요구 없이 서로 다른 시스템 간의 통신을 원할하게 하는 그 목적이 이다. OSI 모델은 모든 종류의 컴퓨터 스스템 간 통신을 가능하게 하는 네트워크 시스템 설계를 위한 계층구조이다. 이 모델은 서로 연관된 7개의 계층으로 구성되어 있고, 각 계층에는 네트워크를 통해 정보를 전송하는 일련의 과정이 규정되어있다. OSI 모델의 기초를 이해하는 것은 컴퓨터 네트워크를 공하는데 필요한 기본 지식을 제공한다.
[OSI 계층 구조]
OSI 모델은 물리층, 데이터 링크층, 네트워크층, 전송층, 세션층, 표현층 그리고 응용층으로 구성되어 있다. 메세지가 장치 A에서 장치 B로 전송되는 동중에 많은 중간 노드를 거칠 수 있다. 이 중간 노드는 항상 OSI 모델의 처음 3계층만 이용한다.
각 계층은 다른 계층의 기능과 구분되는 기능들의 집합으로 정의한다. 하나의 장치에서 각 계층은 바로 아래 계층의 서비스를 요구한다. 이러한 통신은 프로토콜이라는 협의된 규칙과 규약 의해 제어된다.
OSI계층구조 specific
그림에서 장치 A는 장치 B로 메세지를 보낸다(중간 노드를 거친다.). 송신 측에서 메시지는 계층 8에서 계층 1까지 아래로 이동한다. 계층 1에서 전체 패키지는 수신 측으로 전송될 수 있는 형식으로 변환된다. 수신 측에서 메시지는 계층 1에서 계층 7까지 이동된다.
N계층의 전체 패킷은 N-1계층 패킷의 데이터 부분으로 전송된다. N-1계층은 캡슐화된 패킷이 데이터인지 헤더 또는 트레일러인지 코르기 때문에 캡슐화라고 한다. N-1계층은 N계층에서 오는 패킷을 하나의 완전한 단위로 취급한다.
캡슐화
물리층
물리층(physical layer)은 물리 매체를 통하여 비트 스트림(bit stream)을 전달하는데 필요한 기능들을 저정한다. (물리층은 개별 비트들을 한 노드에서 다음 노드로 전달하는 책임을 갖는다.)
물리층은 다음과도 관련이 있다.
- 인터페이스와 매체의 물리적인 특성. 물리층은 장치와 전송 매체 간에 인터페이스의 특성을 규정한다. 이는 또 전송 매체의 유형도 규정한다.
- 비트의 표현. 물리층 데이터는 해석되지 않은 비트(bit) 스트림(0과 1의 연속)으로 구성되어 있다. 전송하기 위해서 비트는 신호로 부호화되어야 한다. 물리층은 부호화(encoding) 유형을 규정한다(어떻게 0과 1이 신호로 바뀌는지).
- 데이터 전송률. 전송률(초당 보내지는 비트의 수)도 물리층에서 규정된다.
- 비트의 동기화. 송신자와 수신자는 같은 비트율을 사용하고, 비트 레벨에서 동기화되어야 한다. 즉, 송신자와 수신자 시계가 동기화되어야 한다.
- 회선 구성. 물리층은 매체에 대한 장치들의 연결과 관련 있다.
- 물리적 접속형태. 물리적 접속형태는 장치들이 네트워크를 만들기 위해 어떻게 연결 되는 지를 규정한다.
- 전송모드/ 물리층은 두 장치 사이의 전송방향(단방향, 반이중, 전이중)도 규정한다.
데이터 링크층
데이터 링크층(data link layer)은 물리층에 있는 전송 설비를 신뢰할 수 있는 링크로 변환한다. 데이터 링크층의 또 다른 책임은 다음과 같다.
- 프레임 구성/ 데이터 링크층은 네트워크층으로부터 받은 비트 스트림을 프레임(frame)이라는 데이터 단위로 나눈다.
- 물리 주소지정.프레임이 네트워크상의 서로 다른 시스템에 전달되면 데이터 링크층 은 프레임의 송신자 그리고/또는 수신자를 지정하기 위해 프레임에 헤더를 더한다.
- 흐름 제어. 수신자에 의해 처리되는 데이터 전송률이 송신자가 보낸 데이터 전송률보다 낮으면 데이터 링크층은 수신자가 흐름 제어 메커니즘이 수행되게 한다.
- 오류 제어. 데이터 링크층은 손상되고 손실된 프레임을 탐지하고 재전송하는 메커니즘을 추가함으로써 물리층의 신회성을 더한다.
- 접근 제어. 둘 또는 그 이상의 자이가 같은 링크에 연결되어 있을 때 데이터 링크 프로토콜은 어떤 주어진 시간에 어느 장치가 제어권을 갖는지를 결정하는 것이 필요하다.
네트워크층
네트워크층(network layer)은 다중 네트워크(링크)를 통하여 전달되는 발진시-대-목적지 전달을 책임진다. 이외의 네트워크층의 주요 기능은 다음과 같다.
- 논리 주소지정. 데이터 링크층에 구현된 물리 주소지정은 내부적인 주소지정 문제를 처리한다. 네트워크층은 상위 계층으로부터 오는 패킷에 송신자와 수신자의 논리 주소를 포함하는 헤더를 더한다.
- 경로지정. 독립된 네트워크나 링크를 **네트워크 간 연결(internetworks) 또는 규모가 큰 네트워크를 만들기 위해 서로 연결하려면 연결 장치(라우터 또는 스위치)는 패킷의 최종 목적지까지 경로지정이나 스위칭하게 된다.
전송층
전송층(transport layer)은 전체 메시지의 프로세스-대-프로세스 전달(process-to-process delivery)을 책임진다. 프로세스는 호스트에서 실행 중인 응용 프로그램이다. 전송층은 발신지-대-목적지 레벨에서 오류 제어와 흐름 제어를 통하여 순서대로 도착하는 것을 보장한다. (순서대로 도착하는 것을 보장한다는 의미에서 네트워크층과 다르다.) 그 밖의 전송층의 책임은 다음과 같다.
- 서비스 지점 주소지정. 컴퓨터는 같은 시간에 여러 개의 프로그램을 실행한다. 이러한 이유 때문에, 발신지-대-목적지 전달은 하나의 컴퓨터에서 다음 컴퓨터까지 전달 뿐만 아니라 특정 프로세스에서 다른 컴퓨터의 특정 프로세스까지 전달을 의미한다. 그래서 전송층 헤더는 서비스 지점(service point) 주소(또는 포트 주소)라는 주소 유형을 포함한다. 네트워크층은 정확한 컴퓨터에 각 패킷을 갖게 하지만 전송층은 컴퓨터상의 정확한 프로세스에게 전체 메시지를 갖게 한다.
- 분할과 재조립. 메시지는 각 세그먼트가 순서 번호가 들어있는 전송 가능한 세그먼트로 나눈다.
- 연결제어. 전송층은 비연결형이거나 연결형일 수 있다. 이에 따라 전송층에 전달한다.
- 흐름 제어. 데이터 링크층처럼 전송층은 흐름 제어를 책임진다. 그렇지만 이 계층에서 흐름 제어는 단일 링크라기보다 종단-대-종단에서 수행된다.
- 오류 제어. 데이터 링크층처럼 전송층은 오류 제어를 책임진다. 그렇지만, 이 계층에서 오류 제어는 단일 링크를 따라 수행되기보다 프로세스-대-프로세스로 수행된다.
세션층
처음 네 계층(물리, 데이터 링크, 네트워크, 전송)에 의해 제공되는 서비스는 일부 프로세스에 대해 충분하지 않다. 세션층(session layer)은 네트워크 대화 제어기(dialog controller)이다. 이는 통신 시스템 간에 상호 대화를 설정하고, 유지하고, 동기화한다. 세션 계층의 주요 책임은 다음과 같다.
- 대화제어. 세션층은 두 시스템이 대화하는 것을 허용한다. 이는 두 프로세스 간에 반이중이나 전이중 모드로 통신하는 것을 허용한다.
- 동기화. 세션층은 데이터 스트림에 **확인점(synchronication point)을 추가하는 것을 허용한다.
표현층
표현층(presentation layer)은 두 시스템 간에 교환되는 정보의 구문(syntax)과 의미(semantic)와 관련이 있다. 표현층의 특정 기능은 다음과 같다.
- 변환. 두 시스템에 있는 프로세스(실행 중인 프로그램)는 항상 문자 스트링, 숫자 등의 형식으로 정보를 교환한다. 정보는 전송되기 전에 비트 스트림으로 변경되게 된다. 서로 다른 컴퓨터는 서로 다른 부호화 시스템을 사용하기 때문에 표현층은 서로 다른 부호화 방법간에 상호 운용성을 책임진다.
- 암호화. 중요암호화는 송신지가 원래의 정보를 다른 형식으로 변환하고 변환된 메시지를 네트워크를 통하여 보내는 것을 의미한다. 복호화는 메시지를 원래의 형식으로 되돌릴 수 있도록 변화하는 반대과정이다.
- 압축. 데이터 압축은 정보에 들어있는 비트의 수를 줄여준다.
응용 계층
응용층(application layer)은 사용자가 네트워크에 접속하는 것을 가능하게 한다. 전자우편, 원격 파일 접속과 전송, 공유된 데이터베이스 관리, 분산된 정보 서비스의 또 다른 유형과 같은 서비스를 지원하고 사용자 인터페이스를 제공한다. 응용 계층에 의해 제공되는 특정 서비스는 다음과 같다.
- 네트워크 가상 터미널(NVT, Network Virtual Terminal). 네트워크 가상 터미널은 사용자에게 원격 호스트에 로그온을 허용하는 물리적인 터미널의 소프트웨어 버전이다.
- 파일 전송, 접근, 관리(FTAM, File Transfer, Access, Management). 이 응용은 사용자에게 로컬 컴퓨터에서 사용하기 위해, 원격 컴퓨터로부터 파일을 검색하기 위하여, 자체적으로 원격 컴퓨터에 있는 파일을 관리하거나 제어하기 위하여 원격 호스트에 있는 파일 접근(데이터를 읽거나 변경하기 위하여)을 허용한다.
- 전자우편 서비스. 이 응용은 전자우편을 전달하거나 저장하는 것을 제공한다.
- 디렉토리 서비스. 이 응용은 분산 데이터베이스 자원을 제공하고 여러 가지 객체와 서비스들에 대한 글로벌 정보에 대한 접근을 제공한다.
TCP/IP 프로토콜은 다섯계층인 물리층, 데이터 링크층, 네트워크층, 전송층, 응용층으로 구성되어 있다. 처음 네계층은 OSI 모델의 네 계층과 일치하는 물리적인 표준, 네트워크 인터페이스, 네트워크 간 상호연결, 그리고 전송 기능을 제공한다. 그러나 OSI 모델의 최상위 세 계층(세션, 표현, 응용)은 TCP/IP에서 응용층이라는 하나의 계층으로 표현된다. 각 계층에서 사용되는 프로토콜을 요약하면 다음과 같다.
두 개의 모델을 비교할 때 TCP/IP 프로토콜 그룹에는 세션과 표현층이 빠져있다. 이 결정에는 두 가지 이규가 언급되었다. 먼저, TCP/IP는 하나 이상의 전송층 프로토콜을 가지고 있다. 세션층의 기능들 중 일부는 전송층 프로토콜의 일부로 이용할 수 있다. 둘째, 응용층은 소프트웨어의 일부분만이 아니다. 많은 응용이 이 계층에서 개발될 수 있다. 세션층과 표현층의 기능 중 일부가 특정 응용에 필요하다면 소프트웨어로 개발해서 포함실킬 수 있다.
이 절에서 TCP/IP 프로토콜에서 각 계층의 목적을 간단하게 설명한다. 인터넷은 링크라는 여러 개의 작은 네트워크로 만들어진다. 링크(link)는 많은 컴퓨터 간에 서로 통신을 허용하는 네트워크이다. 링크는 작은 영역을 지원하는 근거리 통신망(LAN)과 큰 영역을 지원하는 광역 통신망(WAN)일 수 있다. 또안 서로 다른 링크가 데이터를 자신의 최종 목적지에 도달하기 위해 경로를 지정하는 라우터(router)나 교환기(switch)라고 하는 장치가 서로 연결된다. 다음 그림은 각 계층의 목적을 보여주는 상상 속의 인터넷을 보여준다. 그림에는 6개의 링크와 4개의 라우터가 있다. A,B는 컴퓨터다.
TCP/IP에서 전송층은 3개의 프로토콜(TCP. UDP, SCTP)을 갖는다. IP는 호스트-대-호스트 프로토콜(Host-to-Host Protocol)로서 패킷을 하나의 물리적인 장치에서 다른 물리적인 장치로 전달 할 수 있다는 것을 의미한다. UDP, TCP, SCTP는 하나의 프로세스(실행 중인 프로그램)에서 다른 프로세스로 메시지를 전달하는 기능을 갖는 전송 레벨 프로토콜(Transport Level Protocol)이다.
TCP/IP 프로토콜을 이용한 인터넷은 3개의 서로 다른 계층의 주소가 사용되는데, 이는 물리(링크) 주소(Physical address), 논리(IP)주소(logical address), 그리고 포트 주소(port address)이다. 다음 그림처럼, 각 주소는 TCP/IP 구조에서 계층과 간련이 있다.
링크 주소로 잘 알려진 물리 주소(physical address)는 LAN이나 WAN에서 정의된 노드의 주소이다. 이것은 데이터 링크층에 의해 사용되는 프레임이 포함된다. 이것이 최하위 계층 주소이다. 물리 주소는 링크(LAN 또는 WAN)상의 권한을 갖는다. 이 주소의 크기와 형식은 네트워크에 따라 매우 다양하다.
그림에서, 물리 주소가 10인 노드가 물리 주소가 87인 노드로 프레임을 보낸다. 두 노드는 링크(LAN)에 연결되어있다. 데이터 링크층에서, 프레임은 헤더 내에 물리(링크)주소를 포함하고 있다. 헤더의 나머지 부분은 이 계층에서 필요한 정보를 담고 있다. 트레일러는(꼬리말) 보통 오류 검출에 필요한 추가 비트를 포함한다. 송신자의 데이터 링크층은 상위 계층으로부터 데이터를 받는다. 데이터는 헤더와 트레일러가 더해져 프레임에 캡슐화된다. 수신자와 송신자 물링(링크)주소는 헤더에 들어있다. 대부분의 데이터 링크 프로토콜에서 목적지 주소는 발신지 주소 앞에 온다. 프레임은 LAN을 통하여 전달된다. 목적지 주소와 다른 목적지 주소를 갖는 지국은 자신의 물리 주소와 다르므로 폐기한다. 그렇지만 목적지 컴퓨터는 프레임에 들어있는 목적지 주소와 자신의 물리 주소가 일치하는 것을 안다. 프레임을 받으면 헤더와 트레일러가 벗겨지고 데이터 부분은 상위계층에 전달된다.
IP 주소라고도 하는 **논리 주소(Logical Address)는 물리적인 네트워크와는 독립적인 전 세계적인 통신 서비스를 위해 필요하다. 물리 주소는 서로 다른 네트워크가 서로 다른 주소 형태를 갖는 네트워크 간 상호 접속 환경에는 적합하지 않다. 기존의 물리적인 네트워크에 관계없이, 각 호스트를 유일하게 식별할 수 있는 전 세계적인 주소지정 시스템이 필요하다.
논리 주소는 이러한 목적을 위해 설계되었다. 논리 주소는 현재 인터넷에 연결된 호스트를 유일하게 식별할 수 있는 32비트 주소체계를 사용한다. 인터넷상의 두 호스트는 동일한 IP주소를 사용할 수 없다.
그림은 세 개의 LAN을 연결하는 두개의 라우터를 가진 인터넷의 한 부분을 보여준다. 각 장치(컴퓨터나 라우터)는 각 연결에 대해 한 쌍의 주소(논리와 물리)를 갖는다. 각 라우터는 3개의 네트워크에 연결되어 있다.(그림에서는 단지 두개만 보인다). 따라서 각 라우터는 각 연결 당 하나씩 세 개의 주소 쌍을 가지고 있다. 송신자는 네트워크의 패킷에 있는 데이터와 두 개의 논리 주소(송신자 주소, 수신자 주소)를 더해서 캡슐화 한다. 대부분 프로토콜에서 논리 주소는 목적지 논리 주소 앞에 온다.(물리 주소의 순서와 반대로). 그렇지만 네트크워크층은 패킷을 전달하기 전에 다음 홉의 물리 주소가 필요하다. 네트워크층은 라우팅 테이블을 참조하여 다음 홈의 논리 주소를 찾아낸다. 이제 네트워크층은 데이터 링크층에 이 주소를 전달한다. 그러면 목적지 물리주소와 발신지 물리주소가 있는 패킷을 캡슐화 한다. 라우터는 논리 목적지주소를 읽기 위하여 프레임에서 패킷의 캡슐을 벗긴다. 논리 목적지 주소가 라우터의 논리 주소와 일치하지 않으면 라우터는 패킷을 포워딩한다. 그리고 라우터는 다음 홉의 물리 목적지 주소를 찾기 위해 자신의 라우팅 테이블과 ARP의 도움을 받아서, 새로운 프레임을 만들고 패킷을 캡슐화해서 다음 라우터로 보낸다. 이후 또 비슷한 시나리오를 갖는다. 물리 주소가 변경되고 새로운 프레임이 목적지 컴퓨터에 보내진다. 이러한 과정 끝에 프레임이 목적지에 도착하면 패킷은 캡슐이 벗겨진다. 목적지 논리 주소가 일치하면, 데이터는 패킷으로부터 캡슐이 벗겨지고 상위층에 보내진다. 물리 주소는 홉에서 홉으로 갈 때마다 변겨오디지만 논리 주소는 발신지에서 목적지까지 같은 상태로 남아있다.
다량의 데이터를 발신지에서 목적지 호스트까지 전송하기 위해서는 IP주소와 물리 주소가 필요하다. 그러나 목적지 호스트에 도착하는 것이 인터넷을 통한 데이터 통신의 최종 목적이 아니다. 오늘날 컴퓨터는 여러개의 프로세스를 동시에 실행할 수 있다. 인터넷 통신의 최종 목적은 한 프로세스가 다른 프로세스와 통신할 수 있도록 하는 것이다. 동시에 발생되는 프로세스들을 위해 서로 다른 프로세스를 식별하는 방법이 필요하다. 즉, 주소가 필요하다. TCP/IP 구조에서, 프로세스에 할당된 레이블을 포트주소(port address)라고 한다. TCP/IP에서 포트 주소 길이는 16비트이다.
위 그림에서 전송층은 패킷에 응용층으로부터 온 데이터와 발신지와 목적지 포트 주소를 더한다. 전송층의 패킷은 네트워크층에서 발신지와 목적지 논리 주소를 가진 또 다른 패킷으로 캡슐화 한다. 마지막으로, 이 패킷은 물리 발신지와 다음 홉의 목적지 주소를 갖는 프레임으로 캡슐화 된다. 여기서 물리 주소는 인터넷에서 홉에서 홉으로 갈 때마다 변경 됨으로 보여 줄 수 없다. 하지만 논리 주소와 포트 주소는 목적지까지 변경되지 않고 그대로 유지된다.
어떤 응용은 특정 응용을 위해 설계된 사용자에게 친근한 주소를 사용한다. 예를 들면 전자우편주소나, URL(Universal Resource Locator, ex> www.amazon.com)이다.