네트워크 통신 과정

꾸준하게 달리기~·2023년 8월 11일
0

cs

목록 보기
11/16
post-thumbnail
post-custom-banner

들어가기 앞서

https://www.youtube.com/playlist?list=PLXvgR_grOs1BFH-TuqFsfHqbh-gpMbFoy

위에 있는 널널한 개발자의 플레이리스트를 보고 작성하는 글입니다.
내가 대충 알고있던 네트워크를 예시를 들어가며 자세하게 알려주셨습니다.
강의력도 좋으시고, 이해가 잘 되게 말씀해주셔서 재미있었습니다.

기본적으로 네트워크 용어에 대한 배경지식이 있다고 생각하고 설명드리겠습니다! :)




네트워크 통신

대충의 네트워크 통신을 설명하고, 해당 번호에 맞게 점점 자세하게 설명할 예정입니다.
(TCP 3 way handshake 연결이 되어있다는 가정 하에 설명 드리겠습니다!)

  1. 애플리케이션 계층 : 클라이언트 프로세스에서 내가 원하는 요청(어디에, 무엇을보낼지)을 OS에 부탁합니다.

  2. 전송 계층 : OS에서 어디에 보낼지에 관한 정보와, 무엇을 보낼지에 관한 정보, 원하는 곳에 도착해서 어떤 프로그램에 전달할지를 담아 소켓 형태로 담습니다.
    해당 소켓을 네트워크 패킷이라는 단위로 나누어, 여러개의 패킷으로 쪼갭니다.

  3. 인터넷 계층, 링크 계층 : 쪼개진 패킷을 전송, 서버에 전달합니다.

이제 해당 내용을 자세하게 설명드리겠습니다.



1. 애플리케이션 계층

클라이언트 프로세스에서 내가 원하는 요청(어디에, 무엇을보낼지)을 OS에 부탁합니다.

내가 원하는 요청은 수없이 많습니다.
예를 들겠습니다.
웹서핑을 한다면, 내가 들어가고 싶은 웹사이트에 해당 정보를 보내달라는 요청을 하게 됩니다.
하지만 그러한 요청을 곧바로 상대 서버에 보낼 수는 없으므로,
프로세스에서 그러한 요청을 보내달라고 OS에 부탁합니다.



2. 전송 계층

전송 계층을 설명하기 전에, 두가지 내용 PORT, IP를 먼저 말씀드리겠습니다.

IP번호

IP번호는, 쉽게 말해 주소를 나타냅니다.
제가 원하는 내용을 요청하더래도, 가장 중요한것이 있습니다.
어디에 보낼지 알아야 합니다.
IP주소는, IPv4 기준으로, 2^(2^5) = 2^32 대충 43억개의 주소가 있습니다.
예를 들어 제 주소는,

172.29.144.1 입니다.
이렇게 보낼 곳의 주소를 알고 있어야 보낼 수 있습니다.
알맞은 주소를 찾기 위해 사용하는 식별자가 IP 번호입니다.


PORT 번호

우리 컴퓨터에는 프로그램이 있습니다.
제 컴퓨터에는 한컴오피스, 메모장, 크롬 등 여러 프로그램이 SSD에 저장되어 있습니다.

해당 프로그램들은, 제가 더블클릭하여 실행되기 전엔 프로그램이지만,
제가 더블클릭하여 실행된다면,
제 컴퓨터의 RAM에 할당되고, 실행중인 프로그램이 됩니다.
그렇게 프로그램이 RAM에 할당되고 실행된다면,
그것을 프로세스라고 합니다.



영어로 port는 항구입니다.

내가 서버에 알맞은 주소로 요청을 보냈다고 해도,
해당 주소의 서버에서 실행중인 여러 프로세스(항구)가 있을 것이고,
내 요청을 처리할 수 있는 알맞은 프로세스(항구)를 찾기 위해 사용하는 식별자가 PORT번호입니다.



여기서부턴 운영체제, 즉 OS의 업무입니다.

이제 마저 설명드리겠습니다.

애플리케이션 계층에서 프로세스가 OS에게 요청을 보내달라고 요청합니다.

OS에선 프로세스가 전달한 정보를 바탕으로,
어디에 전달할지 IP번호를 찾고,
무엇을 보낼지 프로세스가 요청한 내용을 찾아,
원하는 곳에 도착해서 어떤 프로세스에게 전달할지 Port번호 를 담아
소켓 형태로 만듭니다.

소켓을 한꺼번에 보낼 수는 없습니다. 너무 크기 때문이죠.

해당 소켓을 네트워크 패킷이라는 단위로 나누어, 여러개의 패킷으로 쪼갭니다.

하지만 보낼 수 있는 크기는 OS의 I/O에 따라 정해져 있습니다.
다음 사진을 보겠습니다.

누구나 아는 퍼즐입니다.

소켓을 전체 퍼즐 그림,
퍼즐 하나하나를 네트워크 패킷이라고 생각하겠습니다.

우리가 전체 소켓을 한꺼번에 보낼 수 없기에,

퍼즐 하나씩에 식별할 수 있는 번호를 붙여 네트워크 패킷 형태로
라우터를 통해 전송합니다.

여기서, 퍼즐마다 식별할 수 있는 번호가 TCP의 특징입니다.
즉 패킷마다 순서가 존재합니다.




3. 인터넷 계층, 링크 계층

쪼개진 패킷을 전송, 서버에 전달합니다.
네트워크 패킷은 하나의 라우터만 거치지 않습니다.
하나의 라우터에서 다른 라우터로 가는 홉 이라는 과정을 통해,
여러개의 라우터, 여러번의 홉을 거쳐 서버에 전달됩니다.

사진은 A -> D로 네트워크 통신이 일어나는 과정입니다.

1, 2, 3 의 각각의 패킷이 있고,
해당 식별 번호를 통해 서버 D에 도착한 후 다시 소켓을 구성합니다.

공유기 모양이 라우터라고 생각하면 됩니다.

재구성된 소켓에서 IP주소를 얻어내고,
해당 IP에서 ARP 프로토콜을 통해
MAC 주소를 얻어냅니다.
해당 MAC 주소로 정확하게 도달해야 할 기기를 찾아낼 수 있습니다.
동일한 IP주소를 사용하는 일련의 여러개의 기기들이 있기 때문입니다.

(IP주소를 집주소, MAC주소를 받는 사람, Port번호를 해당 물건을 어떤 용도로 사용하라는 설명서 라고 생각하면 이해가 좀 더 편합니다.)

패킷들이 서버에 전달된 이후에는 지금까지의 역순으로
패킷 -> 소켓 -> 원하는 프로세스, 원하는 요청 순으로 요청을 받아들입니다.




부가 설명

지금까지의 설명은 그저 단 한번의 통신이 가는 과정을 나타내었습니다.

우리가 URL 을 통해 IP를 얻어내는 DNS 과정,
TCP/IP 연결을 위해 일어나는 3 way-handshake 과정 등
우리가 아는 모든 네트워크 통신은 위의 과정을 통해 일어납니다.

대신 원하는 요청 자체가 각각

해당 URL의 IP주소를 알려주세요
저희 이 정보를 통해 연결합시다

정도의 차이가 있습니다.

즉, 우리가 아는 모든 TCP/IP 네트워크 통신은 위의 과정을 통해 일어납니다.




  1. 평소에 네이버에 들어가봤는지, 캐시 서버와 호스트 서버에서 해당 URL(www.naver.com)의 IP주소를 찾아봅니다.

  2. 있다면 사용하고, 없다면 위의 과정을 통해 DNS 서버에 내가 가고자 하는 URL의 IP를 알려달라는 요청을 보냅니다.

  3. 해당 요청을 통해 받아온 IP주소로 웹사이트에 대한 데이터들을 달라는 요청을 받아온 IP 주소로 보냅니다.

  4. 받아온 데이터들을 렌더링하고 가공하여, 우리가 아는 네이버의 모습을 보여줍니다.

이 과정에서 DNS에서 IP를 받아오는 일, naver의 서버에서 데이터들을 받아오는 일들은
전부 위의 각각의 계층을 통과하는 네트워크 통신 과정을 통해 일어납니다.

profile
반갑습니다~! 좋은하루 보내세요 :)
post-custom-banner

2개의 댓글

comment-user-thumbnail
2023년 8월 11일

Oh network nice voy

1개의 답글