TCP/IP 4계층 모델
TCP/IP(Transmission Control Protocol/Internet Protocol) 모델은 네트워크 통신을 이해하기 위한, 4단계로 구성된 모델입니다. 각 계층은 특정한 역할을 수행하며, 데이터가 네트워크를 통해 전송될 때 이 계층들을 거쳐 이동하게 됩니다.
계층 간의 독립성을 유지하여 하나의 계층이 변경되더라도 다른 계층에 영향을 주지 않도록 설계되었기 때문에, 시스템의 설계, 구현, 테스트, 유지보수 과정에서 많은 이점을 제공합니다.
*프로토콜이란 네트워크에서 데이터 통신을 할 때 규정된 일련의 규칙과 절차
계층 | 주요 기능 | 주요 프로토콜 |
4계층: 애플리케이션 계층 | 사용자 서비스 제공 | HTTP, FTP, SMTP |
3계층: 전송 계층 | 신뢰성 있는 데이터 전송 | TCP, UDP |
2계층: 인터넷 계층 | 패킷 라우팅 | IP |
1계층: 네트워크 인터페이스계층 (= 링크 계층) |
물리적 네트워크 접속 | Ethernet, Wi-Fi |
1. 네트워크 인터페이스 계층 (Network Access Layer)
- 역할: 물리적인 네트워크에 직접 연결하여 데이터를 전송하고 수신하는 가장 하위 계층입니다.
- 주요 기능:
- 물리적 매체를 통한 데이터 전송 = 네트워크 장치(예: 이더넷, Wi-Fi)와의 통신을 담당
- MAC 주소를 이용한 데이터 링크
2. 인터넷 계층 (Internet Layer)
- 역할: 데이터를 패킷으로 나누어 목적지로 라우팅, 네트워크 간에 데이터 전달
- 주요 프로토콜: IP
- 주요 기능:
- IP 주소를 이용한 라우팅
- 네트워크 간 연결
3. 전송 계층 (Transport Layer)
- 역할: 송신자와 수신자 간의 데이터 전송을 관리하며, 오류 검출 및 재전송을 수행합니다. (데이터의 신뢰성 있는 전송)
- 주요 프로토콜: TCP, UDP
- 주요 기능:
- 데이터 세그먼트화
- 연결 설정 및 해제
- 오류 검출 및 재전송
4. 애플리케이션 계층 (Application Layer) , 응용 계층
- 역할: 사용자가 직접 사용하는 서비스(웹 브라우징, 이메일 등)를 지원하는 가장 상위 계층입니다. = 사용자와 네트워크 간의 인터페이스를 제공
- 주요 프로토콜: HTTP, FTP, SMTP 등
- 주요 기능:
- 사용자 데이터를 네트워크에 맞는 형식으로 변환
- 네트워크 서비스에 접속하여 데이터를 주고받음
TCP와 UDP의 차이점
TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 네트워크 통신에서 데이터를 전송하는 데 사용되는 두 가지 주요 프로토콜입니다. 둘 다 전송 계층에서 동작하며, 데이터의 신뢰성, 속도, 연결 방식 등에서 차이를 보입니다.
특징 | TCP | UDP |
3-way handshake | O | X |
연결 | 연결 지향형 | 비연결형 |
신뢰성 | 높음 | 낮음 |
순서 보장 | 예 | 아니요 |
흐름 제어 | 예 | 아니요 |
혼잡 제어 | 예 | 아니요 |
속도 | 느림 | 빠름 |
오버헤드 | 높음 | 낮음 |
TCP (Transmission Control Protocol)
- 연결 지향형: 데이터를 전송하기 전에 송신자와 수신자 간에 연결을 설정하고, 데이터 전송이 완료되면 연결을 해제합니다.
- 신뢰성: 데이터 전송 시 오류 검출 및 재전송 기능을 제공하여 데이터가 정확하게 전달되도록 합니다.
- 순서 보장: 데이터를 순서대로 전송하고 수신합니다.
- 흐름 제어: 송신 속도를 조절하여 수신자가 감당할 수 있는 속도로 데이터를 전송합니다.
- 혼잡 제어: 네트워크 혼잡 발생 시 데이터 전송 속도를 조절하여 네트워크 성능을 유지합니다.
주요 사용 사례:
- 웹 브라우징 (HTTP)
- 이메일 (SMTP)
- 파일 전송 (FTP)
3-Way Handshake는 TCP 통신에서 클라이언트와 서버가 연결을 맺기 위해 거치는 과정을 말합니다. 마치 서로 악수를 하듯이, 3번의 메시지 교환을 통해 양측이 연결 준비가 완료되었음을 확인하고 안정적인 통신을 시작하는 것이죠.
왜 3-Way Handshake가 필요할까요?
- 연결의 신뢰성: 양측이 모두 연결을 원하고 준비가 되었는지 확인합니다.
- 데이터 전송 준비: 양측이 데이터를 주고받을 수 있는 상태인지 확인합니다.
- 순서 보장: 데이터가 순서대로 전달될 수 있도록 초기 설정을 합니다.
3-Way Handshake 과정
- SYN 패킷 전송: 클라이언트가 서버에 연결 요청을 보냅니다. 이 패킷에는 시퀀스 번호(Sequence Number)가 포함되어 있습니다.
- SYN+ACK 패킷 전송: 서버는 클라이언트의 요청을 받고, 연결에 동의하며 자신만의 시퀀스 번호를 포함한 SYN+ACK 패킷을 보냅니다.
- ACK 패킷 전송: 클라이언트는 서버의 응답을 받고, 자신도 연결에 동의하며 서버의 시퀀스 번호를 확인하는 ACK 패킷을 보냅니다.
이렇게 3번의 메시지 교환을 통해 클라이언트와 서버는 안정적인 연결을 설정하고, 데이터를 주고받을 준비를 마칩니다.
3-Way Handshake의 중요성
- 안정적인 통신: 연결이 제대로 설정되었는지 확인하여 데이터 손실이나 오류를 방지합니다.
- 효율적인 자원 관리: 불필요한 연결을 방지하고, 시스템 자원을 효율적으로 사용할 수 있도록 합니다.
- 보안: 연결 요청에 대한 응답을 확인하여 무작위적인 연결 시도를 방지할 수 있습니다.
3-Way Handshake 예시 (간략화)
- 클라이언트: "안녕하세요, 연결하고 싶습니다. (SYN)"
- 서버: "네, 연결해 드릴게요. (SYN+ACK)"
- 클라이언트: "네, 연결되었습니다. (ACK)"
4-Way Handshake (연결 해제)
연결을 종료할 때는 4-Way Handshake라는 과정을 거칩니다. 이는 3-Way Handshake와 유사하지만, 연결을 종료하기 위한 추가적인 메시지 교환이 필요합니다.
3-Way Handshake는 TCP 통신에서 매우 중요한 개념이며, 네트워크 통신을 이해하는 데 필수적인 요소입니다.
UDP (User Datagram Protocol)
- 비연결형: 데이터를 전송하기 전에 연결을 설정할 필요가 없으며, 각 데이터 패킷(데이터그램)을 독립적으로 전송합니다.
- 신뢰성이 낮음: 데이터 전송 시 오류 검출 기능은 제공하지만, 재전송은 보장하지 않습니다.
- 순서 보장 X: 데이터가 순서대로 전달되지 않을 수 있습니다.
- 빠른 전송: 연결 설정 과정이 없고 오류 검사 기능이 간단하기 때문에 TCP보다 빠른 전송 속도를 제공합니다.
주요 사용 사례:
- 실시간 스트리밍 (VoIP, 온라인 게임)
- DNS (Domain Name System)
- TFTP (Trivial File Transfer Protocol)
왜 UDP에서는 3-way handshake가 필요하지 않을까요?
- 비연결형 프로토콜: UDP는 연결을 설정하는 과정 없이 데이터를 패킷 단위로 바로 전송하는 비연결형 프로토콜입니다.
- 신뢰성을 포기하고 속도를 추구: TCP는 데이터의 신뢰성을 보장하기 위해 3-way handshake를 거치고, 데이터 전송 과정에서 오류 검출 및 재전송 등의 과정을 수행합니다. 반면 UDP는 이러한 과정을 생략하여 빠른 전송 속도를 제공하지만, 데이터 손실이나 순서 혼란이 발생할 수 있습니다.
HTTP와 HTTPS의 차이점
HTTP와 HTTPS는 TCP/IP 계층 중 애플리케이션 계층에서 사용되는,
둘 다 웹 서버와 클라이언트(웹 브라우저 등) 간의 통신을 위한 기본적인 규칙을 정의하는 프로토콜 이지만 보안 측면에서 큰 차이가 있습니다.
HTTP (Hypertext Transfer Protocol)
- 일반적인 웹 통신: 인터넷에서 가장 널리 사용되는 프로토콜로, 웹 페이지를 요청하고 받는 기본적인 기능을 제공합니다.
- 비보안: HTTP로 전송되는 데이터는 암호화되지 않은 평문 상태로 네트워크를 통해 전송되므로, 중간에 가로채기가 발생하면 개인 정보나 비밀번호 등이 노출될 위험이 있습니다.
- 80번 포트: 일반적으로 80번 포트를 사용합니다.
HTTPS (Hypertext Transfer Protocol Secure)
- 안전한 웹 통신: HTTP에 보안 계층(SSL/TLS)을 추가하여 데이터를 암호화하여 전송하는 프로토콜입니다.
- 보안: HTTPS를 사용하면 데이터가 암호화되어 전송되므로, 중간에 가로채더라도 내용을 해독할 수 없습니다.
- 인증: 웹 서버의 신뢰성을 확인하는 인증서를 사용하여, 사용자가 안전한 웹사이트인지 확인할 수 있습니다.
- 443번 포트: 일반적으로 443번 포트를 사용합니다.
보안 측면에서 단점이 있는 HTTP를 여전히 사용하는 경우가 있는 이유는 다양한 요인이 복합적으로 작용하기 때문입니다.
HTTP를 사용하는 이유:
- 기존 시스템과의 호환성: 많은 기존 시스템들이 HTTP 기반으로 구축되어 있기 때문에, 모든 시스템을 HTTPS로 전환하는 데에는 시간과 비용이 많이 소요될 수 있습니다.
- 성능: HTTPS는 암호화 과정을 거치기 때문에 HTTP에 비해 처리 속도가 느릴 수 있습니다. 특히, 모바일 환경이나 네트워크 환경이 좋지 않은 경우 성능 저하가 더욱 두드러질 수 있습니다.
- 비용: 인증서 발급 및 관리, 서버 설정 변경 등 HTTPS 도입에 따른 추가적인 비용이 발생할 수 있습니다.
- 단순한 서비스: 보안이 크게 요구되지 않는 간단한 서비스의 경우, HTTP를 사용하는 것이 더 효율적일 수 있습니다.
HTTP 사용 시 주의해야 할 점:
- 민감한 정보 취급 자제: 비밀번호, 신용카드 정보 등 개인정보나 금융 정보를 다루는 서비스에서는 절대 HTTP를 사용해서는 안 됩니다.
- 보안 강화 조치: HTTP를 사용하더라도, 웹 애플리케이션 방화벽 (WAF) 등을 통해 보안을 강화할 수 있습니다.
- HTTPS 전환 계획: 장기적으로는 HTTPS로 전환하는 계획을 수립하고, 단계적으로 시스템을 개선해 나가는 것이 좋습니다.
결론적으로, HTTP는 보안에 취약하지만, 기존 시스템과의 호환성, 성능, 비용 등의 이유로 여전히 사용되는 경우가 있습니다. 하지만, 보안이 중요한 서비스라면 HTTPS를 사용하는 것이 필수적이며, HTTP를 사용하는 경우에도 보안에 대한 철저한 관리가 필요합니다.
'개발 공부 일지 > CS' 카테고리의 다른 글
쿠키, 로컬, 세션 스토리지 (0) | 2024.09.02 |
---|---|
브라우저 렌더링 과정 (0) | 2024.09.02 |
RESTful API (0) | 2024.08.30 |
SOLID 원칙: 객체지향 설계 원칙 (0) | 2024.08.30 |
[5.3.5] 맵 - [5.3.7] 해시 테이블 (0) | 2024.08.27 |