한윤석 개발 블로그

배운 것을 적는 블로그입니다.

OSI 참조 모델이란 무엇인가?

등록일: 2020-03-01
수정일: 2020-03-01

OSI 참조 모델이란 무엇인가?

컴퓨터를 만드는 회사가 서로 규격이 달라서 호환되지 않았다. 그래서 ISO(국제표준화기구)는 데이터 통신 전체를 표준화하기 위해서 데이터 통신을 단계로 나누어 각 단계의 순서를 명확히 하고, 이 모델에 따라 프로토콜을 정의하여 데이터 통신 전체를 표준화하기 위해 설계도를 만들려고 했다. 하지만 실패했다.

그러나 이 설계도는 데이터 통신을 설명하는데 아주 유용하다.

네트워크에 의한 데이터 통신은 단계마다의 복수의 프로토콜로 실현된다. OSI 참조 모델은 데이터 통신을 7개의 단계로 나누는데 각 계층(Layer)이라고 부른다. 각 계층은 각각 독립해 있어서 프로토콜의 변경이 다른 계층에 영향을 끼치지 않는다. 하위 계층을 상위 계층을 위해서 일하고 상위 계층은 하위 계층에 관여하지 않는다.

캡슐화란 무엇인가?

데이터를 운반하기 위해서는 운반하려는 데이터 이외에 다른 것도 필요하다. 주소 같은 것들을 데이터와 함께 보내는데 데이터랑 데이터를 보내기 위해 필요한 것들이 통합된 상태를 프로토콜 데이터 유닛(Protocol Data Unit: PDU)라고 부른다.

각 레이어에서 데이터에 통신에 필요한 데이터를 덧붙이는데 앞에 붙이면 헤더, 뒤에 붙이면 트레일러라고 부른다. 그리고 이 과정을 캡슐화(Capsulation)라고 부른다. 데이터 수신 측에서는 이 데이터를 읽기 위해 반대의 순서로 풀어헤치는데 이를 Decapsulation이라고 한다.

TCP/IP 모델이란 무엇인가?

TCP/IP 모델하고 OSI 참조 모델은 사실 전혀 관계가 없다. OSI 참조 모델은 설계도일 뿐이다. TCP/IP 모델은 인터넷에서 가장 많이 사용되는 프로토콜군이다. TCP/IP 프로토콜군을 사용하는 컴퓨터 및 기기가 압도적으로 많아서 실제로 재정된 표준규격은 아니지만 표준규격처럼 사용할 수밖에 없는 상태가 되어 사실 표준으로서 프로토콜이 되었다.

다음과 같이 이루어져 있다.

  • 4계층 애플리케이션 계층
  • 3계층 트랜스포트 계층
  • 2계층 인터넷 계층
  • 1계층 인터페이스 계층

1계층

1계층은 케이블이 연결되어 있는 기기에 통신매체를 통해서 신호를 전달한다.

통신매체에는 유선과 무선이 있다.

유선 케이블의 종류에는 UTP 케이블과 광파이버 케이블이 있다.

보내고 싶은 데이터를 케이블에 맞는 신호로 변환해서 케이블로 보내고, 케이블에서 보내온 신호를 컴퓨터에서 사용되는 데이터로 변환하는 기계를 인터페이스라고 부른다. 인터페이스는 비트를 신호로, 신호를 비트로 변환하는 기기다. 컴퓨터에서 사용되는 인터페이스로는 LAN 용 케이블에 접속하기 위해 NIC(Network Interface Card)가 일반적으로 사용된다.

신호에는 아날로그 신호와 디지털 신호가 있다. 아날로그 신호는 파장이고 디지털은 On, Off로 데이터를 표현한다. 이것을 비트라고 부른다. 0 혹은 1로 디지털 신호로 사용한다. 이 신호의 형태와 전송 방법에 따라 통신속도가 결정이 된다. 통신속도는 일반적으로 1초 동안 전해지는 비트 수로 표현되는 경우가 많은데 이 단위가 bps(bit per second)이다.

신호에 발생하는 문제

  1. 감쇠

장거리 케이블을 지나는 동안 동선의 저항에 의해 신호가 약해진다. 그래서 장거리로 데이터를 전송할 때는 도중에 약해진 신호를 본래 상태로 되돌리기 위해 증폭을 하는 기계를 중간에 설치한다.

  1. 노이즈, 간섭

근처에 큰 전원이 있거나, 고온의 물체, 다른 케이블, 번개나 무선 등 전자파 등 외부의 요인에 의해 신호의 진폭이 변화한다.

케이블에 실드를 처리를 하거나 해서 간섭이나 노이즈를 막는다. 하지만 광신호는 이런 노이즈나 간섭을 받지 않는다. 노이즈나 간섭이 전기적인 요인에서 오는 것이기 때문이다.

  1. 충돌

신호가 보내지고 있는 도중에 다른 신호를 보내는 경우에 발생한다. 케이블상에 동시에 전송된 신호가 충돌해 전하를 주고받게 됨으로써 진폭이 붕괴된다. 신호를 보내는 타이밍을 서로 엇갈리게 하거나 신호가 지나는 길을 나누는 방법을 사용할 수 있다.

허브란 무엇인가?

복수의 기기를 연결해서 네트워크를 구축하는 기능을 가진 기기를 말한다. 허브에 연결되어 있는 기기끼리 통신을 할 수 있다. 허브의 케이블 삽입구를 포트라고 부른다. 허브와 허브를 연결하는 것을 연속 접속(cascade connection)이라고 한다. 더 큰 네트워크를 구축하고자 할 때 사용한다.

허브의 첫 번째 기능은 신호의 증폭과 재생이다. 감쇠에 의해 붕괴된 신호를 본래의 형태로 증폭하고 재생하는 기능을 한다.

증폭만 하는 기계를 리피터(Repeater)라고 부른다. 리피터는 케이블 사이에 연결하는 기계로 허브처럼 케이블을 많이 연결할 수는 없다. 그래서 케이블을 많이 연결할 수 있는 허브 쪽이 일반적으로 사용된다.

허브는 수신한 신호에 대해 어떤 제어도 하지 않는다. 신호를 증폭하고 재생하지만 그 외에는 하지 않는다. 수신한 포트 이외의 모든 포트에 수신한 신호를 송신 하는데 이것을 플러딩(flooding)이라고 한다. 허브에 연결되어 있는 기기가 동시에 송신하면 충돌이 발생한다. 이러한 충돌이 발생할지도 모르는 범위를 충돌 도메인(Collision Domain)이라고 부른다. 즉 허브로 연결되어 있는 컴퓨터는 같은 충돌 도메인에 있는다. 이러한 충돌 도메인은 작을수록 충돌을 격리할 수 있으므로 작은 것이 좋다.

2계층

신호가 닿는 범위인 세그먼트라는 범위에서 어떻게 데이터를 송수신할지를 생각하는 계층이다.

프레이밍(Framing)

1계층에서 주고받은 신호를 비트화해서 의미를 갖게 하여 데이터로 취급할 수 있게 하는 것을 프레이밍(Framing)이라고 한다. 프레이밍을 하여 송수신되는 신호를 데이터로 인식할 수 있게 된다. 프레이밍에서는 프리엠블(preamble)이라고 불리는 지금부터 프레임이 시작된다는 신호를 한다. 그리고 수신 측에서 이 프리엠블을 수신하면 이제부터 프레임 신호가 온다는 것을 알 수 있어서 데이터로 취급할 수 있다.

주소(Address)

데이터를 보내는 상대와 자신을 특정하는 데이터. 이 주소를 어떻게 사용할지, 배정할지 같은 것을 어드레싱(Addressing)이라고 한다.

주소는 데이터 전송 방법에 따라 3종류가 있다.

  • 유니캐스트(Unicast) - 유니캐스트 주소
    • 1대1로 하는 데이터 통신.
    • 각각의 기기는 유니캐스트 주소를 적어도 한 개 갖고 있다.
    • 라우터처럼 복수의 인터페이스를 가진 기기는 인터페이스마다 유니캐스트 주소를 갖는다.
    • 유니캐스트 주소는 유일해야 한다.
  • 브로드캐스트(Broadcast) - 브로드캐스트 주소
    • 1대 전체
  • 멀티캐스트(Multicast)- 멀티캐스트 주소
    • 1대 다수.
    • 그룹번호 같은 취급을 한다.

MAC 주소(Media Access Control Address)

이더넷에서 사용되는 주소로 인터페이스에 지정된 고정 주소다. 48비트 값이고 앞의 24비트는 벤더 코드라고 불리는 인터페이스를 제조한 메이커의 번호, 나머지 24비트는 메이커가 할당한 벤더 할당 코드다.

이더넷(Ethernet)

LAN에서 2계층은 사실표준인 이더넷이라는 규칙이 적용된다. 이더넷에서는 1계층의 신호에서 신호가 전송되는 동안에 문제가 생겼을 때 에러를 체크하기 위해 데이터에 FCS(Frame Check Sequence)를 붙인다. 순회부호 방식(Cyclic Redundancy Check)라고 불리는 에러 체크 데이터를 사용한다. 기본적으로 통신 도중에는 에러를 고칠 수 없다. 바른 데이터인지 아닌지는 데이터를 수신하지 않는 한 알 수 없기 때문이다. FCS는 에러가 발생했는지 아닌지만 알 수 있다. 에러가 있었던 프레임은 파기되고 그 이후의 처리는 하지 않는다. 파기했다는 것을 송신 측에 알리지 않는다.

허브에 의해 모든 기기에 도달한 프레임은 수신처 MAC 주소를 가진 기기 이외에는 파기한다.

이더넷에서는 신호를 보내는 타이밍을 겹치지 않도록 하여 되도록 충돌이 일어나지 않도록 하는데 이를 위해서 CSMA/CD(Carrier Sense Multiple Access / Collision Detection)라는 액세스 제어를 한다.

  • CS(신호 감지)는 누군가가 송신 중이면 송신하지 않는다.
  • MA(다중 액세스)는 아무도 송신하고 있지 않으면 송신할 수 있다.
  • CD(충돌검사)는 송신 후에 충돌이 일어나면 다시 재수행 한다는 의미다.

스위치

충돌이 발생하지 않게 하기 위해 신호를 보내는 타이밍이 겹치지 않도록 하고, 신호가 지나는 길을 나누는 방법이 있는데 이 신호를 지나는 길을 나누기 위한 기기가 스위치(Switch)다. 허브 대신에 사용한다.

충돌은 허브에서 발생한다. 허브가 동시에 2개 이상의 기기로부터 신호를 수신하면 나누어 보낼 수 없기 때문이다. 그래서 스위치 안에서 수신한 프레임을 따로따로 보낼 수 있도록 충돌을 막는다.

  • MAC 주소 필터링

필터링은 학습과 스위칭이라는 동작으로 이루어져 있다. 학습을 통해 스위치는 포트에 연결되어 있는 컴퓨터의 MAC 주소를 기억한다. 이것을 어드레스 테이블이라고 한다. 프레임을 수신한 스위치는 프레임의 수신처 MAC 주소를 보고 그 MAC 주소가 있는 포트만 프레임을 송신한다. 그래서 수신처가 다른 프레임이 동시에 스위치에 도달해도 충돌은 발생하지 않게 된다. 이 동작은 MAC 주소에 의해 송신하는 포트를 필터링하기 때문에 MAC 주소 필터링이라고 한다. 먼저 학습하고 어드레스 테이블을 만들어야 하는데 만약 학습되지 않은 프레임을 수신하면 플러딩을 하게 된다. 멀티캐스트와 브로드캐스트도 플러딩을 한다.

  • 버퍼링

만약 수신처가 같은 프레임이 동시에 도달한다면 충돌이 발생하지 않을까? 이 경우에는 버퍼링을 통해 충돌 문제를 해결한다. 버퍼를 사용해서 버퍼에 일시적으로 저장해 두었다가 처리한다. 근데 만약 버퍼가 용량이 가득 찼을 때 프레임이 도착하면 백 프레셔(Back pressure) 또는 IEEE802.3x라는 규격을 사용해서 송신을 조정한다.

허브에서는 CSMA/CD를 사용하고 Half-Duplex 통신을 사용하는데 효율이 나쁜 구조다. 스위치를 사용하면 충돌이 발생하지 않아 CSMA/CD를 사용할 필요 없고 Full-Duplex라는 방식을 통해 통신을 할 수 있어 더 효율적인 통신이 가능하다.

3계층

2계층은 세그먼트 내에서 데이터의 송수신을 하는 것이 역할이었다. 세그먼트 간에서의 데이터 송수신을 하는 것이 3계층의 역할이다. 이 범위를 가리켜서 네트워크라고 한다.

인터넷

라우터를 넘어서는 브로드캐스트는 송신되지 않는다. 1개의 큰 네트워크를 복수의 네트워크로 분할함으로써 브로드캐스트가 도달하는 범위를 제한할 수 있다. 네트워크 간에서의 데이터 송수신을 인터넷 작업(Internetwork)라고 한다. 간단히 인터넷이라고 부른다.

3계층은 인터넷 작업을 수행하여 떨어져 있는 컴퓨터끼리 데이터 통신이 가능하게 된다.

IP

MAC 주소는 장소를 특정할 수 없는 주소다. 3계층에서 사용하는 주소는 논리 주소라고도 불리는데 어디에 있는지와 같은 위치정보가 있다. 2계층에서 사용하는 주소는 물리 주소라고 불린다. 위치정보는 어디의 네트워크에 있는 어느 컴퓨터라는 정보의 조합으로 실현된다.

수신처가 연결되어 있는 회선에 데이터를 보내도록 지정하는 것을 라우팅(Routing)이라고 한다.

이 어드레싱과 라우팅에 의해 인터넷 작업을 수행하기 위해 프로토콜로서 TCP/IP 프로토콜군에서 사용되는 것이 IP(Internet Protocol)이다.

IP(Internet Protocol)

IP version4인 IPv4와 IP version6 IPv6두 가지가 있는데 일반적으로 IPv4많이 쓰인다. 이 두 버전 사이에는 호환성이 없다.

IP 헤더에는 수신처, 송신처의 IP 주소와 라우팅에서 사용하는 값 등이 있다.

  • IP 주소는 계층형 주소다
  • IP 주소는 네트워크 관리자가 컴퓨터에 할당한다.
    • 물리 주소와는 다르게 네트워크에 접속할 때마다 붙인다.
  • 유니캐스트 멀티캐스트 브로드캐스트 3종류의 주소가 있다.

유니캐스트 주소는 네트워크를 표시하는 번호는 접속되어 있는 소속된 네트워크에서 유일해야 한다.

IP 주소

IP 주소는 계층형 주소다. IPv4는 32비트다. 8비트마다 10진수로 표기하고 8비트 사이에 점을 찍어 표시한다. 이 하나의 단락을 옥텟(Octet)이라고 부른다. 예를 들어 192.168.42.1 이렇게 표시할 수 있다.

컴퓨터를 식별하는 주소이고 그 컴퓨터가 있는 네트워크 번호와 그 컴퓨터 번호로 구성되어 있다.

네트워크 주소는 접속되어 있는 모든 네트워크에서 유일해야 하기 때문에 인터넷에서는 ICANN(The Internet Corporation for Assigned Names and Number)라는 조직에서 실제로 번호를 사용하는 조직에 할당한다. ICANN이 IP 주소를 가지고 있다가 기업이나 사업자에게 대출한다고 생각하면 된다. 대출을 할 때 그 할당된 조직의 규모에 따라 대출 IP 주소의 범위를 변경하는데 그게 클래스라고 한다.

클래스는 A ~ E로 나눠져 있고 최초 옥텟의 맨 앞 몇 비트로 판별한다. 네트워크 번호 부분의 비트 수에 따라 네트워크가 소유할 수 있는 컴퓨터 수가 달라진다. 이렇게 IP 주소를 할당하는 방식을 클래스풀 어드레싱(Classfull Addressing)이라고 한다.

네트워크 번호를 할당하면 컴퓨터 번호가 남는데 이 컴퓨터 번호를 호스트 번호라고 한다. 이 호스트 번호는 네트워크 관리자가 할당한다.

호스트 번호의 비트가 모두 0인 네트워크를 나타내는 주소를 네트워크 주소라고 부르고, 비트가 모두 1인 주소를 브로드 캐스트 주소라고 부른다.

서브네팅

IP 주소는 계층형이라서 커다란 네트워크 안에 작은 네트워크를 만들 수 있는데 이렇게 분할된 작은 네트워크를 서브네트워크(Subnetwork) 또는 서브넷(Subnet)이라고 부른다. 큰 단위의 네트워크를 작은 단위를 네트워크로 쉽게 관리할 수 있다.

호스트 번호의 비트를 서브넷 번호와 호스트 번호로 분할한다. 호스트 번호의 일부를 줄여서 서브넷 번호를 만든다. 호스트 번호를 사용하기 때문에 서브넷은 그 네트워크의 내부에서만 유효하다. 이렇게 서브넷화 하는 것을 서브네팅이라고 한다. 서브넷의 숫자를 크게 하면 각 서브넷의 호스트 수는 감소한다.

서브넷 마스크

IP 주소의 어디까지가 네트워크 주소인지 나타내기 위해 서브넷 마스크라고 불리는 비트열을 IP 주소와 동시에 표기해야 한다. 어디까지가 서브넷 번호인지를 나타내는데 네트워크 번호, 서브넷 번호의 비트를 모두 1 호스트 번호를 0으로 해서 표시한다. 서브넷 마스크의 비트가 1인 부분이 네트워크 번호다.

클래스리스 어드레싱

지금은 클래스풀 어드레싱은 사용되지 않는다. 크기를 3개로만 구분하니까 그 구분에 딱 맞지 않으면 낭비가 많다. 그래서 등장한 것이 클래스리스 어드레싱(Classless Addressing)이다. 클래스 C 네트워크는 256개의 IP 주소를 사용할 수 있고 클래스 B 네트워크의 주소는 65,536갠데 만약 1,000개만 필요하다면 B 네트워크 주소를 사용해야 하는데 그러면 64,536개는 사용되지 않아 낭비다. 그래서 사용하는 것이 슈퍼넷이다.

슈퍼넷(Super Network)

클래스의 네트워크를 통합해서 1개의 네트워크로 운용하는 것을 말한다. 예를 들면 C 클래스의 네트워크 8개를 운용하면 2,048개의 IP 주소를 운용할 수 있다. 하지만 어디까지가 네트워크 번호인지를 나타내는 값이 필요하다. 이 값을 프리픽스 길이(Prefix-Length)라고 한다. 네트워크 번호의 길이를 나타내는 값인데 CODR(Classless Inter Domain Routing)라고도 한다. 예를 들어 192.168.32.0/21라고 나타낼 수 있다. 21이 프리픽스 길이다.

IP 주소 할당

이더넷을 사용해서 IP 데이터 그램을 송수신하기 위해서는 4개의 주소가 필요하다.

  • 송신처 MAC 주소
  • 송신처 IP 주소
  • 수신처 MAC 주소
  • 수신처 IP 주소

MAC 주소는 인터페이스의 고유한 주소니까 정해져있고 IP 주소는 정적 할당과 동적 할당이라는 방법이 있다.

  • 정적 할당
    • 수동으로 IP 주소를 설정하는 방법
    • 네트워크 관리자가 정한 IP 주소를 자신의 컴퓨터에 입력하는 것
  • 동적 할당
    • IP 주소가 자동으로 컴퓨터에 설정되는 방법
    • DHCP 프로토콜을 사용한다.

DHCP(Dynamic Host Configuration Protocol)

할당한 IP 주소를 관리하고, 실제로 할당 작업을 수행하는 서버하고 할당받는 클라이언트로 이루어진다. DHCP의 서버를 DHCP 서버라고 불린다. 클라이언트가 IP 주소를 요청하면 IP 주소를 할당한다.

IP 주소 풀이라는 관리자가 할당할 주소의 범위에서 사용되지 않은 주소를 요청한 클라이언트에게 할당한다.

할당하고 대여 기간을 설정할 필요가 있는데 IP 주소를 할당하고 해제하지 않으면 사용되지 않고 있는 IP 주소가 늘어나기 때문에 대여 기간을 설정한다.

DHCP에서 주고받는 내용을 DHCP 메시지라고 부른다. 메시지 옵션에는 주소와 옵션 설정 등의 정보를 갖고 있다.

DISCOVER, OFFER, REQUEST, ACK 4 종류의 메시지를 클라이언트와 서버 간에 브로드캐스트를 사용해서 주고받는다.

  1. 클라이언트 DHCP DISCOVER 메시지를 브로드캐스트한다.
  2. DISCOVER를 받은 서버는 할당한 IP 주소를 풀에서 선택해서 그것을 클라이언트에게 브로드캐스트해서 통지한다. (DHCP OFFER)
  3. 클라이언트는 OFFER에서 받은 IP 주소로 문제가 없으면 DHCP REQUEST를 서버에 브로드캐스트한다.
  4. REQUEST를 받은 서버는 문제가 없으면 DHCP ACK를 보낸다. 그때 서브넷 마스크 등 옵션 설정도 ACK에 넣어서 보낸다.

클라이언트가 누구에게 메시지를 보낼지 모르기 때문에 브로드캐스트로 송신한다.

ARP(Address Resolution Protocol)

수신처의 IP 주소에 대응한 MAC 주소를 조사하기 위해 필요한 프로토콜이다.

  1. 사용자 애플리케이션이 수신처의 IP 주소를 결정한다.
  2. 수신처 IP 주소에 대해 MAC 주소를 질문한다.
  3. 그 IP 주소를 가진 컴퓨터는 MAC 주소를 가르쳐준다.

MAC 주소를 알기 위해서 ARP 테이블을 참조한다. ARP 테이블은 IP 주소와 MAC 주소의 대응표다. 만약 요청한 IP의 대응하는 MAC 주소가 없다면 브로드캐스트로 ARP 요청을 보낸다.

  1. 송신을 원하는 컴퓨터는 먼저 ARP 테이블을 참조한다.
  2. ARP 테이블에 수신처 IP 주소가 없을 경우 ARP 요청을 브로드 캐스트 한다.
  3. ARP 요청의 수신처를 확인하고 자신의 경우에는 응답한다. 그렇지 않은 경우는 파기한다.
  4. ARP 응답을 받으면 ARP 테이블에 응답 결과를 추가로 기술한다.

ARP 테이블에 기재되어 있는 IP 주소와 MAC 주소의 대응은 일정 기간이 지나면 파기된다. 왜냐하면 인터페이스 고장 등으로 MAC 주소가 변경되어도 대응할 수 있도록 하기 위해서다.

DNS(Domain Name System)

수신처의 IP 주소를 알고 있을 경우 IP 주소를 요청하면 된다. 하지만 단순한 숫자 나열은 외우기 힘들기 때문에 도메인 이름을 사용한다. 가장 쉬운 예는 http://로 시작하는 텍스트다.

도메인 명은 IP 주소와 마찬가지로 ICANN이 관리한다. DNS는 이름과 IP 주소를 대응시킨 시스템으로 이름과 IP 주소의 대응 데이터베이스를 갖고 있는 DNS 서버에 요청하여 수신처의 IP 주소를 입수한다.

  1. 도메인 명으로 수신처를 지정하여 요청한다.
  2. DNS 서버에 도메인 명에 대응하는 IP 주소를 요청한다.
  3. DNS 서버는 요청한 도메인 명에 대응한 IP 주소를 데이터베이스에서 찾는다.
  4. 도메인 명에 대응한 IP 주소를 응답한다.

DNS 서버는 각 조직에 1개씩 있고 그 조직의 도메인 명만 관리한다. 다른 조직의 호스트 명과 도메인 명은 그 조직의 DNS 서버에 요청한다. 일종의 분산형 데이터베이스라고 볼 수 있다.

데이터 전송

DHCP, ARP, DNS를 사용하여 4개의 주소를 결정한다.

  1. 자신의 IP 주소는 수동 혹은 DHCP에서 할당받고, MAC 주소는 네트워크 인터페이스에 정해져 있으므로 MAC 주소는 알고 있다.
  2. 사용자 애플리케이션이 수신처의 도메인 명으로 요청을 하면 DNS를 통해 IP 주소를 취득한다.
  3. IP 주소가 결정된 후 ARP에 의해 MAC 주소를 취득한다.
  4. 송신처, 수신처의 MAC 주소, IP 주소를 알기 때문에 데이터 전송이 가능해진다.

경로

MAC 주소는 같은 네트워크 내의 수신처를 결정하고 IP 주소는 수신처의 컴퓨터를 결정한다. IP 주소는 데이터의 최종 수신처가 되고 MAC 주소는 그다음에 정의되는 수신처가 된다. 인터넷은 복수의 네트워크를 경유해서 최종 컴퓨터까지 도달한다. MAC 주소는 바로 다음에 보낼 장소를 지정하고 거기에 도달하면 다시 MAC 주소로 다음에 보낼 장소를 지정한다. 그래서 최종 수신처에 도달할 때까지 데이터의 MAC 주소는 계속 변경된다. 반면에 IP 주소는 변경이 없다.

라우터는 다음 수신처를 결정하고 이것이 연결되어 경로가 된다. 이렇게 반복해서 다음 길을 제시해 가는 방식을 홉 바이 홉(Hop-by-Hop) 방식이라고 부른다. 다음 수신처를 가리키는 과정을 반복함으로써 전체의 경로가 만들어진다.

디폴트 게이트웨이(Default Gateway)

컴퓨터가 지정하는 라우터를 디폴트 게이트웨이라고 부른다.

컴퓨터는 데이터를 송신할 때 다음과 같은 규칙이 있다.

  • 컴퓨터는 다른 네트워크에 수신처가 있는 경우에는 디폴트 게이트웨이로 송신한다.
  • 같은 네트워크에 수신처가 있는 경우에는 수신처에 직접 송신한다.

그래서 컴퓨터에 라우터가 설정되어 있지 않다면 다른 네트워크에 대한 데이터 전송 자체가 불가능하다.

라우터는 브로드캐스트를 중지해버리기 때문에 다른 네트워크에 있는 수신처 MAC 주소를 ARP로부터 얻을 수 없다. 다른 네트워크로 전송하고 싶은 호스트는 일단 디폴트 게이트웨이로 데이터를 보내서 다른 네트워크로 전송한다. 즉 컴퓨터가 최초로 데이터를 보내는 수신처는 디폴트 게이트웨이가 된다. 그래서 다른 네트워크에 송신할 때 디폴트 게이트웨이로 ARP를 수행한다.

  1. 다른 네트워크에 데이터를 보내는 경우, 호스트는 디폴트 게이트웨이로 ARP를 수행해서 디폴트 게이트웨이의 MAC 주소를 입수한다.
  2. 호스트는 수신처 MAC 주소를 디폴트 게이트웨이로, 수신처 IP 주소를 수신처 호스트로 해서 패킷을 보낸다.
  3. 수신 받은 디폴트 게이트웨이는 라우팅을 하고, 중계 라우터, 송신 포트를 결정하여 다음에 수신 받을 상대(중계 라우터 또는 수신처)에게 ARP를 수행한다.
  4. ARP에 의해 입수한 MAC 주소를 수신처 MAC 주소로, 자기 자신의 MAC 주소를 송신처 MAC 주소로 갱신하여 송신한다. IP 주소는 변경되지 않는다.

그래서 컴퓨터에는 디폴트 게이트웨이의 IP 주소를 미리 설정해 준다.

라우터

라우터가 없으면 인터넷에서 네트워크 간의 데이터 전송을 할 수 없다.

라우터는 어떤 네트워크에서 다른 네트워크에 데이터그램을 보내는 역할을 하고 네트워크와 네트워크의 경계상에 배치되어 복수의 인터페이스를 가질 수 있다. 라우터의 각 인터페이스는 각각의 네트워크에 소속되어 있는 형태다.

라우팅을 한다는 것은 데이터 그램의 수신처 IP 주소를 근거로 다음에 송신하는 라우터를 결정하는 것을 말한다.

라우터는 전송받은 데이터그램에 대해 조건을 붙여 그 데이터그램을 파기하는 필터링 처리를 하기도 한다.

라우터는 다음과 같이 동작한다.

  1. 호스트로부터 패킷을 수신 받는다.
  2. 수신처 IP 주소로부터 수신처 네트워크를 결정한다.
  3. 라우팅 테이블에서 다음 중계할 라우터, 송신할 인터페이스가 결정된다.
  4. 결정된 인터페이스로부터 패킷을 송신한다.

라우팅 테이블

라우터는 라우팅 테이블을 가지고 있다. 라우팅 테이블이란 수신처의 네트워크, 다음 라우터, 메트릭, 송신 인터페이스가 쓰여 있다. 라우터는 이 테이블에 따라 수신 받은 패킷을 수신처까지 보낸다.

라우팅 테이블에서 수신처를 찾아낼 때는 최장 일치의 룰(Longest Match)을 통해 찾는다. IP 주소의 비트열과 네트워크 주소의 비트열을 앞에서부터 순서대로 비교하여 가장 많이 일치하는 것부터 선택한다. 만약 일치하는 주소가 없는 데이터그램은 파기한다.

최적의 경로를 찾기 위해 다른 네트워크의 경로를 모두 알아야 한다. 알고 있는 경로 중에서 최적의 경로를 선택해서 라우팅 테이블을 작성한다. 경로를 알기 위해 정적 라우팅, 동적 라우팅을 통해 알 수 있다.

  • 정적 라우팅
    • 우회로 변경을 수동으로 수행해야 한다.
    • 수동으로 입력한 경로가 사용할 수 없게 될 경우 수동으로 다시 경로를 갱신해야 한다.
  • 정적 라우팅
    • 라우터가 자동으로 정보를 서로 교환해서 경로를 알아내는 방법이다.
    • 라우터끼리 정보를 교환한다는 것은 데이터를 서로 주고받는 것을 의미하는데 그만큼 회선 전송을 압박하게 된다.
    • 서로 교환한 정보를 가지고 최적의 경로를 계산해야 하니 라우터의 처리능력이 필요하게 된다. 계산 처리 때문에 전송 처리 능력이 떨어질 수 있다.
    • 모든 라우터가 동일한 정보를 가져야 한다. 동일한 정보를 가지고 있는 상태를 컨버전스(Convergence)라고 부른다. 네트워크 내의 모든 라우터가 올바른 경로 정보를 가지지 않으면 수신처에 정확하게 도달하지 않는다.

라우팅 프로토콜(Routing Protocol)

근접해 있는 라우터 간의 네트워크 정보를 서로 교환하기 위한 규칙을 말한다. 정보교환을 언제 할지, 어떻게 할지, 누구에게 전송할지, 어떤 정보를 전송할지 같은 것들을 결정한다. 결정한 방식에 따라 정보를 교환해 컨버전스 상태에 도달한다. 이렇게 교환한 정보를 기준으로 최적의 경로를 라우팅 테이블에 기재한다.

자율화 시스템(Autonomous System)

하나의 관리 단체에 의해 관리되는 네트워크 집합체를 말한다. 라우팅에서는 AS는 한 개의 범위로써 취급된다. 인터넷에는 너무 많은 네트워크가 존재하기 때문에 같은 조직이 관리하는 복수의 네트워크를 AS로 통합해 버린다. 복수의 네트워크를 통해서 큰 단위의 라우팅을 수행한다.

브로드캐스트 도메인

브로드캐스트가 미치는 범위를 브로드캐스트 도메인이라고 부른다. 라우터가 네트워크를 나누기 때문에 브로드캐스트가 다른 네트워크에 송신되지 않도록 한다. 라우터는 브로드 캐스트 도메인을 나눈다.

메트릭

최적의 경로를 판단하는 기준으로 사용되는 것이 메트릭이다. 라우터의 수, 회선의 속도, 정체 상태, 에러 발생률 등의 판단 기준에 따라 라우팅 프로토콜에 의해 결정된 값을 계산해서 그중 최솟값을 갖는 것을 최적의 경로로 결정한다.

RIP

라우터가 다른 라우터와 교환하는 정보를 라우팅 업데이트라고 부른다. 라우팅 테이블을 그대로 교환하는데 30초에 1번식 교환한다. 만약 이 업데이트를 6번 수신 받지 않으면 그 라우터에는 뭔가 장애가 발생했다고 간주해서 그 라우터를 사용하는 경로들을 파기한다.

메트릭에서 홉 수를 사용하는데 홉 수라는 것은 수신처 네트워크까지 통과하는 라우터의 수를 말한다.

라우팅 테이블을 그대로 교환하여 자기가 모르는 네트워크를 테이블에 추가한다. 새로운 경로 쪽이 메트릭이 작으면 그쪽을 테이블에 기재한다.

ICMP(Internet Control Message Protocol)

네트워크의 제어, 관리 등을 수행하는 프로토콜이다. 만약 라우터에서 네트워크 경로를 모를 때 수신처에 도달할 수 없다는 것을 나타내는 송신 불능 메시지를 ICMP로 호스트에게 통지한다.

  • Query 메시지
    • 상태를 조사하기 위해 사용되는 메시지
  • Error 메시지
    • 에러를 통지하기 위한 메시지

Destination Unreachable 메시지는 수신처에 도달하지 않는 이유를 통지한다.

TTL(Time To Live)

IP 데이터그램의 TTL은 라우터를 경유할 때마다 1만큼씩 줄어들고 0이 되면 그 데이터그램은 파기된다. 패킷이 수신처에 도달하지 못하고 같은 장소를 빙글빙글 계속해서 돌게 되면 네트워크 내에서 순환하며 방해만 되기 때문에 이를 방지하기 위해 사용된다.

Echo

  1. 호스트에서 에코 요청을 송신한다.
  2. 수신한 호스트는 송신처에게 에코 응답을 보낸다.

에코 응답을 받는다면 수신처 같의 데이터를 송수신할 수 있다는 의미다. 송수신 가능한지 확인하거나 응답에 걸리는 시간을 측정함으로써 네트워크 상태를 조사할 수 있다.

traceroute

수신처까지의 경로를 가르쳐주는 소프트웨어로 수신처에 도달하기까지 경유하는 라우터를 알려준다.

TTL이 끝나서 데이터그램이 파기되면 파기된 라우터는 Time Exceeded를 송신한다.

4계층

에러복구

데이터를 수신하면 송신처에게 확인 응답을 보내서 수신처가 데이터를 받은 것을 확인할 수 있다. 도중에 에러 발생으로 데이터가 없어져서 확인 응답이 돌아오지 않은 경우 다시 보냄으로써 에러를 복구한다.

흐름 제어

  1. 수신처에 데이터를 보내면 수신처는 데이터를 받아서 그것을 일시적으로 모아둔다. 그리고 준비되는 대로 처리한다.
  2. 처리가 늦어지거나 송신 속도나 간격이 빠른 경우 데이터가 점점 쌓이기 때문에 결국에는 모아둘 수가 없게 되어 파기해버린다. 이것을 오버플로라고 부른다.
  3. 그것을 방지하기 위해 수신 측은 확인 응답 때에 모아둘 수 있는 데이터양을 송신처에게 통지하여 송신량을 가감하게 하거나 송신을 일시적으로 중지하게 한다.

애플리케이션 식별

IP 주소만으로는 애플리케이션을 특정할 수 없다. 그래서 어느 애플리케이션이 송수신할지를 포트 번호를 통해 결정한다.

TCP

데이터 전송을 시작하기 전에 미리 확인을 주고받아 상대에게 확실하게 전달하기 위해 커넥션 확립을 한다. 커넥션이란 가상의 통신로라고도 한다. 사전에 전용 통신로를 확보해 둠으로써 확실하게 데이터를 송수신한다.

3 way handshake

TCP에서는 쓰리웨이 핸드쉐이크를 통해 커넥션을 확립한다.

  1. 먼저 커넥션을 확립을 요청한다.
  2. 커넥션 확립 응답과 확립 요청을 같이 보낸다.
  3. 커넥션 확립 응답을 보낸다.

이렇게 하여 쌍방향의 통로가 확보된다.

세그먼트 분할

TCP는 애플리케이션으로부터 받은 데이터를 세그먼트로 캡슐화한다. 한 개의 데이터를 MSS(Max Segment Size)로 분할하는데 한 개의 데이터가 복수의 세그먼트가 된다. 그리고 각각 세그먼트에 번호를 부여하고 그 선두 번호를 시퀀스 번호라고 부른다.

시퀀스 번호는 보내는 데이터의 앞 부분에 있는 옥텟 번호이고, 확인 응답 번호는 다음에 받고 싶은 데이터의 선두 옥텟 번호이다. 시퀀스 번호로 세그먼트가 보내는 데이터가 전체의 어느 부분에 해당하는지를 알 수 있고, 또 확인 응답 번호로 다음에 받고 싶은 데이터 번호를 알린다. 이렇게 하여 수신 측이 어느 데이터까지 받았는지를 알 수 있다.

RTT(Round Trip Time)

만약 확인 응답이 오지 않으면 RTT(Round Trip Time)이라는 값으로 판단하여 확인 응답이 돌아오기까지 걸린 시간을 초과하면 다시 전송한다. 초기값은 약 3초로 정해 두고, 그 후 확인 응답이 돌아오는데 걸린 시간을 동적으로 변경한다. 왜냐하면 네트워크의 속도에 따라서 다르게 설정해야 하기 때문이다.

윈도우 제어

한 개의 세그먼트에 대해 확인 응답을 받기까지 기다린 후 다음 세그먼트를 보내면 시간이 오래 걸린다. 그래서 연속해서 세그먼트를 보내서 효율이 좋게 전송한다. 일정 수의 연속해서 세그먼트를 보내서 확인 응답을 받는다. 그런데 만약 너무 많은 데이터를 보내서 데이터가 넘치면 오버플로가 발생하는데 데이터가 손실된다. 그래서 버퍼 사이즈를 송신측에게 알려 송신할 수 있는 데이터의 양을 알려주어서 오버플로 하지 않도록 제어하는 것이 윈도우 제어다. 확인 응답을 기다리지 않고 보낼 수 있는 데이터의 양이 윈도우 사이즈라고 한다.

윈도우 사이즈로 상대방에 자신의 버퍼양을 전달해서 확실하게 수신할 수 있는 용량의 데이터만 송수신하는 것을 윈도우 제어라고 한다.

포트 번호

데이터를 주고받기 위해서 애플리케이션에 연결하는 가상의 출입구. IP 주소와 MAC 주소만으로는 애플리케이션을 식별할 수 없다. 포트 번호로 데이터를 보낼 애플리케이션을 특정한다. 1 ~ 1023까지는 웰노운포트, 1024 ~ 49151는 등록되어 있는 포트로 애플리케이션과 연결되어 있다. 송신하는 측의 애플리케이션은 이외의 49152 ~ 65535번까지의 번호를 중복되지 않게 사용한다.

Well Known Prot

1 ~ 1023번까지 사전에 정해진 번호가 있다. 서비스를 제공하고 싶은 서버는 이들 번호를 애플리케이션에 할당한다.

UDP

TCP는 윈도우 사이즈를 크게 한다고 해도 확인 응답을 받기까지의 시간이 필요하다. UDP는 확인 응답이 필요하지 않는다.

  1. 커넥션이 없다.
  2. 에러 처리를 하지 않는다.
  3. 확인 응답을 받지 않는다.

그래서 고속이다. 고속성이나 실시간 송수신이 필요한 애플리케이션에 사용된다. 예를 들어 동영상 스트리밍이 있다. 브로캐스트가 필요한 애플리케이션도 UDP를 사용한다. TCP는 커넥션 확립 때문에 상대의 주소를 모두 알고 있어야 한다. 그래서 불가능한데 UDP는 몰라도 되기 때문에 브로드캐스트가 가능하다.

커넥션이 없기 때문에 보내는 데이터그램에 항상 수신처의 주소를 포함해야 한다.

Private IP

ICAAN이 글로벌 IP 주소를 관리한다. 이건 IP를 유일하게 관리하도록 하기 위해서인데 인터넷에 연결하지 않으면 네트워크 안에서 자유롭게 IP 주소를 사용할 수 있다. 이것을 Private IP 주소라고 부른다.

NAT(Network Address Translation)

글로벌 IP 주소가 부족하여 해결 방법 중 하나다. 사설 IP 주소를 글로벌 IP 주소로 변환한다. 내부 네트워크에 사설 IP 주소를 할당하는데 내부 네트워크에서 TCP/IP를 사용한 통신을 하기 위해서다. 그리고 NAT에 의해 내부 네트워크에서 할당한 사설 IP 주소를 글로벌 IP 주소로 변환한다.

  1. 내부 네트워크에서 인터넷에 송신한다. 라우터에는 ICANN과 하부조직에 의해 조직용으로 글로벌 주소가 주어져 있다. 보통 16개 정도가 할당되어 있다.
  2. 라우터는 NAT를 수행해 송신처 IP 주소와 사설 IP 주소를 글로벌 IP 주소로 변경해서 인터넷 수신처에 보낸다. 이 변경 사항은 기록으로 남겨준다.
  3. 수신 받은 인터넷에 있는 서버는 응답을 한다. 이때 수신처는 변환 후의 글로벌 IP 주소다.
  4. 패킷을 수신한 라우터는 NAT 테이블에 따라 수신처 IP 주소를 사설 IP 주소로 변경해 내부 네트워크에 송신한다. NAT 테이블은 일정 시간 후에 파기된다.

이렇게 하여 소수의 글로벌 IP 주소로 여러 대에 사설 IP 주소를 가진 컴퓨터가 통신을 할 수 있는데 다만 글로벌 IP 주소의 수만큼만 동시 접속할 수 있다. 만약 글로벌 IP 주소가 3개고 이미 3대의 컴퓨터가 통신을 하고 있다면 이미 글로벌 IP 주소를 사용하고 있기 때문에 다른 컴퓨터가 통신을 할 수 없다.

NAPT(Network Address Port Translation)

포트 번호도 변환함으로써 복수의 컴퓨터와 동시 접속이 가능해진다. 하나의 글로벌 IP 주소로 복수의 컴퓨터가 접속이 가능하다.

  1. NAPT는 NAT와 마찬가지로 IP 주소를 변환하지만 IP 주소를 변환할 때 포트 번호도 변환하고 그 대응을 NAT 테이블에 기재한다.
  2. 응답의 경우 IP 주소와 포트 번호를 NAT 테이블에서 확인하고 IP 주소와 포트 번호를 변환한다.

만약 외부에서 내부의 IP 주소로 데이터를 요청할 때 수신처가 변환되어 있지 않은 포트 번호 수신이니까 사설 IP 주소로 변환되지 않아서 내부 네트워크에 데이터를 송신할 수 없다. 그래서 보안적인 장점도 있다.

정적 NAPT

NAPT 테이블에 저장되어 있지 않는 것은 LAN 내부에 들어오지 못한다. 만약 LAN 내부에서 외부로 공개하고 싶은 서버가 있을 경우 NAPT 테이블에 미리 변환을 저장시켜 두어야 하는데 수동으로 변환을 입력해야 한다. 이를 정적 NAPT라고 한다.

NAPT는 헤더 이외의 부분은 변화되지 않기 때문에 FTP 같이 데이터 안에 자신의 IP 주소와 포트 번호가 있는 경우는 대응할 수 없다.

5계층

세션 계층으로 애플리케이션 간의 말을 대화로써 관리한다. 다이얼로그 제어(Dialog Control)이라고도 한다.

데이터 송수신을 세션으로 성립하도록 관리한다.

6계층

컴퓨터 간의 데이터 형식의 차이를 변환으로 없앤다. 압축이나 암호화를 수행할 수도 있다. 이렇게 애플리케이션과는 동떨어진 데이터 형식의 전송을 위한 변환을 수행한다.

7계층

애플리케이션의 목적에 따라 사용하는 프로토콜이 정해진다. HTTP, FTP, SMTP 등이 있다.


자바스크립트로 직접 만들면서 배우는 - 자료구조와 알고리즘 강의 바로 가기
기계인간 이종립, 소프트웨어 개발의 지혜 - Git 강의 바로 가기

코드숨에서 매주 스터디를 진행하고 있습니다. 메일을 등록하시면 새로운 스터디가 시작될 때 알려드릴게요!