Suhwanc

본 내용은 Computer networking : a top-down approach 책을 바탕으로 정리하였습니다.

 

Index

  • 1. FTP
  • 2. electronic mail : SMTP, POP3, IMAP
  • 3. DNS

 

1. FTP

FTP란 파일 전송 프로토콜(File Transfer Protocol)이며 TCP 프로토콜을 가지고 서버와 클라이언트 사이의 파일 전송을 하기 위한 프로토콜이다.

 

1.1 제어와 데이터 연결의 분리성

FTP의 중요한 특징 중 하나는 포트를 2개 쓴다는 것이다.

하나는 제어(control)용도로서, 새로운 클라이언트가 올 때만 집중적으로 관리하기 위한 포트이며 21번을 사용하고,

다른 하나는 데이터 연결 포트로, 데이터를 주고받을 때만 사용하는 포트로 20번을 사용한다.

 

이러한 FTP 제어 포트의 특성을 "out of band" 라고 하는데, 간단히 말해 기존 제어 포트에서 벗어났다고 말한다.

 

 

1.2 (참조) Active Mode vs Passive Mode

FTP의 모드도 두 가지가 있는데, 바로 active, passive 모드이다.

 

active 모드는 서버가 적극적으로 포트를 열어 데이터를 주고받는 방법이고,

passive 모드는 클라이언트가 "패시브" 명령을 주면 서버가 포트를 열어 데이터를 주고받는 방식이다.

 

passive 모드는 클라이언트가 먼저 "패시브" 명령을 줘서 괜찮으나, active 모드는 서버가 먼저 포트를 열기 때문에 방화벽 문제가 우려되는 문제점이 있다.

 

 

1.3 FTP commands, responses

 

FTP commands

  • 아스키 문자를 사용하여 보낸다.
  • USER username : 사용자 계정을 서버로 보내는 데 사용된다.
  • PASS password : 사용자 비밀번호를 서버로 보내는 데 사용된다.
  • LIST(ls) : 현재 폴더의 파일 목록을 보여준다.
  • RETR filename : 원격 호스트의 현재 디렉터리로부터 파일을 추출하는 데 사용한다. GET과 동일하다.
  • STOR filename : 파일을 원격 호스트의 현재 디렉터리에 저장하는데 사용된다. PUT과 동일하다.
  • PASV : FTP를 passive mode로 설정한다.

 

FTP return codes

  • 상태 라인의 상태 코드와 문장 구조가 비슷하다.
  • 331 Username OK
  • 125 Data connection already open; transfer starting
  • 425 Can't open data connection
  • 452 Error writing file

 

이들은 wireshark를 통해 분석이 가능하다!

 

 

2. E-mail

 

2.1 이메일의 3가지 주된 구성요소

  • 사용자 에이전트
  • 메일 서버
  • SMTP(simple Mail Transfer Protocol) : 메일 전송용

 

1) 사용자 에이전트

사용자가 메시지를 읽고, 응답하고, 저장하고, 구성하게 해준다.

 

2) 메일 서버

각 수신자는 메일 서버 안에 메일 박스를 갖고 있다.

만약 메시지 전송량이 초과하는 경우 메시지를 메시지 큐에 보관한다.

 

3) SMTP

  • 신뢰적 데이터 전송을 위해 TCP를 사용한다.
  • SMTP의 클라이언트, 서버 모두는 모든 메일 서버에서 수행된다.
  • 전송의 3단계 - handshaking, transfer, closure
  • 명령 시 아스키코드, 응답 시 상태 코드
  • 메시지는 반드시 7비트 짜리 아스키 코드로 이루어져있어야 함

 

사용자 간 메일 서버를 거쳐서 메시지를 주고받는 과정

이 그림에서 2,4 번은 SMTP를 이용, 6번은 최종 단계로 web mail을 사용하는데 이 부분에 대해서는 차후 설명하도록 하겠다.

 

 

2.2 HTTP와의 비교

 

공통점

두 프로토콜 모두, 한 호스트에서 다른 호스트로 파일을 전송하는데 이용되며 지속 가능한 연결을 사용한다.

 

차이점

  • HTTP는 pull(서버에서 data를 가져오는 방식), SMTP는 push(클라이언트에서 서버 쪽으로 파일을 보냄) 프로토콜 방식을 사용한다.
  • SMTP는 메시지가 7bit 아스키 포맷이어야 하지만, HTTP는 제한이 없다.
  • HTTP는 객체에 캡슐화 방식을, SMTP는 포트를 따로 하여 한 메시지로 만든다.

 

2.3 메일 메시지 포맷

메일 메시지 포맷은 헤더와 몸체 부분으로 구성된다.

 

헤더 라인은 From, To, Subject 헤더 라인을 반드시 가져야 하고,

몸체는 메시지(아스키 문자)가 나온다.

 

이러한 헤더라인은 위에서 설명한 smtp 명령어와는 다르게 메일 메시지 자체의 일부이다!

 

 

2.4 메일 접속 프로토콜

아까 위에서 메시지 주고받는 과정 그림에 설명을 붙인 그림이다.

 

SMTP는 사실 하나의 호스트에서 다른 쪽으로 전자메일을 보내기 위해 설계되었다.

그 근거로, SMTP는 push 프로토콜인 반면에, 메시지를 얻는 것은 pull 동작이기 때문이다.

 

따라서 POP3, IMAP, HTTP와 같은 유명한 메일 접속 프로토콜을 사용하게 된다.

 

 

2.5 POP3 vs IMAP

 

POP3 (port# 110)

  • 매우 간단한 메일 접속 프로토콜로, 매우 한정된 기능을 가진다.
  • "다운로드"와 "삭제"가 기본 모드로 한 번 읽으면 다시 읽지 못한다.(pc로 읽으면 휴대폰으로는 다시 못 본다)
  • 사용자에게 원격 폴더를 생성하거나 폴더에 메시지를 할당하는 수단을 제공하지 않는다.

 

IMAP (port# 143)

  • 사용자가 폴더를 생성하고, 메시지를 옮기고 삭제할 수 있다.
  • 사용자 상태 정보를 계속 유지한다.

 

이 두 가지는 사실 우리가 직접 쓰기에는 어려움이있고 HTTP 같은 웹메일을 사용한다. 

3. DNS

 

3.1 DNS - 인터넷의 디렉터리 서비스

 

요즘 학교 건물에 출입할 때 정문 앞에 있는 사람들에게 학생증을 보여주고, 팔찌를 받아 들어가고 있는데 학생증을 보여주는 이유는 학생증이 내가 나인지, 여기 학생인지를 인증할 수 있는 수단이기 때문이다.

 

사람이 이런 방식으로 식별하는 것처럼, 인터넷 호스트도 마찬가지로 식별 수단이 필요하다.

인터넷 호스트에 대한 식별자는 호스트 네임(host name)이다. 

 

호스트 네임은 www.naver.com,  google.com 등과 같이 우리가 기억하기 쉽다.

하지만 호스트 네임은 가변 길이의 문자들로 구성되어 있기 때문에 라우터가 처리하기 어려움이 있어 IP 주소로도 식별된다. 

 

IP 주소는 4바이트로 구성되고 계층구조이기 때문에 주소를 왼쪽부터 오른쪽까지 조사하면 호스트의 위치에 대한 자세한 정보를 얻을 수 있다. 하지만 기억하기는 어렵다.

 

따라서 우리는 이러한 선호 차이를 절충하기 위해, 호스트 네임을 IP 주소로 변환해 주는 디렉터리 서비스가 필요했고, 이것이 인터넷 DNS의 주요 임무이다.

 

DNS 서버

  • 네임 서버들의 계층구조로 구현된 분산 데이터베이스
  • 애플리케이션 레이어 프로토콜이다. (이번 장에서 처음 나온 거 같은데, 저번 포스팅을 보시면 있어요!)

 

DNS가 제공하는 서비스들

  • 호스트 네임 -> IP 주소
  • 호스트 에일리어싱 : 정식 호스트네임(canonical) 외로 사본(alias name) 또는 별칭을 가질 수 있다.
  • 메일 서버 에일리어싱
  • 부하 분산 : 인기 있는 사이트는 여러 서버에 중복되어 있어서 다른 IP 주소를 할당시켜 부하를 분배시킨다.

 

추가. 분산하는 이유 (상세히)

  • 문제가 발생 시 중앙화 되어있다면, 한 방에 가버릴 수 있다.
  • 트래픽량을 감소시킬 수 있다.
  • 거리 상의 문제 (만약 미국에 집중되어있다면, 우리는 쓰기 힘들 것이다.)
  • 유지 보수 중에 다른 곳으로 쓸 수 있게 해준다.

 

 

3.2 DNS의 계층적 구조 3단계

  • 루트 DNS 서버
  • 최상위 레벨 도메인(TLD) 서버
  • 책임 DNS 서버

 

확장성 문제를 해결하기 위해 DNS는 많은 서버를 계층 형태로 구성하여 전 세계에 분산시켰다.

만약 우리가 호스트 네임 www.naver.com의  의 IP 주소를 찾는다고 해보자.

 

1. 먼저 루트 서버 중 하나에 접속한다.

2. 루트 서버는 메인 com을 갖는 TLD 서버 IP 주소를 보낸다.

3. 이후 우리는 TLD 서버 중 하나에 접속하고, 서버는 도메인 naver.com 이 가진 책임 서버의 IP 주소를 보낸다.

4. 우리는 책임 서버 중 하나로 접속하고 서버는  www.naver.com IP 주소를 보낸다.  

 

계층을 좀 더 자세히 보자면

 

TLD 서버

보통 com, org, net, edu, kr, uk 등 기업, 기관, 대학, 각 나라를 대표하는 도메인 서버이다.

 

책임 서버

기관이 실질적으로 DNS 서버를 가지고 있는 곳으로 정확한 이름의 IP 주소가 매핑된 곳이고, 그 주소로 접근할 권한을 갖는다. 따라서 권한 서버라고도 한다.

 

3.3 로컬 DNS 서버

추가로 로컬 DNS 네임 서버라는 것도 있는데, 이 서버는 계층에서 제외되어있으며

사용자 PC와 계층 DNS 사이에 존재한다. 사용자는 먼저 로컬 DNS 서버에 질의를 던지면, 그 로컬 DNS 서버는 이 질의를 DNS 서버 계층으로 전달한다. 

여기서 화살표는 각각 질의와 응답을 나타낸다.

 

3.4 질의의 종류

 

보통 질의는 쿼리라고 불리는데, 이 쿼리라는 단어는 알고리즘에서 상당히 악몽 같은 단어라고 생각한다. 일단 관련 문제가 천차만별이고 조건이 너무 힘들다.. 암튼 여기서도 쿼리가 나오는데 종류는 반복적, 재귀적 쿼리이다.

 

반복적 쿼리

바로 위에 있는 그림처럼, 로컬 DNS 서버가 다른 서버들과 주거니, 받거니 하는 쿼리들을 의미한다.

참고로 호스트와 로컬 DNS 서버의 관계는 재귀적이다. 밑에서 바로 설명하겠다.

 

재귀적 쿼리

 

여기 그림처럼 서버에 한 번 보내면 그 서버가 끝나고 나서야 받게 된다. 일반적인 재귀 함수의 원리와 동일하다.

재귀적 쿼리의 단점은 서버가 끝날 때까지 자원들을 계속 가지고 있어야 하기 때문에 쿼리가 한꺼번에 몰리면 아주 취약하다. 

 

 

3.5 DNS 레코드와 메시지

 

DNS 분산 데이터베이스를 구현한 DNS 서버들은 호스트 네임을 IP 주소로 매핑하기 위한 자원 레코드(resource record, RR)를 저장하고, 각 DNS는 하나 이상의 자원 레코드를 가진 메시지로 응답한다.

 

1) DNS 레코드

RR format : (name, value, type, ttl)

레코드 포맷은 4가지 요소가 있는데 이들은 타입에 따라 다른 의미로 해석된다.

 

  • type=A : name = hostname, value = ip addr
  • type=NS : name = domain, value = 책임 서버 hostname
  • type=CNAME : name=원본에 대한 alias name, value = 원본
  • type=MX : value = 메일 서버 이름 

 

2) DNS 프로토콜과 메시지 포맷

 

요청과 응답 메시지에 포함되는 메시지 포맷이다.

  • identification : 16bit로 구성되며, 식별자이다.
  • flags : 요청인지 응답인지?, 재귀가 가능한지? 책임이 있는지?(책임 서버가 줄 때만)
  • 앞에 #이 붙은 것들 : 해당 개수를 의미
  • 그 이외의 것들 : 해당 실제 데이터들을 의미

 

3.6 DNS 공격

 

  • 디도스 공격 : 수많은 요청으로 서버를 동작 불능의 상태로 만듦
  • 중간자 공격 : 질의를 가로채 가짜 응답을 리턴
  • 중독 공격 : 응답에 마약을 넣어 속여버림

'Computer Network' 카테고리의 다른 글

6. TCP - transport's view  (0) 2020.06.03
5. Transport layer  (6) 2020.06.02
4. P2P, video streaming  (0) 2020.05.29
2. application layer  (2) 2020.05.27
1. 컴퓨터 네트워크 소개  (8) 2020.05.25