프로토콜(Protocol)
🍀
프로토콜은 일종의 언어와 같습니다. 특정 프로토콜로 통신을 진행할 때 정해진 문법으로 통신을 진행해야하기 때문이죠. HTTP를 예로, A라는 데이터를 요청할 때에는 GIVE A, SEND A 등이 아닌 GET A 라고 요청을 해야합니다. 이번 시간과 다음시간을 통해 프로토콜과 HTTP/HTTPS에 대해서 공부해봅시다.
💡 이번에 배울 내용은 다음과 같습니다.
1. OSI 7계층, 프로토콜
2. TCP와 UDP
3. TCP와 IP의 연계
4. 3 Way-Handshake
5. 4 Way-Handshake
6. IPv4, IPv6
7. DNS
8. 포트
9. 포트포워딩
1. OSI 7계층, 프로토콜
OSI(Open Systems In terconnection) 7계층은 네트워크 통신을 7개의 계층으로 나눈 구조입니다.
각 계층은 서로 다른 기능을 담당하며, 상위 계층은 하위 계층의 서비스에 의존합니다.
- 물리 계층 (Physical Layer): 실제 데이터 전송을 위한 물리적 매체.
- 케이블, Wi-Fi, 전기적 신호 (Hub, 리피터) - 데이터 링크 계층 (Data Link Layer): 데이터 패킷을 프레임으로 변환하고 오류 검출.
- 이더넷, MAC 주소, ARP (스위치, 브릿지) - 네트워크 계층 (Network Layer): 데이터의 라우팅과 IP 주소 지정.
- IP 주소 지정, 라우터, IP 프로토콜: IP ICMP IGMP (라우터) - 전송 계층 (Transport Layer): 데이터 흐름 관리, TCP/UDP.
- 게이트웨이 - 세션 계층 (Session Layer): 세션 생성과 관리.
- RPC (Remote Procedure Call), NetBIOS, SQL 네트워크 통신 - 표현 계층 (Presentation Layer): 데이터의 형식화, 암호화/복호화.
- JPEG, GIF, SSL/TLS (보안 통신), ASCII 텍스트, XML, JSON - 응용 계층 (Application Layer): 사용자와 상호작용하는 프로토콜들 (HTTP, FTP 등).
- HTTP, HTTPS, FTP, SMTP, POP3, IMAP, DNS, SNMP, Telnet
💡 물데네전세표응 이런식으로 암기 하기도 합니다.
OSI 7계층 모델은 네트워크 통신을 설명하는데 유용하지만, 실제 인터넷과 많은 네트워크 시스템에서는 TCP/IP 4계층 모델을 더 많이 사용하기도 합니다.
OSI 7계층과 TCP/IP 4계층
응용 계층 (Application Layer) | 응용 계층 (Application Layer) |
표현 계층 (Presentation Layer) | — |
세션 계층 (Session Layer) | — |
전송 계층 (Transport Layer) - 세그먼트 | 전송 계층 (Transport Layer) |
네트워크 계층 (Network Layer) - 패킷 | 인터넷 계층 (Internet Layer) |
데이터 링크 계층 (Data Link Layer) - 프레임 | 링크 계층 (Link Layer) |
물리 계층 (Physical Layer) - 비트 | — |
💡 프로토콜(Protocol)은 네트워크 상에서 데이터를 송수신할 때, 그 과정이 원활하고 정확하게 이루어지도록 규정한 통신 규약입니다. 즉, 컴퓨터나 네트워크 장비 간에 데이터를 주고받기 위한 "언어"이자 "규칙"으로, 두 장치가 서로 이해하고 교환할 수 있도록 도와주는 역할을 합니다.
2. TCP와 UDP
TCP와 UDP는 전송 계층에서 데이터를 송수신할 때 사용되는 두 가지 주요 프로토콜으로 네트워크에서 데이터가 전달되는 방식과 그 신뢰성의 차이로 구분됩니다. 각 프로토콜은 특정 상황에서 더 효율적으로 동작하며, 다양한 응용 프로그램에서 각각의 특성에 맞게 사용됩니다.
TCP (Transmission Control Protocol): 연결지향형 프로토콜로, 데이터의 순서와 무결성을 보장합니다. 3-way handshake를 통해 연결을 설정하고, 데이터가 정확하게 도달할 수 있도록 확인 응답을 주고받는다.
장점: 연결 설정을 통해 데이터 전송의 신뢰성을 보장합니다. 데이터는 순서대로 전송되며, 오류 검출 및 재전송 기능을 통해 데이터 손실을 최소화합니다. 예를 들어, 웹 브라우징이나 파일 전송과 같이 데이터의 정확성이 중요한 애플리케이션에서 TCP를 사용하면 데이터의 무결성을 유지할 수 있습니다. 헤더 정보를 통해 데이터의 손실이나 오류를 감지하고, 필요에 따라 재전송을 수행합니다.
단점: 연결 설정 과정에 오버헤드가 발생하여 UDP보다 느린 속도를 갖습니다. 또한, 연결 관리를 위한 추가적인 오버헤드로 인해 자원 소모가 발생할 수 있습니다. 실시간성이 요구되는 애플리케이션에는 적합하지 않을 수 있습니다.
UDP (User Datagram Protocol): 비연결형 프로토콜로, 순서나 오류 확인을 하지 않습니다. 대신 빠른 전송 속도가 필요할 때 사용됩니다.
장점: 연결 설정 과정이 없으므로 TCP보다 빠른 전송 속도를 제공합니다. 간결한 헤더로 인해 오버헤드가 적습니다. 온라인 게임이나 실시간 스트리밍과 같이 빠른 응답 속도가 중요한 애플리케이션에 적합합니다. 데이터 손실에 대한 우려가 적거나, 손실된 데이터가 큰 문제가 되지 않는 상황에서 효율적입니다.
단점: 데이터 전송의 신뢰성이 낮습니다. 데이터 손실이나 오류가 발생하더라도 자동으로 재전송되지 않으므로 데이터 무결성을 보장할 수 없습니다. 데이터가 순서대로 전달되지 않을 수도 있습니다. 따라서, 데이터의 정확성이 매우 중요한 애플리케이션에는 적합하지 않습니다.
TCP와 UDP의 비교
연결 형식 | 연결 지향형 (Connection-Oriented) | 비연결형 (Connectionless) |
신뢰성 | 신뢰성 있음 (순서 보장, 오류 복구) | 신뢰성 없음 (순서 보장 안 함) |
속도 | 느림 (오류 검출 및 복구가 있기 때문) | 빠름 (오버헤드가 적음) |
흐름 제어 | 있음 (윈도우 크기, 혼잡 제어 등) | 없음 |
데이터 전송 방식 | 데이터 순서대로 전송, 확인 응답 필요 | 데이터 순서 보장 안 됨, 확인 응답 없음 |
사용 예 | 웹 브라우징, 파일 전송, 이메일 송수신 | 실시간 스트리밍, VoIP, DNS, 온라인 게임 |
3. TCP와 IP의 연계
- IP (Internet Protocol)는 네트워크 계층에서 데이터를 전송하는 방식, 즉, 패킷을 주소지로 전달하는 역할을 합니다.
- TCP는 전송 계층에서 데이터의 정확한 전송을 담당하며, IP와 결합하여 인터넷 상에서 데이터를 올바른 순서대로 전달하고 오류를 수정합니다.
4. 3-Way Handshake
3-Way Handshake는 TCP 연결을 설정하는 과정으로, 클라이언트와 서버 간에 안정적이고 신뢰성 있는 데이터 통신을 시작하기 전에 반드시 거쳐야 하는 절차입니다. 이 과정은 연결 지향형 프로토콜인 TCP가 데이터를 정확하고 신뢰성 있게 전송하기 위해 필요합니다.
<3-Way Handshake 과정>
1. SYN (Synchronize): 클라이언트 -> 서버
- 클라이언트가 서버에 연결을 요청하려고 할 때 첫 번째로 송신하는 메시지입니다.
- 클라이언트는 서버와의 연결을 시작하기 위해 SYN 플래그가 설정된 TCP 세그먼트를 서버로 보냅니다.
- 클라이언트는 서버와의 연결을 위한 시퀀스 번호(ISN)를 선택하여 보냅니다.
- 이 시퀀스 번호는 이후의 데이터 전송에서 패킷을 식별하고, 순서를 보장하는 데 사용됩니다.
2. SYN-ACK (Synchronize + Acknowledge): 서버 -> 클라이언트
- 서버는 클라이언트의 연결 요청을 수신하고, 이를 확인하고 응답하는 단계입니다.
- 서버는 클라이언트가 보낸 SYN 패킷을 확인하고, SYN-ACK 패킷을 보냅니다.
- SYN: 서버도 클라이언트와의 연결을 요청 / ACK: 서버가 클라이언트의 요청을 확인
3. ACK (Acknowledge): 클라이언트 -> 서버
- 클라이언트는 서버가 보낸 SYN-ACK 패킷을 수신하고, 이를 **확인 응답(ACK)**으로 서버에 보냅니다.
- 클라이언트는 서버가 보낸 SYN-ACK에 대해 ACK 응답을 보내고, 연결을 완료합니다.
- 클라이언트는 서버의 시퀀스 번호 + 1을 ACK 번호로 설정하여 서버에게 응답을 보냅니다.
5. 4 Way-Handshake
4-Way Handshake는 TCP 연결을 종료할 때 사용되는 절차입니다. TCP는 연결 지향형 프로토콜로, 데이터 전송이 끝난 후 양쪽에서 안전하게 연결을 종료해야 합니다. 이 과정은 양방향 데이터 전송을 관리하며, 데이터가 완전히 전송되었음을 확인하고 연결을 해제합니다.
<4-Way Handshake 과정>
TCP 연결 종료는 FIN(Finish)과 ACK(Acknowledgment) 플래그를 사용하여 이루어집니다.
1. FIN (Finish): 클라이언트 -> 서버
- 연결을 종료하려는 측(예: 클라이언트)은 FIN 플래그가 설정된 패킷을 전송합니다.
- 이 패킷은 연결을 종료하고 싶다는 의사를 상대방에게 알립니다.
- 클라이언트가 "나는 더 이상 데이터를 보내지 않겠다"고 서버에 알림.
2. ACK (Acknowledgment): 서버 -> 클라이언트
- 연결 종료 요청(FIN)을 받은 측(예: 서버)은 요청을 확인했다는 의미로 ACK 플래그가 설정된 패킷을 클라이언트로 보냅니다.
- 이 패킷은 "FIN 요청을 받았다"는 확인 메시지입니다.
3. FIN (Finish): 서버 -> 클라이언트
- 서버는 클라이언트로 보낼 데이터를 모두 전송한 후, 자신의 연결을 종료하겠다는 의사를 클라이언트에게 알립니다.
- 이를 위해 FIN 플래그가 설정된 패킷을 클라이언트로 보냅니다.
예시: 서버가 "나도 더 이상 데이터를 보내지 않겠다"고 클라이언트에 알림.
4. ACK (Acknowledgment): 클라이언트 -> 서버
- 클라이언트는 서버의 FIN 요청을 확인한 후, ACK 플래그가 설정된 패킷을 서버로 보냅니다.
- 이 단계에서 연결이 완전히 종료됩니다. 클라이언트와 서버 간의 모든 연결이 해제됩니다.
- 클라이언트가 "요청을 확인했습니다. 연결을 종료합니다."라고 응답.
6. IPv4, IPv6
IPv4와 IPv6는 IP (인터넷 프로토콜)의 두 가지 주요 버전으로, 네트워크 상의 장치들이 서로 데이터를 주고받을 수 있도록 주소를 할당하고 라우팅하는 역할을 합니다. 각각의 버전은 인터넷의 발전과 요구 사항을 충족시키기 위해 설계되었으며, 주요 차이점과 특징을 가지고 있습니다.
IPv4는 인터넷에서 장치 간 데이터를 전송하기 위해 사용되는 가장 기본적인 인터넷 프로토콜입니다. 1980년대 초반에 개발되어 오늘날까지 전세계 널리 사용되고 있는 IP의 네 번째 버전입니다.
- 주소 길이: 32비트 (예: 192.168.0.1)
- 주소 공간: 약 43억 개. 주소 부족 문제 발생.
- 특징: NAT 사용, 보안 기능 부족, 가변 길이 헤더(20~60바이트).
- 한계: 장치 증가로 인한 주소 부족 문제.
IPv6는 인터넷의 폭발적인 확장으로 인해 발생한 IPv4 주소 부족 문제를 해결하고, 향상된 보안과 효율성을 제공하기 위해 설계된 차세대 인터넷 프로토콜입니다. IPv6는 기존 IPv4와의 비호환성을 극복하기 위해 병행 사용 및 점진적인 전환이 진행 중입니다.
- 주소 길이: 128비트 (예: 2001:db8::1)
- 주소 공간: 약 340언디시질리언. 사실상 무한.
- 특징: IPsec 기본 통합(보안), NAT 불필요, 자동 주소 설정, 고정 길이 헤더(40바이트).
- 장점: 충분한 주소, 간단한 라우팅, 향상된 성능과 보안.
IPv4와 IPv6의 차이
주소 길이 | 32비트 | 128비트 |
주소 공간 | 약 43억 개 | 거의 무한 |
보안 | 추가 설정 필요 | 기본 지원 (IPsec 포함) |
NAT 사용 | 필요 | 불필요 |
라우팅 | 복잡 | 간단 |
현재 IPv6는 주소 부족 문제를 해결하고 인터넷 성능을 향상시키기 위해 IPv4를 대체 중이며,
두 프로토콜은 공존하면서 점차 IPv6로 전환되고 있습니다.
7. DNS
DNS (Domain Name System)은 도메인 이름을 IP 주소로 변환해주는 시스템입니다. 사람들이 기억하기 쉬운 도메인 이름을 입력하면, DNS가 이를 네트워크 장치가 이해할 수 있는 IP 주소로 바꿔주는 역할을 합니다. 예를 들어, 웹사이트 주소를 입력하면 DNS 서버가 해당 도메인의 IP 주소를 찾아줍니다.
- 역할:
- 도메인 이름을 IP 주소로 변환: 사람이 이해하기 쉬운 도메인(www.example.com)을 네트워크가 이해하는 IP 주소(192.168.1.1)로 변환.
- 역방향 조회: IP 주소를 도메인 이름으로 변환.
- 동작 과정:
- 사용자가 도메인을 입력 → 로컬 DNS 캐시 확인 → 로컬 DNS 서버로 요청.
- 루트 네임서버 → TLD 네임서버 → 권한 있는 네임서버로 계층적으로 쿼리를 진행.
- 최종 IP 주소를 반환하여 사용자가 서버에 연결.
- 구성 요소:
- DNS 리졸버: 사용자 요청을 처리.
- DNS 서버:
- 루트 네임서버: 최상위 도메인 정보 제공.
- TLD 네임서버: 특정 TLD(.com, .org 등) 관리.
- 권한 있는 네임서버: 도메인의 IP 주소 반환.
- DNS 레코드: A(IPv4), AAAA(IPv6), CNAME(별칭), MX(메일), TXT(인증 정보) 등.
- 특징:
- 분산 구조: 전 세계적으로 분산된 계층적 시스템.
- 캐싱: 요청 결과를 저장해 빠른 응답.
- 보안: DNSSEC, DNS over HTTPS 등으로 강화.
8. 포트
포트(Port)는 네트워크에서 데이터를 전송할 때, 응용 프로그램이나 서비스를 식별하기 위해 사용되는 논리적인 숫자입니다. IP 주소가 네트워크 상의 장치를 식별하는 역할을 한다면, 포트 번호는 해당 장치 내에서 어떤 서비스나 애플리케이션이 데이터를 처리할지를 결정합니다.
포트의 기본 개념
- IP 주소 + 포트 번호
- 네트워크 상에서 통신하려면 IP 주소로 대상 장치를 식별하고, 포트 번호로 해당 장치 내에서 특정 서비스나 애플리케이션을 지정합니다.
- 예: 192.168.1.10:80
- IP 주소: 192.168.1.10 (장치 식별)
- 포트 번호: 80 (웹 서버 서비스)
- 16비트 숫자
- 포트 번호는 16비트 정수로 표현되며, 0부터 65535까지의 범위를 가집니다.
- 포트 번호는 TCP와 UDP에서 각각 독립적으로 관리됩니다.
포트의 동작 방식
- 클라이언트 요청
- 클라이언트가 서버에 요청을 보낼 때, 서버의 IP 주소와 포트 번호를 지정하여 데이터를 전송합니다.
- 예: 웹 브라우저가 HTTP 요청을 보낼 때, 서버의 포트 번호 80으로 데이터를 전송.
- 서버 응답
- 서버는 클라이언트의 요청을 받은 후, 클라이언트의 소스 포트로 응답을 전송합니다.
- 클라이언트는 이 소스 포트를 통해 데이터를 수신합니다.
주요 포트 번호
20, 21 | FTP | 파일 전송 |
22 | SSH | 원격 접속 |
23 | Telnet | 텍스트 기반 원격 접속 |
25 | SMTP | 이메일 전송 |
53 | DNS | 도메인 이름 변환 |
80 | HTTP | 웹 페이지 |
110 | POP3 | 이메일 수신 |
143 | IMAP | 이메일 수신 |
443 | HTTPS | 보안 웹 페이지 |
3306 | MySQL | 데이터베이스 연결 |
9. 포트포워딩
포트 포워딩(Port Forwarding)은 외부 네트워크(인터넷)에서 특정 내부 네트워크(로컬)의 장치나 서비스에 접근할 수 있도록 포트를 열어주는 기술입니다. 이를 통해, 외부 사용자가 특정 장치나 애플리케이션에 직접 연결할 수 있도록 라우터나 방화벽이 트래픽을 전달합니다.
일반적으로 내부 네트워크는 NAT(Network Address Translation)라는 기술을 통해 공용 IP 하나를 여러 장치가 공유하는 방식으로 구성됩니다.이로 인해 내부 장치들은 인터넷에서 직접적으로 접근할 수 없습니다. 포트 포워딩은 이러한 NAT 환경에서, 외부 요청을 내부 네트워크의 특정 장치로 라우터가 전달하도록 설정하는 과정입니다.
포트 포워딩의 주요 목적
- 내부 네트워크 서비스 공개:
- 내부 네트워크의 장치(예: CCTV, 게임 서버, 웹 서버)에 외부에서 접근 가능하게 만듭니다.
- 예: 집에 있는 CCTV 카메라를 외부에서 모니터링하거나, 개인 웹 서버에 접속.
- 특정 애플리케이션 트래픽 전달:
- 외부에서 오는 요청을 내부 네트워크의 특정 애플리케이션으로 라우팅합니다.
- 예: FTP 서버나 게임 서버에 외부 클라이언트가 연결.
- NAT(Network Address Translation) 해결:
- NAT 환경에서는 로컬 네트워크의 장치가 공용 IP를 공유하기 때문에 외부에서 직접 연결할 수 없습니다. 포트 포워딩은 이를 해결합니다.
- 리모트 액세스:
- 외부에서 내부 네트워크에 원격 접속을 가능하게 만듭니다.
- 예: 회사 네트워크에 접속해 내부 데이터베이스를 사용하는 경우.
'KnockOn > 1주차 TIL' 카테고리의 다른 글
[1주차 TIL] KnockOn Bootcamp - 프록시 (1) | 2024.12.07 |
---|---|
[1주차 TIL] KnockOn Bootcamp - 패킷 (0) | 2024.12.07 |
[1주차 TIL] KnockOn Bootcamp - 쿠키와 세션 (0) | 2024.12.07 |
[1주차 TIL] KnockOn Bootcamp - HTTP / HTTPS (0) | 2024.12.07 |
[1주차 TIL] KnockOn Bootcamp - 웹이란? (0) | 2024.12.04 |