1일 1커밋🌱
애플리케이션 계층(Layer 5)과 부록
1. 애플리케이션 계층
TCP/IP 5계층에서 애플리케이션 계층은 5계층에 해당한다. TCP/IP 5계층에서 애플리케이션 계층은 OSI 7계층에서 세션, 프레젠테이션, 애플리케이션 층을 통틀어 표현한다. 사용자는 애플리케이션 계층의 프로토콜을 이용해 애플리케이션을 만들 수 있다. 네트워크가 계층화되었기 때문에 하위 계층에서 어떻게 프로토콜이 동작하는지 몰라도 구현할 수 있다.
2. DHCP(Dynamic Host Configuration Protocol)
DHCP(Dynamic Host Configuration Protocol)는 사용자가 중복되지 않는 IP를 적절하게 선택해야 하는 번거로움을 해결하기 위해서 자동으로 적절한 IP를 할당할 수 있게 해주는 프로토콜이다.
할당할 수 있는 특정 범위의 IP 주소를 등록해놓고 호스트는 DHCP 서버에게 IP를 요청하는데 이를 DHCP Discovery라고 부른다. DHCP 서버는 응답으로 호스트에게 적절한 IP 주소를 제안하는데 이를 DHCP Offer라고 부른다. 호스트는 DHCP Offer에 응답해 해당 IP 주소를 할당해달라고 요청하는데 이를 DHCP Request라고 부른다. DCHP는 해당 IP 주소를 할당한다고 최종적으로 알리는 DHCP ACK를 전송한다.
DHCP 덕분에 사용자는 IP 주소를 일일이 찾아 할당할 필요가 없게 되었다.
3. DNS(Domain Name Service)
DNS(Domain Name Service)는 호스트마다 다른 IP 주소를 사람이 일일이 기억하기 힘들기 때문에 IP 주소에 도메인명을 붙여주기 위해 만들어진 프로토콜이다. DNS는 사용자가 호스트명을 입력하면 자동으로 해당 호스트의 IP가 저장되어 있는 데이터베이스 서버로 연결되어 해당 호스트의 IP 주소를 알 수 있게 해준다.
호스트명은 하나의 호스트의 IP를 나타내는 이름이라면 도메인명은 호스트들의 그룹을 나타내는 이름이라고 볼 수 있다. 만약 www.naver.com, mail.naver.com, ftp.naver.com 이렇게 세 개의 주소가 있다면 맨 앞에 붙은 이름은 호스트명으로 하나의 호스트를 나타낸다. 즉, www 서비스를 제공하는 호스트 하나, 메일 서비스를 제공하는 호스트 하나, FTP 서비스를 제공하는 호스트 하나이다. 그리고 naver.com은 도메인명으로 네이버라는 그룹을 나타내는 이름이다.
도메인은 계층 구조로 설계되어 있다. 도메인명을 보면 점으로 구분하는 것을 볼 수 있다. 이렇게 점으로 구분한 것은 조직에 따라 구분한 것이다. 이런 것들은 최상위 도메인이라고 부르는데 이 중 국가에서 관리하도록 만든 최상위 도메인이 있는데 그 중 .kr은 한국에서 관리하도록 만들어진 것이다. kr이라는 도메인은 인터넷진흥원에서 관리하고 있다. kr 이전에 나오는 co는 2차 도메인이라는 것으로 호스트의 성격에 맞는 것을 선택한다. 한국의 2차 도메인은 ac(대학), co(기업), go(정부기관), or(비영리기관), ne(네트워크 기관) 등이 있다. 이렇게 계층적인 구조로 되어있기 때문에 국제인터넷주소관리기구가 한국의 인터넷진흥원에 KR이라는 최상위 도메인을 부여하고 2차 도메인은 국제인터넷주소관리기구에서 신경쓰지 않고 인터넷진흥원이 관리할 수 있다.
DNS는 도메인명과 매핑한 IP 주소를 데이터베이스 서버에서 가져오는데 이 서버를 네임서버라고 부른다. 브라우저에 naver.com을 입력한다는 것은 www라는 호스트명을 생략해 검색하는 것이다. 따라서 실제로는 www.naver.com을 검색한 것이다. 즉 naver.com이라는 도메인명에 www라는 호스트명을 검색한 것이다. 가장 먼저 컴퓨터는 hosts 파일을 열어서 naver.com이 있는지 검사한다. hosts 파일에 naver.com이 없다면 컴퓨터에 설정된 가장 가까운 네임 서버로 연결해 확인해본다. 컴퓨터에 설정된 네임 서버는 터미널에서 ipconfig -all을 입력하면 확인할 수 있다. 만약 가까운 네임 서버가 www.naver.com의 IP 주소를 알고 있다면 바로 알려주고 모른다면 루트 네임 서버에 물어본다. 루트 네임 서버도 www.naver.com의 IP 주소를 알고 있다면 바로 알려주지만 모른다면 최상위 도메인이 .com이므로 .com 네임 서버의 주소를 알려준다. 그럼 가까운 네임 서버는 .com 네임 서버에게 www.naver.com의 IP 주소를 물어보고 .com 네임 서버는 네이버 네임 서버의 주소를 알려준다. 그럼 가까운 네임 서버는 네이버 네임 서버에게 www.naver.com의 IP 주소를 알려주고 가까운 네임 서버는 우리에게 www.naver.com의 IP 주소를 알려준다. 그러면 컴퓨터는 해당 IP로 데이터를 요청하고 통신할 수 있게 된다.
4. Telnet과 SSH(Secure Shell)
Telnet과 SSH는 원격에 있는 컴퓨터에 접속해 원격 컴퓨터를 컨트롤 할 수 있는 프로토콜이다. Telnet이나 SSH를 이용하면 다른 컴퓨터 앞에 직접 가지 않더라도 네트워크로 연결되어 멀리 떨어진 컴퓨터에 로그인할 수 있다.
Telnet은 로그인할 때 비밀번호가 암호화되지 않고 그대로 전송되기 때문에 중간에서 해킹할 수 있다. 그래서 최근에는 Telnet의 보안 취약성 때문에 제조사에서 Telnet의 포트인 23번 포트를 막아둔다.
이러한 이유로 암호화를 사용하는 SSH(Secure Shell)가 만들어졌다. SSH는 Public Key와 Private Key를 이용해 인증하는데 Public Key는 외부에 공개해도 되고 Private Key는 외부에 공개되어서는 안되고 컴퓨터에만 저장되어야 한다. Public Key는 데이터를 암호화할 수 있고 Private Key는 암호화된 데이터를 복호화할 수 있다.
Telnet과 SSH는 CLI로 된 클라이언트뿐만 아니라 PuTTY처럼 GUI로 된 클라이언트도 있다.
5. FTP(File Transfer Protocol)
FTP(File Transfer Protocol)는 파일을 전송하기 위한 프로토콜로 TCP 커넥션 2개를 사용한다. 하나는 제어용, 다른 하나는 데이터 전송용이며 제어용을 통해 명령어를 전송하고 실제 파일 데이터는 데이터 전송용으로 전송하는 방식이다.
FTP는 사용자명과 패스워드를 요구하는 인증 FTP 서버와 누구나 접속할 수 있는 익명 FTP 서버로 나뉜다.
최근에는 부족한 저장 공간을 위해서 클라우드 서비스(Amazon EFS, Amazon S3)나 NAS 장치를 구입해 크기가 큰 파일을 외부에 저장한다. 이때 해당 장치를 FTP 서버로 설정하면 외부에서 FTP 클라이언트로 언제 어디서든 파일을 다운로드 할 수 있다.
파일 전송은 TCP나 UDP를 이용하는 것도 가능하지만 FTP를 이용하면 대량의 파일을 효율적으로 전송할 수 있다.
6. SMTP(Simple Mail Transfer Protocol), POP(Post Office Protocol), IMAP(Internet Message Access Protocol)
SMTP(Simple Mail Transfer Protocol)은 메일을 전송하기 위한 프로토콜이다. 초기에는 송신자와 수신자가 SMTP만을 이용해 메일을 주고받았다. 송신자가 이메일을 보내면 수신자의 하드디스크에 저장되고 수신자는 하드디스크에 저장된 이메일을 확인했다. 하지만 SMTP는 TCP 커넥션이 확립된 상태에서만 메일 전송이 이루어지기 때문에 수신자가 컴퓨터를 꺼놓으면 메일을 받을 수 없었다.
그래서 메일 서버라는 것을 만들어 송신자는 SMTP를 이용해 메일 서버로 전송하고 수신자는 POP(Post Office Protocol)을 이용해 메일 서버에서 메일을 수신한다. 수신자는 메일 서버에게서 자신에게 온 이메일을 하드디스크에 저장하고 메일 서버에서는 이 내용을 삭제한다. 이 방식은 사용자가 다른 컴퓨터나 핸드폰을 이용하는 경우 동기화가 어렵다는 단점이 있다.
IMAP(Internet Message Access Protocol)은 POP과 마찬가지로 메일을 수신할 때 사용되는 프로토콜인데 메일 서버에 도착한 이메일을 수신자가 읽더라도 삭제하지 않는다. 따라서 POP과는 달리 메일에 대한 정보를 동기화하기 쉽다.
SMTP는 25번 포트, POP은 110번 포트, IMAP은 143번 포트를 사용한다.
7. HTTP(HyperText Transfer Protocol)
HTTP는 웹에서 통신하기 위한 프로토콜로 웹 브라우저나 모바일 애플리케이션에서 자주 사용된다. 사용자가 HTTP를 이용해 서버에게 요청을 보내면 서버와 TCP 커넥션을 확립하고 서버는 사용자가 요청한 데이터를 보내주고 TCP 연결을 끊는다.
HTTP의 초기 버전, 즉 Version 1(HTTP/1)에서는 사용자가 HTTP를 이용해 서버에게 요청을 보내면 서버와 TCP 커넥션을 확립하고 서버는 사용자가 요청한 데이터를 보내주고 TCP 연결을 끊는다. 이런 식으로 요청이 있을 때마다 TCP 커넥션을 만들고 끊는 것을 반복하다보니 조금 비효율적이었다. HTTP 버전 1.1(HTTP/1.1)에서는 이를 개선하여 하나의 TCP 커넥션을 이용해 여러 번의 통신을 할 수 있게 되었다. 또한 HTTP 버전 2(HTTP/2)에서는 더 많은 데이터를 한 번에 보내는 다중 전송을 지원해 빠른 전송이 가능해졌다. 아직 상용화되지는 않았지만 HTTP 버전 3에서는 TCP가 아닌 UDP를 사용해 더 빠른 전송을 제공할 예정이다.
HTTP는 크게 요청 헤더와 응답 헤더로 나뉜다. 요청 헤더를 보낼 때는 HTTP Request 메서드를 이용하고 응답 헤더를 보낼 때는 HTTP 상태 코드가 이용된다.
참고 : https://developer.mozilla.org/ko/docs/Web/HTTP/Headers
HTTP Request 메서드에는 GET, POST, PUT, PATCH, DELETE가 있다. 먼저 GET은 서버에게 데이터를 요청하는 메서드이다. POST는 서버에게 새로운 데이터를 저장해달라고 요청하는 메서드이다. PUT은 서버에게 기존의 데이터를 완전히 바꿔달라고 요청하는 메서드이며, PATCH는 기존의 데이터에서 일부를 변경해달라고 요청하는 메서드이다. 마지막으로 DELETE는 서버에서 데이터를 제거해달라고 요청하는 메서드이다.
참고 : https://developer.mozilla.org/ko/docs/Web/HTTP/Methods
HTTP 상태 코드는 크게 100번대, 200번대, 300번대, 400번대, 500번대로 나뉜다. 먼저 200번은 클라이언트의 요청이 성공적으로 이루어졌다는 것을 의미한다. 201번은 클라이언트의 요청이 성공적으로 이루어져 새로운 리소스가 만들어졌다는 것을 말한다. 400번은 클라이언트가 잘못된 문법으로 서버에게 보내 서버가 요청을 이해할 수 없음을 나타낸다. 403번은 클라이언트가 해당 리소스에 접근할 권한이 없는 경우에 사용된다. 404번은 해당 리소스를 찾을 수 없는 경우에 사용된다. 500번은 서버가 처리하는 과정에서 예상하지 못한 상황일 때 사용한다. 마지막으로 502번은 서버 측 장비에 문제가 생겨 제대로 연결할 수 없을 때 사용된다.
참고 : https://developer.mozilla.org/ko/docs/Web/HTTP/Status
8. Proxy 서버
Proxy는 국내에서 해외 네트워크로 접근할 때 처럼 속도가 느린 환경에서 목적지에 더 빠르게 접근할 수 있게 만들어주는 서비스이다. 중간에 Proxy 서버를 설치해 자주 사용하는 데이터를 Proxy 서버에 미리 준비해두고 요청이 오면 Proxy 서버에서 요청을 해주는 방식으로 사용되며 캐시 서버라고도 불린다. 그러나 클라이언트가 Proxy 서버에게 데이터를 요청하면 Proxy 서버가 Proxy 서버의 IP로 대신 요청해주기 때문에 검열을 피하는 용도로 사용되거나 악의적인 목적으로 IP를 숨기는 용도로 사용되기도 한다.
9. 부록
1) 인터넷과 인트라넷 그리고 VPN
인터넷은 원하는 사람이라면 누구든지 연결할 수 있는 공개형 네트워크이다. 반면 큰 회사들이나 조직은 외부인의 접근을 막기 위해 외부와는 연결되지 않은 폐쇄형 인터넷을 구축하는데 이것을 인트라넷이라고 부른다. 물리적으로 멀리 떨어져 있는 지점을 인트라넷으로 연결하기 위해서는 라우터와 스위치를 활용해 네트워크를 직접 구성해야 한다. 하지만 멀리 떨어져 있는 곳에 장비를 직접 구축하기에는 유지보수도 힘들고 비용도 많이 든다. 따라서 물리적으로 떨어진 인트라넷 간의 연결을 위해 인터넷을 이용한다. IPsec(Internet Protocol Security)라는 프로토콜을 이용해서 IP 패킷을 인증하고 암호화하고 인트라넷과 인터넷에 동시에 연결된 라우터를 준비해두고 인터넷을 이용해 본사와 지사가 통신을 하게 된다. 이렇게 물리적으로는 인터넷에 연결되었지만 인트라넷을 이용할 수 있게 해주는 기술을 가상사설망, 즉 VPN(Virtual Private Network)이라고 부른다. 하지만 인터넷을 이용하기 때문에 보안이 조금 더 약하고 인터넷의 트래픽에 따라 인트라넷의 속도가 달라진다는 단점이 있다. 또한 사용자의 IP는 VPN 장비의 IP로 바뀌기 때문에 악용 사례가 많이 발생하기도 한다.
2) L1, L2, L3, L4, L7 스위치와 로드밸런싱
L1, L2, L3, L4, L7 스위치는 각 계층에 해당하는 스위치를 나타내는 말이다. L1 스위치는 물리 계층의 허브를 가리키고 L2 스위치는 스위칭 허브를 나타낸다. L3 스위치는 라우터, L4 스위치는 Layer 4 계층(트랜스포트 계층)의 기술을 사용하는 라우터를 말한다. 전통적인 라우터는 3계층의 장비를 말하지만, L4 스위치는 포트까지 구분해서 부하를 나눌 수 있는 로드밸런싱 기능이 탑재된 라우터를 말한다. L7 스위치는 포트뿐만 아니라 애플리케이션 단에 있는 패킷의 데이터를 구분해 부하를 나눌 수 있는 로드밸런싱 기능을 제공한다. 하지만 애플리케이션 측의 암호화 때문에 모든 데이터를 볼 수 없어서 일부만 참조해 분산한다. 클라이언트에서 HTTP 요청을 했다면 IP와 Port 그리고 HTTP 요청 헤더를 보고 판단한다. 만약 클라이언트에서 1.2.3.4의 80번 포트로 HTTP GET 메서드로 /users/123을 보냈다면 L7 스위치는 포트 번호와 요청 헤더를 보고 웹서버의 유저를 조회하는 요청이라는 것을 알아내 유저 조회를 담당하는 서버로 보낸다. 만약 1.2.3.4의 80번 포트로 HTTP GET 메서드로 /pictures/100을 보냈다면 L7 스위치는 사진을 조회하는 요청이라는 것을 알아내 사진 조회를 담당하는 서버로 보낸다.
참고
댓글남기기