일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Reference
- urlclassloader
- singleton
- toString
- Session
- Transfer-Encoding
- getRequestURI
- clone
- chunked
- unmodifiableList
- http
- Proxy
- reflection
- Keep-Alive
- cookie
- object
- Content-Length
- InvocationHandler
- Java
- http/1.1
- Today
- Total
pungjoo
FTP에한 고찰 - 작성 중 본문
일반적으로 고가용성(HA : High Availability)을 확보하기 위해서 이중화(복수 서비스를 의미함) 구성을 합니다. 이 이중화라는 것을 다시 분리를 하면 load balance / Cluster 두가지를 고려하게 됩니다.
Load Balance는 부하 분산을 의미하며 cluster는 session 유지를 의미하며 일반적으로 Cluster는 Load Balance의 하부 구조에 속하는 것으로 인식되기도 합니다.
이런 일련의 HA를 위해서는 유입되는 창구를 단일화 해야 합니다.
( 단일화된 창구 장애로 인한 문제를 해결하기 위해서는 일반적으로 Stand-by machine을 운용합니다 )
고찰에 들어 가면서..
위와 같이 한쪽 Node의 장애를 대비해 즉, HA 확보 차원에서 Node를 2개를 운용하고 있었으나 부분적으로 service가되는 반면 다른 한쪽 측면에서는 서비스를 할수 없었는 문제가 발생한 것은 '유입되는 창구의 단일화'라는 전제가 깨져 버렸기 때문입니다.
즉, node1로 연결을 한 service는 정상적으로 처리가 되었고 node2로 연결된 serivce는 node2의 장애로 처리가 안된 상태입니다.
이런 문제를 해결하기 위해서 애초에 '유입 창구' 단일화를 위해서 설정된 L4로 연결을 시켜 놨으면 L4 Member로 등록된 Node1/Node2로 적절히 분배해 주며 장애시에는 장애가 발생된 Node를 격리시키므로서 모든 Request를 정상적인 Node로 한정하게 되어 매끄러운 서비스가 가능했을 겁니다.
그러나 이런 구성에 있어서 FTP에 대한 L4 balance에는 한가지 문제가 있어 쉽게 L4로 변경할 수 없습니다.
(솔직히 문제라고 보기는 뭐하지만.. )
FTP( File Transfer Protocol )에 대한 고찰
FTP specification : http://www.faqs.org/rfcs/rfc959.html
FTP는 오랜 역사를 자랑하는 Protocol입니다. rfc959의 경우는 1985년 10월에 마지막 수정된 문서이네요.
문서를 읽어 보시면 알겠지만, FTP는 control 즉, command(put/get등등)에 대한 의사 소통을 위한 파이프(Stream)와 Data를 전송하기 위한 파이프가 존재하게 됩니다. 파이프는 Port로 대변됩니다.
알려진 21/20번 port는 command/data 전송 port이며 default는 active라는 mode로 운용됩니다. 다른 Mode로는 Passive Mode가 존재합니다. (참고로 browser를 통한 ftp 접근시에는 default로 Passive Mode로 연결 됩니다.)
Active Mode에서 연결 개념
Client는 사용되지 않는 random한 port N(N > 1023)를 통해서 ftp Server의 21port(command)와 연결하며 N+1한 port를 client machine에서 open(listening/ 용도는 data 전송)합니다.
이때, client는 ftp server에 listening하고 있는 N+1 port를 알려 주고 client에서 command(put/get)를 날리면(21port로) ftp server는 20port를 통해서 client의 N+1에 연결해 Data를 주고 받는 구조가 됩니다.
Passive Mode에서 연결 개념
Client는 사용되지 않는 random한 port N( N > 1023)를 통해서 ftp server의 21port(command)와 연결하며 N+1한 port를 client machine에서 open(listening 용도가 아님 / 용도는 data전송)합니다.
이때, active mode와는 다르게 client는 ftp server에 N+1한 port를 알려 주는 것이 아니라 PASV라는 command를 전송하며 ftp server는 random한 port P(P > 1023)를 Open(listening/ 용도는 data 전송)하고 client에서 Open된 p port를 전송합니다.
이제 client에서 command(put/get) 날리면(21port로) client의 N+1한 port를 통해서 ftp server의 P port로 연결해 Data를 주고 받는 구조가 됩니다.
결론적으로 Active/Passive Mode의 차이는 Data 전송 Port를 '누가 Listening하냐'의 차이입니다.
즉, Active mode에서 Push는 ftp server의 20port가 client의 N+1 port에 data를 날리는 구조이고 Passive mode에서 Push는 client의 N+1 Port가 ftp Server의 P port에 data를 날리는 구조입니다.
일반적으로 이런 연결하는 주체에 대해서 network 용어로 in/out bound라고 합니다.
가끔 방화벽 얘기를 할때 'A machine에 대해서 B machine의 inbound가 열렸느니 닫혔느니' 하죠.
@