1. telnet 명령어 활용 실습
telnet [IP 또는 도메인] [포트]
telnet 명령어는 윈도우에서 해당 포트에 연결가능한지 확인하는 명령어입니다.
저는 맥북을 사용중이라 바로 telnet 을 쓰지는 못합니다.
그래서 홈브루를 통해 telnet 을 깔았습니다.
homebrew 는 아래 사이트에 들어가서 절차에 따르면 설치할 수 있습니다.
Homebrew
The Missing Package Manager for macOS (or Linux).
brew.sh
homebrew 가 깔리고 난후
brew install telnet
명령어를 입력합니다.
그 후 telnet [IP도메인] [port번호]
를 입력하면 해당 도메인에 연결된것을 알 수 있습니다. 저는 실습 자료에 있는 도메인과 포트번호를 입력하였습니다.
그러다가
Connection closed by foreign host
이라는 메시지가 떴습니다.
이 메시지의 의미를 찾아보니 서버/클라이언트 사이에 해당 포트는 모두 열려 있어서, 일단 정상적인 접속은 됐으나, 어떤 원인에 의해 서버가 접속을 close 한다는 뜻이었습니다.
2. 패킷 캡쳐 실습
다음으로는 Wireshark 를 설치하여
웹페이지 클릭 시 발생되는 패킷을 캡쳐하는 실습을 진행하였습니다.
와이어샤크를 사용해 패킷을 캡쳐하였습니다.
GET / HTTP.1.1 로 요청을 한 후 HTTP/1.1 302 Found 의 답을 받음을 알 수 있습니다. 이는 통신 방법은 HTTP/1.1로 GET 방식으로 요청을 하고 그에 대한 대답을 받은 것을 알 수 있습니다다.
HTTP 302 응답 코드 는 클라이언트가 요청한 리소스가 헤더에 주어진 URL에 일시적으로 이동되었음을 가리키는 리다이렉트 상태 응답 코드입니다.
3. HTTP 란 무엇일까
HTTP 는 socket 을 이용한 웹 페이지 전송 프로토콜입니다.
HTTP 는 TCP 를 기반으로 합니다.
웹 페이지를 전송한다고 했는데, 여기서 웹 페이지는 객체들의 집합이라고 할 수 있습니다.
객체란 HTML file 이나 JPEG image 나 audio/video 파일 등등을 말합니다.
우리가 웹페이지를 식별하기 위해서는 URL 이란 것을 사용합니다.
이 URL 는 universal resource locator 의 약자로
다음과 같은 구조로 구성되어 있습니다. 가장 앞에 있는 http 는 프로토콜 / 그 다음 나오는 networks.cnu.ac.kr 는 도메인 / 그 후 path나 파라미터나 fagment 가 존재합니다. 여기서 말하는 path 가 바로 파일의 경로를 가리킵니다. 해당 도메인에서 어떠한 폴더에 접근해줘~! 라는 느낌입니다.
그렇다면 HTTP 프로토콜에 대해 알아봅시다. 클라이언트가 서버에게 요청 메시지를 보낼때는 GET 을 사용합니다.
아래 그림과 같은 메시지로 요청했다고 합시다.
GET /restapi/vi.0 HTTP/1.1 에서 요청 내용을 알 수 있습니다.
4. 웹 서버 접속시 우리가 개발해야하는 부분은 무엇인지?
전통적으로는 socket API를 이용한 TCP socket을 이용한 HTTP 요청 파싱과 응답 모듈을 개발해야 했습니다.
여기서 말하는 소켓이란 서로 멀리 떨어져있는 host(컴퓨터)간에 데이터를 주고 받을 수 잇도록 프로그램으로 구현한 것을 말합니다.
인터넷에서 컴퓨터들간 정보를 주고받기 위해선 프로토콜이 필요합니다. 프로토콜이란 언어 같은 존재로 예를들면 프랑스어와 한국어로는 대화할 수 없듯이 통신을 하는 기기 사이에선 같은 프로토콜을 사용해야합니다. 인터넷 프로토콜 슈트(모음) 중에선 TCP/IP 가 가장 많이 사용됩니다. TCP, IP 는 별개지만 합쳐서 주로 사용됩니다. TCP/IP 를 사용하겠다는 것은 IP 주소 체계를 따르고 IP Routing 을 이용해 목적지 도달하며 TCP의 특성을 활용해 송신자와 수신자의 논리적 연결을 생성하고 신뢰성을 유지하도록 함을 의미합니다.
HTTP, FTP, SMTP 등의 어플리케이션 프로토콜은 TCP 를 기반으로 하고 IP 위에서 동작합니다.
아무튼 전통적으로는 이 TCP 소켓을 이용하여 HTTP 요청 파싱와 응답 모듈을 개발해야했지만,
현재는 Web framework를 이용합니다.
프레임워크 위에서 개발을 하면 우리는 일을 하기위한 전체 구조와 동작방식을 만들지 않습니다. 프레임워크로 개발을 할 경우 전체 동작방식은 프레임워크가 제공하고 우리는 프레임워크의 일정 부분만 개발합니다.
웹프레임워크
• Python Django, Flask, FastAPI
• Java Netty, Spring
• JavaScript: Node.js, Express.js, Ruby on Rails • ASP.NET
'Network' 카테고리의 다른 글
[컴퓨터네트워크] DNS (0) | 2023.09.25 |
---|---|
[컴퓨터네트워크] 인터넷 속도 측정 (0) | 2023.09.25 |
[컴퓨터네트워크 실습2] Docker 활용하여 웹 서버 띄우기 (0) | 2023.09.16 |
[네트워크] Nginx 공부 시작 / Proxy란 무엇인가 (0) | 2023.09.13 |
[L3] #1 IP Packet (0) | 2023.04.04 |