[Network] From Ping to HTTP 2. One listening server per port & Be a Web Server

llunaB·2024년 3월 10일
0

포트 하나당 listening server 는 기본적으로 1개 배치된다.

단, 여러개의 thread 실행할 경우 child process 등 경우 한번에 여러개의 connection을 실행하기도 한다. (웹서버의 기능)

기본적으로 sudo lsof -i 를 써서 listening 중인 program을 찾을 수 있다.

lsof는 list open files 의 약자이다.

-i 는 internet socket만 찾는다.

vagrant@vagrant:~$ sudo lsof -i
COMMAND    PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind    456            root    6u  IPv4  15628      0t0  UDP *:sunrpc
rpcbind    456            root    7u  IPv4  15629      0t0  UDP *:632
rpcbind    456            root    8u  IPv4  15630      0t0  TCP *:sunrpc (LISTEN)
rpcbind    456            root    9u  IPv6  15631      0t0  UDP *:sunrpc
rpcbind    456            root   10u  IPv6  15632      0t0  UDP *:632
rpcbind    456            root   11u  IPv6  15633      0t0  TCP *:sunrpc (LISTEN)
systemd-n  462 systemd-network   19u  IPv4  15945      0t0  UDP vagrant:bootpc
systemd-r  490 systemd-resolve   12u  IPv4  15991      0t0  UDP localhost:domain
systemd-r  490 systemd-resolve   13u  IPv4  15992      0t0  TCP localhost:domain (LISTEN)
sshd       883            root    3u  IPv4  19750      0t0  TCP *:ssh (LISTEN)
sshd       883            root    4u  IPv6  19765      0t0  TCP *:ssh (LISTEN)
sshd      1409            root    3u  IPv4  22697      0t0  TCP vagrant:ssh->_gateway:55207 (ESTABLISHED)
sshd      1486         vagrant    3u  IPv4  22697      0t0  TCP vagrant:ssh->_gateway:55207 (ESTABLISHED)

이 중 (LISTEN) 만 골라보면 program name 은 다음과 같다.

rpcbind
systemd-r
sshd

vagrant@vagrant:~$ sudo lsof -i
COMMAND    PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind    456            root    8u  IPv4  15630      0t0  TCP *:sunrpc (LISTEN)
rpcbind    456            root   11u  IPv6  15633      0t0  TCP *:sunrpc (LISTEN)
systemd-r  490 systemd-resolve   13u  IPv4  15992      0t0  TCP localhost:domain (LISTEN)
sshd       883            root    3u  IPv4  19750      0t0  TCP *:ssh (LISTEN)
sshd       883            root    4u  IPv6  19765      0t0  TCP *:ssh (LISTEN)

Vagrant Webserver 설정

  1. 아파치 설치 및 설정

host : 127.0.0.1 4567
guest : 10.0.2.15 1234

  1. nc -l 1234 로 포트를 열어준다.

https://learn.udacity.com/courses/ud256/lessons/5a6ddf10-29e2-4d97-a119-507e5a63273f/concepts/c2710b5d-35d4-4150-8049-a7a2686568d9/instructions

https://developer.hashicorp.com/vagrant/tutorials/networking-provisioning-operations/getting-started-networking

  1. apache2 포트가 열려있음을 확인
apache2    794            root    4u  IPv6  19106      0t0  TCP *:http (LISTEN)
apache2    795        www-data    4u  IPv6  19106      0t0  TCP *:http (LISTEN)
apache2    796        www-data    4u  IPv6  19106      0t0  TCP *:http (LISTEN)
  1. guest 에서 해당 포트로 다시 HTTP 를 송신

printf 'HTTP/1.1 302 Moved\r\nLocation: https://www.eff.org/' | nc -l 1234

  1. 크롬브라우저에 해당 페이지가 뜬다. 서로 통신중임.

한번에 여러 connection을 수신하는 방법?

프로세스와 스레드 풀을 만들어놓고
각각이 하나의 connection을 한번에 handleg한다.

신규 프로세스를 생성하는것보다 빠르지만
request 제한이 있다.

profile
안녕하세요. 성장하는 주니어 개발자입니다. :-)

0개의 댓글