이전 글
[네트워크] "www.google.com"을 입력하면 어떻게 되나? 6편 TCP
[네트워크] "www.google.com"을 입력하면 어떻게 되나? 5편 HTTP
[네트워크] "www.google.com"을 입력하면 어떻게 되나? 4편 SSL (TLS)
[네트워크] "www.google.com"을 입력하면 어떻게 되나? 3편 Port(포트), Socket(소켓)
[네트워크] "www.google.com"을 입력하면 어떻게 되나? 2편 DNS
[네트워크] "www.google.com"을 입력하면 어떻게 되나? 1편 - LAN/WAN, TCP/IP 4 계층, 패킷 교환 방식
지난 편까지 TCP Segment를 만들었고, Internet Layer의 IP로 넘어왔습니다. 지난 편에서 Transport Layer에서는 포트번호를 사용한다고 했습니다. 그 이유는 IP 주소로 식별된 컴퓨터 내에 여러 프로세스가 동작하고 있고, 특정 프로세스를 식별하기 위함입니다. 이제 다룰 Internet Layer의 IP에서는 그 식별된 컴퓨터까지 찾아가는 역할을 합니다. 그런데 사실 IP 주소가 특정 컴퓨터를 식별하기는 하지만, 이것의 주 목표는 네트워크를 식별하고, 네트워크에 연결된 특정 디바이스의 논리적 주소를 가리킵니다. 그리고 이 논리적 주소는 변할 수 있기 때문에, 변하지 않는 물리적 주소인 MAC을 함께 사용해서 최종적으로 특정 디바이스를 식별합니다. 이 이야기를 더 자세히 이해하기 위해서 네트워크가 어떻게 구성되어 있는지 살펴보겠습니다.
IP와 Ethernet(Feat. IP 주소와 MAC주소)

위의 그림은 복잡한 인터 네트워크를 간략하게 표현한 것입니다.
지난 1편에서 살펴본 것처럼, 인터 네트워크는 네트워크를 사용하는 장치들을 물리적으로 연결한 좁은 단위의 LAN들과 그것들을 연결하고 있는 거대한 WAN으로 이뤄져있습니다. 위의 그림은 간략하게 표현했지만, LAN이 수 많이 복잡하게 연결되어 있기 때문에, 어떤 IP주소가 가리키는 컴퓨까지 찾아가는 방법은 여러가지가 있습니다. 그래서 어떤 루트를 택할지 정하는 것이 IP의 역할입니다.
그럼 어떻게 IP 주소를 가지고 특정 장치를 찾아갈 수 있을까요? 그것의 핵심적인 기능을 하는 '라우터(router)'에 대해서 알아봐야합니다. 라우터는 이름에서 유추할 수 있듯이 'route(경로)'를 찾아주는 역할과 좁은 네트워크들을 연결하는 역할을 합니다. 각 라우터는 '라우팅 테이블'이라는 것을 가지고 있는데요. 이 테이블은 특정 네트워크로 찾아가기위해서는 자신과 연결된 어느 라우트로 가야하는지를 담고 있습니다. 그래서 한 패킷(정확히는 frame)이 라우터에 도착을 하면, 그 패킷의 헤더에 있는 목적지 IP 주소를 보고 라우팅 테이블을 참고하여, 다음 라우터로 전송해줍니다.
추가로 라우터에 연결된 스위치(switch)에 대해 알아보겠습니다. 스위치는 랜 케이블 또는 무선으로 직접 연결된 장치끼리 통신할 수 있게 합니다. 집에 있는 공유기를 떠올리면 됩니다. 공유기를 자세히 보면 여러 포트 중에 한 포트는 비슷하게 생긴 어떤 장치로 연결하게 되어 있는데 이것이 라우터입니다. 앞서 설명했듯이 이 장치는 네트워크끼리 연결해주죠. 그래서 스위치에 연결된 노트북은 이것을 통해서 라우터와 통신하고, 이 라우터가 라우터끼리 통신하고, 어느 시점에선 라우터가 다시 특정 서버랑 통신함으로써 한 통신이 완료되는 것입니다. 다시 말해, 스위치는 LAN 네트워크를 만들고, 라우터는 네트워크끼리 통신합니다.
그런데 사실 이 패킷이 특정 네트워크 장비로 이동하는데에는 IP주소와 함께 MAC주소가 사용됩니다. 그럼 IP주소와 MAC에 대해서 잠깐 알아볼까요?
IP 주소는 네트워크 상에 있는 장치를 식별하고, MAC는 실제 장치를 식별합니다. 이게 무슨 말이냐면, 사실 우리가 사용하는 장치는 여러 네트워크를 번갈아가며 사용합니다. 제 노트북을 집에서 와이파이로 연결해서 KT 네트워크를 이용할 수도 있고, 이 노트북을 들고 카페에 가서 카페 와이파이로 SK 네트워크를 이용할 수 있죠. 각 상황에서 사용하는 네트워크가 다르기 때문에 이 노트북에 할당된 IP 주소가 다릅니다. IP 주소를 한번 살펴보면, 마침표로 구분된 앞의 세 숫자는 네트워크 부라고 부르고, 마지막 숫자를 호스트 부라고 부릅니다. 이 카페 와이파이를 사용하는 모두가 같은 앞 세 자리를 사용하고 마지막 한 자리는 중복되지 않게 사용합니다. 그래서 사실 IP 주소는 변하고, 그래서 논리적 주소라고 부릅니다.

이러한 특성 때문에 어떠한 경우에는 패킷이 시작했을 때의 IP주소가 가리키는 장치가 도착했을 때는 달라질 수도 있겠죠. 따라서 변하지 않는 장치를 식별하는 주소가 필요하고, 그것이 MAC 주소입니다. MAC은 NIC(Network Interface Card)라고 하는 네트워크에 장치를 연결하는 장치에 고유하게 부여되는 번호입니다. 이 번호는 굳이 굳이 노력하지 않는다면 변하지 않고, 그래서 이 주소를 물리적 주소라고 부릅니다. 그래서 IP주소와 이 주소를 통해 확실하게 장치를 식별할 수 있고, 라우터가 IP주소를 식별한 후에 이 주소를 MAC주소로 바꿔 통신하게 됩니다. 또한 앞에서 살펴본 스위치에는 IP주소가 아에 없습니다. 네트워크끼리 통신할 필요가 없기 때문이죠. 이 장치는 MAC을 통해서 장치들을 식별하게 됩니다. 이렇게 변하지 않는 주소로 통신을 하게 됐으니 이를 위한 프로토콜이 필요합니다. 유선으로 연결된 장치끼리는 Ethernet protocol을 주로 사용하고, 무선 연결은 IEEE 802.11 protocol을 사용합니다.
How does it works?
그래서 이러한 방식으로 통신이 이뤄집니다. 먼저 지난 편까지 Transport Layer의 TCP를 통해 만들어진 세그먼트가 Internet Layer의 IP로 내려옵니다. 그럼 수신측/송신측 IP 주소가 포함된 IP header를 붙여 IP Packet을 만들어, Network Access Layer의 Ethernet으로 보냅니다.

Ethernet에서는 먼저 이 장치와 가장 가까운 네트워크 장비인 라우터의 MAC 주소를 포함한 헤더를 붙여 Frame을 만듭니다. 그런데 지금 컴퓨터는 장치에 연결된 라우터의 IP는 알지만 MAC은 알지 못합니다. 이때 IP 주소를 이용해서 MAC 주소를 찾는 프로토콜인 ARP를 사용합니다. 이제 Frame이 완성되어 라우터로 보냅니다. 그럼 라우터는 Frame을 벗겨내고, IP 헤더에 담겨있는 목적지 IP 주소를 보고 자신의 라우팅 테이블을 참고하여 가장 가까운 라우터의 IP 주소를 찾습니다. 그리고 이 주소를 가지고 ARP를 진행하여 그 MAC 주소를 얻어온 후 Ethernet 헤더에 담아 Frame을 완성하여 그 라우터로 전송합니다. 그리고 이 라우터도 구글 서버가 연결된 라우터까지 진행합니다. 드디어 구글 서버가 연결된 라우터는 여기에서도 ARP를 사용하여 구글 서버의 MAC주소를 얻어온 후, 구글 서버에 Frame을 보냅니다.
구글 서버는 우리가 지난 편들을 통해서 알아보았던 순서 반대로 진행하며, 각 프로토콜의 헤더를 벗겨냅니다.
Ethernet에서 자신의 서버가 맞는지 확인한 후 헤더를 벗겨낸 Packet을 IP로 보내고, IP도 마찬가지로 자신의 IP와 비교하고 헤더를 벗겨낸 Segment TCP에 보내고, TCP는 목적지 포트번호를 참고해서 그 포트가 연결된 소켓에 TCP 페이로드의 받은 정보를 기록합니다. 그럼 SSL이 대칭키를 이용하여 정보를 복호화한 후 HTTP로 넘기고, HTTP Request를 받아 서버에서 요청을 처리한 후 HTTP Response를 만들어 다시 이 과정을 반대로 반복하게 됩니다.
마무리
지금까지 6편을 통해 네트워크가 어떻게 동작하는지 알아보았습니다. 한 삽 더 파낼 때마다 새로운 것이 계속 나와서 더 파는 것이 두려울 때도 있었지만, 여전히 흥미로웠습니다. 앞으로는 이 포스팅을 통해서 알게된 네트워크 지식을 바탕으로 비즈니스 로직을 만드는 것에 집중해보겠습니다!
참조
https://jhnyang.tistory.com/404
https://better-together.tistory.com/114?category=887984
'Computer Science > Network' 카테고리의 다른 글
| [네트워크] "www.google.com"을 입력하면 어떻게 되나? 6편 TCP (0) | 2022.08.13 |
|---|---|
| [네트워크] "www.google.com"을 입력하면 어떻게 되나? 5편 HTTP (0) | 2022.08.10 |
| [네트워크] "www.google.com"을 입력하면 어떻게 되나? 4편 SSL (TLS) (0) | 2022.08.10 |
| [네트워크] "www.google.com"을 입력하면 어떻게 되나? 3편 Port(포트), Socket(소켓) (0) | 2022.08.10 |
| [네트워크] "www.google.com"을 입력하면 어떻게 되나? 2편 DNS (0) | 2022.08.08 |