들어가며

웹 브라우저를 열어 http://www.google.com/ 을 입력 시 각 계층에서 어떻게 동작하는지 알아보며 흐름을 파악한다.

 

송신자의 관점

응용 계층

사용자의 입력에 따라 요청 메시지를 만들어내는 역할.

 

사용자가 직접 HTTP 요청 메세지를 만들기 어렵기 때문에,
Crome, edge, firefox 같은 웹 브라우저(APP)에서 주소창이라는 인터페이스를 제공하여 명령을 입력받고 메시지를 만들어준다.

주소창이 명령어 창이였다는게 좀 신기하다;

 

사용자가 http://www.google.com/라는 명령어를 입력하면, 브라우저는 HTTP 프로토콜 규칙에 따라 요청 메시지를 생성한다.

이 단계에서 생성되는 정보는 아래와 같다.

전송 계층

데이터를 어떤 방식으로, 어떤 포트를 통해 전달할지 결정한다.

 

웹 요청의 특성상 속도보다 신뢰성이 중요하므로, TCP 프로토콜을 사용하게 된다.

 

그 후, 출발지 포트를 정해야하는데, 클라이언트가 사용 가능한 포트번호인 1024~49151 사이에서 랜덤으로 선택된다.

목적지 포트는 HTTP 프로토콜이 주로 사용하는 80번 포트가 지정된다.

443 포트도 있으나 간략하게 80번을 사용한다.

 

해당 데이터가 덧붙여진 데이터를 세그먼트라고 한다.

네트워크 계층

IP주소에 관한 동작을 수행하는 계층이다.

 

먼저 내 IP주소를 담는다.

그러고 나서 구글의 IP주소를 알아내기 위해, DNS를 사용하여 도메인 주소를 IP주소로 변환한다.

 

여기서 중요한 점은, 받아온 IP주소를 나와 같은 서브넷에 있는지 확인해 본다는 것이다.

  • 나와 같은 서브넷일 경우
    직접 전달 가능 (스위치단에서 종료)

  • 나와 같은 서브넷이 아닐 경우
    목적지가 내 주변에 존재하지 않으니까, 라우터를 통해 외부로 나가야 한다.
    즉, 최종 목적지는 google이지만, 당장 넘겨줘야 할 대상은 게이트웨이라는 사실을 확정한다.

근데 여기서 문제는 네트워크 계층과 데이터 링크 계층은 서로 직접 적으로 간섭조차 하지 않게 설계되어 있다.
그런데 어떻게 다음 목적지가 게이트웨이라는 걸 알릴 수 있을까?

바로 네트워크 계층에서 커널 메모리 공간 어딘가에 next_hop을 일시적으로 저장하고,

일단, 여기서는 next_hop이 당장 다음 목적지의 IP를 의미한다라는 것만 알아두면 된다.

데이터 링크 계층에서 해당 메모리를 참고하는 것이다.

 

정리하면 내 LAN영역에 없는 IP는 next_hop을 게이트웨이로 설정한다.

내 LAN영역에 있는 IP면 next_hop을 목적지의 IP를 저장한다.

 

 그 후 각 맞는 IP를 담아 데이터에 추가하여 패킷을 만든다.

네트워크 계층의 데이터가 덧붙여진 데이터를 패킷이라고 한다.

 

데이터 링크 계층

MAC 주소에 관한 동작을 수행하는 계층이다.

 

네트워크 계층에서 임시로 저장했던 next_hop을 key값으로 사용하여 ARP테이블을 조회한다.

 

참고로 ARP이 무엇이지 다시 복기해 보자면, IP주소를 가지고 MAC주소를 알아내기 위한 약속인데,

"이 IP 주소 가진 사람 손!!!!드세요!!!!" 라는 일종의 브로드 캐스트다.

 

각설하고, ARP를 사용하여 MAC주소를 얻게 되는데 이때 우리가 얻게 되는 MAC주소는 게이트웨이의 MAC주소 일 것이다.

그럼 각 MAC주소를 데이터에 붙여 넣고 물리 계층으로 전달한다.

 

데이터 링크 계층에서 만들어진 데이터를 프레임이라고 한다.

물리 계층

프레임을 전기 신호, 전파 같은 물리적 신호로 변환하여 전송하는 계층이다.

랜 카드 같은 NIC(네트워크 인터페이스 카드)가 담당한다.

+ Recent posts