OSI 7 Layer 를 공부하면서 계층별로 프로토콜들이 존재하는 것을 확인하였었습니다.
계층 별 프로토콜들의 특징을 알아보겠습니다.
L1-물리 계층
redRS-232
- 보통 15m이하의 단거리에서 38400bps로 전송을 위한 직렬 인터페이스
케이블
L2-데이터링크 계층
Ethernet
- 비연결성 모드, 전송속도 10Mbps 이상, LAN 구현 방식을 의미
- CSMA/CD(공유 매체 방식)으로 동작하며, 네트워크 충돌 방지 + 효율적인 데이터 전송
※CSMA/CD:여러 디바이스가 동시에 데이터를 전송하려고 할 때 충돌을 감지하고 처리하는 기능
L3-네트워크 계층
IP
- IP 버전은 IPv4는 32비트 주소를 사용하고, IPv6는 128비트 주소를 사용하여 IP 주소 부족 문제를 해결
- 패킷 스위칭을 기반으로 동작(데이터를 작은 패킷 단위로 분할하여 전송)-데이터를 효과적으로 전달
- 호스트의 주소 지정
ICMP
- 오류 및 제어 메시지 전달
- "에코 요청" 메시지와 "에코 응답" 메시지를 사용하여 호스트 또는 라우터의 가용성을 테스트하는 데 사용(ping테스트)
- TTL (Time-to-Live)값을 조절해 무한 루프 및 라우팅 루프를 방지하고, 패킷이 일정한 시간 이후에 삭제되도록 할 수 있다.
ARP
- IP 주소에서 MAC 주소로의 매핑(네트워크에서 데이터 프레임을 보낼 때 목적지 디바이스를 식별하는 데 사용)
L4-전송 계층
TCP
- 전송 제어 프로토콜. 연결 지향적으로 통신하며, 데이터의 손실 및 중복 전송을 방지합니다
UDP
- 사용자 데이터그램 프로토콜. 비 연결 지향적으로 통신하며, 신뢰성 없이 빠른 속도의 데이터 전송을 지원합니다.
L5-세션 계층
NetBIOS
- 네트워크 리소스 공유 및 이름 서비스를 관리하기 위한 프로토콜
- 주로 로컬 네트워크에서 파일 공유, 프린터 공유 및 다른 네트워크 리소스에 대한 접근을 관리하는 데 사용
- 보안적으로 취약할 수 있음, 사용자는 무단 액세스 및 데이터 노출을 방지해야 함
RPC (Remote Procedure Call)
- Windows OS에서 사용하는 원력 프로시저 호출 프로토콜
WinSock(Windows Socket)
- 유닉스 기반의 OS에서 TCP/IP 통신시에 사용하는 Socket을 Windows에서 구현한 것
L6-표현 계층
ASCII
- 7비트의 인코딩으로 33개의 제어 문자와 95개의 영어문자로 이루어짐
L7-응용 계층
SSL
- 네트워크 레이어(L3)의 암호화 방식, HTTP뿐만 아니라 FTP등에도 사용
- 인증, 암호화, 무결성을 보장하는 프로토콜
HTTP
- WWW(World Wide Web) 상에서 데이터를 주고 받을 수 있는 프로토콜
- 주로 HTML문서를 주고 받는 것에 사용되고 TCP와 UDP를 사용
- 80번 포트 사용
TELNET
- 인터넷이나 로컬 영역 네트워크 연결에 쓰이는 네트워크 프로토콜
- 보안 문제로 거의 사용되지 않으며 원격제어를 위해 SSH로 대체
- TELNET 통신은 주로 텍스트 기반
- 23번 포트 사용
SSH
- SSH는 통신을 안전하게 암호화하여 중간자 공격, 데이터 도용 및 데이터 유출과 같은 보안 위협을 방지
- 데이터를
암호화
하여 전송
- 클라이언트와 서버 간의 상호 인증을 수행(신뢰성 보장)
- 원격 네트워크 서비스를 안전하게 터널링 하는데 사용
- 22번 포트 사용
FTP
- 파일을 전송하기 위한 주요 목적을 가진 프로토콜(원격 서버와 클라이언트 간에 파일을 업로드하거나 다운로드하는 데 사용)
- 21번(제어 채널), 20번(데이터 채널) 포트 사용
제어 채널: 클라이언트와 서버 간의 명령 및 상태 정보를 전송하기 위한 채널
데이터 채널: 파일의 실제 내용이 데이터 채널을 통해 전송하기 위한 채널
SMTP(Simple Mail Transfer Protocol)
- 이메일
전송
을 위한 프로토콜
- 송신자가 메일을 수신자에게 바로 보내는게 아니라, 송신자가 이메일 서버로 이메일을 보내는 데 사용
- 수신된 이메일은 SMTP를 통해 수신자의 이메일 서버로 전달
POP3(Post Office Protocol version 3)
- 이메일
수신
을 위한 프로토콜
- 이메일 서버에서 이메일을 송신자에게 가져오는 데 사용
- 이메일 서버에서 이메일을 다운로드하면 서버에서 삭제되며, 클라이언트의 로컬 디바이스에 저장
IMAP(Internet Message Access Protocol)
- 이메일
수신
및 저장
을 위한 프로토콜
- 이메일 서버에서 이메일을 송신자에게 가져오는 데 사용
- 이메일을 서버에 유지하고, 클라이언트가 여러 기기에서 동일한 이메일에 액세스할 수 있도록 함
ICMP(Internet Control Message Protocol)
특징
- 네트워크 관리 및 진단
- 에코 요청 및 응답
오류 메시지
1.Destination Unreachable(도달할 수 없음): 이 오류 메시지는 목적지 호스트 또는 네트워크에 도달할 수 없는 경우 생성된다. 예를 들어, 경로상에 장애물이 있거나 목적지 호스트가 비활성 상태인 경우에 발생할 수 있다.
2.Time Exceeded (시간 초과): 이 오류 메시지는 TTL 필드의 값이 0이 되어 패킷이 폐기된 경우 생성된다. 이는 패킷이 무한 루프에 빠지는 것을 방지하고 네트워크 경로를 디버깅하는 데 사용된다.
3.Redirect : 이 오류 메시지는 라우터가 패킷을 다른 경로로 보내도록 다시 지시하는 경우 생성된다. 이를 통해 효율적인 경로 선택을 지원한다.
SSH와 TELNET의 차이점
SSH(Secure Shell)와 Telnet은 둘 다 원격으로 다른 컴퓨터에 접속하여 명령어를 실행할 수 있는 프로토콜이지만, 그들 간에 중요한 차이가 있습니다.
- 보안:
SSH
: SSH는 데이터를 암호화하여 전송합니다. 이는 통신이 안전하게 이루어짐을 의미하며, 중간에서 정보를 가로채거나 도청하는 것을 방지합니다.
Telnet
: Telnet은 보안 기능이 없습니다. 사용자의 로그인 정보나 전송되는 데이터가 평문으로 전송되기 때문에 보안에 취약합니다.
- 인증:
SSH
: 대부분의 경우 SSH는 공개 키 인증 및 비밀번호를 통한 인증을 지원합니다.
Telnet
: 주로 비밀번호 인증을 사용하며, 이는 보안에 취약한 부분 중 하나입니다.
- 포트 번호:
SSH
: 기본적으로 22번 포트를 사용합니다.
Telnet
: 기본적으로 23번 포트를 사용합니다.
- 암호화:
SSH
: 데이터를 안전하게 전송하기 위해 암호화를 사용합니다.
Telnet
: 암호화를 사용하지 않으므로 데이터가 평문으로 전송됩니다.
- 사용 운영체제:
SSH
: 대부분의 현대 운영체제에서 지원하며, 보안상의 이유로 권장됩니다.
Telnet
: 보안 취약성으로 인해 현대 시스템에서는 사용을 권장하지 않습니다.
HTTP와 HTTPS의 차이점
HTTP(Hypertext Transfer Protocol)와 HTTPS(Hypertext Transfer Protocol Secure)는 웹에서 정보를 주고받기 위한 프로토콜입니다.
- 보안:
HTTP
: 데이터를 암호화하지 않고 평문으로 전송합니다. 따라서 중간에서 데이터를 가로채거나 도청할 수 있습니다.
HTTPS
: 데이터를 SSL(또는 TLS) 프로토콜을 사용하여 암호화하여 전송합니다. 이는 중간에서의 데이터 도청을 방지하고 외부 공격자로부터 데이터를 안전하게 보호합니다.
- 포트 번호:
HTTP
: 기본적으로 80번 포트를 사용합니다.
HTTPS
: 기본적으로 443번 포트를 사용합니다.
- 인증:
HTTP
: 통신 상에서 서버나 클라이언트의 정체성을 확인하지 않기 때문에, 중간자 공격(man-in-the-middle attack)에 취약합니다.
HTTPS
: SSL/TLS 프로토콜을 사용하여 서버 및 클라이언트 간의 안전한 통신을 보장하며, 인증서를 통해 상대방의 정체성을 확인합니다.
- 암호화된 연결 설정:
HTTP
: 기본적으로 암호화를 사용하지 않습니다.
HTTPS
: SSL/TLS 프로토콜을 사용하여 데이터를 암호화하므로, 데이터의 안전성이 보장됩니다.
- URL 표시:
HTTP
: URL은 "http://"로 시작합니다.
HTTPS
: URL은 "https://"로 시작합니다. 브라우저에서는 일반적으로 안전한 연결을 나타내기 위해 URL 앞에 잠금 아이콘이 표시됩니다.
- 사용 목적:
HTTP
: 주로 정보를 전달하고 문서를 가져오는 데 사용됩니다.
HTTPS
: 보안이 중요한 정보(예: 로그인 정보, 결제 정보)를 전송하는 데 사용됩니다.
DNS(Domain Name System)
- 도메인 이름을 IP 주소로 변환하거나, 역으로 IP 주소를 도메인 이름으로 변환할 수 있습니다.
- DNS는 주로 UDP를 사용하여 동작합니다. UDP는 연결 지향이 아니기 때문에 빠르고 경량적인 데이터 전송이 가능합니다. 그러나 큰 DNS 쿼리나 응답이 있는 경우 TCP를 사용할 수도 있습니다.
- 53번 포트 사용
DNS가 TCP를 사용하는 경우
1. Zone-Transfer
- Master DNS와 Slave DNS 서버 간에 Zone 파일을 동기화하기 위한 프로토콜
- DNS Zone Transfer는 일반적으로 TCP 프로토콜을 사용합니다. UDP는 단일 패킷의 크기 제한으로 인해 큰 데이터를 전송하기에는 부적합하기 때문입니다. 따라서 Zone Transfer는 안정적이고 신뢰성 있는 TCP 연결을 통해 이루어집니다.
- 취약점
- Zone Transfer는 별도로 설정하지 않으면 모든 호스트에 열려있다.
- Zone 파일이 큰 곳은 Zone Transfer에 대한 부하가 크다
- 스크립트나 다수의 호스트를 이용하여 Zone Transfer에 지속적으로 접근하면 서비스 거부 공격이 가능하다.
- 사용하고 있는 IP대역, 방화벽 등 보안 장비의 IP정보 등이 노출될 수 있다.
- 보안대책
- DNS를 Master/Slave로 운영하지 않는다면 Zone Transfer를 사용하지 않도록 설정한다.
- Zone Transfer를 운영해야 할 경우 Slave를 특정하여 운영한다.
options {
allow-transfer {none};
};
options {
allow-transfer {211.1.2.3};
};
2. 메시지가 512byte를 초과하는 경우
- Naver.com 나 google.com 처럼 www로 매핑된 서버가 많이 있는 경우 메시지 사이즈가 512byte를 넘을 수 있는데 그럴 경우 TCP를 통해 질의하여 응답을 받는다.
DNS가 UDP를 사용하는 경우
1. 빠른속도
- DNS는 신뢰성보다 속도가 더 중요한 서비스이기 때문에 TCP보다 UDP가 더 적합하다.
- UDP는 512 bytes를 넘어가지 않는 패킷만 전송이 가능하고 오버헤드가 없어서 속도가 빠른데, DNS가 전송하는 데이터 패킷 사이즈가 매우 작으므로 UDP가 유리하다.
2. 연결 상태를 유지할 필요가 없다.
- TCP는 호스트 간의 연결 상태를 유지한다. 이때 TCP의 패킷 안에는 여러 정보가 담겨 있지만, UDP는 어떤 정보도 기록하지 않고, 유지할 필요도 없다. 따라서 DNS 서버는 TCP보다 많은 클라이언트를 수용할 수 있으므로 연결 상태를 유지하지 않고 정보 기록을 최소화할 수 있는 UDP를 채택하였다.
참고
https://leo-xee.github.io/CS/protocol/
https://12bme.tistory.com/80
https://blog.naver.com/kostry/220899042020