프론트엔드 개발을 해오면서 백엔드와 통신하여 프론드단에 보여주는일이 아주 많다.
무지성으로 개발하는것보단 네트워크를 통해 어떻게 통신이 되는지 궁금증이 생겨 전체 흐름을 정리하고자 한다.
이글은 우아한테크의 네트워크 7 layer, 블로그, 네트워크 서적을 참고했다.
혹시 저작권 문제가 있을시에는 삭제 하도록 하겠습니다. 좋은 강의 블로깅 감사드립니다.
이 벨로그에서 언급하는 네트워크는 기존의 OSI 7계층이 아닌 현대에서 가장 많이 사용하는 업데이트된 TCP/IP 모델을 기반으로 작성 하였습니다.
기존의 OSI의 물리적 계층은 TCP/IP 모델의 Network 에 포함된다.
기본적으로 멀리 떨어져있는 두대의 컴퓨터가 통신을 하려면 신호를 서로 보낸다.
그래서 어떻게 통신을 하는것일까?
예시) 왼쪽의 컴퓨터가 0101 0101 이라는 아날로그 신호를 보내면 오른쪽의 컴퓨터는 신호를 해석해 0101 0101이라는 데이터를 알게된다.
그럼 이제 1:1 관계의 컴퓨터간의 소통에는 문제가 없다.
그럼 여러대의 컴퓨터가 소통하려면 어떻게 해야할까?
라우터의 등장
평소에 흔히 듣던 라우터가 이 역할을 한다. 서로 다른 네트워크에있는 예림->혜림 으로 통신하기위해선 라우터를 거쳐 해당 컴퓨터의 위치로 통신을 하게된다.
이런식으로 전세계의 컴퓨터를 연결한것이 인터넷 이다.
Physical Layer의 방식으로 데이터를 통신하는것에는 성공하였다. 하지만 만약 아래의 상황이면 어떨까?
ex) 예림이가 여러대에게 한번에 데이터를 받았다.
예림이의 컴퓨터는 어떻게 다른 컴퓨터에서 온 통신을 구분할 수 있을까?
구분을 위해 데이터 앞에 특정 비트열을 붙인다
쉽게 예를 들자면 아래와 같은 방식으로 구분을 하는것이다.
추신수: 오늘 홈런 쳤다
오타니: 오늘 홈런치고 안타도 쳤다
메시: 오늘 골넣었다
그래서 전송자가 데이터를 보낼때 앞에는 1111을 뒤에는 0000을 붙인다고 가정해보자. 밑의 경우와 같이 누가 어떤데이터를 보냈는지 구분할 수 있게 되었다.
데이터 링크에서는 물리 계층에서의 방식에서 위 설명했던 과정을 추가하면 쉽게 이해할 수 있다.
결국 데이터링크에서는 같은 네트워크에 있는 여러대의 컴퓨터들이 데이터를 주고 받기 위해서 필요한 모듈이다.
이제 여러 데이터들을 식별하는데 까지는 성공했다. 하지만 다른 네트워크에 있는 정확한 목적지로 어떻게 데이터들 전달하게 될까?
Data 앞에 Ip주소를 붙인다
전송자는 데이터 앞에 목적지 주소(IP)를 붙인다.
예를들어 B(55.10.54.75)까지 갈경우 하기와 같이 IP+data로 패킷을 만든다.
이전의 data layer에서 network layer의 과정만 추가되었으므로 간략하게 작성 하겠다.
1. data가 3계층 encoder들어감
2. 객체 패킷이 만들어짐 IP + data (55.10.51.23 + data)
3. 2게층 전달
4. 2계층은 1111 IP + data 0000
5. 1계층 전달
6. 쭊쭉 라우터까지감
3계층 까지의 작업으로 이제 인터넷상의 모든 컴퓨터가 서로를 식별하고 통신하는것은 문제가 없다.
하지만 데이터를 받는 컴퓨터 내에 실행중인 여러 프로그램들에게 어떻게 적합한 데이터를 전달할 수 있을까?
각각의 프로세스는 포트번호를 가진다.
송신자는 데이터를 보낼때 데이터를 받을 프로세스의 포트번호를 분여서 전송을 하게된다
사실 www.naver.com도 뒤에 :80이 생략되었다는 사실!
www.naver.com:80으로도 동일하게 접속이 가능하다.
앞서 데이터링크에서 전송자 식별하였듯이 transport내에서는 프로세스를 포트번호를 이용해 식별하여 데이터의 최종도착지인 프로세스에 보낸다.
이메일, 웹서핑 등과 같은 서비스를 제공하고 제공받기 위해서 어떤 형식으로 메시지를 주고 받아야 하는지의 프로토콜들이 모여있는 레이어라고 생각하면 된다.
웹에서는 HTTP 프로토콜이 여기 해당한다.