🧭 CS Study - 컴퓨터 네트워크
🚩 주제 : 네트워크 서비스와 애플리케이션 계층
📘 참고 서적 : TCP/IP 쉽게, 더 쉽게 - 리브로웍스
Application Layer는 사용자가 직접 사용하는 서비스를 제공하는 계층이다. Application Layer의 프로토콜은 아래와 같다. 사용자가 직접 사용하는 프로토콜과 OS나 다른 Application Layer의 프로토콜이 사용하는 간접 사용 프로토콜이 있다.
사용자 사용 방식 | 프로토콜 | 동작 방식 |
---|---|---|
직접 | HTTP | 웹 클라이언트 & 웹 서버 사이에서 웹 페이지 데이터 전송 |
직접 | POP, SMTP, IMAP | 메일 송수신 |
직접 | SMB, AFP | LAN 내의 파일 공유 |
직접 | FTP | 서버를 통한 파일 송수신 |
직접 | Telnet, SSH | 원격 서버 제어 |
간접 | DNS | 도메인명과 IP 주소 매핑 변환 |
간접 | DHCP | LAN내의 컴퓨터에 IP 할당 |
간접 | SSL/TLS | 통신 데이터 암호화 |
간접 | NTP | 네트워크 내의 시스템 시간 동기화 |
간접 | LDAP | 자원 통합 관리에 필요한 디렉터리 서비스 제공 |
클라이언트 PC의 웹 브라우저는 웹 서버와 통신할 때 HTTP(HyperText Transfer Protocol) 프로토콜을 사용한다. 웹 브라우저와 웹 서버는 요청, 응답을 주고 받는다.
HTTP 메세지는 요청/응답 정보 행, 헤더, 빈 줄, 메시지 바디(응답일 경우 HTML 데이터를 포함한다.)로 구성된다.
HTTP는 통신할 때 상태가 없다는(Stateless) 특징이 있다. 그래서 한 번씩 정보를 주고 받은 후에 상태정보를 저장하지 않고 통신을 끊는다.
HTTP 요청을 보낼 때는 URL(Uniform Resource Locator)라는 문자열을 사용한다.
이는 스키마(프로토콜), 호스트(서버 이름), 도메인(서버 운영 조직), 디렉토리(서버내의 디렉토리), 파일(디렉토리 내의 파일)로 구성된다.
http://www.codns.com/b/B05-246
HTTP응답 데이터의 첫 행에는 요청에 대한 응답 상태 표시를 위한 상태코드가 들어간다. 상태코드 100번대는 정보, 200번대는 성공, 300번대는 경로 전환, 400번대는 클라이언트 에러, 500번대는 서버에러를 의미한다.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages
** 웹 서비스 vs 웹 페이지
: 웹 브라우저가 웹 페이지를 요청하면 웹 서버가 만들어둔 정적인 HTML 파일로 응답한다.
: 웹 브라우저가 웹 서비스를 요청하면 웹 서버가 결과를 미리 만들어 두지 않고 서버 프로그램이 HTML 데이터를 동적으로 만들어서 응답한다.
HTML 요청을 보낼 때는 주로 Get 혹은 Post 방식을 사용한다. Get 방식은 입력 폼의 내용이 요청 행에 포함된다. Post 방식은 입력 폼의 내용이 메세지 바디에 포함된다. Get 방식처럼 육안으로 입력 내용이 보이지는 않지만 Post 방식 역시 메세지 바디에 담긴 내용을 해석하면 내용이 노출되기 때문에 보안상 완전히 안전하다고는 할 수 없다.
HTTP는 Stateless 프로토콜이기 때문에 요청과 응답을 주고 받은 후에는 통신을 끊는다. 그래서 사용자를 구분해야할 때는 사용자 접속 세션으로 인식될 수 었도록 쿠키를 사용한다.
Set-Cookie라는 메세지가 응답 메세지에 있으면 클라이언트는 로컬 디스크에 그 내용을 쿠키 형태로 저장한다. 쿠키에 저장되는 값은 기본적인 세션 ID 등의 식별 정보이다. 유출되면 위험한 값들은 서버에 저장하는 것이 원칙이다.
이메일을 발신할 때는 SMTP(Simple Mail Transfer Protocol)을 사용하고 이메일을 수신할 때는 POP(Post Office Protocol)을 사용한다.
SMTP는 상태를 유지하는 프로토콜이기 때문에 전송 종료 명령이 보내질때까지 통신한다. SMTP는 클라이언트 PC에서 메일 서버로 메일을 보낼 때도 사용하고 발신자의 메일 서버에서 수신자의 메일 서버로 메일을 전달할 때도 사용된다. SMTP에는 사용자 인증 체계가 없기 때문에 스팸 메일 발송에 악용될 수 있다. 그래서 그 대안으로 SMTP Auth 프로토콜을 사용하기도 한다. 이는 SMTP에 사용자 인증 기능을 추가한 프로토콜이다.
메일 서버에 저장된 메일을 확인하거나, 메일 개수 확인, 메일 삭제 등의 처리를 할 때는 POP를 사용한다. POP는 사용자 인증을 먼저 수행한 뒤 메일 관련 통신을 수행한다. 현재 사용되는 POP는 POP3이다.
** POP 프로토콜은 클라이언트가 메일을 수신하면 메일 서버에 저장된 메일을 삭제한다. 그래서 메일을 오래 보관하려면 클라이언트 PC에 메일을 보관할 장소가 필요하다. IMAP 프로토콜은 클라이언트가 메일을 수신하더라도 메일 서버에서 메일을 삭제하지 않고 보관한다. 그래서 이는 저장공간이 적은 스마트폰과 같은 기기에 적합하다.
개인 컴퓨터에서 파일 공유는 서로의 컴퓨터가 서버, 클라이언트의 역할을 동시에 수행하기 때문에 Peer to Peer 방식을 사용한다. 파일을 공유할 상대 PC를 찾는 방법은 처음 컴퓨터가 네트워크에 연결될 때 네트워크에 연결된 PC들이 자신이 연결되었음을 통보한다. 이를 통해 다른 컴퓨터들은 서로를 식별하여 파일을 공유할 수 있다. 기존 OS에서는 파일 공유 프로토콜이 서로 달랐는데 최근에는 서로 다른 OS라도 다른 OS들이 사용하는 프로토콜을 지원하기 때문에 파일 공유가 가능하다.
FTP(File Transfer Protocol)은 파일 전송 프로토콜이다. 주로 인터넷으로 연결된 서버와 파일을 송수신할 때 사용된다.
FTP는 두 가지 접속 형태를 사용한다. 파일을 주고받기 위한 데이터 커넥션, 명령어를 보내기 위한 컨트롤 커넥션이다. 접속 형태를 분리시켜서 파일을 주고 받을 때도 명령어를 수행할 수 있다.
FTP 서비스에서는 서버 내부에서 외부로 나가는 통신을 방화벽이 차단되어 나가지 못하는 경우가 발생한다. 이런 상태를 액티브 모드라고 한다.(컨트롤 커넥션 : 클라이언트 생성, 데이터 커넥션 : 서버 생성) 클라이언트에서 서버 쪽으로 데이터 커넥션을 만들어 주면 파일을 전송할 수 있다.(컨트롤 커넥션, 데이터 커넥션 : 클라이언트 생성) 이러한 상태를 패시브 모드라고 한다.
Telnet이나 SSH는 원격지의 컴퓨터를 명령어로 제어하기 위한 프로토콜이다. GUI를 사용한 원격제어의 경우 RDP, VNC, RFB를 사용한다.
음성이나 동영상 데이터를 전송하기 위해 VoIP(Voice over IP)기술이 사용된다. 음성, 동영상 데이터는 용량이 크기 때문에 신뢰성 보다는 속도를 중시해야해서 UDP 프로토콜을 사용한다.