본문 바로가기
카테고리 없음

브라우저에 www.google.com을 입력하는 일어나는 일

by youngxdev 2023. 2. 20.

웹 브라우저에 www.google.com을 입력하면 ?    

구글 웹서버에 80번 포트로 요청을 보내는 것입니다. 이런 요청을 보내려면 요청을 보낼 데이터를 만드는 작업이 필요합니다. 즉, 패킷을 만들어야 합니다. 패킷에는 tcp/ip 각 계층에 필요한 정보들이 담겨야 하는데요, 특히 TCP 패킷은 SP, DP가 중요합니다. SP는 시작 포트, DP는 목적지 포트 번호를 의미합니다. 내것은 내가 알고 있고, 목적지 포트는 80으로 알고 이미 알고 있습니다. 이것을 웹서버 웰노운 포트라고 부릅니다.

 

IP4 패킷도 SA, DA가 중요합니다. SA는 시작 주소, DA는 목적지 주소를 의미합니다. 시작 주소는 내 거니까 이미 알고 있는 상태며, 목적 주소는 현재 도메인만 알고 IP 주소는 모르는 상태입니다. 이때 DNS 프로토콜로 도메인으로 IP 주소를 알 수 있습니다. 브라우저 앱이 운영체제에다가 IP 주소 알고 싶다고 요청을 보내면 운영체제에서 DNS 서버로 요청을 보냅니다. 운영체제는 이미 DNS 서버 주소가 저장되어 있는 상태입니다. DNS도 애플리케이션 계층이고 HTTP를 사용합니다. 포트 번호는 53번입니다. DNS 서버는 UDP를 사용합니다.

 

마지막으로 Ethernet 프로토콜 패킷을 만들어야 하는데 MAC 주소를 모릅니다. 이때 MAC 주소는 구글의 MAC 주소가 아닌 내 쪽의 게이트웨이(공유기) MAC 주소가 들어갑니다. netstat -rn 명령어를 이용해서 게이트웨이 IP 주소를 알 수 있습니다. IP로 MAC 주소를 아는 방법은 ARP 프로토콜 이용하면 됩니다. 얘는 IP를 MAC 주소로 바꿔주는 주소 해석 프로토콜입니다.

 

이제 패킷 완성되었습니다. 이제 보내기만 하면 되는데 그전에 해야 할 작업이 하나 남아 있습니다. TCP가 연결 지향형 프로토콜이기 때문에 신뢰성을 구축해야 합니다. 즉, 송, 수신 측이 서로 사전에 연결해야 하는 작업이 필요합니다. 이 작업을 3-way-handshake라고 합니다. 이때 TCP 헤더의 플래그들이 사용되는데 이것들을 컨트롤 비트라고 부릅니다. 3-way-handshake까지 완료되면 드디어 패킷 보낼 수 있게 됩니다.

이때 개인 IP가 공유 IP로 바꿔서 나가는데 이 작업은 NAT에서 진행합니다. 구글 서버에 도착까지 많은 라우터를 거쳐가게 되는데 이런 과정을 라우팅이라고 합니다. 구글 서버가 연결된 라우터에 도착하면 패킷 IP 헤더에 있는 구글 IP 주소를 통해서 MAC 주소를 가져옵니다.(ARP사용)

이제 구글 서버에 데이터 도착했습니다. 전송 계층에서 포트 번호를 통해 해당 애플리케이션에 데이터를 전달합니다. 그러면 비로소 애플리케이션에서 http request 데이터를 사용할 수 있게 됩니다.

서버에서 모든 처리를 한 뒤 반대 방향으로 동일하게 응답하고 마지막으로 연결 종료만 하면 됩니다. 이때도 TCP 헤더의 컨트롤 비트 사용하는데, 이 작업을 4-way- handshake라고 합니다.


캡슐화, 비캡슐화 과정

컴퓨터에서 다른 컴퓨터로 데이터를 보내면 계층을 데이터를 캡슐화, 비캡슐화하는 과정을 거칩니다.

 

상위계층 -> 하위계층

애플리케이션 - 전송계층 - 인터넷계층 - 링크 계층

 

캡슐화

상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시키고, 헤더를 삽입하는 과정.
예를 들어 애플리케이션 계층의 데이터가 전송 계층으로 전달되면 세그먼트화가 되면서 애플리케이션 데이터와 헤더가 전송계층의 데이터로 포함되고, TCP(L4) 헤더가 붙어지게 됩니다.. 이렇게 인터넷 계층에서는 패킷화가, 링크 계층에서는 프레임화 됩니다.

비캡슐화

하위계층에서 상위 계층으로 가며 각 계층의 헤더 부분을 제거하는 과정.

링크 계층에서 인터넷 계층으로 올라가면서 프레임화된 데이터가 패킷화가 되고 인터넷 계층에서 전송 계층으로 가면서 세그먼트화되고, 전송계층에서 애플리케이션 계층으로 가면서 메시지화되면서 최종적으로 애플리케이션에 메시지가 전달됩니다.

PDU

protocol data unit

데이터의 한 단위. 제어 관련 정보를 담은 헤더와 데이터를 의미하는 페이로드로 구성됩니다. 계층마다 이 PDU를 부르는 명칭이 다릅니다.

 

애플리케이션 계층: 메시지

전송 계층: 세그먼트(TCP), 데이터그램(UDP)

인터넷 계층: 패킷

링크 계층: 프레임(데이터 링크 계층), 비트(물리 계층)

특히 애플리케이션 계층에서는 메시지를 기반으로 데이터를 전달하는데, 이런 메시지(문자열) 기반은 헤더에 다른 값들을 쉽게 넣고 빼기 쉬워 확장성이 크기 때문입니다.

 

댓글