- 네트워크 프로토콜(Network Protocol) 정리2024년 07월 31일 18시 27분 45초에 업로드 된 글입니다.작성자: 방세연
🌐protocol
서로 다른 시스템 및 기기 간 데이터 교환을 원활히 하기 위해 표준화된 통신규약
구문
(Syntax)의미
(Semantic)타이밍
(Timing)송수신 데이터 형식과 코딩, 신호레벨 제어 정보
(조정, 에러 처리)속도 조절,
순서 관리프로토콜은 OSI 7계층을 따른다.
물리 계층
Physical Layer물리 신호를 전송하기 위한 계층 Ethernet, USB, HDMI 데이터 링크 계층
Data Link Layer물리 계층에서 Bit가 전송됨
이 Bit를 물리적인 매체에 오류 없이 전달하는 계층Ethernet, Wi-Fi, PPP 네트워크 계층
Network Layer데이터 패킷의 경로 선택
데이터 패킷의 라우팅 관리IP, ICMP, OSPF 전송 계층
Transport Layer데이터 전송의 신뢰성 & 연결 관리를 제공
Port 번호를 통해 애플리케이션 간 통신 관리TCP, UDP 세션 계층
Session Layer데이터 교환의 세션 설정 & 관리 & 종료
세션 복원 및 다중 세션 관리 기능NetBIOS, SAP, SDP, NWLink 표현 계층
Presentation Layer데이터 인코딩, 암호화 및 변환 처리
데이터 형식 및 구문ASCII, MPEG, JPEG, MIDI 응용 계층
Application Layer최종 사용자와 상호작용하기 위한 계층
다양한 응용 프로토콜 및 서비스 제공HTTP, FTP, SMTP, DNS, SSH, WebSocket
주요 프로토콜
🍕TCP
주요 특징 :
인터넷에서 데이터를 안정적으로 전송하기 위한 프로토콜 ( 전송 제어 프로토콜)
데이터를 패킷으로 분할하여 전송하고 수신 장치에 성공적으로 전달하는 역할을 함
The three main stages of this process are as follows:
- Connection establishment ( 연결 설정 )
- Data transmission ( 데이터 전송 )
- Connection termination ( 연결 종료 )
TCP Header각 필드는 특정한 목적을 가지고 있다.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | Reser-| Control | | | Offset| ved | Flags | Window | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options (if data offset > 5) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Source Port (16 bits): 송신 측 포트 번호
Destination Port (16 bits): 수신 측 포트 번호
Sequence Number (32 bits): 송신한 데이터의 순서
Acknowledgment Number (32 bits): 수신 측이 다음에 받을 것으로 기대하는 데이터의 순서
Data Offset (4 bits): TCP 헤더의 크기를 32비트 워드 단위로 나타냄 (최소값은 5)
Control Flags (9 bits): 제어 플래그. 각 비트는 특정한 제어 정보를 나타냄
NS CWR ECE URG ACK PSH RST SYN FIN ECN-nonce - concealment protection Congestion Window Reduced ECN-Echo Urgent pointer field significant Acknowledgment field significant Push Function Reset the connection Synchronize sequence numbers No more data from sender Window (16 bits): 수신 윈도우 크기, 즉 수신 측이 한 번에 받을 수 있는 데이터의 크기
Checksum (16 bits): 오류 검출을 위한 필드
Urgent Pointer (16 bits): URG 플래그가 설정된 경우, 긴급 데이터의 끝.
마지막 byte의 일련 번호를 Urgent Point 필드에 저장.Data: 실제 전송되는 데이터
TCP 규칙
- 3 way handshake
TCP protocol에서 클라이언트와 서버가 서로의 상태를 확인하고 연결을 설정하기 위한 과정
1. A컴퓨터가 B컴퓨터에 연결요청(SYN)을 보낸다. ( SYN : 1 ) 2. B컴퓨터가 A컴퓨터의 연결을 받았다는 것에 대한 응답(ACK)을 보낸다. B컴퓨터가 A컴퓨터에게 연결을 요청(SYN)한다. ( SYN : 1 ) ( ACK : 1 ) 3. A컴퓨터가 연결 확인에 대한 응답(ACK)을 보낸다. (SYN : 0 ) ( ACK : 1 )
💛 (참고) Wireshark를 통한 TCP 연결 방식과 3-way-handshake 적용을 확인할 수 있는 실습
https://upu.medium.com/tcp-3-way-handshake-using-wireshark-d0c8c7ee4dd2
🍕UDP
주요 특징:
TCP/ IP의 비연결형 경량 전송 프로토콜, 단순성과 속도, 낮은 오버헤드가 장점
TCP와 달리 데이터 수신 확인, 손실된 패킷에 대해 재전송, 순서대로 패킷을 전달하는 것 보장 안함
(안정적 데이터 전달, 대량 트래픽을 처리해야 하는 경우 적합하지 않음)
비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송
비신뢰성 : 에러제어와 흐름제어를 하지 않음. 패킷 전달 순서 조절 작업 하지 않음
UDP Header
0 7 8 15 16 23 24 31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
UDP 헤더는 조금 더 단순한 구조로 나타나는 모습이 확인된다.
Source Port ( 16 bits ) : 송신 측 포트 번호
Destination Port (16 bits ) : 수신 측 포트 번호
Length (16 bits ) : UDP 헤더와 데이터의 총 길이
Checksum ( 16 bits ) : 오류 검출을 위한 필드
Data : 실제 전송되는 데이터
tcp에 비해 확인 응답이 없다.
실시간 스트리밍이나 영상 재생 분야에 많이 활용될 것이다.
🍕IP
주요 특징:
데이터 통신에 대한 규약 (인터넷 프로토콜)
컴퓨터(서버) 간에 데이터 전송이 이루어지는 것에 대한 데이터 통신 규약
비 연결형 서비스, 최선형 전달, 주소 지정, 라우팅 특징을 지니고 있음
IPv4 Header
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Version (4 bits): IP의 버전. IPv4는 4로 설정
IHL (Internet Header Length) (4 bits): IP 헤더의 길이를 32비트 단위로 나타냄. 최소값은 5 (20바이트)
Type of Service (8 bits): 패킷의 우선순위와 서비스 품질(QoS)을 지정
Total Length (16 bits): IP 패킷 전체의 길이(헤더 + 데이터)
Identification (16 bits): 패킷의 고유 식별자입니다. 조각화된 패킷들을 재조립하는 데 사용
Flags (3 bits): 제어 플래그입니다. 주로 조각화에 사용
DF (Don't Fragment): 조각화 금지
MF (More Fragments): 더 많은 조각이 있음
Fragment Offset (13 bits): 조각화된 패킷의 원래 위치
Time to Live (TTL) (8 bits): 패킷의 수명. 홉(hop)을 지날 때마다 감소. TTL이 0이 되면 패킷은 폐기
Protocol (8 bits): 상위 계층 프로토콜 (예: TCP는 6, UDP는 17).
Header Checksum (16 bits): IP 헤더의 오류 검출을 위한 체크섬 값
Source Address (32 bits): 송신 측 IP 주소
Destination Address (32 bits): 수신 측 IP 주소
Padding (Variable): 옵션 필드의 길이를 32비트 단위로 맞추기 위한 패딩
🍕HTTP / HTTPS
포트번호 80 / 포트번호 443
주요 특징 :
클라이언트와 서버의 데이터 교환을 응답과 요청 형식으로 정의한 프로토콜.
하이퍼텍스트 (HTML) 문서를 교환하기 위해 만들어진 프로토콜.
프론트앤드 서버와 클라이언트 간, 백앤드와 프론트앤드 서버 간 통신에 사용됨
HTTP 비 연결성 : 하나의 요청 / 응답 후 연결을 끊어냄 (매 요청마다 새로운 연결)
무상태성 : 각 요청은 독립적임 (상태 유지를 위해 쿠키, 세션이 필요함)
유연성 : HTML, JSON, XML 등 다양한 데이터 포맷 전송 가능 / TCP,IP 등 프로토콜 을 사용 가능
확장성 : HTTP Header을 통한 다양한 기능 확장HTTPS 보안성 : SSL / TLS 프로토콜을 사용해 데이터 전송 시 암호화 (HTTP의 상위)
인증 : SSL/ TLS 인증서 사용해 클라이언트 <-> 서버 간 관계 구축, 신원 확인
데이터 무결성 : 데이터가 전송중 변경되지 않음을 보장
프라이버시 보호 : 데이터가 암호화되어 중간에 도청당해도 내용 확인 불가HTTP Request
GET /path/resource HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 Accept: text/html ... <Body>
start line, headers, body
HTTP Response
HTTP/1.1 200 OK Date: Mon, 27 Jul 2020 12:28:53 GMT Server: Apache/2.2.14 (Win32) Last-Modified: Wed, 22 Jul 2020 19:15:56 GMT Content-Length: 88 Content-Type: text/html ... <Body>
status line, headers, body
HTTPS 요청 / 응답 구성도
+----------------------+ +----------------------+ | HTTP Layer | | HTTP Layer | |----------------------| |----------------------| | SSL/TLS Encryption |<----->| SSL/TLS Encryption | |----------------------| |----------------------| | TCP Layer | | TCP Layer | +----------------------+ +----------------------+ | IP Layer | | IP Layer | +----------------------+ +----------------------+ | Physical Layer | | Physical Layer | +----------------------+ +----------------------+
HTTP는 TCP / IP기반으로 이루어져 있다.
💛 HTTP와 웹 해킹에 대한 더 자세한 내용
https://spacefriend.tistory.com/34
🍕ICMP
주요 특징:
네트워크 장치 간의 진단과 오류 보고를 위한 프로토콜 (오류 상황을 보고함)
호스트 서버와 인터넷 gateway 사이에 위치해 메세지를 제어하고 에러를 알려줌
(RFC 792)
오류 보고, 진단, 제어 메시지, 연결 상태 테스트 등을 수행함
진단을 할 때 ping과 traceroute 도구를 대표적으로 사용함
ICMP Header
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Rest of Header / Message Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type (8 bits): 메시지의 종류.
- 0: Echo Reply (ping 응답)
- 3: Destination Unreachable (목적지 도달 불가)
- 5: Redirect (경로 변경)
- 8: Echo Request (ping 요청)
- 11: Time Exceeded (시간 초과)
Code (8 bits): 메시지 타입에 대한 세부 코드
-
- 0: Network Unreachable
- 1: Host Unreachable
- 2: Protocol Unreachable
- 3: Port Unreachable
Checksum (16 bits): ICMP 메시지의 오류 검출을 위한 체크섬 값
Rest of Header / Message Data (Variable): 메시지 타입과 코드에 따라 다르게 해석되는 데이터
Echo Request (ping 요청)
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 8 | Code = 0 | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identifier | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data (Optional) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Echo Reply ( ping 응답)
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 0 | Code = 0 | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identifier | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data (Optional) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
그 외 프로토콜
🧀ARP
주요 특징:
해당 IP를 그 IP주소에 맞는 물리적인 주소 MAC 주소를 가지고 오는 프로토콜
RARP : 역순 주소 결정 프로토콜 / ARP와 반대로 해당 MAC 주소에 맞는 IP 값을 알아오는 프로토콜
ARP Packet
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hardware Type (HTYPE) (16 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Protocol Type (PTYPE) (16 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hardware Address Length (HLEN) (8 bits) | Protocol Address | | | Length (PLEN) (8 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Operation (OPER) (16 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sender Hardware Address (SHA) (First 32 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sender Hardware Address (SHA) (Last 16 bits) | | Sender Protocol Address (SPA) (32 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Target Hardware Address (THA) (First 32 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Target Hardware Address (THA) (Last 16 bits) | | Target Protocol Address (TPA) (32 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Hardware Type (HTYPE) (16 bits): 네트워크 하드웨어 유형.
Protocol Type (PTYPE) (16 bits): 프로토콜 주소 유형.
Hardware Address Length (HLEN) (8 bits): 하드웨어 주소의 길이를 바이트 단위로 나타냄.
Protocol Address Length (PLEN) (8 bits): 프로토콜 주소의 길이를 바이트 단위로 나타냄.
Operation (OPER) (16 bits): ARP 패킷의 작업 유형
1. ARP request : 장치 A가 장치 B의 MAC 주소를 알아내기 위해 ARP 요청
2. ARP responce : 장치 B가 자신의 MAC 주소를 포함한 유니캐스트 ARP 응답을 장치 A에 전송
Sender Hardware Address (SHA) (48 bits): 송신자의 MAC 주소
Sender Protocol Address (SPA) (32 bits): 송신자의 IP 주소
Target Hardware Address (THA) (48 bits): 대상 장치의 MAC 주소
Target Protocol Address (TPA) (32 bits): 대상 장치의 IP 주소
🧀FTP /FTPS
포트번호 21
주요 특징 :
FTP
네트워크를 통해 파일을 전송하는 것에 사용됨
비 연결형, 포트 사용, 인증, 무 암호화, 다양한 명령어 등의 특징을 가지고 있음
TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일 전송을 위한 프로토콜이다.
TCP 통신을 하기 때문에 3-way-handskaking 과정을 거친 후 클라이언트가 명령어를 입력하면 서버가 응답한다.
파일 전송만을 위한 전용 서비스라는 점에서 동작이 직관적이다.
FTPS
FTP에 SSL / TLS 암호화를 추가하여 보안성을 강화한 프로토콜암호화, 인증, 포트 사용, 호환성 등의 FTP보다 강화된 장점을 지니고 있다.
FTP 명령 채널
Client Server +--------------------+ (Port 21) +--------------------+ | FTP Commands | <-----> | FTP Responses | | (e.g., USER, LIST)| | (e.g., 220 Ready) | +--------------------+ +--------------------+
FTP 데이터 채널
Client Server +--------------------+(Dynamic Port)+--------------------+ | Data Transfer | <-----> | Data Transfer | | (e.g., RETR, STOR) | | (e.g., Data) | +---------------------+ +---------------------+
Active : 클라이언트가 포트를 열고 서버가 그 포트에 접속해 데이터 전송 수행
passive : 서버가 포트를 열고 클라이언트가 그 포트에 접속해 데이터 전송 수행
🧀TELNET
프로토콜 번호 : 23번
주요 특징 :
원격 호스트에 접속해서 명령을 실행할 수 있게 해주는 네트워크 프로토콜 (인터넷, 로컬 영역 네트워크)
원격 접속, 인터랙티브 세션, 비 암호화, 포트번호, 명령어 기반 등의 특징이 있다.
네트워크에 있는 컴퓨터를 자신의 컴퓨터처럼 파일 전송, 파일 생성, 디렉토리 생성 등 자유롭게 가능해짐
하지만 데이터를 평문 그대로 주고받음 -> 네트워크 상에 데이터 노출 우려
(현재에는 SSH로 대체되고 있는 추세)
NTV (가상 터미널)을 사용해 터미널 에뮬레이션 프로토콜을 수행한다.
TELNET Packet
0 7 8 15 16 23 24 31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Command/Option Code (8 bits) | Data (Variable length) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Command/Option Code: TELNET 프로토콜 명령어 또는 옵션 코드가 포함됨
Data: 명령어의 데이터를 포함, 길이는 가변적
TELNET 세션
Client Server +--------------------+ (Port 23) +---------------------+ | TELNET Commands | <-----> | TELNET Responses | | (e.g., LOGIN) | | (e.g., Prompt) | +--------------------+ +---------------------+
데이터의 흐름은 다음과 같다.
1. 연결 설정 : 클라이언트가 서버에 TCP 연결을 설정한다.
2. 로그인 : 클라이언트가 서버에 로그인 요청을 보낸다.
3. 명령 실행 :
클라이언트 - 로그인 후 원격 서버에 명령을 보낸다.서버 - 결과를 클라이언트에게 응답한다.
4. 세션 종료 : 클라이언트가 로그아웃 명령을 보내거나 연결 종료
🧀SSH
포트 번호 : 22
주요 특징 :
네트워크를 통해 안전하게 원격 시스템에 접속하고 명령을 실행할 수 있게 도와주는 프로토콜이다.
서버 관리나 안전한 파일 전송에 용이하다.
암호화 데이터 전송을 암호화하고, 네트워크 상에 전송되는 모든 데이터를 보호한다. 인증 비밀번호 인증 : 사용자 이름과 비밀번호를 사용해 인증한다.
키 기반 인증 : 공개 키와 개인 키를 사용해 인증한다.포트 포워딩 원격 시스템의 서비스를 로컬 시스템으로 안전하게 터널링 할 수 있도록 한다. 보안 채널 여러 채널을 암호화된 세션 내에서 독립적으로 운영할 수 있다. 기타 기능 파일 전송(SCP, SFTP)와 원격 명령 실행을 지원한다. 대칭키 방식 : 클라이언트 - 서버 간 전체 연결을 암호화에 사용
비대칭키 방식 : 키 교환, 클라이언트 인증, 서버 인증에 사용
해시 알고리즘 : 패킷의 무결성을 확인하기 위해 사용
SSH 세션
Client Server +--------------------+ (Port 22) +--------------------+ | SSH Commands | <-----> | SSH Responses | | (e.g., LOGIN) | | (e.g., AUTH ACK) | +--------------------+ +--------------------+
암호화된 데이터 전송
Client Server +--------------------+ (Encrypted Data Channel) +--------------------+ | Encrypted Data | <-----> | Encrypted Data | | (e.g., Commands) | | (e.g., Results) | +--------------------+ +--------------------+
SSH의 실행 방식
1. 연결 설정-----
2. 버전 교환-----
3. 서버 키 교환-----
4. 암호화 방식 협상-----
5. 세션 키 교환-----
6. 사용자 인증-----
7. 세션 시작-----
8. 명령 실행-----
9. 세션 종료-----
자세한 사항은 다음과 같다.
# 연결 설정 (Connection Establishment): 클라이언트가 서버에 TCP 연결을 요청합니다. 기본적으로 포트 22를 사용합니다. 서버가 클라이언트의 연결 요청을 수락합니다. # 버전 교환 (Version Exchange): 클라이언트와 서버는 SSH 프로토콜의 버전을 서로 교환합니다. 이를 통해 클라이언트와 서버가 동일한 버전의 SSH 프로토콜을 사용할 수 있는지 확인합니다. # 서버 키 교환 (Server Key Exchange): 서버는 클라이언트에게 자신의 공개 키를 전송합니다. 이 공개 키는 서버의 신원을 검증하고 세션 암호화에 사용됩니다. 클라이언트는 서버의 공개 키를 검증하고, 서버가 인증된 서버인지를 확인합니다. 이를 위해 클라이언트는 서버의 키를 사전에 알고 있을 수 있습니다 (예: known_hosts 파일). # 암호화 방식 협상 (Encryption Negotiation): 클라이언트와 서버는 사용할 암호화 알고리즘과 해시 함수(예: AES, SHA-256 등)를 협상합니다. 이 과정에서 클라이언트와 서버는 세션 키를 교환하여 이후의 데이터 전송을 암호화합니다. # 세션 키 교환 (Session Key Exchange): 클라이언트와 서버는 세션 키를 생성하고 교환합니다. 이 세션 키는 대칭 암호화에 사용되어 데이터를 암호화하고 해독하는 데 사용됩니다. # 사용자 인증 (User Authentication): 클라이언트는 서버에 대해 인증을 수행합니다. 인증 방식으로는 비밀번호 인증, 공개 키 인증, 또는 다른 인증 방법이 있습니다. 비밀번호 인증: 클라이언트가 서버에 사용자 이름과 비밀번호를 전송합니다. 키 기반 인증: 클라이언트가 자신의 개인 키를 사용하여 서버의 공개 키와의 인증을 수행합니다. # 세션 시작 (Session Initialization): 인증이 성공하면, SSH 세션이 설정됩니다. 클라이언트는 서버에 원격 명령을 실행하거나 원격 쉘을 사용할 수 있습니다. # 명령 실행 (Command Execution): 클라이언트가 서버에 명령을 보내고, 서버는 명령을 실행한 후 결과를 클라이언트에 응답으로 보냅니다. # 세션 종료 (Session Termination): 클라이언트 또는 서버가 세션 종료 명령을 보내면, SSH 세션이 종료됩니다. 연결이 닫히고, 모든 자원은 해제됩니다.
서버에서 접근할 수 있는 클라이언트인지 확인하는 과정은 다음과 같다.
1. 클라이언트가 인증할 키 쌍의 ID를 서버에 전송한다.
2. 서버는 .ssh/authorized_keys 파일을 확인한다. (클라이언트가 접속하고자 하는 계정에서의)
3. ID와 공개키가 매칭되면, 서버는 난수를 생성하고 클라이언트의 공개키로 암호화한다.
4. 서버는 클라이언트에게 암호화된 메세지를 전송한다.
5. 클라이언트의 개인키를 통해 암호화된 메시지를 복호화하고 난수를 추출한다.
6. 클라이언트는 난수를 세션 키와 결합해 해시값을 계산하고 이를 서버에 전송한다.
7. 서버는 저장된 난수와 세션 키를 결합해 해시값을 계산하고 비교한다.
8. 비교한 해시값이 일치할 시 클라이언트 인증이 가능하도록 한다.
🧀SSL / TLS
포트번호 : 443
주요 특징 :
네트워크 통신에서 암호화된 연결을 제공하는 프로토콜이다.
암호화, 인증, 세션 보안, 무결성 검사, 응용 계층 지원 기능을 수행하고 있다.
주로 HTTPS 프로토콜에서 사용되며, SMTPS, POP3S, IMAPS와 같은 프로토콜에서도 안전한 통신을 제공한다.
서버의 신원을 인증하기 위해 디지털 인증서를 사용한다는 특징이 있다.
TLS handshake protocol
안전한 세션을 설정하기 위해 복잡한 handshake 과정을 포함하고 있다.
Client Server +--------------------+ (Port 443) +----------------------+ | Client Hello | <-----> | Server Hello | |(e.g., Cipher Suites, Protocol) | (e.g., Certificate) | +--------------------+ +----------------------+
TLS 실행 방식은 다음과 같다.
( 악수 [Handshake] > 전송 [데이터 전송] > 세션 종료 )
1. 연결 설정 : 클라이언트와 서버 간에 TCP 연결을 설정. 포트 443 사용
2. TLS Handshake : 클라이언트와 서버 간의 안전한 연결 설정
3. 세션 시작 : 암호화된 세션을 시작해 데이터를 안전하게 전송할 수 있도록 설정
4. 데이터 전송 : 세션동안 대칭 암호화된 데이터 채널을 통해 클라이언트<-> 서버 데이터 전송
5. 세션 종료 : 클라이언트/서버가 연결 종료 메시지 수신. 데이터 전송 완료
TLS Handshake 단계
클라이언트 헬로 (Client Hello): 클라이언트가 서버에 TLS 연결 요청을 보냅니다. 클라이언트는 지원하는 TLS 버전, 암호화 알고리즘(Cipher Suites), 압축 방법, 세션 ID(기존 세션 재사용 시) 등을 포함한 메시지를 서버에 전송합니다. 서버 헬로 (Server Hello): 서버가 클라이언트의 요청에 응답하며, 사용할 TLS 버전, 암호화 알고리즘, 압축 방법 등을 선택하여 클라이언트에게 전송합니다. 서버 인증 및 키 교환 (Server Authentication and Key Exchange): 서버는 자신의 디지털 인증서를 클라이언트에게 전송하여 자신의 신원을 인증합니다. 인증서에는 서버의 공개 키가 포함되어 있습니다. 서버는 또한 키 교환 정보를 제공할 수 있습니다. 예를 들어, Diffie-Hellman 키 교환을 사용할 때는 필요한 정보를 서버가 전송합니다. 클라이언트 키 교환 (Client Key Exchange): 클라이언트는 서버의 공개 키를 사용하여 세션 키를 암호화한 후 서버에 전송합니다. 이 세션 키는 대칭 암호화에 사용됩니다. 암호화 설정 완료 (Change Cipher Spec): 클라이언트와 서버는 서로에게 암호화와 무결성을 위한 세션 키와 암호화 방법을 설정 완료했다는 메시지를 보냅니다. 완료 (Finished): 클라이언트와 서버는 각각의 핸드셰이크 메시지를 수신하고 확인합니다. 이 단계에서 양측은 핸드셰이크가 성공적으로 완료되었음을 알리는 확인 메시지를 교환합니다.
프로토콜을 공부할 때마다 이곳에 추가할 예정이다.
다음글이 없습니다.이전글이 없습니다.댓글