3장. 네트워크 통신하기

장동민·2022년 6월 5일

1. 유니캐스트, 멀티캐스트, 브로드캐스트, 애니캐스트

유니캐스트

  • 1 : 1 통신
  • 출발지와 목적지가 1 : 1로 통신
  • 실제로 사용하는 대부분의 통신은 유니캐스트 방식을 사용

브로드캐스트

  • 1 : 모든 통신
  • 동일 네트워크에 존재하는 모든 호스트가 목적지
  • 로컬 네트워크 내에서 모든 호스트에 패킷을 전달해야 할 때 사용
  • 유니캐스트로 통신하기 전, 주로 상대방의 정확한 위치를 알기 위해 사용

멀티캐스트

  • 1 : 그룹(멀티캐스트 구독 호스트) 통신
  • 하나의 출발지에서 다수의 특정 목적지로 데이터 전송
  • 단방향으로 다수에게 동시에 같은 내용을 전달해야 할 때 사용

애니캐스트

  • 1 : 1 통신(목적지는 동일 그룹 내의 1개 호스트)
  • 다수의 동일 그룹 중 가장 가까운 호스트거나 가장 효율적으로 서비스할 수 있는 호스트와 통신하는 방식
  • IPv4에서는 일부 기능 구현, IPv6은 모두 구현 가능
  • 가장 가까운 DNS 서버를 찾을 때 사용하거나 가장 가까운 게이트웨이를 찾는 애니캐스트 게이트웨이 기능에 사용

BUM 트래픽

  • B(Broadcast)
  • U(Unknown Unicast)
  • M(Multicast)

B, U, M은 서로 다른 종류의 트래픽이지만 네트워크의 동작은 서로 비슷함

✍ Unknown Unicast : 목적지가 명확히 명시되어 있지만 스위치가 목적지에 대한 주소를 학습하지 못한 상황이어서 패킷을 모든 포트로 전송함

2. MAC 주소

✍ MAC 주소 : Media Access Control의 줄임말로 2계층(데이터 링크 계층)에서 통신을 위해 네트워크 인터페이스에 할당된 고유 식별자

2-1. MAC 주소 체계

  • MAC 주소는 변경할 수 없도록 하드웨어에 고정적으로 출하되므로 네트워크 구성 요소마다 다른 주소를 가짐
  • MAC 주소는 48비트의 16진수 12자리로 표현
    • OUI : IEEE가 제조사에 할당하는 부분
    • UAA : 각 제조사에서 네트워크 구성 요소에 할당하는 부분

2-2. MAC 주소 동작

  • NIC은 자신의 MAC 주소를 가지고 있고 전기 신호가 들어오면 2계층에서 데이터 형태(패킷)로 변환하여 내용을 구분한 후 도착지 MAC 주소를 확인
  • 만약 도착지 MAC 주소가 자신이 갖고 있는 MAC 주소와 다르면 그 패킷을 폐기
  • 패킷의 목적지 주소가 자기 자신이거나 브로드캐스트, 멀티캐스트와 같은 그룹 주소이면 처리해야 할 주소로 인지해 패킷 정보를 상위 계층으로 넘겨줌

					NIC에서는 목적지 MAC 주소를 확인해 자신을 목적지로 한 패킷만 수용
                    

✍ 무차별 모드(Promiscuous Mode) : 패킷이 자신의 MAC 주소와 일치하지 않는 도착지 주소를 가졌을 경우, 자체적으로 폐기되는데 다른 목적지를 가진 패킷을 분석하거나 수집해야 할 경우, 무차별 모드로 NIC을 구성

3. IP 주소

3-1. IP 주소 체계

  • IP는 v4, v6 두 체계가 사용되며 IPv4 주소는 32비트, IPv6 주소는 128비트임
  • IPv4 주소를 표기할 때는 4개의 옥텟(Octet)이라고 부르는 8비트 단위로 나누고 각 옥텟은 "."으로 구분

										IPv4 주소 체계
                                                
  • IP 주소는 네트워크 주소와 호스트 주소 두 부분으로 나뉨

    • 네트워크 주소 : 호스트들을 모은 네트워크를 지칭하는 주소
    • 호스트 주소 : 하나의 네트워크 내에 존재하는 호스트를 구분하기 위한 주소
  • 필요한 호스트 IP 개수에 따라 네트워크의 크기를 다르게 할당 할 수 있는 클래스(Class) 개념 도입

    • A 클래스는 첫 번째 옥텟에 네트워크 주소와 호스트 주소를 나누는 구분자가 있고 B 클래스는 두 번째 옥텟, C 클래스는 세 번째 옥텟에 구분자가 있음

                      네트워크 주소와 호스트 주소를 나누는 구분자는 클래스(네트워크 크기)에 따라 변경 

    • 첫 옥텟을 이진수로 표기했을 때 2진수 8자리 중 맨 앞 자리가 0인 주소는 A 클래스, 첫 옥텟을 2진수로 표기했을 때 첫 번째 자리가 1이고 두 번째 자리가 0인 주소는 B 클래스, 첫 옥텟을 2진수로 표기했을 때 2진수 8자리 중 첫 번째, 두 번째 자리가 1이고 세 번째 자리가 0인 주소는 C 클래스임

                                                  클래스 구분법

3-2. 클래스풀과 클래스리스

  • 하나의 IP만 갖더라도 IP 할당이 불가능한 크기, 네트워크 주소를 계층화하고 분할하기 위해 낭비되는 IP가 매우많아 하나의 네트워크에서 IP가 사용되지 않더라도 그 IP를 다른 내트워크에서 사용하지 못함
  • IP 주소 부족과 낭비 문제를 해결하기 위해 3가지 보존, 전환전략을 만듬
    - 첫번째 단기 대책 : 클래스리스, CIDR(Classless Inter-Domain Routing) 기반의 주소 체계
    - 두번째 중기 대책 : NAT와 사설 IP 주소
    - 세번째 장기 대책 : 차세대 IP인 IPv6

    ✍ 클래스풀(Classful) : 클래스 기반의 IP 주소 체계
    ✍ 클래스리스 : 클래스풀에서는 한 개의 클래스 네트워크가 한 조직에 할당되면 아무리 비어 있는 주소라도 IP를 분할해 다른 기관이 사용하도록 할 수 없는 문제를 해결하기 위해 클래스 개념 자체를 버린 것
    ✍ 서브넷 마스크(Subnet Mask) : 클래스리스 네트워크에서 별도로 네트워크와 호스트 주소를 나누는 구분자를 사용해야 하는데 이 구분자를 서브넷 마스크라 함

											기본 서브넷 마스크
                                            
  • A 클래스를 서브넷 마스크로 나타낼 시 첫 번째 옥텟이 1, 나머지 옥텟이 0이므로 /8로 표현, B 클래스는 /16, C 클래스는 /24로 표현

3-3. 서브네팅

✍ 서브네팅(Subnetting) : 원래 부여된 클래스의 기준을 무시하고 새로운 네트워크-호스트 구분 기준을 사용자가 정해 원래 클래스풀 단위의 네트워크보다 더 쪼개 사용하는 것

  • 네트워크 사용자의 서브네팅
    • 이미 설계되어 있는 네트워크에서 사용할 수 있는 IP 주소 범위를 파악해야 함

      												서브네팅 방법
                                                      
    1. 내 IP를 2진수로 표현
    2. 서브넷 마스크를 2진수로 표현
    3. 2진수 AND 연산으로 서브네팅된 네트워크 주소를 알아냄
    4. 호스트 주소 부분을 2진수 1로 모두 변경해 브로드캐스트 주소 주소를 알아냄
    5. 유효 IP 범위를 파악, 서브네팅된 네트워크 주소 + 1은 유효 IP 중 가장 작은 IP임
    6. 브로드캐스트 주소 - 1은 유효 IP 중 가장 큰 IP임
    7. 2진수로 연산되어 있는 결괏값을 10진수로 변환

      📌 서브넷 마스크는 네트워크와 호스트 주소를 나누는 구분자이므로 항상 이 구분자를 중심으로 계산이 이루어져야 함

  • 네트워크 설계자 입장
    • 서브넷된 하나의 네트워크에 IP를 몇 개나 할당해야 하는지 파악
    • 서브넷된 네트워크가 몇 개나 필요한지 파악

      📌 네트워크 설계 시, 가능하면 사설 IP 대역을 사용해 충분한 IP 대역을 사용하는 것이 좋음

3-4. 공인 IP와 사설 IP

  • 공인 IP : 인터넷에 접속하려면 IP 주소가 있어야 하고 이 IP는 전 세계에서 유일해야 하는 식별자인데, 이런 IP 주소를 공인 IP라고 함
  • 인터넷에 접속하지 않거나 NAT(Network Address Translation, 네트워크 주소 변환) 기술을 사용할 경우 사설 IP 사용 가능

			다른 기관에서 사용하는 공인 IP를 회사 내부에서 사용할 경우, 해당 IP로의 접근이 불가능

📌 A 회사와 C 회사는 인터넷 구간을 거쳐 통신해야 하므로 원격지와 통신 시도를 서로 인식해야만 정상적인 통신이 가능하지만 현재 네트워크 구조에서는 같은 네트워크로 인식하므로 정상적인 통신이 불가능

4. TCP와 UDP

4-1. 4계층 프로토콜(TCP, UDP)과 서비스 포트

데이터를 보내고 받는 인캡슐레이션, 디캡슐레이션 과정에 각 계층에서 정의하는 헤더가 추가되고 여러가지 정보가 들어가는데, 다양한 정보 중 가장 중요한 정보는 각 계층에서 정의하는 정보, 상위 프로토콜 지시자 정보임

  • 각 계층에서 정의하는 정보

    • 2계층 헤더의 MAC 주소 정보는 수신 측의 2계층에서 사용
    • 3계층 IP 주소는 수신 측 3계층에서 사용
    • 4계층은 시퀀스 번호, ACK 번호 사용
  • 상위 프로토콜 지시자 정보

    • 2계층은 이더 타입
    • 3계층은 프로토콜 번호
    • 4계층은 포트 번호
  • 4계층은 TCP, UDP가 담당하는데, 4계층의 목적은 목적지를 찾아 가는 주소가 아니라 애플리케이션에서 사용하는 프로세스를 정확히 찾아가고 데이터를 분할한 패킷을 잘 쪼개 보내고 잘 조립하는 것

  • 3계층의 프로토콜 번호나 2계층의 이더 타입과 같은 상위 프로토콜 지시자는 출발지와 도착지를 구분해 사용하지 않고 한 개만 사용하지만 4계층 프로토콜 지시자인 포트 번호는 출발지와 목적지를 구분해 처리

  • 웰 노운(Well Known) 포트 : HTTP TCP 80, HTTPS TCP 443, SMTP TCP 25와 같이 잘 알려진 포트, 이미 인터넷 주소 할당기구인 IANA(Internet Assigned Numbers Authority)에 등록되고 1023번 이하의 포트 번호를 사용

  • 동적, 사설, 임시 포트의 범위는 49152 ~ 65535로 IANA에 등록되어 사용하지 않고, 자동 할당되거나 사설 용도로 할당되고 클라이언트의 임시 포트 번호로 사용

4-2. TCP

TCP 프로토콜의 특징

  • 신뢰할 수 없는 공용망에서도 정보유실 없는 통신을 보장하기 위해 세션을 안전하게 연결하고 데이터를 분할하고 분할된 패킷이 잘 전송되었는지 확인
  • 패킷에 번호(Sequence Number)를 부여하고 잘 전송되었는지에 대해 응답(Acknowledge Number)
  • 한꺼번에 얼마나 보내야 수신자가 잘 받아 처리할 수 있는지 전송 크기(Window Size)를 고려해 통신

패킷 순서, 응답 번호

✍ 시퀀스 번호 : 패킷에 순서를 부여하는 것
✍ ACK 번호 : 응답 번호를 부여하는 것

			시퀀스 번호와 ACK 번호의 기본 동작 방식, 패킷을 하나 보내고 이에 대한 응답을 받음

						패킷 순서 및 시퀀스 번호, ACK 번호의 더 자세한 기본 동작 방식
  1. 출발지에서 시퀀스 번호로 0을 보냄(SEQ = 0)
  2. 수신 측에서 0번 패킷을 잘 받았다는 표시로 응답 번호(ACK)에 1을 적어 응답, 이때 수신 측에서는 자신이 처음 보내는 패킷이므로 자신의 패킷에 시퀀스 번호 0을 부여
  3. 이 패킷을 받은 송신 측은 시퀀스 번호를 1로, ACK 번호는 상대방이 0번 시퀀스를 잘 받았다는 의미로 시퀀스 번호를 1로 부여해 다시 송신

윈도 사이즈와 슬라이딩 윈도

✍ 윈도 사이즈 : 가능하면 최대한 많은 패킷을 한꺼번에 보내는 것이 효율적이지만 네트워크 상태가 안 좋으면 패킷 유실 가능성이 커져 적절한 송신량을 결정해야 하는데 한 번에 데이터를 받을 수 있는 데이터 크기
✍ 슬라이딩 윈도 : 네트워크 상황에 따라 이 윈도 사이즈를 조절하는 것

  • TCP는 데이터에 유실이 발생하면 윈도 사이즈를 절반으로 떨어뜨리고 정상적인 통신이 되는 경우, 서서히 하나씩 늘림
  • 네트워크에 경합이 발생해 패킷 드롭이 생기는 경우 회선 속도를 증가 시키거나 경합을 임시로 피하게 할 수 있는, 버퍼가 큰 네트워크 장비를 사용

3방향 핸드셰이크

✍ 3방향 핸드셰이크 : TCP에서는 3번의 패킷을 주고받으면서 통신을 서로 준비

✍ SYN-SENT : 클라이언트에서 통신을 시도하여 Syn 패킷을 보낼 때 클라이언트에서의 상태
✍ ESTABLISHED : 서버와 클라이언트 간의 연결이 성공적으로 완료되었음을 나타냄

  1. 서버에서는 서비스를 제공하기 위해 클라이언트의 접속을 받아들일 수 있는 LISTEN 상태로 대기
  2. 통신을 처음 시도시 송신자는 플래그에 있는 SYN 필드를 1로 표기하고 시퀀스 번호(seq no)를 적어 보냄
  3. 클라이언트의 Syn을 받은 서버는 SYN-RECEIVE 상태로 변경되고 SYN 패킷을 받은 수신자는 SYN, ACK 비트를 플래그에 1로 표기해 응답, 이때 자신이 사용할 시퀀스 번호를 적고 ACK 번호는 송신자가 보낸 시퀀스 번호에 1을 추가한 값을 넣어 응답
  4. 응답을 받은 클라이언트는 ESTABLISHED 상태로 변경하고 수신자의 응답을 받은 송신자는 연결을 확립하기 위해 다시 응답 메시지를 보냄, 이때부터는 기존 메시지의 응답이므로 ACK 필드만 1로 표기
    수신자가 ACK 번호를 20으로 표기해 보냈으므로 시퀀스 번호를 21로 표기해 응답
  5. 서버에서도 클라이언트의 이 응답을 받고 ESTABLISHED 상태로 변경
  • 어떤 패킷이 새로운 연결 시도이고 기존 통신에 대한 응답인지 구분하기 위해 헤더에 플래그(Flag)라는 값을 넣어 통신

										TCP 헤더 내용

✍ SYN : 연결 시작 용도로 사용, 연결이 시작될 때 SYN 플래그에 1로 표시해 보냄
✍ ACK : ACK 번호가 유효할 경우, 1로 표시해 보냄, 초기 SYN이 아닌 모든 패킷은 기존 메시지에 대한 응답이므로 ACK 플래그가 1로 표기됨
✍ FIN : 연결 종료 시 1로 표시, 데이터 전송을 마친 후 정상적으로 양방향 종료 시 사용
✍ RST : 연결 종료 시 1로 표시, 연결 강제 종료를 위해 연결을 일방적으로 끊을 때 사용
✍ URG : 긴급 데이터인 경우, 1로 표시해 보냄
✍ PSH : 서버 측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 즉시 전달할 것을 지시할 때 사용

4-3. UDP

	UDP 헤더, 4계층의 특징인 신뢰 통신을 위한 내용(시퀀스 번호, ACK 번호, 플래그, 윈도 사이즈)이 없음

UDP 프로토콜의 특징

  • 데이터 전송을 보장하지 않아 제한된 용도로만 사용
  • 음성 데이터나 실시간 스트리밍과 같이 시간에 민감한 프로토콜이나 애플리케이션을 사용하는 경우, 사내 방송이나 증권 시세 데이터 전송에 사용되는 멀티캐스트처럼 단방향으로 다수의 단말과 통신해 응답을 받기 어려운 환경에서 주로 사용
  • UDP 프로토콜을 사용하는 애플리케이션에서 연결 확립은 TCP 프로토콜을 사용, 실제 데이터만 UDP를 이용

5. ARP(Address Resolution Protocol)

5-1. ARP란?

✍ ARP : 데이터 통신을 위해 2계층의 물리적 주소인 MAC 주소와 3계층 논리적 IP 주소 두 개가 사용되는데 IP 주소 체계는 물리적 MAC 주소와 전혀 연관성이 없으므로 두 개의 주소를 연계시켜 주기 위한 매커니즘

											윈도의 ARP 테이블
  • 패킷을 보낼 때마다 ARP 브로드캐스트를 수행하면 네트워크 통신의 효율성이 크게 저하되므로 메모리에 이 정보를 저장해두고 재사용

5-2. ARP 동작


  1. 서버 A는 목적지 서버 B의 MAC 주소(1.1.1.2 IP의 MAC 주소)를 알아내기 위해 ARP 요청을 네트워크에 브로드캐스트함

📌 ARP 패킷을 네트워크에 브로드캐스트할 때 2계층 MAC 주소는 출발지를 자신의 MAC으로, 도착지는 브로드캐스트(FF-FF-FF-FF-FF-FF)로 채움
📌 ARP 프로토콜 필드의 전송자 MAC과 IP 주소에는 자신의 주소로, 대상자 IP 주소는 10.1.1.2를, 대상자 MAC 주소는 00-00-00-00-00-00으로 채워 네트워크에 뿌림

  1. 이 ARP 패킷은 같은 네트워크 안에 있는 모든 단말에 보내지고 모든 단말은 ARP 프로토콜 내용을 확인하는데 ARP 프로토콜 필드의 대상자 IP가 자신이 맞는지 확인해 자신이 아니면 ARP 패킷을 버림

  2. 서버 B에서는 ARP 요청의 대상자 IP 주소가 자신의 IP이므로 ARP 요청을 처리하고 그에 대한 응답을 보냄(ARP 요청에서 받은 서버 A의 정보를 이용해 대상자 MAC, IP 주소를 채우고 자신의 MAC, IP 주소를 송신자 MAC, IP 주소로 채워 응답)

  • ARP 요청을 처음 보낼 때는 브로드캐스트, ARP 응답을 보낼 때는 출발지와 도착지 MAC 주소가 명시되어 있는 유니캐스트임

  • 서버 A는 서버 B로부터 ARP 응답을 받아 자신의 ARP 캐시 테이블을 갱신
  • ARP 캐시 테이블은 정해진 시간 동안 서버 B와의 통신이 없을 때까지 유지
  • 해당 시간 안에 통신이 다시 이루어지면 그 시간은 다시 초기화

  • ARP 캐시 테이블이 갱신된 후, 상대방의 MAC 주소를 알고 있으므로 도착지 MAC 주소 필드를 완성해 ping 패킷을 보낼 수 있음

5-3. GARP

  • 자신의 IP와 MAC 주소를 알릴 목적으로 사용
  • GARP의 목적지 MAC 주소는 브로드캐스트 MAC 주소를 사용

GARP를 사용해 동일 네트워크에 자신의 IP 주소와 MAC 주소를 알려주는 이유

  1. IP 주소 충돌 감지
  2. 상대방(동일 서브넷 상의 다른)의 ARP 테이블 갱신
  3. HA(고가용성) 용도의 클러스터링, FHRP(VRRP, HSRP)

✍ FHRP : 이중화 게이트웨이 프로토콜

5-4. RARP

✍ RARP : ARP와 반대로 나 자신의 MAC 주소는 알지만 IP가 아직 할당되지 않아 IP를 할당해주는 서버에 어떤 IP 주소를 써야 하는지 물어볼 때 사용

6. 서브넷과 게이트웨이

6-1. 서브넷과 게이트웨이의 용도

✍ 게이트웨이 : 원격 네트워크 통신에 사용하는 장비

  • 기본 게이트웨이는 3계층 장비가 수행하고 여러 네트워크와 연결되면서 적절한 경로를 지정해주는 역할을 수행
  • 출발지와 목적지 네트워크가 동일한 LAN 내에서 통신하는 것인지, 서로 다른 네트워크 간의 통신인지에 따라 통신 방식이 달라져 서브넷 마스크를 이용하여 동일 네트워크 간의 통신과 서로 다른 네트워크 간의 통신을 구분

✍ 프록시 ARP

  • 기본 게이트웨이에 프록시 ARP가 활성화된 경우, 원격지 통신이라도 로컬에 ARP 브로드캐스트를 보내 통신 가능
  • PC에서 기본 게이트웨이가 잘못 입력되어 있어도 통신이 되는 경우가 발생

6-2. 2계층 통신 vs 3계층 통신

✍ 2계층 통신(L2 통신) : 단말 간을 연결해주는 네트워크 장비에서 2계층까지만 정보를 확인해 통신하고 ARP 요청을 보낼 때 직접 브로드캐스트를 이용
✍ 3계층 통신(L3 통신) : 원격지 네트워크와 통신해야 할 경우, 라우터와 같은 3계층 장비가 필요한데 해당 패킷을 전송하는 네트워크 장비에서 3계층 정보까지 확인하여 통신

			중간에 어느 계층까지 확인하는지에 따라 2계층 통신(왼쪽)과 3계층 통신(오른쪽)으로 나뉨
  • L2 통신은 도착지 MAC 주소와 도착지 IP 주소가 같은 반면, 원격지 통신은 MAC 주소와 도착지 IP 주소가 다름
  • 원격지 통신의 도착지 IP 주소는 통신의 실제 도착지이고 도착지 MAC 주소는 디폴트 게이트웨이의 MAC 주소가 사용
profile
나만의 데이터베이스

0개의 댓글