인터넷 네트워크는 전 세계적으로 연결된 컴퓨터 네트워크의 집합을 의미한다. 사실 21세기를 청년층으로 살면 인터넷을 모르는게 더 어렵겠지만, 인터넷을 정의할 수 있는 사람은 얼마나 될까. 이번엔 웹개발 공부를 위해 인터넷 네트워크에 대해 공부해보려 한다.
0. 서론_인터넷의 통신
만약 두 대의 PC가 서로 통신하려면 어떻게 해야할까?
바로 옆에 붙어있다면 케이블로 연결해 데이터를 주고 받을 수 있을 것이다.
그럼 두 PC가 엄청 멀리 떨어져있다면?
당연히 인터넷을 통해 통신할 수 있을 것이다.
인터넷은 어떻게 멀리 떨어진 두 PC, 그리고 수많은 컴퓨터를 어떤 규칙으로 어떻게 연결할까?
1. IP(Internet Protocol)
IP는 어디서 많이 들어 봤을 것이다.
Django를 할 떄도, Ubuntu를 설치할 때도, Jekyll을 활성화 할 때에도 항상 123.456.789.101 이런 형식의 숫자들이 보였다.
이는 컴퓨터 네트워크에서 데이터를 주고 받기 위한 표준 규약으로, 네트워크 상에서 컴퓨터나 기기를 식별하기 위해 사용하고 결론적으로 데이터가 올바른 목적지에 도달할 수 있게 만들어준다. 단위는 패킷(Packet)을 사용한다.
IP Packet
최하단의 Data
를 제외하고 상단의 정보가 IP Packet이다. 내용은 읽으면 알겠지만, 보내는 IP 주소, 받는 IP 주소 등등 기타 정보들이다.
노드들에서는 패킷을 이리저리 토스하며 받는 IP에 도달할 때 까지 반복한다.
하지만 너무 복잡한 인터넷에서 이 방법은 단점이 있다.
IP 의 한계
비 연결성: 만약 패킷을 받는 대상이 없거나 끊겨도 전달한다. 왜냐하면 IP는 대상 서버의 상태를 알 수 없기 때문이다.
비 신뢰성: 패킷이 사라지거나, 순서가 꼬여 올 수 있다. 만약 해저 인터넷 케이블이 상어에게 먹혀서 끊기면 패킷은 사라진다. 또한 짧은 시간에 많은 패킷을 전달 할 경우 서로 다른 노드 루트를 타서 순서가 꼬일 수 있다.
프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 어플리케이션이 복수라면?
서버-클라이언트가 계속 패킷을 주고 받으며 반복하다보면 이런 한계에 도달할 수 있다. 이를 보완하기 위해..
2. TCP(Transmission Control Protocol, 전송 제어 프로토콜)
인터넷 프로토콜 스택의 4 계층
계층 | 이름 |
---|---|
어플리케이션 계층 | HTTP, FTP |
OS) 전송 계층 | TCP, UDP |
OS) 인터넷 계층 | IP |
네트워크 인터페이스 계층 | 랜드라이버 등 |
이 있다.
순서는
- 사용자가 어플리케이션에 데이터와 정보를 입력한다.
- 어플리케이션 계층 에서 HTTP를 통해 SOCKET 라이브러리로 전달
- 전송 계층 TCP를 통해 정보와 메시지 데이터 생성 및 분할
인터넷 계층 에서 IP를 통해 패킷을 생성, TCP 데이터를 포함한다.
- 네트워크 인터페이스 계층에서 랜선 등을 통해 서버로 전달한다.
이 순서는 IP에서도 동일한데, TCP는 대체 무슨 역할인걸까.
TCP에서는 IP에선 부족했던 PORT 정보, 전송 제어, 순서 등의 정보를 추가한다. 이름 그대로 전송을 제어하고 IP의 한계를 극복했다.
IP 의 한계: TCP 해결(요약)
특징 | IP | TCP |
---|---|---|
연결성 | 연결확인X | 가상 연결 확인 후 메시지 전송 (3Way Handshake) |
신뢰성 | 인식 불가 | 인식 가능 (응답0) |
구분 | IP 통합 | PORT 구분(TCP,UDP) |
마지막 PORT 구분은 TCP, UDP 모두 지원하는 기능이며, TCP의 80번과 UDP의 80번은 다른 포트이다. 이 포트를 지정하는건 어플리케이션 계층 에서 한다.
3. UDP (User Datagram Protocol, 사용자 데이터그램 프로토콜)
사실 TCP와 비교했을 때 기능이 거의 없다.
단, PORT의 차이가 존재함.
기능이 없다면 안좋다고 생각할 수 있지만 오히려 그게 장점이다. 기능이 없기 때문에 어엄청 복잡한 TCP 튜닝보다 UDP 튜닝이 훨씬 빠르고 쉽다!
참고)HTML과 HTTP의 차이는?
이름이 비슷해 두개를 붙여봤다.
HTML(Hypertext Markup Language) : 웹 페이지 제작을 위한 마크업 언어. 구조와 컨텐츠를 정의하여,
사용자가 볼 수 있는 화면
HTTP(Hypertext Transfer Protocol): 웹 페이지와 서버의 통신을 위한 프로토콜. 요청과 응답을 위주로 하며,
사용자가 볼 수 없는 화면
정리링크
정도이다.
즉 언어와 프로토콜의 차이로 이름이
HT
로 시작한다는 것 외엔 그 어떤 공통점도 없다.
이 둘의 과정을 요약하면.
요청
웹 브라우저에서 HTML을 렌더하여 화면이 표시된다.
클릭이나, 텍스트 입력을 하면 HTML은 HTTP 생성을 유도.
웹 브라우저에서 이벤트를 이용해 HTTP를 생성.
서버로 HTTP가 전송.
응답
서버에서 HTTP를 해석해 웹 브라우저로 전달.
서버에서 응답 HTTP와 자료를 패킷으로 만들어 웹 브라우저로 전달.
웹 브라우저에서 HTTP를 해석해 HTML을 렌더. (다시 1로)