TIL - CS 지식 복기
2023.12.12 (TUE)
1️⃣ TCP, UDP
TCP와 UDP는 모두 데이터를 보내기 위해 사용하는 프로토콜이다.
TCP (Transmission Control Protocol)
인터넷 상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
일반적으로 TCP와 IP를 함께 사용하여, TCP/IP라고도 불린다.
- IP가 데이터의 배달을 처리한다면, TCP는 패킷을 추적 및 관리한다.
- IP는 Internet Protocol의 약자로, 인터넷에서 데이터 주소를 지정하고 라우팅하기 위한 요구 사항의 집합이다.
- TCP의 특징
- 연결 지향 방식으로 패킷 교환 방식을 사용한다.
- 3-way handshaking을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다. (그래서 연결 지향 방식이다.)
- 높은 신뢰성 (연결형 서비스이기 때문에)
- UDP보다 속도가 느리다.
- 연속성 보다 신뢰성 있는 전송이 중요할 때!
- TCP 서버의 특징
- 서버 소켓은 연결만을 담당한다.
- 연결 과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용된다.
- 이게 무슨 말이야? -> 왜 반환? -> 요청자가 close() 함수를 사용하면 호출 즉시 OS에게 소켓의 리소스를 반환하며 모든 스트림이 파기된다.
- 반환하면 재전송을 요청한다. -> 그러면 전체적인 속도가 느려지겠지?
- 이게 무슨 말이야? -> 왜 반환? -> 요청자가 close() 함수를 사용하면 호출 즉시 OS에게 소켓의 리소스를 반환하며 모든 스트림이 파기된다.
- 서버와 클라이언트는 1대1로 연결된다.
- 스트림 전송으로 전송 데이터의 크기가 무제한이다.
- 왜? -> TCP는 데이터를 세그먼트로 분할하여 패킷을 전송하는데, 이때 세그먼트의 크기에는 제한이 있지만, 스트림으로 전송되는 데이터의 크기에는 제한이 없다. 이는 TCP가 대량의 데이터를 효율적으로 전송하기 위해 사용되는 프로토콜이기 때문이다. -> 즉, TCP가 데이터를 조각내어 전송하는 방식 때문에 데이터의 크기에 대한 제한이 없다는 의미다.
- 패킷에 대한 응답을 해야하기 때문에, 성능이 낮다.
- 패킷이란, 인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을 효율적으로 하기 위해서 데이터를 여러 개의 조각들로 나누어 전송하는데, 그 조각을 패킷이라고 한다.
TCP는 패킷을 어떻게 추적하고 관리하나?
데이터는 패킷 단위로 나누어 같은 목적지(IP계층)으로 전송된다.A, B, C가 같은 목적지로 간다고 할 때, B가 분실되었다고 해보자.
하지만 목적지 입장에서는 A, B, C가 전부 필요한지 모른다.
그래서 1, 2, 3과 같은 마킹을 하여, 패킷의 분실 확인과 같은 처리를 하여 목적지에서 재조립을 한다.
이런 방식으로 TCP는 패킷을 추적하며, 나누어 보내진 데이터를 받고 조립한다.
UDP (User Datagram Protocol)
데이터를 ‘데이터그램’ 단위로 처리하는 프로토콜이다.
-> 데이터 그램이란, 독립적인 관계를 지니는 패킷 (자세한 설명은 아래에)UDP는 TCP와 달리 비연결형 프로토콜이다. 즉, 연결을 위한 논리적인 경로가 없다.
그래서 각각의 패킷은 다른 경로로 전송되며, 자동적으로 패킷은 독립적인 관계를 지니게 된다.
- UDP 특징
- 비연결형 서비스로 데이터그램을 방식을 제공한다.
- 정보를 주고 받을 때, 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
- 그래서 TCP보다 속도가 빠르다
- UDP의 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
- 대신, 신뢰성이 낮다.
UDP는 비연결형 서비스이기 때문에, TCP처럼 연결을 설정하고 해제하는 과정이 존재하지 않는다.
하지만, 그런 특징 때문에 신뢰성 있는 데이터의 전송을 보장하지 못한다.- UDP 서버의 특징
- UDP에는 연결 자체가 없다. -> connect() 함수 불필요 -> 서버 소켓과 클라이언트 소켓의 구분이 없다.
- 소켓 대신 IP를 기반으로 데이터를 전송한다.
- 서버와 클라이언트는 1대1, 1대N, N대M 등으로 연결될 수 있다.
- 데이터그램(메시지) 단위로 전송되며 크기는 65535 바이트이다. (크기가 초과되면 잘라서 보낸다.)
- 흐름제어(flow control)가 없어서 패킷이 제대로 전송되었는지, 오류가 없는지 확인 불가
- 신뢰성보단 성능이 중요시 되는 경우 사용
흐름제어(flow control)는 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것이다.
- UDP 특징
2️⃣ 객체와 클래스 차이
객체 : 자신 고유의 속성을 가지는 물리적, 추상적인 모든 대상을 일컫는다.
클래스 : 객체들을 소프트웨어 내에서 구현하기 위해 만든 설계도이다.
3️⃣ 사용자가 도메인을 입력했을때, 웹페이지가 불러와지는 과정
1. 사용자가 웹 브라우저에 도메인 주소(예: www.example.com)를 입력한다.
2. 브라우저는 입력된 도메인 주소를 DNS 서버로 보낸다. (DNS 서버는 도메인 주소를 해당 도메인의 IP주소로 변환해주는 역할을 한다.)
3. DNS 서버는 도메인 주소에 대응하는 IP 주소를 찾아 브라우저에게 응답한다.
4. 브라우저는 IP 주소를 통해 웹서버에 접속을 시도한다.
5. 웹 서버는 해당 도메인에 대한 요청을 받고, 요청된 웹페이즈를 찾아서 브라우저에게 전송한다.
6. 브라우저는 받은 웹페이지를 해석하여 화면에 표시한다.