고재성, 이상훈님의 책을 보며 정리한 내용입니다.
문제가 될 시 해당글 삭제하겠습니다.
유니캐스트, 멀티캐스트, 브로드캐스트, 애니캐스트
- 네트워크에서 출발지에서 목적지로 데이터를 전송할 때 사용하는 통신 방식에는 다음 4가지가 있다.
⇒ 출발지가 아닌 목적지 주소를 기반으로 구분한다.- 유니캐스트 (실제로 사용하는 대부분의 통신 방식)
- 1:1 통신
- 출발지와 목적지가 1:1로 통신
- 브로트캐스트
- 1:모든 통신
- 동일 네트워크에 존재하는 모든 호스트가 목적지
- 유니캐스트로 통신하기 이전 주로 상대방의 정확한 위치를 알기 위해 통신(ARP.. 이후 등장)
- 멀티캐스트
- 1:그룹 통신
- 하나의 출발지에서 다수의 특정 목적지로 네트워크 전송
- 아프리카TV 와 같이 실시간 방송을 보기위해서 사용(단방향)
- 애니캐스트
→ 같은 목적지 주소를 가진 서버가 여러대이고 서버 한대를 선정해서 통신- 1:1통신
- 다수의 동일 그룹(동일 네트워크) 중 가장 가까운 호스트에서 응답
- 애니캐스트 주소가 같은 호스트들 중 가장 가깝거나 효율적으로 서비스 할 수 있는 호스트 1명과 통신하는 방식
- 이런 특성을 사용해서 가장 가까운 DNS 서버(URL 을 IP로 변환)를 찾을 때 사용하거나, 가장 가까운 게이트웨이를 찾는 애니캐스트 게이트웨이 기능에 사용하기도 한다.
- 유니캐스트 (실제로 사용하는 대부분의 통신 방식)
MAC 주소 (Media Access Control)
- 2계층에서 통신을 위해 네트워크 인터페이스 카드(랜카드)에 할당 된 고유 식별자이다.
- 네트워크에 접속하는 모든 장비는 MAC 주소라고 하는 물리적인 주소가 있어야 한다.
- MAC 주소 체계
- MAC 주소는 48비트의 16진수 12자리로 표현됩니다.
- MAC 주소는 앞 24비트 뒤 24비트로 구분된다.
- OUI : IEEE(전기전자공학자협회) 가 제조사에 할당하는 부분 (장비업체 코드번호)
- UAA : 각 제조사가 네트워크 구성 요소에 할당하는 부분
- MAC 주소는 BIA 상태로 네트워크 인터페이스 카드에 할당되어 있다.
MAC 주소 동작
- 전기 신호가 들어오면 2계층에서 데이터 형태(패킷)로 변환하여 내용을 구분한 후 도착지 MAC 주소를 확인합니다. (전기신호 → 데이터 형태(패킷))
- 만약 들어온 패킷의 도착지 주소가 자신의 MAC 주소와 다르면 그 패킷을 폐기한다.
→ 2계층 장비에서는 MAC 주소 정보를 파악할 수 있다. - 패킷의 목적지 주소가 자기 자신이거나(유니캐스트), 브로드캐스트, 멀티캐스트와 같은 그룹 주소이면 처리해야 할 주소로 인지해 패킷 정보를 상위 계층으로 넘겨준다. (3계층 : 네트워크 계층)
IP 주소
- IP 주소를 포함한 다른 프로토콜 스택의 3계층 주소의 특징
- 사용자가 변경 가능한 논리 주소
- 주소의 레벨이 있다. 그룹을 의미하는 네트워크 주소와 호스트 주소로 나뉜다.
IP 주소 체계
- IP 주소는 32 비트인 IPv4 주소이다. (IPv6 주소는 128 비트이다)
- IPv4 주소를 표기할 때는 8비트 단위로 . 를 구분으로 나뉘며 각 구분을 옥텟이라고 부른다.
- 각 옥텟은 10진수를 사용하므로, 0~255 의 값을 쓸 수 있다.
- IP 주소도 두 부분으로 나뉜다. (
IP 주소는 이 둘을 구분하는 구분점이 고정되어 있지 않다..)- 네트워크 주소 : 호스트들을 모은 네트워크를 지칭하는 주소. 네트워크 주소가 동일한 네트워크를 로컬 네트워크라고 함
- 호스트 주소 : 하나의 네트워크 내에 존재하는 호스트를 구분하기 위한 주소
- IP 주소 체계는 필요한 호스트 IP 개수에 따라 네트워크의 크기를 다르게 할당할 수 있는 클래스 개념을 도입했다.
클래스 기반의 네트워크 분할 기법은 과거에 사용했던 개념으로 현재는 위에서 설명한 것처럼 클래스 기반으로 네트워크를 분할하지 않는다…
클래스풀과 클래스리스
- 과거 클래스 기반 IP 주소 체계를 클래스 풀이라고 부른다.
- 이 주소 체계는 IP 주소 초기에 확장성 있고, 주소 낭비가 적은 최적의 조건을 만들 수 있는 좋은 선택이었다.
- 클래스 풀 주소 체계는 네트워크 주소와 호스트 주소를 구분 짓는 구분자 (서브넷 마스크) 가 필요 없다.
→ 맨 앞자리 숫자만 보면 자연스럽게 이 주소가 어느 클래스에 속해 있는지 구분할 수 있다.
클래스리스 네트워크 두두등장!
- 인터넷이 상용화되면서 인터넷이 연결되는 호스트 숫자가 폭발적으로 증가했다.
- 기존 클래스풀 기반 주소 체계는 확장성과 효율성을 모두 잡은 좋은 주소 체계였지만 기하급수적으로 늘어나는 IP 주소 요구를 감당하기에는 역부족이었다.
- 이론적으로 사용할 수 있는 IP 개수는 43억개 이지만 낭비되는 IP가 많아서 실 사용 개수는 훨씬 적다.
→ 네트워크 주소를 계층화하고 분할하기 위해서 낭비되는 IP 가 매우 많았다. - 이를 위한 대책은 다음과 같다
- 단기 대책 : 클래스 리스
- 중기 대책 : NAT 기술을 통한 사설 IP 사용
- 장기 대책 : 차세대 IP IPv6
- IPv4의 가장 큰 문제는 주소 자체의 부족도 있지만, 상위 클래스를 할당받은 조직에서 낭비되는 IP가 너무 많았다.
→ A클래스를 할당받은 조직에서 100개의 IP만 사용한다면 엄청난 낭비가 발생한다..
(클래스풀에서는 한개의 클래스 네트워크가 한 조직에게 할당되면 남는 IP 주소를 다른조직에 절대로 할당할 수 없다) - 이를 위해서 클래스 개념 자체를 버리는데 이를 클래스리스라고 부른다.
- 클래스풀 네트워크는 앞 숫자를 보고 클래스를 확인한 후 네트워크 주소와 호스트 주소를 확인할 수 있었다.
- 클래스리스 네트워크는 별도로 네트워크와 호스트 주소를 나누는 구분자를 사용해야 하는데, 이 구분자를 서브넷 마스크라 부른다. ex) 255.0.0.0 / 255.255.0.0 / 255.255.255.0
- 클래스리스 네트워크에서 서브넷 마스크는 IP 주소와 네트워크 주소를 구분할 때 사용한다. ex) 103.9.32.146 주소에 255.255.255.0 서브넷 마스크를 사용하는 IP 네트워크 주소 : 103.9.32.0 호스트 주소 : 0.0.0.146
- 클래스리스 기반 네트워크에서는 네트워크를 표현하는데 반드시 서브넷 마스크가 필요하다.
서브네팅
- 원래 부여된 클래스의 기준을 무시하고, 새로운 네트워크-호스트 구분 기준을 사용자가 정해 원래 클래스풀 단위의 네트워크보다 더 쪼개 사용하는 것을 서브네팅이라고 부른다. (현대 클래스리스 네트워크의 가장 큰 특징)
→ 서브넷 마스크를 사용해 사용 가능한 네트워크를 표현하기 위한 방법 (클래스리스)
네트워크 사용자의 서브네팅
- 네트워크 사용자는 이미 설계되어 있는 네트워크에서 사용할 수 있는 IP 주소 범위를 파악해야 한다.
- 기존 클래스풀 기반 네트워크는 10진수로 구분되어 있어서 사용자가 이해하기 쉽지만, 대부분의 서브네팅(클래스리스)은 비트 단위로 분할되므로 이런 환경에 속해있을 경우, 내가 속해 있는 네트워크 범위를 파악하기 어렵다.
- 일반적으로 자신이 속한 네트워크 범위를 구하는 방법(알아만두자..)
- 내 IP 를 2진수로 표현
- 서브넷 마스크를 2진수로 표현
- 2진수 AND 연산으로 서브네팅된 네트워크 주소를 알아낸다.
- 호스트 주소 부분을 2진수 1로 모두 변경해 브로드캐스트 주소를 알아낸다.
- 유효 IP 범위를 파악한다. 서브네팅 된 네트워크 주소 +1 은 유효 IP 중 가장 작은 IP 이다.
- 브로드캐스트 주소 -1 은 유효 IP 중 가장 큰 IP 이다.
- 2진수로 연산되어 있는 결과값을 10진수로 표현한다.
네트워크 설계자 입장
- 네트워크 설계자 입장에서 서브넷마스크에 대해 고려해야 할 부분
- 서브넷된 하나의 네트워크에 IP를 몇 개나 할당해야 하는가?
- 서브넷된 네트워크가 얼마나 필요한가?
- 이를 통해 설계된 네트워크는 사설 IP 대역을 사용해 충분한 IP 대역을 사용하는 것이 좋다.
→ 관리자 입장에서 여유로운 대역폭은 관리하기가 쉽다. (공인 IP는 인터넷에서 유일하게 사용되므로 사용할 수 있는 IP 가 제한되어 있고, 할당 받은 IP 를 사용하지 않을 경우 IP 할당 기관이 회수한다) - 네트워크를 단계적으로 잘 설계하면 관리하기 쉽고 네트워크 장비 성능도 향상된다.
공인 IP와 사설 IP
- 공인 IP : 인터넷에 접속하려면 IP 주소가 있어야 하고, 이 IP 는 전 세계에서 유일해야 하는 식별자이다. (우리가 일반적으로 생각하는 IP)
→ 통신사업자로부터 IP 를 할당받거나, IP 할당기관에서 인터넷 독립기관 …. (절차가 존나게 복잡하다)
→ 인터넷에 연결하지 않고 개인적으로 네트워크를 구성한다면 공인 IP 주소를 할당 받지 않고도 구성할 수 있다. - 사설 IP : 인터넷에 연결하지 않고 개인적으로 네트워크를 구성할 때 사용되는 IP 주소. (공유기 IP를 사설 IP라고 볼 수 있다)
→ 인터넷에 접속하지 않거나 / NAT 기술(공유기나 회사 방화벽을 사용하는 경우)을 사용하는 경우 사설 IP를 사용하면 인터넷에 직접 접속하지는 못하지만 IP 를 변환해주는 NAT 장비에서 공인 IP로 변경 후 접속이 가능하다.
→ 가정에서 많이 사용하는 공유기는 NAT 장비의 역할을 하는 대표적인 예!!
→ 공유기는 스위치, 라우터 등 수 많은 하드웨어가 들어간 복잡한 장비이다. - 회사 내부에서 사설 네트워크를 구축할 때 NAT을 사용하여 인터넷에 연결하더라도 다른 사용자에게 할당된 공인 IP를 사설 네트워크 주소로 사용하면 안된다!!
TCP && UDP
4계층 프로토콜(TCP UDP)과 서비스 포트
- 인캡슐레이션, 디캡슐레이션 과정 가운데 각 계층에서 정의하는 헤더가 추가되고 여러가지 정보가 들어갑니다.
→ 가장 중요한 두가지 정보- 각 계층에서 정의하는 정보
- 상위 프로토콜 지시자 정보
- 4계층의 목적은 애플리케이션에서 사용하는 프로세스를 정확히 찾아가고 데이터를 분할한 패킷을 잘 쪼개 보내고 잘 조립하는 것이다.
- 4계층의 상위 지시자는 포트 번호이다.
→ 하위 계층과 달리 출발지와 목적지를 구분해 처리해야 한다.
→ 평소 우리가 표현하는 포트 번호의 기준은 서버의 포트이다.
(잘 알려진 80,443,25 같은 포트번호는 웰 노운(모두가 잘 아는) 포트라고 부른다)
TCP
- TCP 프로토콜은 신뢰할 수 없는 공용망에서도 정보유실 없는 통신을 보장하기 위해서 세션을 안전하게 연결하고
데이터를 분할하고 분할된 패킷이 잘 전송되었는지 확인하는 기능이 있다. - 패킷의 번호(Sequence Number)를 부여하고 잘 전송 되었는지에 대해 응답(Acknowledge Number)합니다.
- 또한, 한꺼번에 얼마나 보내야 수신자가 잘 받아 처리할 수 있는지 전송크기(Window Size)까지 고려한다.
윈도 사이즈와 슬라이딩 윈도
- TCP 에 맞추어서 정보 유실 없는 통신을 보장하기 위한 패킷을 보내는 것까지 확인을 하다 보면 네트워크가 느려질 수 밖에 없다.
- 때문에, 데이터를 보낼 때 패킷을 하나만 보내는 것이 아니라 많은 패킷을 한꺼번에 보내고 응답을 하나만 받는다.
- 가능하면 최대한 많은 패킷을 한꺼번에 보내는 것이 효율적이지만 네트워크 상태가 않 좋으면 패킷 유실 가능성도 커지므로 적절한 송신량을 정해야 하는데, 한꺼번에 데이터를 받을 수 있는 크기를 윈도 사이즈라 하고, 네트워크 상황에 따라 윈도 사이즈를 조절하는 것을 슬라이딩 윈도 라고 한다.
3방향 핸드셰이크(3 way handshake)
- TCP 에서 3번의 패킷을 주고받으며 통신을 서로 준비하는 과정을 3 way handshake 라고 부른다.
UDP
- UDP 에서는 4계층 프로토콜이 가져야 할 특징이 거의 없다.
- TCP 에서 가져갔던 연결지향의 특징이 없다.
→ 때문에 UDP 헤더 내용은 거의 없다. - 데이터 통신은 데이터 신뢰성이 핵심이지만, UDP 는 그렇지 않기 때문에 제한된 용도로만 사용된다.
(실시간 스트리밍 …) - 연결지향의 특징이 없기 때문에 속도가 빠르다는 장점이 있다.
- 때문에, UDP 프로토콜을 사용하는 애플리케이션 대부분은 이런 상황을 인지하고 동작하거나 연결 확립만 TCP 프로토콜을 사용하고 애플리케이션끼리 모든 준비를 마친 후 실제 데이터만 UDP 를 사용하는 경우가 많다.
ARP(Address Resolution Protocol)
ARP 란?
→ IP 를 이용한 통신 시, 실제 통신에 사용되는 MAC 주소를 모르기 때문에 이를 알아내기 위한 프로토콜
- 데이터 통신으로 위해 2계층 MAC 주소, 3계층 IP 주소가 사용되지만 두 계층을 전혀 연관성이 없다.
- 두 개의 주소(계층)를 연계 시켜주기 위한 매커니즘에 사용되는 프로토콜이 ARP 이다.
(TCP/IP 프로토콜 스택에 종속된 것이 아닌, 2/3계층 사이 주소를 연결할 때 사용) - 상대방의 맥 주소를 알아내기 위해서는 ARP 브로드캐스트를 통해 네트워크 전체의 상대방의 MAC 주소를 질의해야 한다.
- ARP 브로드캐스트를 받은 목적지는 ARP 프로토콜을 이용해 자신의 MAC 주소를 응답한다.
- 이 작업 이후 양방향에서 상대방의 MAC 주소를 학습하고 패킷이 인캡슐레이션이 되어 상대방에게 전달될 수 있다.
ARP 동작
- ARP 패킷은 여러 가지 필드 중 ARP 데이터에 사용되는 송신자 하드웨어 MAC 주소, 송신자의 IP 주소, 대상자의 MAC 주소, 대상자의 IP 주소 필드가 중요하게 사용된다.
- 서버 A 에서 B로 ping 을 보내려 할 때 목적지 MAC 주소를 알 수 없기 때문에 정상적인 패킷을 만들 수 없다.
- 이를 위해 서버 A 는 ARP 요청을 네트워크에 브로드캐스트한다.
- 같은 네트워크 안에 있는 모든 단말에서는 ARP 프로토콜 내용을 확인하는데, ARP 프로토콜 필드의 대상자 IP가 자신이 맞는지 확인해 자신이 아니면 ARP 패킷을 버린다.
- 반대로 ARP 프로토콜 필드의 대상자 IP가 자신이 맞다면 요청을 처리하고, 그에 대한 응답을 보낸다.
(이때 송신자와 수신자의 위치가 바뀌고 출발지, 목적지 MAC 주소를 알기 때문에 정상적인 패킷으로 응답한다.) - ARP 요청을 처음 보낼 때는 브로드캐스트인 반면, ARP 응답을 보낼 때는 출발지와 목적지 주소가 명시되어 있는 유니캐스트이다.
- 서버 A는 서버 B로부터 ARP 응답을 받아 자신의 ARP 캐시 테이블을 갱신한다.
- ARP 캐시 테이블에 갱신 된 후 상대방의 MAC 주소를 알고 있으므로 도착지 MAC 주소 필드를 완성해 ping 을 보낼 수 있다.
GARP
(ARP 인데 필드에 들어가는 내용이 다르고 원래 목적과 다르게 사용된다)
- ARP 가 상대방의 MAC 주소를 알아내기 위해서 사용되는 반면에 GARP는 자신의 IP와 MAC 주소를 알리 목적으로 사용된다.
→ 로컬내에서! (GARP는 자신의 IP, MAC 주소를 알릴 목적으로 사용되기 때문에, 목적지 MAC 주소는 브로드캐스트 MAC 주소로 사용된다) - ARP 와 차이점은 송신자와 대상자 IP 주소가 자신으로 동일하다는 것이다.
- GARP 를 사용해 동일 네트워크에 자신의 IP 주소와 MAC 주소를 알려주는 이유
- IP 주소 충돌 감지
- IP 주소는 유일한 값이어야 하지만 여러가지 이유로 인해 유일하지 않을 수도 있다.
- 이를 위한 IP 충돌로 통신이 안되는 것을 방지하기 위해서 자신의 네트워크에서 IP가 중복되는지 확인한다.
- 상대방 ARP 테이블 갱신??(어려워서 내용 패스~)
- 고가용성 용도의 클러스터링??(어려워서 내용 패스~)
- IP 주소 충돌 감지
RARP
(ARP 인데 필드에 들어가는 내용이 다르고 원래 목적과 다르게 사용된다)
- 자신의 MAC 주소는 알지만 IP가 아직 할당되지 않아서 IP를 할당해주는 서버에게 어떤 IP 주소를 사용해야 하는지 물어 볼 때 사용된다.
서브넷과 게이트웨이
서브넷과 게이트웨이의 용도
- 원격 네트워크 통신은 네트워크를 넘어 전달되지 못하는 브로드캐스트의 성질 때문에 네트워크 장비의 도움이 필요하다. (이 장비를 게이트웨이라고 한다!!)
- 기본 게이트웨이는 3계층 장비가 수행하고 여러 네트워크가 연결되면서 적절한 경로를 지정해주는 역할을 한다.(라우터)
- 가장 먼저 목적지가 자신이 속한 네트워크의 범위인지 확인하는 작업이 필요하다. (이를 통해 로컬에서 통신하는지 원격으로 통신하는지 정해야 한다) → 이 때 사용되는 것이 서브넷 마스크(서브네팅)이다!! (동일 네트워크 간의 통신인지 다른 네트워크간의 통신인지 구분하기 위해 사용되는 것이 서브넷 마스크이다!!)
2계층 통신 vs 3계층 통신
(정확한 표현은 로컬 네트워크 통신, 원격지 네트워크 통신이다)
- 로컬 네트워크의 경우 라우터 같은 3계층 장비 없이 통신이 가능하다.
- 상대방의 MAC 주소를 알아내기 위해서 ARP 브로드캐스트를 이용하고 상대방의 MAC 주소를 알아내자마자 패킷이 캡슐화되어 통신이 시작된다.
- 원격 네트워크의 경우 3계층 장비 없이 통신할 수 없다.
- 단말이 자신이 직접 보낼 수 없는 위치에 목적지가 있다고 판단되면 ARP 요청을 기본 게이트웨이(라우터) IP 주소로 요청한다.
→ 서브네팅이 선행되어야 한다(자신이 속한 네트워크를 구해야 한다)
→ ARP 브로드캐스트를 하면, 게이트웨이가 답을 해준다. - 게이트웨이에서 ARP 응답을 받은 단말은 도착지 MAC 주소에 응답 받은 기본 게이트웨의 MAC 주소를 적어 놓고 통신을 시작한다.
→ 도착지 IP : 내가 통신하고자 하는 원격 네트워크의 IP
→ 도착지 MAC : 응답 받은 기본 게이트웨이 MAC
- 단말이 자신이 직접 보낼 수 없는 위치에 목적지가 있다고 판단되면 ARP 요청을 기본 게이트웨이(라우터) IP 주소로 요청한다.
'CS > 네트워크' 카테고리의 다른 글
[IT 엔지니어를 위한 네트워크 입문] Chapter5. 라우터 / L3 스위치 : 3계층 장비 (0) | 2023.01.10 |
---|---|
[IT 엔지니어를 위한 네트워크 입문] Chapter4. 스위치 : 2계층 장비 (0) | 2023.01.10 |
[IT 엔지니어를 위한 네트워크 입문] Chapter2. 네트워크 연결과 구성요소 (0) | 2023.01.10 |
[IT 엔지니어를 위한 네트워크 입문] Chapter1 네트워크 시작하기 (1) | 2023.01.10 |
JWT(Json Web Token) (0) | 2022.06.27 |