2007년 11월 11일 일요일
CSE에 cisco/MS Technet/KTword World 추가
위의 검색창에 검색어를 넣어 검색한 후 결과창에서 cisco.com이나 MS Technet 라벨을 선택하면 된
cisco.com에는 Network에 대해 공부를 하면서 꼭 알아야 할 내용들에 대한 문서화가 잘 되어있고
http와 함께 pdf로 다운로드도 제공된다. 마찬가지로 MS Technet에서도 방대한 양의 기술문서들을
찾아볼 수 있다.
정보통신용어들에 대한 광범위한 검색과 해설이 제공되고 있는 KTword World도 추가하였다.
[Related Postings]
2007/09/07 - [Miscellaneous] - [QAOS.com] 구글 Custom Search Engine의 활용
2007/09/14 - [Whole Category] - Google CSE & AdSense
2007/10/14 - [Miscellaneous] - [Tip] Google CSE를 이용해 블로그 내부검색하기
2007년 11월 8일 목요일
[scrap] Link Level Flow and Error Control
[Source] William Stallings - High-Speed Networks : TCP/IP and ATM Design Principles
[Selective Translation] FINAL LAB of Korea University
1 The need for flow and error control
1.1. Flow Control
destination이 source에서 보내는 PDU(Protocol Data Unit)흐름을 조절할 수 있도록 해주는 protocol mechanism.
-Flow Control의 필요성:
- destination은 수신 PDU를 처리하는데 시간 소비. -SRC에서 DST가 처리할 수 있는 것보다 많은 양의 PDU를 보내는 경우.
- destination protocol entity는 higher layer protocol user로 수신 data를 보내기 위해 data를 buffering. - 만일 User가 Data 처리가 늦다면 Buffer는 가득찰 것이고 따라서 DST는 SRC의 Data를 제한하거나 순간적으로 정지시켜야 한다.
- destination은 수신 data를 network상의 다른 node로 보내기 위해 buffering. - DST가 Data를 다른 I/O Port로 재전송할 경우 In/Out을 일치시키기 위해 Incoming flow를 제한.
1.1.1 Hop Scope
Intermediate system간의 flow control은 link level에서 구현된다.
1.1.2 Network Interface
flow control은 link level 및 network protocol에서도 구현될 수 있다.
- link level에서 구현: LAPB In X.25
- network layer에서 구현: ATM, Frame-Relay.
1.1.3 Entry to Exit
logical connection상에서 entry와 exit node 간의 flow control이 구현될 수 있다.
1.1.4 End to End
end system간의 link level 및 logical connection 상에서 flow control을 구현할 수 있다.
1.2. Error Control
source와 destination간에 전송된 PDU의 loss및 damage를 복구.
FCS(Frame Check Sequence)를 통한 Error Detect 포함.
2. Link Control Mechanisms
link level에서 쓰이는 error 및 flow control의 세가지 방식으로 stop and wait, Go-Back-N, selective
reject가 있다. 일반적으로 data를 전송할 때 single block 보다는 block을 여러 frame으로 조각내어 보내는데 이유는
다음과 같다.
- 수신측 buffer size의 제한.
- 전송시간이 길 경우 error 발생확률이 높다. - Frame이 짧으므로 error 검출이 빠르고 재전송되는 Data의 양도 작다.
- LAN과 같은 Shared Medium에서 하나의 station이 전송매체를 사용하는 시간이 길어짐.
2.1. Stop and Wait
flow control의 가장 간단한 방법이며 source는 destination으로부터 ACK frame을 받은 후에 다음 frame을
보내는 방식이다.
- 두가지 형태의 에러:
- destination이 error가 있는 frame을 받거나 frame소실.
- SRC: Error Detect and Discard Frame.
- DST: ACK를 받을때까지 Data를 저장하고 만일 ACK가 오지 않는다면 Frame을 재전송한다. - 전송한 ACK frame의 손상.
- 0과 1로만 구별된 frame number.
- stop and wait ARQ 그림 9.3
- propagation time이 transmission time보다 클 경우 link 이용률 감소.
2.2. Sliding window Techniques
- 한번에 여러 개의 frame을 보냄으로써 link 이용률을 증가시키는 방법.
- frame을 저장할 수 있는 buffer수가 stop and wait보다 많아 ACK의 수신을 기다릴
필요 없이 frame을 전송. - number field가 k-bits field인 경우 frame을 modulo 로 번호을 매긴다.
- frame을 보내면 window가 줄어들고 ACK를 받으면 window가 늘어남.
- 그림 9.5 sliding window depiction
- 그림 9.6 Example of sliding window protocol
2.2.1 Go-back-N ARQ
- sliding window에 기반을 두고 일반적으로 가장 널리 쓰이는 error control.
- source는 최대 허용치까지 frame을 전송하고 destination은 error가 발생하지 않은 경우 RR(receive ready) frame을 전송. Error가 발생할 경우 REJ frame을 전송
- error가 발생하면 destination은 error frame이 제대로 된 frame이 되어 수신 될 때 까지 error frame 이후에 들어오는 frame 들을 제거.
- REJ를 받은 source는 error frame및 error frame이후에 전송한 모든 frame을 재전송한다.
- Go-Back-N 에서 발생될 수 있는 상황들.
- Damaged frame
- i번째 frame에서 error가 발생할 경우 -> REJ i를 보낸다.
- 전송도중 i번째 frame이 소실되고 destination이 i+1번째 frame 을 받을 경우 -> REJ i를 보낸다.
- i번째 frame이 전송도중 소실되고 source가 추가적인 frame을 보내지 않을 경우 -> B에서는 아무것도 받지 않은 상태 -> A에서는 time-out 상태 -> A에서 RR Frame을 보낸다.
- Damaged RR
- destination이 i번째 frame을 받고 i+1번째 RR을 보냈는데 전송도중 소실 될 경우.(timer 작동중)
- source timer가 만료된 경우.
- Damaged REJ
2.2.2 Selective-reject ARQ
- negative acknowledgement(SREJ)를 받은 frame만을 재전송.
- destination은 go-back-n 방식보다 buffer수가 많다.
- frame retransmission을 최소화
3. ARQ Performance
3.1. Stop and Wait ARQ
3.1.1 Error-free Stop-and-Wait
3.1.2 Stop-and-wait ARQ with Errors
3.2. The Parameter a
3.3. Stop-and-Wait Revisited
3.4. Sliding-window ARQ
3.4.1 Error-free Sliding-window Flow Control
3.4.2 Selective-reject ARQ
3.4.3 Go-back-N ARQ
[Related Articles]
2007/11/08 - [Network] - [scrap] TCP/IP Sliding Window
Daejun University, Computer Networks Lab
Data Communications 강의자료 Chapter 10 Data Link Control[ppt]
William Stallings - Data and Computer Communications 7th Edition
Chapter 7 Data Link Control Protocols[ppt:partly translated]
William Stallings - Data and Computer Communications
Chapter 7 Data Link Control[ppt:partly translated]
Behrouz A. Forouzan - Data Communications and Networking 4th Edition
Chapter 11 Data Link Control[ppt:partly translated]
[scrap] TCP/IP Sliding Window
[Source] Secure.pe.kr 강의실
TCP/IP Sliding Window
TCP/IP Protocol Suite중의 하나인 TCP는 TCP Host간에 효율적인 데이터 전송을 위하여 "window"라고 부르는 Buffer를 이용한다. window는 TCP/IP통신을 원하는 컴퓨터(일반적으로 Host라고 부른다)가 송신, 혹은 수신할 수 있는 size를 가리켜 준다.
이러한 window라는 것을 이용하여 호스트간에 전송을 하고 받는 과정 중에, 네트워크의 트래픽 혹은 호스트의 불안한 요소등 여러 가지 원인에 의하여 전송되는 데이터의 손실이 생길 수 있는 경우가 발생하게 된다.
반대로 안정적인 네트워크 상황 하에서 보다 많은 데이터를 전송할 수 있음에도 TCP가 제공하는 가장 큰 특징 중의 하나인 "확실한 전송"이라는 책임 때문에 오히려 비효율적인 전송을 하게 되는 경우도 있게 될 것이다.
이러한 요소들을 모두 고려하여 가장 효율적인 데이터 전송방법으로서 "Sliding Window" 라는 기법을 사용하여 호스트 간의 통신에서 최적의 성능을 제공할 수 있게 된다.
그러면, 실제로 호스트간의 TCP/IP통신 중에서 "TCP Sliding window"라는 기법이 무엇인지, 어떻게 동작을 하는지 차근차근 접근해 보도록 하자.
TCP/IP를 사용하는 모든 호스트들은 각각 2개의 window를 가지고 있다.
하나는 보내기 위한 window, 또 다른 하나는 받기 위한 window이다.
호스트들은 실제 데이터를 보내기 전에 먼저 "TCP 3-way handshaking"을 통하여 수신컴퓨터의 receive window size에 자신의 send window size를 맞추게 된다.
상대방이 받을 수 있는 크기에 맞추어 전송을 하겠다는 것이다.
[그림 2]의 "A"컴퓨터가 "B"컴퓨터에게 10kbyte size의 데이터를 전송하려 한다고 가정을 해 보자.
또, 이 컴퓨터의 "window size"는 8k이고, "TCP segment size"는 1k라고 가정을 한다.
사실 이것은 우리가 가장 많이 사용하는 Ethernet환경에 최적화된 size이기 때문에 NT는 기본적으로 위와 같은 windows와 segment size를 이용한다.
"TCP segment size"는 Application이 만든 데이터를 TCP가 받아서 IP에게 전달해서 통신을 하려고 할 때, IP에게 전달해 주는 데이터 패킷의 크기이다. 결과적으로는 실제 데이터를 TCP가 보다 작은 크기로 나누게 되는데, 이 때 나누게 되는 크기를 가리켜 "TCP segment size"라고 부른다.
예제의 경우와 같을 때, "A"컴퓨터는 "B"컴퓨터에게 데이터를 전송하기 위해서
먼저 10k크기의 데이터를 1k크기로 나누게 된다. 당연히 10개의 패킷으로 데이터가 나뉘게 될 것이다.
TCP는 1k로 나눈 데이터마다 순서를 붙이게 된다.
1번부터 10번까지 번호를 붙이고, 1번부터 데이터 전송을 시작하게 된다.
TCP의 특징은 "신뢰성있는 전송"을 보장한다는 데 있다.
1번을 보내고, "A"컴퓨터는 "B"컴퓨터로부터 잘 받았다는 확인 메시지(Acknowledgement)를 받을 때까지 기다리게 된다.
마침내 Acknowledgement 메시지가 오면 "A"컴퓨터는 그 다음 순서인 2번 데이터를 전송한다.
생각하기에는 당연한 이야기고 그런대로 쓸 만한 방법이라고 생각할 수도 있겠지만 지극히 비효율적인 방법이다. "A"컴퓨터는 1번 데이터를 보내고 나서도 충분히 다음 데이터를 보낼 여유가 있지만, 응답을 받을 때까지 기다리고만 있어야 한다는 것이다.
만일 회선상의 문제가 있어서 ACK신호가 더욱 지연된다면 그 결과는 당연히 영 아닌 상태의 네트워크 통신을 지켜 봐야만 할 것이다.
이러한 문제점을 해결하기 위해서 TCP는 데이터를 낱개단위로만 처리하지는 않는다는 것이며, 그때 한꺼번에 전송하는 데이터의 크기를 바로 "window Size"라고 부르는 것이다.
[그림 3]처럼 호스트는 자신이 보내야할 전체 데이터 중에서 사용가능한 window size만큼 데이터를 전송하기 시작한다.
위의 예제에서 window size는 8K이다.
1번부터 8번까지 순차적으로 계속해서 데이터를 내 보내게 되는 것이다.
그리고 나서 이 호스트는 상대방의 응답을 기다리게 된다.
단순하게 생각해도 일단은 하나씩 보내고 응답을 기다리는 것보다는 효율적인 방법일 것이다.
성공적으로 통신이 되어서 상대방으로부터 응답이 온다면 그때 "A"호스트는 나머지 남은 9번, 10번의 데이터를 전송한다.
이것이 "TCP Sliding Window"라는 기법이다.
window size만큼 데이터를 전송하고, 상대방으로부터 ACK신호가 올 때까지 기다렸다가 ACK신호가 오면, window를 이동(Slide)시켜 다음 순서의 TCP데이터를 전송하는 방식을 말한다.
하지만, 역시 이것만으로는 뭔가 비효율적인 면이 여전히 남아있다.
1번부터 8번까지 데이터를 전송하고 상대방으로부터 1번부터 시작하여 자신이 보낸 데이터의 마지막인 8번까지의 데이터에 대한 ACK신호가 올 때까지 기다려야 한다면 어리석은 일이 아닐 수 없다.
우리가 생각하는 정도는 이미 TCP/IP를 개발한 개발자들도 충분히 고려했던 부분이었기에 그것에 대한 생각도 물론 했을 것이다. 그렇기 때문에 보다 효율적인 방법을 채택했다.
일단 보내는 쪽의 TCP는 window size만큼 한꺼번에 데이터를 전송하고, 받는 쪽에서의 ACK신호가 오면 오는대로 바로바로 window를 Sliding시키는 방법이 그것이다.
다시 말하면 굳이 자신이 발송한 마지막 데이터에 대한 ACK신호가 오지 않더라도 일단 그 전의 데이터에 대한 ACK가 오게 되면 그만큼은 여분의 window size가 생긴 것이기 때문에 추가로 더 전송할 여유가 생겼다는 의미이다.
[그림 4]에서 보면 window가 이동한 그림을 볼 수 있다.
예제의 경우는 받는 쪽에서 2번까지의 데이터를 잘 받았다는 ACK신호를 발송해 주게 되면 그때 "A"컴퓨터는 1,2번 데이터는 제대로 전송해야 할 책임을 완수했기 때문에 window를 이동시켜서 그 다음 순서의 데이터인 9번과 10번을 전송할 수가 있게 되었다.
추가로, 받는 측인 "B"컴퓨터는 패킷 하나마다 계속해서 ACK신호를 전송한다는 것은 역시 그것도 하나의 트래픽을 발생시키는 것이기에 약속을 해 두었다.
적어도 2개 이상의 연속된 패킷이 들어왔을 때 ACK신호를 전송하도록 한 것이 그것이다.
[그림 5]에서처럼 1번과 3번 패킷이 도착을 했지만, 중간에 이빨이 빠진 채로 2번이 아직 도착을 하지 않았다라고 가정을 해 보자.
그렇게 되면, 받는 측의 TCP는 2개이상의 연속된 패킷이 도착하면 전송을 하자는 약속을 해 두었기에 마냥 기다려야 할 것이다.
그래서 만일의 경우를 대비하여 한가지 해결책을 강구해 두었다. 받는 측의 컴퓨터는 패킷이 도착하였을 때, "Delay Acknowledgement Timer"라고 부르는 Timer를 설치하게 된다. 이 Timer의 시간이 만료될 때까지 2번 패킷이 도착하지 않는다면, 받은 1번 패킷에 대한 ACK신호만이라도 전송을 해 주는 것이 보다 효율적이기 때문이다.
[그림 6]에서 보면, 받는 측의 TCP는 1번 패킷에 설치해 둔 Timer가 만료되었고, ACK신호를 전송하고 있다.
송신컴퓨터는 이렇게 수신컴퓨터의 ACK신호를 받고, window를 sliding시켜서 다음 신호를 전송하는 방식을 쓰고 있지만, 또 한가지 문제가 여전히 남아 있다.
만일 무슨 이유에선지 ACK신호가 전혀 오지 않는 상황이라면 어떻게 해야 할까?
이러한 문제를 해결하기 위해서 송신컴퓨터의 TCP는 자신이 보낼 수 있는 window Size만큼 데이터를 전송하고 자신이 보낸 데이터에 대해서 각 Segment마다 "Retransmission Timer"라고 불리우는 timer를 설치 해 둔다. 만일 이 timer의 시간이 만료될 때까지 ACK신호가 도착하지 않으면 재전송을 하기 위한 배려이다.
결국, TCP는 window size를 이용해서 한꺼번에 일정량의 데이터를 전송하며, 보다 효율을 기하기 위해서 이러한 window를 Sliding시키는 방식을 이용하여 계속적인 데이터 전송을 할 수 있도록 하고 있다.
여기에서 생길 수 있는 문제점들을 "Delay Acknowledgement Timer"와 "Retransmission Timer"를 이용해서 대비책을 마련해 두고 있는 것이다.
[Related Articles]
2007/09/28 - [Network/Link for Network] - [Link] TCP/IP의 이해(IP Address & Subnet)
위키백과 - 슬라이딩 윈도우
Wikipedia - Sliding Window Protocol
2007년 11월 6일 화요일
나의 노트북 이야기
다음 달이면 산 지 2년이 되는 Laptop이다.
Asus A6Va--Q00VA (view larger image)
Specifications:
- Intel Pentium M processor 740 1.73GHz
- HD 80 GB
- 15.4" (WXGA) Colour Shine
- 128Mb ATI Mobility Radeon X700
- Optical Drive 8x DVD-RW Dual
- 1024Mb DDR2 533MHz (512x2)
- Wireless IEEE 802.11b/g
- 4x USB 2.0, 1xIEEE 1394
- Video Camera built-in (1.3 million pixels) and Microphone
- Built in Bluetooth
- Weight: 2.85kg
RAM은 원래 512Mb이 들어있던 것을 1024Mb로 늘렸다.
작년 말에 비디오칩 고장으로 한달여 AS를 다녀온 것 말고는 항상 나의 곁을 지켜주었다.
Harddisk가 좀 작은 편이라거나, Graphic Driver의 호환성이 그다지 좋지 않다라든지 하는
자잘한 불만이 있기는 하지만 대부분의 해외 Review에서 볼 수 있듯이 상당히 "solid"한 제품이다.
1030 Euro 정도 줬는데 지금이야 그 돈이면 훨씬 더 좋은 물건을 살 수 있지만 당시 이만한 물건을
이 정도 가격에 구한 것은 최선의 선택이었다고 할 수 있다.
이 노트북에서 사용한 운영체제들은 처음에 설치되어 온 Windows XP Home,
나중에 새로이 설치한 Windows XP Pro, Windows FLP, Windows Vista Business와
OpenSuSE Linux 10.1, 10.2, 10.3, Kubuntu 7.04 등이 있다.
지금은 Windows XP Pro와 OpenSuSE 10.3을 Multibooting으로 사용하고 있다.
소음에 민간한 나에게 그다지 소음에 대해 자주 신경쓰도록 하지는 않지만
Windows 상에서는 Fan이 비교적 자주 돌고, 일단 Fan이 도는 소리는 좀 거슬리는 편이다.
일예로 아마 Office 2007이 워낙 자원을 많이 사용하는 편이라서 그럴 거라 생각하지만
MS Word를 사용할 때 Fan이 자주 돌면 꽤나 신경이 쓰인다.
CPU 온도도 60도 이상에서 노는 일이 잦다.
반면에 Linux에서는 훨씬 쾌적하게 느낀다. 현재 CPU 온도는 50도이다.
온도가 낮게 유지되니 당연히 Fan도 자주 돌지 않는다.
그런데 Laptop에서 Linux를 Main Operating System으로 사용하지 못하게끔 하는 몇 가지 문제가 있었다.
그 중 첫째는 Synaptics Touchpad가 Linux에서 너무 민감하게 반응하여 사용에 큰 불편이 있을 지경인데
설정도구가 없다는(사실은 있지만 제대로 작동되지 않는) 점과
Headphone을 잭에 꽂으면 소리가 전혀 나지 않는다는 점이었다.
근래 도서관에서 강의파일들을 열어봐야 할 일이 많은 데 이 문제로 인해 도서관에서는 Linux를 사용할 수 없었다.
과거형으로 적었는데 그 이유는 이 두 문제가 최근에 모두 해결되었기 때문이다.
Touchpad문제는 새로운 OpenSuSE 10.3을 설치함으로써 자연스레 해결되었고, Headphone문제는 어제 오늘
양일 간에 걸친 삽질 끝에 마침내 해결을 보았다.
원래는 나중을 위해 이 삽질기를 기록해 둘 요량으로 적은 글이 사설이 길어져 이렇게 잡담코너로 넘어와 버렸다.
이젠 Bootloader의 Default OS를 Linux로 바꿔야 할 때가 드디어 온 것 같다.
[Tip][OpenSuSE10.3] Samba Configuration on KDE
KDE환경에서 Samba Server 설정하기 + SWAT
GSAMBAD와 같은 Samba Server를 위한 Frontend도 이미 나와 있기도 하고,
앞서 2007/06/05 - [Linux] - SAMBA 설정과 이용에서 언급했듯이 여러가지 방법이 존재한다.
(물론 어떠한 방법이든 내부에서 최종적으로 하는 일은 동일하다.)
여기서 보이려는 방법은 나의 경우에서 가장 간편하다고 생각된 방법이다.
1. Menu에서 Personal Settings를 선택한다.
2. Internet & Network를 선택한다.
3. 아래 쪽의 Samba를 선택한다.
4. Samba Server의 설정을 변경하려면 Administrator Mode를 선택해주어야 한다.
5. root password를 입력하고 계속한다.
6. Base Settings 항목이 나타난다. 원하는 대로 설정을 변경하고 apply를 누르면 적용된다.
또한 여기에서 보안레벨을 정하게 되는 데 각자 환경에 따라 적절한 것을 선택한다.
나의 경우 가장 일반적인 보안정책으로 생각되는 User를 선택하였다. (이렇게 하면 Samba Server에 접속하는
이용자는 Server에 등록된 id와 password를 입력해야만 접속할 수 있다.)
7. Shares항목에서는 공유되고 있는 목록을 보여준다. 목록의 기존공유를 편집하거나 새 공유 추가, 공유제거 등
의 작업을 할 수 있다.
8. Samba를 사용할 사용자를 등록한다.
9. DOS charset을 CP949로 바꾸어 주었다.(CP949는 euc-kr을 포함하는 MS의 확장완성형 문자 인코딩)
10. 부팅시 Samba를 기동시키기 위하여 Runlevel을 수정한다.
11. smb와 nmb service가 활성화되어야 한다.
12. SWAT는 xinetd를 통해 구동되게 된다.
만약 Firewall이 기동되어 있다면 Samba Server를 위한 Port를 열어 주어야 한다.
위 그림에 보이는 Samba Server 항목(이 안에서 여기서 설명하고 있는 대부분의 과정을 설정할 수도 있다.)에
들어가면 Firewall Settings에서 Port 열어주도록 할 수 있다.
또한 여기의 Service Start항목을 통하여 10과 11의 과정을 간단하게 설정할 수도 있다.
13. swat service를 활성화 시킨다.
14. SWAT가 구동되면 웹브라우저에 http://localhost:901이라 입력하여 불러올 수 있다.
(User Name과 Password를 물어오는 데 기본적으로는 root로 login한다.)
15. SWAT에 접속한 화면이다.
16. GLOBALS 항목에서 앞서 설정했던 내용들을 볼 수 있다. 물론 여기에서 새로이 설정할 수도 있다.
기왕에 SWAT을 사용할 거라면 위에서 설명한 3~9까지의 과정은 이곳에서 설정해도 된다.
다만 아주 간단한 설정을 위해서라면 SWAT가 필요하지 않을 수도 있을 것이다.
17. Username/Password를 등록한다. (다른 컴퓨터에서 이 Samba Server에 접속할 때 사용할 정보이다.)
18. Samba Server가 service되고 있는 상태를 볼 수 있다.
설정 변경 후 여기에서 smbd/nmbd를 재시작 해줄 수 있다.
19. 동일한 네트워크에 위치하고 있는 Windows에서 네트워크 환경에 들어가면 아래와 같이
Samba Server에 의해 공유되고 있는 자원을 볼 수 있다.
실제로 사용하려면 17에서 설정한 정보를 사용하면 된다.
꼭 이렇게 하지 않아도 GUI환경에서 Samba Server를 필요에 맞게 설정할 수 있는 방법은 여러가지가 있다.
편리한 것을 선택하는 것은 사용자의 몫이다. SWAT만으로도 Samba Server설정에 관한 모든 것을 할 수 있다.
그러나 기본적으로 설정파일을 수정하고 console에서 필요한 service들을 구동시키는 작업을 한 번쯤은 해보고
GUI도구를 사용할 것을 권하고 싶다. 설정파일 안에 있는 내용들을 전혀 이해하지 못하는 상태에서 GUI도구가
제공해주는 편리한 기능을 제대로 사용할 수가 없기 때문이다.
[Related Article] 2007/06/05 - [Linux] - SAMBA 설정과 이용
[Tip] SAMBA 설정과 이용
SAMBA는 Windows와 Linux간의 상호 파일과 Print 시스템을 공유하는 것을 가능하게 해 준다.
Linux만으로 구성된 Network을 보는 것은 아주 드문 일이므로
이 기종 간의 Networking(Linux Server의 Resource를 Windows Client에서 사용이 가능하도록 해주고,
그 반대로도 마찬가지.)을 가능하게 해주는 SAMBA의 가치는 아주 높다고 할 수 있다.
Linux에서 대부분의 Service들은 기본적으로 Terminal에서 설정파일을 편집하고,
필요한 Command를 내려주는 방법으로 설정이 가능하다.
또한 한 편으로 이러한 작업을 손쉽게 해주는 GUI Tool들이 존재한다.
두 가지 방법 중 편리하다고 느끼는 쪽을 선택할 수 있는 것이다.
SAMBA의 경우는 하나의 가능성이 더 있는데, 바로 SAMBA Package에 포함되어 있는
SWAT(SAMBA Web Administration Tool)를 이용하는 방법이다.
SWAT을 통해 SAMBA의 모든 것을 Web-Interface에서 설정, 관리할 수 있다.
SWAT는 localhost의 tcp 901 port로 구동된다. 웹브라우저로 불러와 사용하면 된다.
각 설정 항목마다 HELP Link가 있어서 확인해가며 설정해나갈 수 있다.
Samba konfigurieren mit SWAT
삼바(TM) 설치 및 활용 가이드 열번째 판 A2
삼바 서버를 위해 구동되는 Daemon은 다음의 둘이다.
smbd (SMB Daemon)
nmbd (Client를 위해 NetBIOS nameserver를 지원)
inetd에 의해 Daemon을 실행시키기 위해 (이미 들어있지 않다면) 아래 내용들을
/etc/inetd.conf 에 추가시켜야 한다.
# SAMBA NetBIOS services (for PC file and print sharing)이렇게 하면 시스템 시작 시 SAMBA Server가 구동된다.
netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd
netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd
Server환경은 설정 파일인 /etc/samba/smb.conf파일을 통해서 수정한다.
smb.conf example from KLDP
more..
# #
# AnNyung 리눅스 1.1 삼바 설정 파일 #
# ( 삼바 3.0.4 버전용 ) #
# #
##############################################################################
#
# 이 파일은 삼바의 주요 설정 파일입니다. 앞으로 나오는 옵션들을 이해하기 위해
# 서는 smb.conf(5) 맨 페이지를 꼼꼼히 읽어 보시기 바랍니다. 삼바에는 방대한 양
# 의 설정 옵션이 있지만(어떻게 보면 너무 많다고 생각하실 수 있습니다), 다음 예
# 에서는 보여지지 않는 것들이 많습니다.
#
# ; (세미 콜론) 또는 # (해쉬) 로 시작하는 줄은 모두 주석이며 무시합니다. 다음
# 예에서는 주석에 대하여 # 를 사용하며 여러분이 작동시기킬 원할 지 모르는 옵션
# 에 대해서는 ; 문자로 구별하여 처리하였습니다.
#
# 주의: 설정 파일을 수정하고 나서는 기본적인 문법 오류 여부를 검사하기 위해
# "testparm" 명령을 실행해보십시오.
#
# 작성 : 김 정 균 <http://www.oops.org>
#
# 오역을 발견하시거나 추천할 사항이 있으시면 위의 주소로 연락을 주십시오.
# 그 이외의 일반적인 질문에 대해서는 답변하지 않습니다.
#
#======================= 전체 설정 =====================================
[global]
# workgroup = NT 도메인 이름 또는 워크그룹 이름
workgroup = WORKGROUP
# 나의 정의
hide dot files = yes
veto files = /.?*/
netbios name = netbios
; netbios aliases = nemesis
dont descend = /proc,/dev
; time server = true
; sync always = yes
# server string은 NT 설명 필드와 같은 것입니다.
server string = Linux Samba Server
# 언어 설정 :
# dos charset 은 Windows Machine 의 언어셋을 설정합니다. 보통 NT SP4 이상의 윈
# 도우즈는 UTF-8 로 지정하시면 됩니다. unix charset 은 삼바 머쉰의 언어셋을 지
# 정합니다. RH 9 부터는 UTF-8 을 사용하며, 이 이전은 보통 EUC-KR 을 사용합니다.
dos charset = UTF-8
unix charset = EUC-KR
# 이 옵션은 보안과 관련하여 중요한 것입니다. 이 옵션을 통해 여러분의 근거리 네
# 트웍에 있는 호스트에게만 접근을 허용할 수 있습니다. 다음 예는 2 개의 C 클래
# 스 네트웍과 "loopback" 인터페이스에 대해서만 접근을 허용하고 있습니다. 문법
# 예 # 는 smb.conf 맨페이지를 참고하시기 바랍니다.
hosts allow = 210.224.127. 127.
# 프린터 설정을 개별적으로 하지않고 자동으로 프린터 목록을 포함시키길 원한다면
# 다음 옵션을 사용합니다.
# printcap 에서 정의한 프린터목록이 자동으로 등록됩니다. load printers = no 이
# 면 하나하나 정해주셔야 합니다.
load printers = no
# printcap 파일의 위치를 새롭게 지정하고 싶을 때 사용하십시오.
printcap name = /etc/printcap
# SystemV 시스템에서는 printcap name 을 lpstat 으로 해주면 SystemV 스풀 시스템
# 으로부터 프린터 목록을 자동으로 얻게 해줍니다.
; printcap name = lpstat
# 여러분의 프린팅 시스템이 표준에서 벗어난 것이 아니라면 다음 옵션의 주석을 풀
# 필요가 없습니다. 현재 지원하고 있는 프린트 시스템은 bsd, sysv, plp, lprng,
# aix, hpux, qnx 등입니다.
; printing = cups
# This option tells cups that the data has already been rasterized
; cups options = raw
# 손님 사용자를 허가하고 싶을 때는 다음 행의 주석을 풀어줍니다. nobody 가 아닌
# 경우에는 /etc/passwd 항목에 설정한 손님 사용자 계정을 추가 해야 합니다.
# useradd 명령으로 사용자를 만드십시오.
; guest account = nobody
# 다음은 삼바로 하여금 자신에 접속하는 호스트 별로 개별적인 기록 파일을 만들도
# 록 지시합니다. "/var/log/samba/접근호스트이름.log"과 같은 파일명을 가집니다.
# %m 은 삼바 설정에서 사용되는 특수한 변수입니다.
log file = /var/log/samba/%m.log
# 한라인으로 모든 정보를 로깅 하려면 아래와 같이 설정 합니다.
; log file = /var/log/samba/smbd.log
# 로그 파일 크기의 상한선을 Kb 단위로 설정합니다.
max log size = 50
# 보안 모드입니다. 대부분의 사람들에겐 user 레벨의 보안이 맞습니다. 자세한 내
# 용은 security_level.txt 문서를 참고하십시오.
#
# 참고로 user 는 유닉스 계정이름/패스워드 방식의 보안 등급이며 share 는 워크그
# 룹 포 윈도우즈(WfW)와 윈도95의 기본 모드입니다. server 의 경우에는 인증을 위
# 해 NT 서버가 필요합니다.
security = user
# security = server 또는, security = domain 인 경우에만 패스워드 서버를 설정합
# 니다.
; password server = <NT-Server-Name>
# 패스워드 레벨에서는 대/소문자 모든 조합에 대하여 _n_ 개의 문자로 이뤄진 패스
# 워드를 사용하도록 합니다.
; password level = 8
; username level = 8
#
# !!!!!!!! 윈도우즈 98/윈도우즈 NT 4 (SP3) 클라이언트 !!!!!!!!!
#
# 패스워드 암호화를 사용하고 싶을 때가 있습니다. 삼바 문서 중 ENCRYPTION.txt,
# Win95.txt, WinNT.txt 를 꼭 읽어보시기 바랍니다. 이 문서를 착실히 읽지않은 상
# 태에서 다음 옵션을 설정하지 마십시오. 윈도우즈 NT 4.0 서비스 팩 3 번 이상인
# 시스템에서는 패스워드 암호화가 필요합니다. 그렇지 않으면 삼바 서버에 접속조
# 차 할 수 없습니다.
#
# smbpaswd 의 사용법이 samba 3 에서 변경이 되었습니다. 기존의 smbpasswd 나, 새
# 로 smbpasswd 를 작성 하셨다면, "smbpasswd -e 유저명" 으로 해당 유저를 활성화
# 해 주셔야 접속이 가능합니다.
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
# 관련 명령으로는 smbadduser, smbpasswd가 있습니다.
# 다음 설정은 윈도우즈에서 패스워드를 바꿀 때, 리눅스 시스템의 패스워드도 자동
# 으로 갱신되도록 하고 싶을 때 사용한다.
# 주의 사항 : 위에 있는 'encrypt passwords', 'smb passwd file'과 같이 사용해야
# 한다!!!
# 주의 사항2: 워크스테이션으로부터 암호화된 SMB 패스워드만 변경할 수 있도록 할
# 때에는 필요없는 사항이다. 유닉스 패스워드와 SMB 패스워드가 항상
# 동일한 상태를 유지하도록 할 때에만 필요하다!
; unix password sync = Yes
; passwd program = /usr/bin/passwd %u
; passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
# 유닉스 사용자 이름과 SMB 사용자 이름이 달라, 둘 간의 연관 테이블을 필요할 때
# 사용합니다.
username map = /etc/samba/smbusers
# 다음 옵션은 접속하는 각 머신마다 서로 다른 설정을 원할 때 사용합니다. 여기서
# %m 은 접속하는 호스트의 NetBIOS 이름으로 대체됩니다.
; include = /etc/samba/smb.conf.%m
# 대부분의 경우 다음 옵션을 주면 성능 향상 효과를 볼 수 있습니다. 자세한 사항
# 은 speed.txt 와 맨 페이지를 참고하십시오.
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
# 삼바가 여러 개의 인터페이스를 사용하도록 설정합니다. 여러 개의 네트웍 인터페
# 이스를 가지고 있다면 그 인터페이스들을 모두 나열 하십시오. 자세한 사항은 맨
# 페이지를 참고하십시오.
# 다음 예는 삼바 서버가 192.168.12.2, 192.168.13.2 이렇게 두개의 주소를 가지고
# 있고 24비트 즉 넷매스크 255.255.255.0 를 사용하여 192.168.12.0, 192.168.13.0
# 네트웍의 호스트에 대해서 받아들입니다.
; interfaces = 192.168.12.2/24 192.168.13.2/24
# 원격 브라우즈 목록과의 동기화에 관한 설정입니다.
# 공표 요청을 하거나 또는 브라우즈 목록 동기화해 줄 대상:
# 특정 호스트 또는 전체 서브넷을 지정할 수 있습니다. (아래 참고)
; remote browse sync = 192.168.3.25 192.168.5.255
# 지역적인 서브넷에 자기 자신을 공표하도록 설정합니다. 윈도우즈 네트워크 환경
# 에서 삼바 서버가 잘 보이도록 할 때 유용합니다.
remote announce = 210.125.115.
# 브라우져 제어 옵션:
# 삼바가 네트웍에 대한 매스터가 되길 바라지 않으면 local master 설정을 no로 하
# 십시오. 그렇지 않은 경우에는 일반적인 선거 규칙을 따릅니다.
; local master = no
# OS 레벨은 매스터 브라우져 선거 과정에서 서버의 우선권을 결정합니다. 기본값이
# 적절합니다. 따라서 특별히 바꿀 이유가 없습니다.
; os level = 33
# domain master 는 삼바로 하요금 도메인 매스터 브라우져가 되도록 해줍니다. 삼
# 바는 서브넷들로부터 브라우즈 목록을 모으는 작업을 하게됩니다. 이미 이 기능을
# 담당하고 있는 윈도우즈 NT 도메인 컨트롤러가 존재한다면, 이것을 사용해서는 안
# 됩니다.
; domain master = yes
# preferred master 옵션을 켜두면 시동할 때, 지역 브라우져 선거를 하도록 만들고
# 선거에서 이길 수 있는 좀 더 높은 기회를 부여받습니다.
; preferred master = yes
# 설치할 때 주 도메인 컨트롤러로 설정된 NT 서버가 존재할 때만 사용합니다.
; domain controller = <NT 도메인 컨트롤러 SMB 이름>
# 삼바가 윈도우즈 95 워크스테이션에 대한 도메인 로그온 서버 역할을 하길 원하는
# 경우 켜둡니다.
; domain logons = yes
# 도메인 로그온을 선택했고, 각 머신 별로 또는 각 사용자 별로 로그온 스크립트를
# 구분하여 특정 배치 파일을 작동시키길 원하는 경우 사용합니다.
; logon script = %m.bat
# 사용자 이름에 의거하여 서로 다른 로그온 배치 파일을 실행시킬 때
; logon script = %U.bat
# 로우빙 프로파일(roving profile)을 어디에 저장할 것인가?
# (Win95와 WinNT에만 해당됩니다.)
# %L 은 서버의 NetBIOS 이름으로, %U 는 사용자 이름으로 대체됩니다. 뒤에
# 나오는 [Profiles] 공유에 있는 주석을 풀어주는 것을 잊지 않도록 하십시
# 오.
; logon path = \\%L\Profiles\%U
# 모든 NetBIOS 이름은 IP 주소로 변환이 되어져야 한다.
# 'Nmae Resove Order' 는 "host lmhosts wins bcast" 를 기본 순서로 가지는 이름
# 변환 매커니즘을 설정할 수 있도록 한다. "host" 는 /etc/hosts 또는
# /etc/hosts.config, /etc/nsswitch.conf 또는, /etc/resolv.conf 파일에 설정되어
# 있는 것을 기본으로 사용하는 DNS 또는, NIS 의 의존하는 gethostbyname() 함수를
# 호출하는 것을 의미한다. 그 결과 "host" 는 시스템 설정에 종속적이게 된다. 이
# 파라미터는 보통, NetBIOS 이름을 IP 주소로 변환하기 위하여 DNS lookup 을 하는
# 것을 방지 하기 위하여 사용을 하며, 사용시 주의해야 한다.
; name resolve order = wins lmhosts bcast
# 윈도우즈 인터넷 네임 서비스 WINS 지원 섹션:
# 주의: /etc/samba/lmhosts를 만들어 마치 /etc/hosts와 같이 적습니다.
# 예)
# 192.168.0.1 hamster
; wins support = yes
# WINS 서버 - 삼바의 NMBD 로 하여금 WINS 클라이언트가 되도록 합니다.
# 주의 : 삼바는 WINS 서버 또는 클라이언트 중 하나만 될 수 있다.
; wins server = w.x.y.z
# WINS 프록시 - 삼바로 하여금 WINS 기능을 갖추지 못한 클라이언트를 대신하여 이
# 름에 해당하는 주소 찾기 질문을 대신 답하도록 합니다. 이를 위해서는 네트웍 상
# 에 적어 한 개 이상의 WINS 서버가 있어야 합니다. 기본값은 NO
; wins proxy = yes
# DNS 프록시 - 삼바로 하여금 DNS nslookup 을 사용하여 NetBIOS 이름을 찾을 것인
# 지 아닌지 지시합니다. 1.9.17 버전에서는 내부 기본값이 yes 였으나 1.9.18 버전
# 에서는 no 로 변경되었습니다.
dns proxy = no
# 대소문자 보존이 필요할 때가 있습니다. 시스템 기본값은 NO 입니다.
# 주의: 각 공유별로 설정할 수 있습니다. 한글을 보기 위해서는 구별해야 합니다.
preserve case = yes
short preserve case = yes
# 도스 파일에 대한 기본 문자는 대문자입니다.
; default case = lower
# 대소문자 구별은 주의를 요합니다. - 문제를 일으킬 수도 있습니다!
; case sensitive = no
#
# 기타 설정
#
# LEVEL2 OPLOCKS
# --------------
#
# 레벨2 OPLOCK 은 SHARE 별로 설정 가능합니다. 주로 읽기만 하는 공유 디렉토리에
# 적용하면 읽기 속도를 크게 증진할 수 있습니다. 예를 들어 실행 파일 .EXE 만 잔
# 뜩 들어 있는 디렉토리를 공유시키는 경우에 좋습니다.
#
; level2 oplocks = true
#============================ 공유 정의 ==============================
[homes]
comment = 홈 디렉토리
browseable = no
writable = yes
; create mode = 0750
; invalid users = root
# 도메인 로그온을 위한 netlogin 디렉토리를 만들고 주석 해제합니다. 물론 도메인
# 로그온 기능을 지원할 때만 필요합니다.
; [netlogon]
; comment = 네트워크 로그온 서비스
; path = /home/netlogon
; guest ok = yes
; writable = no
; share modes = no
# 특정한 로우빙 프로파일(roving profile) 공유를 제공하고자 한다면, 다음의 주석
# 을 풀어주십시오. 기본값은 사용자의 홈 디렉토리입니다.
;[Profiles]
; path = /home/profiles
; browseable = no
; guest ok = yes
# 주의: BSD 스타일의 프린트 시스템 (현재 대부분의 리눅스 시스템이 그러함) 이라
# 면 각각의 프린터를 정의해 줄 필요 없이 자동으로 이뤄집니다.
[printers]
comment = 모든 프린터
path = /var/spool/samba
browseable = no
# guest ok = yes 라고 하면 'guest account' 로 지정한 사용자들이 프린팅을 할 수
# 있습니다. public = yes 도 같은 표현입니다.
guest ok = yes
writable = no
printable = yes
# 다음은 사람들이 파일을 공유할 수 있도록 할 때 유용합니다.
# 주의: /tmp 는 시스템의 임시 작업 공간이므로, /var/tmp 와 같은 곳에 커다란 파
# 티션을 마운트하고 그곳을 사용하도록 하는 것이 좋습니다.
# 지금부터는 임의로 정의 가능한 공유 설정의 예입니다. 다음 설정들을 보면서 여
# 러분이 원하는 공유를 정의해보시기 바랍니다.
;[tmp]
; comment = 임시 파일 공간
; path = /tmp
; read only = no
; public = yes
# 공개적으로 접근 가능한 디렉토리이지만 읽기만 가능하고 "staff" 그룹에 속한 사
# 용자들만이 쓰기를 할 수 있는 설정의 예입니다.
;[public]
; comment = Public Stuff
; path = /home/samba
; public = yes
; read only = yes
; write list = @staff
# 기타 다른 예.
# 조금은 특정 용도에 맞는 상세한 설정 예입니다.
#
# fred 라는 사용자만 이용할 수 있는 개인적인 프린터 설정. 스풀 자료는 fred 의
# 홈 디렉토리에 씌여집니다. fred 는 지정한 스풀 디렉토리에 쓰기 권한을 가지고
# 있는 상태여야 합니다.
;[fredsprn]
; comment = Fred 전용 프린터
; valid users = fred
; path = /homes/fred
; printer = freds_printer
; public = no
; writable = no
; printable = yes
# fread 만이 이용할 수 있는 개인적인 디렉토리 설정입니다.
# 디렉토리에 대하여 fred 의 쓰기 권한이 있는 상태여야 합니다.
;[fredsdir]
; comment = Fred 개인 서비스
; path = /usr/somewhere/private
; valid users = fred
; public = no
; writable = yes
; printable = no
# 접속하는 머신에 따라 서로다른 디렉토리를 제공하는 서비스의 좋은 예입니다. 이
# 렇게 함으로써 접속 머신에 따라 실제 설정 내용이 달라지는 효과를 얻을 수 있습
# 니다. 사용자 이름으로 구별하려면 %u 옵션을 대신 사용하면 됩니다. %m 은 접속
# 하는 머신의 이름으로 치환됩니다.
;[pchome]
; comment = PC 디렉토리
; path = /usr/pc/%m
; public = no
; writable = yes
# 모든 사용자가 읽고 쓸수 있는 공개 접근 디렉토리의 예입니다. 생성되는 모든 파
# 일은 기본 사용자의 소유가 되므로, 다른 사용자가 여러분이 만든 파일을 지울 수
# 있습니다. 당연히 주어진 디렉토리에 대하여 기본 사용자가 쓰기권한을 가지고 있
# 어야 합니다. 다른 사용자를 명시하면 기본 사용자가 아닌 그 사용자의 소유가 됩
# 니다.
;[public]
; path = /usr/somewhere/else/public
; public = yes
; only guest = yes
; writable = yes
; printable = no
# 다음 항목은 두 사용자가 어떻게 한 디렉토리를 공유하여 사용하게 할 수 있는지
# 예시하고 있습니다. 이 설정이 제대로 작동하려면, 디렉토리는 두 사용자에 의해
# 쓰기 가능해야 하며 스틱키 (sticky) 비트를 설정하여 서로의 파일에 대하여 악의
# 적인 행동을 취할 수 없도록 해줘야 합니다. 이런 방법으로 여러 사용자가 한 디
# 렉토리를 안전하게 공유하도록 확장할 수 있습니다.
;[myshare]
; comment = Mary와 Fred의 것
; path = /usr/somewhere/shared
; valid users = mary fred
; public = no
; writable = yes
; printable = no
; create mask = 0765
;[www]
; comment = 웹 페이지 디렉토리
; path = /home/httpd/html
; read only = no
수정을 마치고 나서는 Service를 재시작해야 변경사항이 적용된다.
# /etc/init.d/smb restart
[Related Article]
2007/11/06 - [Linux] - [Tip][OpenSuSE10.3] Samba Configuration on KDE
2007년 11월 3일 토요일
Kaffeine과 Xine에서 한글자막 보기
Xine은 /usr/share/xine/libxine1/fonts에 들어있는 자신만의 font를 사용하므로 원하는 font를 사용하려면
TrueTypeFont를 XineFont로 바꾸어 주는 변환 프로그램인 xine-fontconv가 필요하다.
$ tar xvfj xine-lib-1.1.8.tar.bz2 // 압축해제
$ cd xine-lib-1.1.8/misc // xine-fontconv.c 가 있는 위치로 이동
$ sudo gcc xine-fontconv.c -o xine-fontconv `freetype-config --cflags --libs` -lz
[주의] ' 나 " 가 아니라 `이다. 위의 명령을 복사하여 붙여넣으면 가장 확실하다.
freetype2 libraries가 시스템에 설치되어 있어야 한다.
이렇게 하면 xine-fontconv가 생성된다.
OpenSuSE의 경우 설치해둔 TrueTypeFont들은 /usr/share/fonts/truetype에서 찾을 수 있다.
xine-fontconv도 마찬가지로 복사하고 /usr/share/xine/libxine1/fonts로 이동한 다음
# ./xine-fontconv Eunjin.ttf Eunjin euc-kr // euc-kr Encoding으로 Eunjin이란 XineFont 생성
이제 카페인을 실행시키고
Settings-> xine Engine Parameters -> subtitles 선택 후 Beginner Options 에서
subtitle size를 large 정도로 변경해 준다.
그리고 encoding of the subtitles를 euc-kr로 바꾼다.
Expert Options 탭으로 이동해서 sans 라고 되어 있는 부분을 Eunjin이라고 바꿔준다.
이것으로 설정완료.
(주의.) 처음 이 Tip을 작성할 당시는 아무런 문제가 없었지만 그 후 몇 차례 Kaffeine의 update가 있었다.
아마도 그 이후로 한글자막이 정상적으로 보여지지 않고 있다. 한글이 모두 #######로 나오는 문제이다.
새로이 xine font를 생성해 보았고 다른 글꼴들도 시도해 보았지만 모두 마찬가지였다.
최신 버젼의 Kaffeine에게 일종의 Bug가 있는 것이 아닐까 추측하고 있을 뿐이다.
Mplayer를 사용하면 여전히 한글자막이 잘 보여진다.
최근의 업데이트 이후에는 정반대의 현상이 벌어지고 있다.
Mplayer에서는 한글자막이 표시되지 않고, Kaffeine에서는 잘 나온다.
역시나 버전에 따라 Bug가 서로 다르게 나타나는 것으로 보인다.
한동안 SMplayer만 썼더니 Kaffeine이 어색하다.
===================================================================
<Xine 한글 자막 설정>
Xine에서 한글 자막을 보려면 설정 파일을 직접 수정해야한다.
설정 파일은 ~/.xine/config
굵은 글씨로 써진 부분을 수정하면 된다.
# subtitle size
# { tiny small normal large very large huge }, default: 1
subtitles.separate.subtitle_size:large
# subtitle vertical offset
# numeric, default: 0
#subtitles.separate.vertical_offset:0
# font for subtitles
# string, default: sans
subtitles.separate.font:Eunjin
# encoding of the subtitles
# string, default: euc-kr
subtitles.separate.src_encoding:euc-kr