네트워크 작동 방식

2023. 2. 1. 16:34네트워크

네트워크는 어떻게 작동할까?

알아보기에 앞서 기본 개념을 정리해본다.

 


LAN과 WAN

LAN은 Local Area Network의 단축어로, 근거리 통신망이다.

가정이나 사무실 등의 컴퓨터를 서로 연결하는 등 작은 범위의 네트워크를 의미한다.

WAN은 Wide Area Network의 단축어로, 이 LAN들을 서로 이어주는 네트워크이다.

주로 ISP(인터넷 서비스 제공업체)에서 관리한다.


IP주소

IP(Internet Protocol) 주소는 L3계층의 인터넷 상 호스트(컴퓨터)의 고유한 주소이다. (L3 계층)

x.x.x.x 의 [0~255] 범위의 숫자 네개로 이루어진다.(IP v4)

이 IP주소는 다시 서브넷에 할당되는 네트워크 번호와, 각각의 컴퓨터에 붙는 호스트 번호로 나뉜다.

위의 사진과 같이 라우터 단위로 서브넷을 형성한다.

왼쪽 아래의 서브넷의 네트워크 번호는 223.1.2 이고, 호스트 번호는 각각 1(PC1), 2(PC2), 6(라우터)인 것을 확인할 수 있다.

이러한 네트워크 번호와 호스트 번호의 범위를 알기위해 서브넷마스크를 IP 주소에 덧붙인다.

마스크라는 이름에서 알 수 있듯이, 서브넷 마스크와 IP 주소를 비트 단위로 AND연산을 했을 때, 네트워크 번호가 나오도록 서브넷마스크를 구성한다.

가령, 223.1.2.1의 경우 서브넷 마스크는 255.255.255.0 이다.


포트 번호

데이터가 네트워크를 통해 목적지 컴퓨터(호스트)에 도착한 후, 그 중 어떤 프로세스(소켓)에 이 데이터가 건네져야하는지 알아야 한다. 이를 위해 사용하는 것이 포트 번호이다. (L4 계층의 식별자)

웹은 80번, 메일은 25번 같이 미리 정해진 소켓 번호도 있지만, 2바이트(0~65535) 안에서 임의로 포트번호를 지정하면 된다.


MAC 주소

MAC(Media Access Control) 주소는 L2 계층(장치 대 장치)에서 통신을 위한 식별자로, 16진수로 XX-XX-XX-XX-XX-XX 의, 6바이트로 주소를 표현한다.

주로 NIC(Network Interface Controller), 즉 랜카드에 할당된 주소이다.

LAN 안에서 특정 장치와 통신하려면 이 MAC 주소를 알아야 한다.

MAC 주소를 알기 위해서 ARP(Address Resolution Protocol)를 사용하는데, 이를 통해 LAN 안의 호스트들 전체에게 브로드캐스팅하여 가고자하는 ip를 갖고있는 장치에게 MAC 주소를 보내줄 것을 요청한다.

Wireshark로 확인한 ARP Request

매번 통신할 때마다 ARP를 보내지는 않고, 한번 보낸 후에 해당 정보를 내부의 ARP TABLE에 캐싱한다.

cmd 창에 arp -a 명령을 통해 PC의 ARP TABLE을 볼 수 있다.


패킷의 구조 

패킷이란, 네트워크에서 데이터를 주고 받을 때 정해놓은 규칙으로 형식화된 블록이다.

패킷은 전달하고자 하는 사용자의 데이터(payload)와 제어 정보로 이루어진다.

데이터 송신 시, 계층 별로 제어정보에 해당하는 헤더를 덧붙인다. (TCP/UDP 헤더, IP헤더, MAC헤더)

이 때 TCP 헤더의 Payload는 응용계층의 사용자가 보내고자 하는 데이터이고, 이 데이터와  TCP 헤더가 합쳐진 것은 IP 헤더의 Payload가 된다.또한 이렇게 합쳐진 데이터는  MAC 헤더 (이더넷 헤더)의 Payload가 된다.

데이터 송신시에 이렇게 계층을 넘어가면서 데이터가 캡슐화(Encapsulation)된다.

거꾸로 데이터 수신시에는 역으로 각 계층에서 데이터를 분해하면서 역캡슐화(Decapsulation) 된다.

 

 

<MAC 헤더> 내부는 간단하다. 수신처와 송신처의 MAC 주소와 어떤 프로토콜로 통신하는지에 대한 Ether type(IP or ARP)을 포함한다.

<IP 헤더>의 경우에도 똑같이 수신처와 송신처의 IP 주소를 포함한다.

또한 여러 데이터가 포함되는데, 이 중 TTL은 네트워크 상의 이 패킷의 생존 기간을 뜻한다.

각 홉(라우터 등의 장치)을 지날 때마다 이 값은 1씩 줄어들며, 0이 되면 패킷이 폐기 된다.

<TCP 헤더> 또한 수신처와 송신처의 포트 번호를 포함한다.

수신 통지 번호(ACK번호)는 데이터가 몇바이트까지 수신측에 도착했는지를 수신측에서 송신측에 전달하기 위한 것이다. 이를 통해 송신 측에서 수신측으로 데이터가 제대로 갔는지 확인할 수 있다.

순서 번호(시퀀스 번호)는 이 패킷의 맨 앞 위치 데이터가 송신 데이터의 몇 번째 바이트에 해당하는 지를 송신측에서 수신측에 전달하기 위한 것이다.

윈도우(그림에서 창)는 수신측에서 송신측에 수신 버퍼의 윈도우 사이즈를 통지하기 위해 사용하는 것으로, 수신 버퍼를 비웠을 때 이 정보를 통지한다.

<UDP 헤더> UDP 헤더는 복잡한 TCP 헤더와 다르게 송수신 포트 번호와 길이, checksum만을 포함한다.

간단하고 빠르다는 장점이 있지만, 데이터의 오류복구나 흐름제어를 하지 못한다.


스위치, 라우터

스위치(L2 스위치)는 스위치에 연결된 기기들끼리 L2 계층에서의 효율적인 연결을 가능하게 한다.

물리적인 포트(여기서의 포트는 랜 포트의 포트를 뜻한다.)에 연결된 장치에서 보낸 패킷을, 패킷이 도달해야하는 장치에게만 전달하는 역할을 한다. 어떻게 그게 가능할까?

기기가 스위치에 연결됐을 때, 스위치는 기기의 NIC 카드에 저장된 MAC 주소를 자체 MAC TABLE에 저장한다.

패킷이 들어오면, 패킷 내부 MAC 헤더에 저장된 수신처 MAC 주소와 MAC TABLE에 저장된 MAC 주소를 비교하여 일치하는 MAC 주소를 가진 행의 랜 포트로 패킷을 내보낸다.

 

라우터(L3스위치)는 L3 계층에서 네트워크 주소를 기반으로 목적지로의 경로를 찾는 동작인, 라우팅을 하는 장치이다.

라우터 내부의 라우팅 테이블은 다음과 같은데, 컴퓨터에서도 cmd에 route print 명령을 통해 이를 볼 수 있다.

수신처 ip에 네트워크 마스크를 씌우고 (AND 연산), 이 것이 해당 행의 네트워크 대상과 같은지 확인한다.

같은 행이 많다면, 그 중 서브넷이 더 작은 범위인 것(= 네트워크 번호의 비트 수가 가장 긴 것)을 찾는다.

매트릭은 비용(우선순위)을 나타내며, 이 값이 작을 수록 우선순위가 높은 것이다. 네트워크 번호의 비트 수가 같은 것이 여러 행 존재한다면, 매트릭으로 판단하여 가장 비용이 적은 곳으로 선택한다.

참고로 0.0.0.0은 기본 게이트 웨이로, 어떤 ip가 오더라도 0.0.0.0으로 마스킹을 하면 이 행과는 같을 수밖에 없다. 따라서 다른 행과 일치하지 않는다면 기본 게이트웨이로 나가게 된다.

인터페이스는 패킷이 나가는 장치(LAN 어댑터)의 ip주소, 게이트 웨이는 목적 주소를 나타낸다.


네트워크의 작동

위의 그림에서, 왼쪽(빨간 원 영역) PC의 A 프로세스에서 오른쪽 PC의 B프로세스로 패킷을 보낼 경우를 가정해보자.

먼저 송신측의 PC에서 계층별로 각각의 TCP(or UDP)헤더(L4), IP 헤더(L3), MAC 헤더(L2)를 A 프로세스(L7)의 데이터에 붙여(캡슐화) 패킷을 완성한다. 또한 L3 계층에서 PC의 라우팅 테이블을 바탕으로 그 다음 목적지를 설정하고, ARP 프로토콜로 그 목적지의 MAC 주소를 얻을 것이다. (이미 ARP 테이블에 캐싱됐다면 그것을 사용) 그리고 실제 전기적 신호로 데이터를 보낸다.(L1)

그 다음 목적지가 라우터일 때, 먼저 중간의 스위치(L2)로 들어가는데, 스위치에서는 내부 MAC 테이블을 통해 라우터로 해당 패킷을 보내준다.

라우터(L3)에 패킷이 도착하면, 라우터 내부의 라우팅 테이블을 통해 그 다음 목적지를 정하고, 해당 목적지의 MAC 주소로 MAC 헤더를 업데이트 하여(ARP) 전송한다.

이를 반복하여 오른쪽(파란 원 영역) PC에 패킷이 도착하면, 역캡슐화(Decapsulation)를 하여 해당하는 포트(L4)에 해당하는 소켓(프로세스)에 데이터를 전달한다.

'네트워크' 카테고리의 다른 글

TCP의 작동 방식  (0) 2023.04.06
OSI 7 계층, TCP/IP 4 계층  (0) 2023.02.01