(그냥 네트워크랑 어울리는 짤 같길래 쩝,,)
...밑으로 쭉쭉 20개 정도 목록이 있더군요!?
네트워크가 워낙 좀 수면제같은 개념들이 많아서 살짝 걱정이 되지만 일단 시작하고 본다 ^.^
(참고영상: 유콩의 데이터통신)
네트워크의 구성 요소는 크게 세가지가 있다. 데이터를 주고 받는 장치인 단말장치, 다른 단말장치로 데이터를 송신 및 수신할 수 있다(ex. 스마트폰, 노트북, 데스크탑, 태블릿 등).
다음으로 단말장치 사이를 연결해 주는 전송매체가 있다. 공유하려는 데이터를 전달해주는 역할을 한다(ex. 랜선). 마지막으로 데이터가 최종 도착지까지 전달될 수 있도록 경로를 중재하는 네트워크 장비가 있다. 이 네트워크 장비의 종류에 대해서 설명을 해주신다고 한다.
허브는 하나의 네트워크에 여러 개의 단말장치를 연결할 수 있도록 해준다. 하지만 단순히 분배하는 역할만 수행하므로 메시지에 대한 판단 과정이 없다. 그렇기 때문에
데이터의 수신지를 구분해서 전달하지 않기 때문에 나에게 온 메시지가 맞는지 확인하는 작업을 따로 해주어야 한다.
허브의 단점을 해결해주는 스위치이다. 스위치는 도착 주소에 해당하는 단말장치에만 메시지를 전달한다. 따라서 충돌 가능성이 줄어든다. 맥 주소 테이블에서 주소를 알아내기 위해 활용되는 것이 ARP(Address Resolution Protocol, 주소 결정 프로토콜)이다.
라우터는 라우팅 테이블에서 네트워크 주소와 출력 마스크 등의 정보를 관리한다. 메시지에 담긴 도착지 IP(네트워크 주소)를 이용해서 라우팅 테이블에 있는 모든 서브넷마스크와 비교해서 메시지를 전달해야 하는 네트워크의 주소와 일치하는 네트워크를 찾고 출력 인터페이스 정보를 확인한다. 해당 정보와 일치하는 라우터로 메시지를 전달하게 된다.
인터넷의 개념부터 확실히 알고 들어간다.
전 세계에 걸쳐 파일 전송 등의 데이터 통신 서비스를 받을 수 있는 컴퓨터 네트워크의 시스템
그리고 TCP/IP는
인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합
이렇게 정의할 수 있다. (*프로토콜은 네트워크 통신을 위해 미리 정해 놓은 공통된 메뉴얼)
그래서 www.google.com을 웹브라우저에 입력하면 무슨일이 일어날까요..??!
아래와 같은 HTTP Request 메시지를 보내는 것으로 시작
해당 요청을 구글 서버에 전달하기 위해 우리는 패킷을 만들어야 한다. 패킷에는 각 계층에 필요한 정보들을 담아야 한다. 애플리케이션 레이어에서는 HTTP Request이 들어간다.
중요하게 볼 것은 SP와 DP 인데 시작 포트번호와 목적지 포트번호를 말한다. 시작 포트번호는 내 컴퓨터에서 만든 소켓의 포트번호이고 목적지는 80으로 웹서버의 웰노운 포트 번호이다.
IP 헤더에서 중요한 정보는 SA와 DA 이다. 즉, 시작 IP 주소와 목적지 IP 주소이다. 지금까지는 도메인 정보만 알고 있으나 DNS 프로토콜을 통해 IP주소를 알 수 있다.
DNS서버 주소는 이미 컴퓨터에 등록이 되어 있다. (DNS 또한 HTTP와 같은 애플리케이션 계층 프로토콜) DNS도 HTTP Request와 비슷하게 도메인이 담긴 쿼리를 도메안 서버에 보내고 IP 주소를 응답 받는다.
DNS는 Transport Layer에서 UDP라는 프로토콜을 사용한다. UDP는 비연결지향형 프로토콜로 TCP와 다르게 헤더가 간단하다. 포트번호 외에는 없다.
도메인에 대한 IP 주소를 알아냈고 마지막으로 Ethernet 프로토콜에 대한 헤더를 만들어야 한다.
물리적으로 연결된 우리집 공유기의 MAC 주소가 필요하다. 공유기를 통해 다른 네트워크와 연결이 가능하기 때문에 게이트웨이라고 부르기도 한다.
그럼 어떻게 IP주소로 MAC 주소를 알 수 있을까? IP 주소를 MAC 주소로 바꾸어주는 주소해석 프로토콜인 ARP을 사용한다. (주소해석 프로토콜)
따라서 데이터 전송 전에 송신측과 수신측이 서로 연결되는 작업이 필요하다. 이 작업을 3 Way Handshaking 이라고 부른다.
이 방법은 TCP 헤더에 플래그들, 즉 컨트롤 비트(그 중 SYN과 ACK)를 사용한다. 클라이언트는 서버에게 접속을 요청하는 SYN 패킷을 보내고, 서버는 SYN 요청을 받고 허가한다는 ACK과 SYN 플래그가 설정된 패킷을 보낸다.
그러면 클라이언트가 다시 서버에 ACK을 보내고 이제부터 연결이 이루어져 데이터가 오가게 된다.
라우팅을 거쳐 목적지 서버에 도착을 하면 패킷의 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의 흐름제어/오류제어/혼잡제어를 더 공부해 보thㅔ용)
(참고영상: 수리의 TCP/IP)