문서만 읽는 건 좀 루즈하다면 - (3) 테코톡 발견, 네트워크 개념 돌아보기

yoorabaek·2022년 9월 10일
0
post-thumbnail

(그냥 네트워크랑 어울리는 짤 같길래 쩝,,)



우테코 주제로는 네트워크 관련 토픽이 꽤 많은 것 같다. 통신 쪽으로 이해가 필요한 개념들이 더 많이 있어서 일까?! 아무래도 통신과 관련해서 처리하는 작업들에서 서비스의 성능이나 사용자 경험을 개선할 수 있는 부분에 꼭 필요한 배경지식이 네트워크이니 잘 알아두면 후에 도움이 되지 않을까 싶다 :@
이번에도 우테코에서 볼만한 네트워크를 주제로한 영상들 목록을 뽑아서 한번 정리해볼 생각이다. (!순서는 크게 의미 없음)

...밑으로 쭉쭉 20개 정도 목록이 있더군요!?

네트워크가 워낙 좀 수면제같은 개념들이 많아서 살짝 걱정이 되지만 일단 시작하고 본다 ^.^




Topic 1. 데이터 통신

(참고영상: 유콩의 데이터통신)

네트워크의 구성 요소는 크게 세가지가 있다. 데이터를 주고 받는 장치인 단말장치, 다른 단말장치로 데이터를 송신 및 수신할 수 있다(ex. 스마트폰, 노트북, 데스크탑, 태블릿 등).
다음으로 단말장치 사이를 연결해 주는 전송매체가 있다. 공유하려는 데이터를 전달해주는 역할을 한다(ex. 랜선). 마지막으로 데이터가 최종 도착지까지 전달될 수 있도록 경로를 중재하는 네트워크 장비가 있다. 이 네트워크 장비의 종류에 대해서 설명을 해주신다고 한다.

허브는 하나의 네트워크에 여러 개의 단말장치를 연결할 수 있도록 해준다. 하지만 단순히 분배하는 역할만 수행하므로 메시지에 대한 판단 과정이 없다. 그렇기 때문에

데이터의 수신지를 구분해서 전달하지 않기 때문에 나에게 온 메시지가 맞는지 확인하는 작업을 따로 해주어야 한다.

허브의 단점을 해결해주는 스위치이다. 스위치는 도착 주소에 해당하는 단말장치에만 메시지를 전달한다. 따라서 충돌 가능성이 줄어든다. 맥 주소 테이블에서 주소를 알아내기 위해 활용되는 것이 ARP(Address Resolution Protocol, 주소 결정 프로토콜)이다.



지금까지는 하나의 네트워크를 연결하는 네트워크 장치에 대해서 이야기했고 지금부터는 서로 다른 네트워크 간에 연결해주는 장치를 살펴볼 것이다.

라우터는 라우팅 테이블에서 네트워크 주소와 출력 마스크 등의 정보를 관리한다. 메시지에 담긴 도착지 IP(네트워크 주소)를 이용해서 라우팅 테이블에 있는 모든 서브넷마스크와 비교해서 메시지를 전달해야 하는 네트워크의 주소와 일치하는 네트워크를 찾고 출력 인터페이스 정보를 확인한다. 해당 정보와 일치하는 라우터로 메시지를 전달하게 된다.




Topic 2. TCP/IP

인터넷의 개념부터 확실히 알고 들어간다.

전 세계에 걸쳐 파일 전송 등의 데이터 통신 서비스를 받을 수 있는 컴퓨터 네트워크의 시스템

그리고 TCP/IP는

인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합

이렇게 정의할 수 있다. (*프로토콜은 네트워크 통신을 위해 미리 정해 놓은 공통된 메뉴얼)

그래서 www.google.com을 웹브라우저에 입력하면 무슨일이 일어날까요..??!


step A. Application Layer

아래와 같은 HTTP Request 메시지를 보내는 것으로 시작


해당 요청을 구글 서버에 전달하기 위해 우리는 패킷을 만들어야 한다. 패킷에는 각 계층에 필요한 정보들을 담아야 한다. 애플리케이션 레이어에서는 HTTP Request이 들어간다.


step B. Transport Layer

중요하게 볼 것은 SP와 DP 인데 시작 포트번호와 목적지 포트번호를 말한다. 시작 포트번호는 내 컴퓨터에서 만든 소켓의 포트번호이고 목적지는 80으로 웹서버의 웰노운 포트 번호이다.


step C. Internet Layer


IP 헤더에서 중요한 정보는 SA와 DA 이다. 즉, 시작 IP 주소와 목적지 IP 주소이다. 지금까지는 도메인 정보만 알고 있으나 DNS 프로토콜을 통해 IP주소를 알 수 있다.


DNS서버 주소는 이미 컴퓨터에 등록이 되어 있다. (DNS 또한 HTTP와 같은 애플리케이션 계층 프로토콜) DNS도 HTTP Request와 비슷하게 도메인이 담긴 쿼리를 도메안 서버에 보내고 IP 주소를 응답 받는다.


DNS는 Transport Layer에서 UDP라는 프로토콜을 사용한다. UDP는 비연결지향형 프로토콜로 TCP와 다르게 헤더가 간단하다. 포트번호 외에는 없다.

step D. Network Access Layer

도메인에 대한 IP 주소를 알아냈고 마지막으로 Ethernet 프로토콜에 대한 헤더를 만들어야 한다.

물리적으로 연결된 우리집 공유기의 MAC 주소가 필요하다. 공유기를 통해 다른 네트워크와 연결이 가능하기 때문에 게이트웨이라고 부르기도 한다.

그럼 어떻게 IP주소로 MAC 주소를 알 수 있을까? IP 주소를 MAC 주소로 바꾸어주는 주소해석 프로토콜인 ARP을 사용한다. (주소해석 프로토콜)



이제 패킷에 담아서 전송할 준비가 된걸까? Nope. TCP는 연결형.프로토콜. 이란말씀 🫥

따라서 데이터 전송 전에 송신측과 수신측이 서로 연결되는 작업이 필요하다. 이 작업을 3 Way Handshaking 이라고 부른다.

이 방법은 TCP 헤더에 플래그들, 즉 컨트롤 비트(그 중 SYN과 ACK)를 사용한다. 클라이언트는 서버에게 접속을 요청하는 SYN 패킷을 보내고, 서버는 SYN 요청을 받고 허가한다는 ACK과 SYN 플래그가 설정된 패킷을 보낸다.

그러면 클라이언트가 다시 서버에 ACK을 보내고 이제부터 연결이 이루어져 데이터가 오가게 된다.


p.s. 부가적으로 내가 사용하는 컴퓨터는 Private IP를 사용하고 있다. 외부 네트워크 환경에서 찾을 수 없다. 그래서 공유기를 통해 나갈 때 Public IP로 바꾸는 작업을 하는데 이것을 NAT(Network Address Translation)이라고 한다.

라우팅을 거쳐 목적지 서버에 도착을 하면 패킷의 IP 헤더에 기록된 구글 서버 IP 주소를 통해 MAC주소를 얻어와야 한다. ARP가 라우터가 연결된 네트워크로 브로드캐스팅 된다. 그러면 구글 서버에서 MAC 주소를 응답해주고 데이터가 물리적으로 전달될 수 있게 된다. (Network Access Layer, Internet Layer의 주소 정보로 여기까지 get)

그 다음으로 Transport Layer의 목적지 포트번호에는 80번이 있다. 이를 통해 80번 포트를 사용하는 애플리케이션에 데이터를 전달해야 함을 알고 Application Layer에서 웹 서버가 사용될 HTTP Request 데이터를 얻게 된다. 이제 서버는 요청을 확인해 적절한 HTML을 응답해 준다.


응답이 끝나면 연결을 종료해야 한다. 여기서도 TCP 컨트롤 비트인 ACK, FIN 플래그가 사용된다. 클라이언트가 서버로 연결을 종료 하겠다는 FIN 플래그를 전송하고 서버는 ACK 플래그를 클라이언트에 보내고 연결이 끝날 때까지 기다린다. 서버가 통신이 끝나면 클라이언트로 FIN을 보낸다. 클라이언트는 확인했다는 의미로 ACK을 보낸다. -연결 종료-
=> 이것을 4 Way Handshaking이라고 부른다.

뭔가 전에 들었던 것보다 더 자세하게 알게 된 것 같은데 플래그를 통해 통신 연결처리를 한다는 것이 좀 신기하다 😯

여기서 하나 주의할 점이 있는데 서버가 FIN을 보냈던 데이터가 FIN보다 늦게 도착해버리면 안되기 때문에 클라이언트는 일정 시간 소켓을 열어두고 잉여 패킷을 기다려야 한다.(Time Wat)


왜 TCP가 신뢰할 만한 프로토콜이라고 할까? 엄청나게 큰 데이터를 주고 받는데 한 개의 패킷으로는 무리가 있다. 그래서 데이터를 쪼개서 여러 패킷으로 보내게 되는데 과연 이것이 안전할까 싶지만 이걸 TCP가 해낸다..!

(TCP의 흐름제어/오류제어/혼잡제어를 더 공부해 보thㅔ용)

(참고영상: 수리의 TCP/IP)

0개의 댓글