본문 바로가기

이노베이션캠프/TIL

네트워크 기본 개념 정리

TCP 3-Way Handshake란?

TCP의 3-Way Handshake(3-웨이 핸드셰이크) 는 클라이언트와 서버가 안정적인 연결을 맺기 위해 수행하는 과정입니다.

과거 네트워크 환경에서는 데이터가 손실되거나 순서가 뒤바뀌는 문제가 자주 발생했습니다. 이러한 문제를 방지하기 위해 TCP는 연결을 설정할 때 양측이 서로의 상태를 확인하고 동기화하는 절차를 거칩니다.

과정

  1. SYN – 클라이언트가 서버에게 연결을 요청합니다.
  2. SYN + ACK – 서버는 요청을 받고, 연결 가능하다는 응답(ACK)과 동시에 자신도 연결을 시작하겠다는 신호(SYN)를 보냅니다.
  3. ACK – 클라이언트가 서버의 응답을 확인하고 다시 ACK를 보내 연결이 확립됩니다.

요약

👉 총 3번의 신호 교환을 통해 양측은 서로의 송수신 준비 상태를 확인하고, 이후 안정적으로 데이터를 주고받을 수 있게 됩니다.

 

 

OSI 7계층 정리

출처 https://shlee0882.tistory.com/110

 

OSI 7계층은 네트워크 통신을 이해하기 위해 국제표준화기구(ISO)에서 정의한 참조 모델입니다.

🌐 OSI 7계층 정리

계층역할단위예시핵심 포인트
7. 응용 계층 (Application) 사용자와 직접 맞닿은 서비스 제공 메시지 HTTP, FTP, SMTP, DNS 사용자가 보는 서비스, 앱과 네트워크의 접점
6. 표현 계층 (Presentation) 데이터 형식 변환, 암호화/압축 데이터 SSL/TLS, JPEG, UTF-8 상대방이 이해할 수 있는 형태로 변환
5. 세션 계층 (Session) 통신 세션 생성/유지/종료 데이터 RPC, NetBIOS 대화 연결 관리 (연결, 종료, 재시도)
4. 전송 계층 (Transport) 신뢰성 있는 데이터 전송, 오류 제어 세그먼트 / 데이터그램 TCP, UDP 데이터 순서 보장, 흐름 제어, 포트 번호
3. 네트워크 계층 (Network) 서로 다른 네트워크 간 데이터 전달 패킷 IP, ICMP, 라우터 목적지 주소 지정, 라우팅, 경로 선택
2. 데이터 링크 계층 (Data Link) 같은 네트워크 내 오류 없는 전송 프레임 Ethernet, ARP, 스위치 프레임 단위 전송, MAC 주소, 에러 검출
1. 물리 계층 (Physical) 전기/광학 신호로 데이터 전송 비트 케이블, 허브, Wi-Fi 실제 신호 전송, 전송 매체

 

1970 ~ 1980년대에는 이런 규칙이 없었습니다. 그래서 제조사 마다 독자적인 방식으로 네트워크를 만들었습니다. 그 결과 같은 회사 장비끼리는 통신되지만, 다른 회사 장비랑은 안되는 문제가 있었습니다. 심지어 케이블 방식이 달라지면, 운영체제와 애플리케션도 다 뜯어고쳐야 했습니다. 그래서 위와 같이 ISO가 공통 표준(OIS 모델) 을 만들고, 계층별 역할을 분리 했습니다.

 

이걸 코드로 이해하면 단일책임원칙에 따라 분리했다고 생각하면 되겠습니다. 그래서 이렇게 함으로써 기술 발전이 유연해지고 문제 해결이 쉬워졌습니다.

Socket 이란?

소켓은 네트워크 통신에서 두 개의 프로그램이 데이터를 주고받을 수 있도록 하는 소프트웨어적인 종착점(endpoint)입니다. 소켓은 특정 프로토콜, IP 주소, 포트 번호로 식별되며, 이를 통해 클라이언트와 서버 간의 양방향 통신이 가능하게 합니다.

 

*포트

포트는 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당받아야 하는 고유한 숫자입니다.한 호스트 내에서 네트워크 통신을 하고 있는 프로세스를 식별하기 위해 사용되는 값이므로, 같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수 없습니다. 즉, 같은 컴퓨터 내에서 프로그램을 식별하는 번호입니다.

 

양방향 통신이 가능한 이유

- 클라이언트가 소켓을 통해 서버에 연결 요청(connect)

- 서버는 자신 듣고 있는 소캣(listen)으로 요청을 받고, 새로운 연결 소켓을 생성

- 양쪽 소캣이 서로 상대방의 IP, 포트, 프로토콜 정보를 알고 있음

   * TCP라면 3-way handshake로 연결을 확립

- 연결이 성립되면 클라이언트와 서버는 서로의 소켓을 통해 데이터 송수신 가능

 

“누가 보내는지, 누가 받는지, 어떤 방식으로 보낼지”를 소켓이 알고 있기 때문에 양방향 통신이 가능한 것

 

웹 소켓이란?

 

즉, 웹 소켓은 TCP 소켓 위에 웹용 프로토콜(WebSocket Protocol)을 얹은 것이라고 볼 수 있습니다.

 

웹 소켓이 등장한 이유

  • 기존 HTTP 통신은 요청-응답 방식 (클라이언트가 요청해야 서버가 응답 가능)
  • 실시간 데이터 전송(채팅, 게임, 주식 시세)에는 적합하지 않음
  • 그래서 등장한 것이 웹 소켓: 한 번 연결되면 서버 ↔ 클라이언트가 자유롭게 데이터 전송 가능

 

특징

  1. 항상 연결 유지 → 서버에서 클라이언트로도 즉시 메시지 전송 가능
  2. 양방향 통신 → 채팅, 실시간 알림, 게임 동기화 가능
  3. 헤더가 간단 → HTTP 업그레이드 후, TCP처럼 데이터 프레임만 주고받음

 

소켓이 있는데 왜 웹 소켓이 필요한가?

 

1️⃣ 일반 TCP 소켓과 웹 환경 문제

  • TCP 소켓은 프로그램 ↔ 프로그램 통신이 가능합니다.
    • 서버와 클라이언트 프로그램이 OS 수준에서 소켓을 만들고 연결하면 양방향 데이터 송수신 가능.
  • 그런데 웹 브라우저에서 바로 TCP 소켓을 쓸 수는 없습니다.
    • 브라우저는 보안과 표준화 때문에 직접 TCP 소켓을 만들 수 없음
    • 그래서 기존 HTTP 요청-응답 방식으로만 통신 가능했죠.

 

2️⃣ HTTP의 한계

  • HTTP는 기본적으로 클라이언트 요청 → 서버 응답 구조입니다.
    • 서버가 먼저 클라이언트로 메시지를 보내는 것은 불가능 → 실시간 통신에 부적합
  • 실시간 게임, 채팅, 주식 시세처럼 서버에서 즉시 데이터를 보내야 하는 경우 문제 발생

 

3️⃣ 웹 소켓의 필요성

  • **웹 소켓(WebSocket)**은 브라우저에서도 TCP처럼 양방향 통신을 가능하게 만든 기술입니다.
  • 특징:
    1. 연결 한 번으로 지속 유지 → HTTP처럼 매번 요청할 필요 없음
    2. 서버 ↔ 클라이언트 자유롭게 데이터 전송 가능
    3. 브라우저에서 표준 API로 사용 가능 → 일반 사용자가 쉽게 실시간 앱 구현 가능