kh교육

(20250814036)아파치 서버, TCP

boangod 2025. 8. 17. 19:43

아파치 서버

 

 

HTTPD 서버 관리와 Web page 관리는 서로 다른 책무이므로 반드시 분리 구성한다.

 

• Web page 관리자가 시스템 디렉토리에 접근해서는 안된다.

• Web page 관리자 계정 web 계정을 생성하고 홈디렉토리 내에서 관리가 이뤄지도록 한다.

 

 

관리자 정보

  • 계정 : webmaster(group:web)
  • Document Root : /home/httpd

 

====================================================

webmaster가 root document밖으로 못나가게 하고 webmaster만 접속 가능하게 만들기.

 

192.168.10.147번에서 설정

 

groupadd -g 5000 web
useradd -g 5000 -u 5001 webmaster
passwd webmaster
12

dnf list vsftpd
dnf install -y vsftpd
dnf install -y ftp
systemctl start vsftpd.service
systemctl enable vsftpd.service

 

vi /etc/vsftpd/vsftpd.conf

--------------------------------------

chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES

 

pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO

--------------------------------------

 

vi user_list                     // user_list에 등록된 사람만 접속이 가능

--------------------------------------

webmaster

--------------------------------------

 

 

vi /etc/vsftpd/chroot_list

--------------------------------------
root
--------------------------------------

 

systemctl restart vsftpd

mount --bind /home/httpd/ /home/webmaster/httpd

echo "mount --bind /home/httpd/ /home/webmaster/httpd" >> /etc/rc.d/rc.local

/app/apache/bin/apachectl restart

chown -R webmaster.web /home/httpd/

 

==========================================================

 

 

다중 IP 설정

 

ip addr add 192.168.10.148/24 dev ens160                // 리부팅하면 없어짐.

/app/apache/bin/apachectl start

 

 

192.168.10.146에서

 

vi /etc/named.conf

--------------------------------------

zone "st10.itc." IN {
        type master;
        file "st10.itc.zone";
};

--------------------------------------

 

cp st10.sec.zone st10.itc.zone                  // 안에 내용 맞게 수정.

systemctl restart named.service

 

 

==========================================================

 

147, 148로 접속하면 각각 다른 화면이 보이게 만들기

(sec, itc로 접속하면 각각 다른 화면 보이게 하기.)

 

 

cd /home/httpd/sec
cd /home/httpd/itc
vi /home/httpd/sec/index.html
vi /home/httpd/itc/index.html

 

vi /app/apache/conf/httpd.conf

--------------------------------------

DocumentRoot "/home/httpd"          // 이걸로 수정
<Directory "/home/httpd">                // 이걸로 수정

 

<VirtualHost 192.168.10.147>
  DocumentRoot /home/httpd/sec
  ServerName 192.168.10.147
</VirtualHost>
<VirtualHost 192.168.10.148>
  DocumentRoot /home/httpd/itc
  ServerName 192.168.10.148
</VirtualHost>                                      // 밑에 추가

--------------------------------------

 

/app/apache/bin/apachectl restart

 

 

==========================================================

 

 

Web – httpd.conf(가상 호스트)

IP 기반 호스트

<VirtualHost 접속IP>

     DocumentRoot 홈디렉토리

     ServerName IP또는 도메인명

</VirtualHost>

• <Virtual Host> 항목에는 모든 전역 설정 파라미터가 기술 가능하다.

• 예

<VirtualHost 192.168.10.##2>

     DocumentRoot /home/httpd/sec

     ServerName 192.168.10.##2

</VirtualHost>

<VirtualHost 192.168.10.##3>

     DocumentRoot /home/httpd/itc

     ServerName 192.168.10.##3

</VirtualHost>

 

 


tcp

 

복습

 

윈도우 = rtt안에 보낼수 있는 패킷.

윈도우 안에있는 패킷 → go back n에서            : 전송은 됬지만 확인은 안된 패킷

                                     selective repeat 에서 : send_base이후에 보냈거나, 보낼수있는 모든 패킷

 

 

in-order → 시퀀스 넘버가 기다리는 놈이 오면 (그거보다 큰 놈이 오면 out-order)

send_base가 기준이 된다.

ㄴ ack가 안온패킷중에 가장 오래된 패킷

timer → go back n에서           : send_base에만 있다.

             selective repeat 에서 : 보낸 모든 패킷에 하나씩 다 있다.

 

go back n timeout은 send_base에서만 발생함

selective repeat 아무곳에서나 발생함

 

go back n 윈도우안에있는 모든 패킷을 재전송함.

selective repeat 타임아웃된 패킷만 재전송

 

go back n : ack(n)까지 잘 받았다.

selective repeat : ack(n)을 잘 받았다.

 

 

go back n

n < sendbase: 버림

 

selective repeat

n < sendbase: 버퍼링

 

단점

go back n  :재전송이 너무 많음

selective repeat  : 타이머가 많아서 cpu를 많이 사용함

 

 


 

TCP: overview

 

point-to-point

• 단일 송.수신자 간에 통신

ㄴ 1대1통신

 

신뢰적인 in-order byte stream

• Message에 구분이 없다.

ㄴ순서를 보장한다.

ㄴ tcp는 텍스트를 전송하기 위한 프로토콜이라서 모든 데이터 단위는 byte로 한다.(줄여서 워드로 사용할수도 있음.)

ㄴ 어떤 메시지를 주건 무조건 바이트로 받는다. (무조건 텍스트로 생각하고 자른다)

 

pipelined

• 혼잡제어나 흐름제어를 통해 window size를 제어한다.

혼잡제어 = 센더,(윈도우 사이즈를 네트워크가 혼잡하면 줄인다.)

흐름 제어 = 리시버(윈도우 사이즈의 상한선을 알려준다.)

 

송,수신측은 buffer를 갖는다

ㄴ 송신쪽 : 재전송을 위해서, 수신쪽 : out-order애들을 위해서

 

full duplex → 양쪽이 동시에 보낼수있다.

▲  동일 connection에 양단이 동시에 data를 전송 할 수 있다.

MSS : maximum segment size → (segment에서 app layer data의 최대 크기)

 

connection oriented

▲  handshake를 먼저 수행한다.

 

Flow control

▲ sender가 receiver를 압박하지 못하도록 receiver가 전송량을 통제한다.

 

 

 

세그먼트 구조

source port # dest port #
sequence number
acknowledgement number
header
length
not
used
U A P R S F Receive window
checksum Urg data pnter
Options(variable length)
application data(variable length)

 

 

tcp 헤더 = 20byte = 4byte 5줄

 

source port = 2바이트

dest port = 2바이트

ㄴ 65535까지 포트가 있을수 있다.

 

시퀀스 넘버 = 32비트

 

ack 넘버 = 32비트

 

header length  필드(워드 단위= 4바이트) = 5워드가 있을거다.

 

not used = 6비트는 사용 안함

 

 

URG  =  사용안함.

ACK = 아크날리지 번호 해석해 , 0이면 보지 마세요

PSH  =  안씀

RST  = 접속을 초기화 합시다.(첨부터 다시해요)

SYN = 3-way handshake 할때 사용. (규정이 없어서 일반적으로 0)

FIN = 접속 끊어요

 

r,s,f = 상호 베타적인 관계

 

Receive window  = 자신의 리시브 버퍼 사이즈를 여기에 넣어서 보내준다.(흐름제어)

 

16비트 checksum = 비트가 깨졌는지 안깨졌는지 확인

 

Urg data = 안씀.

 

Options = 현재는 아무것도 없다.

 

 

 

라우터는 cpu가 저성능이기때문에, 데이터그램이 크게 보일수있다.

그럼 데이터그램을 라우터에서 쪼개고 여러개 보낸다

합쳐지는건 데스티네이션에서 합쳐진다. (다음 라우터에서는 못 합친다. 합치는기능이 없기 때문에( 패킷이 뒤죽박죽 올수도 있기때문))

 

 

seq# 와 ACK

 

seq#

  • Segment의 첫번째 byte의 stream에서의 byte 순서 번호

ㄴ 단위는 글자, 시퀀스번호의 첫번째 값은 난수로 지정됨.

ㄴ 상대적인 시퀀스 넘보를 알려줌.

 

 

ACKs:

   • 다음에 받을 첫번째 byte의 순서번호

   • Cumulative ACK가 가능하다. → 앞쪽에 있는거 다 잘받았어요 : 78번까지 잘 받아써용

 

 

TCP의 timeout는 어떻게 설정 할까???

ㄴ tcp는 첫번째 패킷에만 타이머가 있다, 시간은 rtt보다 약간 크게 잡아야한다.

 

 

EstimatedRTT(계산된 rtt)는 어떻게 설정 할까???

SampleRTT → 측정한 rtt(편차가 크다.) 이걸로 EstimatedRTT를 계산한다.

: segment가 송신된 시간으로부터 ACK가 도착한 시간간격, 재전송 segment는 무시

 

 

EstiamteRTT = (1-a) * EstiamteRTT + a*SampleRTT

 

a = 0.125

셈플rtt를 12.5퍼만 적용하세요

처음은 SampleRTT : EstimatedRTT 같다고 생각함 → 두번째부터 계산.

 

약간 크게 잡는다 = 얼만큼 크게 잡을꺼냐?

ㄴ SampleRTT랑 EstimatedRTT의 값의 차가 크면 네트워크가 불안정하다는 소리

                                                       값의 차가 작으면 안정하다는 소리

 

 

timeout 설정

▲  EstimatedRTT보다 약간의 여유값을 더한 값으로 설정

      • SampleRTT의 변화량이 큰경우는 따라서 커져야한다. (반대의 경우도 동일)

▲  DevRTT

: SampleRTT가 EstimatedRTT로 부터 얼마나 벗어나는지에 대한 예

 

 

DevRTT = (1-β)* DevRTT + β* |SampleRTT-EstimatedRTT|

(β의 권장값 : 0.25= 25퍼만 적용)

 

실제 timeout 설정 TimeoutInterval = EstimatedRTT + 4*DevRTT

ㄴ 적당히 계산해서 EstimatedRTT를 더해준 값, rtt값보다 조금 더 크게 잡아서 TimeoutInterval 잡으세요