RFC 2811
Introduction
이 문서는 IRC 서버에서 채널을 관리하는 방법에 대해 자세히 정의하며 IRC 서버 구현 작업을 하는 사람들에게 가장 유용합니다. 여기에 정의된 개념은 IRC의 중요한 부분이지만 클라이언트 구현에 필수적인 것은 아닙니다. 사용자에게 더 친숙한 인터페이스를 제공하기 위해 채널의 내부 작업을 알 수 있는 이점을 얻을 수 있는 점점 더 복잡하고 “지능적인” 클라이언트를 향한 추세인 것 처럼 보이지만 이 문서를 읽지 않고도 간단한 클라이언트를 구현할 수 있습니다.
여기에 정의된 많은 개념은 IRC 아키텍처를 염두에 두고 설계되었으며 대부분이 맥락에서 의미가 있습니다. 그러나 회의 시스템을 위한 포럼을 제공하기 위해 다른 아키텍처를 적용 할 수 있습니다.
마지막으로, IRC 사용자는 특히 섹션 2(채널 특성) 및 4(채널 모드)에서 관심있는 다음 섹션 중 일부를 찾을 수 있습니다.
Channel Characteristics
채널은 해당 채널로 주소가 지정된 메시지를 모두 수신하는 한 명 이상의 사용자로 구성된 이름 있는 그룹입니다. 채널은 이름, 속성 및 현재 회원으로 특징 지어집니다.
Namespace
채널 이름은 최대 50자 길이의 문자열(‘&’, ‘#’, ‘+’, ‘!’로 시작)입니다. 채널 이름은 대소문자를 구분하지 않습니다.
첫 번째 문자가 ‘&’, ‘#’, ‘+’ 또는 ‘!’이어야 한다는 요구사항 외에는(이하 채널 접두사라고 함). 채널 이름에 대한 유일한 제한은 공백, ctrl+G(^G 또는 ASCII 7), 쉼표(프로토콜에서 목록 항목 구분 기호로 사용됨)를 포함하지 않아야 한다는 것입니다. 또한 콜론은 채널 마스크의 구분 기호로 사용됩니다. 채널 이름의 정확한 구문은 “IRC 서버 프로토콜”에 정의되어 있습니다.
서로 다른 접두사를 사용하면 채널 이름에 대해 4개의 고유한 네임 스페이스가 효과적으로 생성됩니다. 이것은 일반적으로 네임 스페이스에 관한 프로토콜 제한 때문에 중요합니다. 이러한 제한에 대한 자세한 내용은 섹션 6.1(레이블)을 참조하십시오.
Channel Scope
채널 엔티티는 IRC 네트워크에 있는 하나 이상의 서버에 의해 알려져 있습니다. 사용자는 사용자가 직접 연결된 서버가 알고 있는 채널의 구성원만 될 수 있습니다. 특정 채널의 존재를 알고 있는 서버 목록은 채널로 주소가 지정된 메시지가 모든 채널 구성원에게 전송되도록 IRC 네트워크의 연속적인 부분이어야 합니다.
접두어로 ‘&’가 있는 채널은 생성된 서버에 로컬입니다.
다른 채널은 채널 마스크에 따라 네트워크에 연결된 하나 이상의 서버에 알려져 있습니다.
채널 마스크가 없으면 모든 서버에 채널이 알려져 있습니다.
채널 마스크가 있는 경우 채널은 채널에 로컬 사용자가 있는 서버와 마스크가 로컬 및 인접 서버 이름과 모두 일치하는 경우 인접 서버에만 알려야 합니다. 다른 서버는 그러한 채널의 존재를 전혀 알지 못하기 때문에 마스크와 일치하는 이름을 가진 서버가 형성하는 영역은 이러한 모든 서버가 채널을 알 수 있도록 인접해야 합니다. 채널 마스크는 서버 호스트 마스킹[IRC SERVER]와 함께 사용하는 것이 가장 좋습니다.
Channel Properties
각 채널에는 채널 모드에 의해 정의되는 고유 한 속성이 있습니다. 채널 모드는 채널 멤버가 조작할 수 있습니다. 모드는 서버가 채널을 관리하는 방식에 영향을 줍니다.
접두어로 ‘+’가 있는 채널은 채널 모드를 지원하지 않습니다. 이는 설정된 ‘t’채널 플래그를 제외하고 모든 모드가 설정되지 않음을 의미합니다.
Priviliged Channel Members
채널 회원이 채널에 대한 제어권을 유지하고 일종의 온전성을 유지하기 위해 일부 채널 회원에게는 특권이 부여됩니다. 이러한 회원만 채널에서 다음 작업을 수행 할 수 있습니다.
INVITE - 초대 전용 채널에 클라이언트 초대(mode +i)
KICK - 채널에서 클라이언트 제거
MODE - 채널의 모드와 회원의 권한 변경
PRIVMSG - 채널에 메시지 보내기(mode +n, +m, +v)
TOPIC - 모드 +t 채널에서 채널 주제 변경
- Channel Operators
- 주어진 채널의 운영자(“chop”, “chanop”이라고 함)는 해당 채널을 소유한 것으로 간주
- 채널 소유권은 채널 운영자간에 공유됨
- 채널 운영자는 채널과 연결될 때마다 별명 옆에 ‘@’ 기호로 식별됨
- 접두어로 ‘+’ 문자로 시작하는 채널은 채널 모드를 지원하지 않으므로 어떤 멤버도 채널 운영자의 상태를 가질 수 없음
- Channel Creator
- ’!’ 캐릭터로 채널을 만든 사용자 접두사는 “채널 생성자”로 식별됨
- 채널 생성시 이 사용자에게는 채널 운영자 상태도 제공
- 이 상태를 인식하여 채널 제작자는 채널 운영자가 조작 할 수 없는 채널의 특정 모드를 전환할 수 있는 기능을 부여받음
- “채널 생성자”는 적절한 MODE 명령을 실행하여 채널 운영자와 구별할 수 있음
- 이 주제에 대한 자세한 내용은 [IRC CLIENT]를 참조
Channel lifetime
채널의 수명과 관련하여 일반적으로 두 그룹의 채널이 있습니다. 접두사가 ‘&’, ‘#’ 또는 ‘+’인 표준 채널과 접두사가 ‘!’인 “안전 채널”입니다.
Standard channels
이러한 채널은 첫 번째 사용자가 참여할 때 암시적으로 생성되고 마지막 사용자가 채널을 떠날 때 더 이상 존재하지 않습니다. 채널이 존재하는 동안 모든 클라이언트는 채널 이름을 사용하여 채널을 참조할 수 있습니다. 채널을 생성하는 사용자는 이름 앞에 ‘+’가 붙은 채널을 제외하고는 자동으로 채널 운영자가 됩니다. 섹션 4(채널 모드)를 참조하십시오. 이 제목에 대한 자세한 내용은 섹션 2.4.1(채널 운영자)를 찹조하십시오. 중복 채널 생성을 방지하기 위해 (일반적으로 두 서버 간의 분할로 인해 IRC 네트워크가 분리될 때) 채널 운영자인 경우 사용자가 채널 이름을 재사용할 수 없도록 해야 합니다(섹션 2.4.1(채널 운영자))가 최근 네트워크 분할로 인해 채널을 떠났습니다. 이 경우 채널 이름을 일시적으로 사용할 수 없습니다. 채널을 사용할 수 없는 상태로 유지되는 기간은 IRC 네트워크별로 조정해야 합니다. 이렇게 하면 로컬 사용자가 동일한 이름을 사용하여 채널을 만들 수는 없지만 원격 사용자가 채널을 다시 생성하는 것은 방지하지 않습니다. 후자는 일반적으로 IRC 네트워크가 다시 연결될 때 발생합니다. 분명히 이 메커니즘은 이름이 ‘#’문자로 시작하는 채널에만 의미가 있지만 이름이 ‘+’ 문자로 시작하는 채널에 사용될 수 있습니다. 이 메커니즘을 일반적으로 “채널 지연”이라고 합니다.
Safe channels
다른 채널과 달리 “안전 채널”은 암시적으로 생성되지 않습니다. 이러한 채널을 생성하고자 하는 사용자는 채널 식별자(당시 알려지지 않음)가 문자 ‘!’로 대체 된 서버에 특별한 JOIN 명령을 전송하여 생성을 요청해야 합니다. 이러한 유형의 채널에 대한 생성 프로세스는 엄격하게 제어됩니다. 사용자는 채널 이름(채널 “축약 이름”이라고 함)의 일부만 선택하고 서버는 사용자가 제공 한 이름 앞에 5자로 구성된 채널 식별자를 자동으로 추가합니다. 이 두 요소의 조합으로 인한 채널 이름은 고유하므로 네트워크 분할을 기반으로 한 악용으로부터 채널을 안전하게 보호합니다.
이러한 채널을 생성한 사용자는 자동으로 “채널 생성자”가 됩니다. 이 타이틀에 대한 자세한 내용은 섹션 2.4.2(채널 생성기)를 참조하십시오
동일한 짧은 이름을 가진 다른 채널이 존재하는 경우 또는 동일한 짧은 이름을 가진 다른 채널이 최근에 존재했고 네트워크 분할로 인해 멤버 중 하나가 남은 경우 서버는 새 채널 생성을 허용하지 않아야 합니다. 이러한 채널은 마지막 사용자가 탈퇴 하고 다른 어떤 멤버도 네트워크 분할로 인해 최근에 채널을 탈퇴하지 않은 경우 중지합니다.
섹션 5.2.2.(채널 지연)에 설명 된 메커니즘과 달리 이 경우 채널 이름은 사용할 수 없게 됩니다. 이러한 채널은 마지막 사용자가 떠난 후에도 계속 존재할 수 있습니다. 채널은 생성 한 사용자 만이 “채널 생성자”가 되며, 기존의 빈 채널에 참여하는 사용자는 자동으로 “채널 생성자” 또는 “채널 운영자”가 되지 않습니다.
채널 이름의 고유성을 보장하기 위해 서버에서 생성 된 채널 식별자는 특정 규칙을 따라야 합니다. 이에 대한 자세한 내용은 섹션 5.2.1(채널 식별자)을 참조하십시오.
Channel Modes
채널에 사용할 수 있는 다양한 모드는 다음과 같습니다.
모드 | 설명 |
---|---|
O | “채널 생성자” 상태 제공 |
o | 채널 운영자 권한 부여/받기 |
v | 음성 권한 부여/받기 |
a | 익명 채널 플래그를 토글 |
i | 초대 전용 채널 플래그를 전환 |
m | 중재 채널을 전환 |
n | 외부의 클라이언트에서 채널로 메시지 없음을 전환 |
q | 조용한 채널 플래그를 토글 |
p | 개인 채널 플래그를 토글 |
s | 비밀 채널 플래그를 토글 |
r | 서버 reop 채널 플래그를 토글 |
t | 채널 운영자 전용 플래그로 설정 가능한 주제를 토글 |
k | 채널 키(비밀번호)를 설정/제거 |
l(L) | 채널에 대한 사용자 제한을 설정/제거 |
b | 사용자를 차단하기 위해 차단 마스크를 설정/제거 |
e | 차단 마스크를 무시하기 위해 예외 마스크를 설정/제거 |
I(i) | 초대 전용 플래그를 자동으로 무시하도록 초대 마스크를 설정/제거 |
아래에서 달리 언급하지 않는 한, 이러한 모든 모드는 “IRC 클라이언트 프로토콜”에 정의된 MODE 명령을 사용하여 “채널 운영자”에 의해 조작 될 수 있습니다.
Member Status
이 범주의 모드는 채널 구성원 별명을 인수로 사용하며 이 사용자에게 부여 된 권한에 영향을 줍니다.
- “Channel Creator” Status
- 모드 ‘O’는 “안전 채널”과 함께만 사용되며 사용자가 조작해서는 안됨
- 서버는 이를 사용하여 채널을 생성하는 사용자에게 “채널 생성자” 상태를 제공
- Channel Operator Status
- 모드 ‘o’는 채널 구성원의 운영자 상태를 전환하는 데 사용됨
- Voice Privilege
- 모드 ‘v’는 채널 구성원에게 음성 권한을 주고 받는 데 사용
- 이 권한을 가진 사용자는 중재 된 채널에서 대화 가능
Channel Flags
이 범주의 모드는 채널 작동 방식에 영향을 미치는 속성을 정의하는 데 사용됩니다.
- Anonymous Flag
- 채널 플래그 ‘a는 익명 채널을 정의
- 채널로 전송 된 메시지가 서버에서 사용자에게 전송되고 원본이 사용자 인 경우 반드시 마스킹되어야 함을 의미
- 메시지를 마스킹하기 위해 출처가 “anonymous!anonymous@anonymous”로 변경됨
- 서버는 사용자가 “anonymous”라는 별명을 사용하는 것을 금지해야 함
- 그러한 채널을 떠나는 사용자에 대한 QUIT메시지를 다른 채널 구성원에게 보내지 말고 대신 PART 메시지를 생성해야 함
- 접두어로 ‘&’문자가 있는 채널에서 이 플래그는 채널 운영자에 의해 토글 될 수 있지만 접두사로 문자 ‘!’가 있는 채널에서는 “채널 생성자”에 의해서만 설정될 수 있음
- 이 플래그는 다른 유형의 채널에서 사용할 수 없어야 함
- WHOIS, WHO, alc NAMES 명령에 대한 응답은 익명 플래그가 설정된 채널에서 다른 사용자의 존재를 나타내면 안됨
- Invite Only Flag
- 채널 플래그 ‘i’가 설정되면 마스크가 초대 목록(섹션 4.3.2 참조)과 일치하거나 채널 운영자가 초대 한 경우에만 새 멤버가 수락됨
- 이 플래그는 또한 INVITE 명령(“IRC CLIENT” 참조)의 사용을 채널 운영자로 제한함
- Moderated Channel Flag
- 채널 플래그 ‘m’은 채널에서 발언 할 수 있는 사람을 제어하는 데 사용됨
- 채널 운영자와 음성 권한이 부여 된 회원만 채널에 메시지를 보낼 수 있음
- 이 플래그는 사용자에게만 영향을 줌
- No Messages To Channel From Clients On The Outside
- 채널 플래그 ‘n’이 설정되면 채널 멤버 만 채널에 메시지를 보낼 수 있음
- 이 플래그는 사용자에게만 영향을 줌
- Quiet Channel
- 채널 플래그 ‘q’는 서버 전용
- 채널 작업에 대해 사용자에게 전송되는 데이터 유형을 제한
- 다른 사용자 join, part, nick 변경은 전송되지 않음
- 사용자의 관점에서 채널에는 한 명의 사용자만 포함됨
- 일반적으로 서버가 작업과 관련된 알림을 보내는 특수 로컬 채널을 만드는데 사용됨
- RFC 1459에 정의 된 사용자 모드를 대체하는 보다 효율적이고 유연한 방법으로 사용됨
- Private and Secret channels
- 채널 플래그 ‘p’는 채널 비공개를 표시하는 데 사용되고 채널 플래그 ‘s’는 비밀을 표시하는 데 사용됨
- 두 속성 모두 다른 사용자로부터 채널의 존재를 숨김
- 즉, 회원이 아니고는 서버에서 이 채널의 이름을 가져올 수 없음
- 이러한 채널은 WHOIS 명령과 같은 쿼리에 대한 응답에서 생략되어야 함
- TOPIC, LIST, NAMES 명령과 같은 쿼리에 대해 채널이 존재하지 않는 것처럼 작동함
- 서버는 MODE 명령에 올바르게 응답
<mask>
매개 변수가 지정되면 LUSERS 명령(IRC CLIENT 참조)에 대한 응답에서 비밀 채널이 고려되지 않음- 채널 플래그 ‘p’와 ‘s’를 동시에 설정하면 안됨
- 서버에서 생성 된 MODE 메시지가 플래그 ‘p’를 설정하고 플래그 ‘s’가 이미 채널에 설정된 경우 변경 사항은 자동으로 무시됨
- 이는 분할 치유 단계에서만 발생해야 함(IRC SERVER에서 언급)
- Sserver Reop Flag
- 채널 플래그 ‘r’은 이름이 ‘!’로 시작하는 채널에서만 사용할 수 있음
- “채널 생성자”만 토글 가능
- 채널에 장시간 동안 채널 운영자가 없는 것을 방지하는 데 사용됨
- 이 플래그가 설정되면 “재 운영 지연” 기간보다 오랫동안 모든 채널 운영자를 잃은 모든 채널은 일부 또는 모든 채널 거주자를 재 운영하도록 서버의 메커니즘을 트리거함
- 이 메커니즘은 섹션 5.2.4(Channel reop 메커니즘)에서 자세히 설명함
- Topic
- ‘t’는 TOPIC 명령의 사용을 채널 운영자로 제한하는 데 사용됨
- User Limit
- ‘l’을 사용하여 채널에 사용자 제한을 설정할 수 있음
- 한계에 도달하면 서버는 로컬 사용자가 채널에 참여하는 것을 금지해야 함
- 제한 값은 서버가 MODE 쿼리로 보낸 응답에서 채널 구성원만 사용할 수 있어야 함
- Channel Key
- 채널 키가 설정되면 (‘k’모드 사용) 서버는 이 키가 제공되지 않는 한 로컬 사용자의 채널 참여 요청을 거부해야 함
- 채널 키는 서버가 MODE 쿼리에 보낸 응답에서 채널 구성원에게만 표시되어야 함
Channel Access Control
모드의 마지막 범주는 채널에 대한 액세스를 제어하는 데 사용되며 마스크를 인수로 사용합니다. 채널에 대해 설정된 제어 액세스 모드에 대한 전역 데이터베이스의 크기를 줄이기 위해 서버는 특정 채널에 대해 설정된 이러한 모드의 수에 최대 제한을 둘 수 있습니다. 이러한 제한이 적용되는 경우 사용자 요청에만 영향을 미칩니다. 제한은 IRC 네트워크별로 동일해야 합니다.
- Channel Ban and Exception
- 사용자가 채널 참여를 요청하면 로컬 서버는 사용자의 주소가 채널에 설정된 금지 마스크와 일치하는지 확인
- 일치 항목이 발견되면 주소가 채널에 설정된 예외 마스크와도 일치하지 않는 한 사용자 요청이 거부됨
- 서버는 이 구성원이 채널 운영자이거나 음성 권한이 없는 경우 챈러에서 금지 된 채널 구성원이 채널에서 말하는 것을 허용해서는 안됨(섹션 4.1.3 참조)
- 챈러에서 차단 된 사용자와 채널 운영자가 보낸 초대를 전달하는 사용자는 채널에 참여할 수 있음
- Channel Invitation
- 초대 전용 플래그가 설정된 채널의 경우(섹션 4.2.2 참조) 채널에 설정된 초대 마스크와 주소가 일치하는 사용자는 초대 없이 채널에 참가할 수 있음
Current Implementations
IRC 프로토콜의 일부로서 이러한 규칙의 유일한 현재 구현은 IRC 서버 버전 2.10입니다. 이 섹션의 나머지 부분에서는 서버를 구현하려는 사람들에게 가장 중요한 문제를 다룹니다. 그러나 일부 부분은 클라이언트 작성자에게도 흥미로울 수 있습니다.
Tracking Recently Used Channels
이 메커니즘은 일반적으로 “채널 지연”으로 알려져 있으며 일반적으로 이름 앞에 ‘#’ 문자가 붙은 채널에만 적용됩니다.(섹션 3.1 “표준 채널” 참조) 네트워크 분할이 발생하면 서버는 중단의 결과로 “채널 운영자”를 잃은 채널을 추적해야 합니다. 이 채널은 특정 기간 동안 지속되는 특수 상태에 있습니다. 이 특정 상태에서 채널은 더 이상 존재하지 않습니다. 모든 채널 구성원이 채널을 떠나면 채널을 사용할 수 없게 됩니다. 서버 로컬 클라이언트는 채널이 비어있는 한 참여할 수 없습니다.
채널을 사용할 수 없게되면 원격 사용자가 채널에 참여했거나(대부분 네트워크가 치유 중이기 때문에) 지연 기간이 만료 되었기 때문에(이 경우 채널이 더 이상 존재하지 않고 다시 활성화 될 수 있습니다.
채널 데스가 지연되는 기간은 IRC 네트워크긔 크기(사용자 측면)와 일반적인 네트워크 분할 기간 등 여러 요소를 고려하여 설정해야 합니다. 주어진 IRC 네트워크의 모든 서버에서 동일해야 합니다.
Safe Channels
이 문서는 “안전 채널”의 개념을 소개합니다. 이러한 채널에는 ‘!’ 문자 접두사가 붙은 이름이 있습니다. 이 네임 스페이스에서 충돌을 피하기 위해 많은 노력을 기울이고 있습니다. 충돌이 불가능하지는 않지만 가능성은 거의 없습니다.
- Channel Identifier
- 채널 식별자는 시간의 함수
- 현재 시간은 “A-Z1-0”(각 문자는 ‘A’의 경우 0부터 ‘0’의 경우 35까지 10진수 값)
- 따라서 채널 식별자의 주기는 36^5초
- Channel Delay
- 이러한 채널은 섹션 5.1(채널 지연)에 설명 된 “채널 지연”메커니즘의 적용을 받아야 함
- 메커니즘은 더 잘 맞도록 약간 조정됨
- 서버는 사용자가 “채널 운영자”인지 여부에 관계없이 네트워크 분할의 결과로 구성원을 잃는 모든 채널을 추적해야 함
- 이렇나 채널은 사용할 수 없게 되는 경우가 없으며 비어있는 경우에도 항상 가입 할 수 있음
- Abuse Window
- 주기성이 너무 길기 때문에 특정 채널에 대한 공격은 아주 오랫동안 한 번만 발생할 수 있음
- 행운과 인내심을 가지고 사용자가 채널 충돌을 일으킬 수 있음
- 서버는 “미래를 바라보고” 식별자가 사용되는 채널 이름 목록을 유지해야 함
- 이 목록은 작게 유지되어야 하며 서버가 유지 관리하는 데 부담이 되지 않아야 하며 채널 지연보다 더 오랜 시간 동안 이러한 채널의 재생성을 방지하여 채널 충돌을 방지하는 데 사용되어야 함
- 결국 서버는 이 절차를 확장하여 동일한 짧은 이름만 가진 채널 생성을 금지할 수 있음(채널 식별자 무시)
- Preserving Sanity In The Name Space
- 섹션 5.2.2 및 5.2.3에 설명 된 메커니즘의 조합은 사용자가 채널 충돌을 생성하는 것을 매우 어렵게 만듦
- 또 다른 유형의 남용은 동일한 짧은 이름을 사용하지만 식별자가 다른 여러 채널을 만드는 것
- 서버는 현재 존재하는 채널의 짧은 이름이 동일한 새 채널의 생성을 금지해야 함
- Server Reop Mechanism
- 채널이 “reop 지연”기간보다 오랫동안 opless 상태이고 채널 플래그 ‘r’이 설정되어 있는 경우 (섹션 4.2.7(Server Reop 플래그) 참조) IRC 서버는 일부 사용자에게 채널 운영자 상태를 무작위로 제공 할 책임이 있음
- 현재 구현에서 이 메커니즘에 사용되는 정확한 논리는 아래에 설명됨
- 서버는 다른 논리를 사용할 수 있지만 모든 서버가 특정 IRC 네트워크에서 동일한 논리를 사용하여 일관성과 공정성을 유지하는 것이 좋음
- “reop delay”는 주어진 IRC 네트워크의 모든 서버에서 균일해야 함
- “채널 지연”은 IRC 네트워크의 크기와 일반적인 네트워크 분할 기간 등 여러 요소를 고려하여 “reop delay” 값을 설정해야 함
- reop 메커니즘은 “reop delay”만료 후 임의의 시간 후에 트리거 됨. 이는 두 개의 개별 서버에서 동시에 트리거 되는 메커니즘의 결과를 제한해야 함
- 채널이 작고(5명 이하)이 채널의 “채널 지연”이 만료된 경우 최소한 한 명의 구성원이 서버에 로컬인 경우 모든 챈러 구성원을 다시 운영함
- 채널이 작고(5명 이하)이 채널의 “채널 지연”이 만료되고 “reop delay”이 해당 값보다 오래 만료 된 경우 모든 채널 구성원을 재 운영함
- 다른 경우에는 서버에 빌드 된 몇 가지 방법에 따라 채널에서 최대 한 명의 구성원을 다시 운영함. 구성원을 reop하지 않는 경우 다른 서버가 누군가르를 작업 할 수 있는 방법이어야 함. 좋은 휴리스틱은 임의의 reop일 수 있음.
Current problems
IRC 채널이 관리되는 방식에는 여러 가지 인식 된 문제가 있습니다. 이들 중 일부는 이 문서에 정의 된 규칙에 직접 기인 할 수 있으며, 다른 일부는 기본 “IRC 서버 프로토콜”의 결과입니다. RFC 1459에서 파생되었지만 이 문서에서는 알려진 문제 중 일부를 해결하기 위해 몇 가지 새로운 점을 소개합니다.
Labels
이 문서는 IRC 프로토콜에서 사용하는 많은 레이블 중 하나를 정의합니다. 여러 개의 고유 한 네임 스페이스(채널 이름 접두사를 기반으로 함)가 있지만 이들 각각 내부의 중복은 허용하지 않습니다. 현재 서로 다른 서버에 있는 사용자가 충돌을 일으킬 수 있는 레이블을 선택할 수 있습니다.(피할 수 있는 하나의 서버에만 알려진 채널 제외)
- Channel Delay
- 섹션 5.1에서 설명하고 문자 ‘#’이 접두사로 붙은 채널에 사용되는 채널 지연 메커니즘은 충돌 발생을 방지하기 위한 간단한 시도임
- 정상적인 상황에서는 매우 효율적
- 여기에 논의 된 문제에 대한 적절한 해결책이 되지 못하도록 하는 심각한 한계점이 존재
- Safe Channels
- 섹션 3.2에 설명 된 “안전 채널”은 사용자가 선택한 레이블을 완전히 제어하지 못하게 하므로 충돌 발생을 방지하는 더 좋은 방법
- 명백한 단점은 사용자 친화적이지 않다는 것
- 클라이언트 프로그램이 이를 개선하는 것은 매우 사소한 일
Mode Propagation Delays
네트워크에 의해 유도 된 네트워크 지연과 경로의 각 서버가 모드 변경의 유효성을 확인해야 하기 때문에(EX: 사용자가 존재하고 올바른 권한을 가지고 있음) MODE 메시지가 네트워크의 일부에만 영향을 미치며, 종종 채널의 현재 상태에 있는 서버 간에 불일치를 만드는 것은 드문 일이 아닙니다.
Collisions And Channel Modes
“IRC: 서버 프로토콜” 문서는 두 서버가 서로 연결될 때 채널 데이터가 교환되는 방식을 설명합니다. 합법적이든 아니든 채널 충돌은 포괄적인 이벤트로 처리됩니다. 즉, 결과 채널은 연결 전에 어느 서버에서든 채널의 구성원인 모든 사용자를 구성원에게 갖게 됩니다. 마찬가지로 각 서버는 채널 모드를 다른 서버로 보냅니다. 따라서 각 서버는 이러한 채널 모드도 받습니다. 주어진 채널에 대해 플래그, 마스크 및 데이터의 세 가지 유형의 모드가 있습니다. 처음 두 유형은 설정되거나 설정되지 않았기 때문에 다루기 쉽습니다. 이러한 모드가 한 서버에 설정되어 있으면 연결의 결과로 다른 서버에 설정되어야 합니다. 주제는 이 교환의 일부로 전송되지 않으므로 문제가 되지 않습니다. 그러나 채널 모드 ‘l’과 ‘k’는 교환되며 연결 전에 두 서버에 모두 설정되어 있으면 두 값 중 어느 것이 우선할지 결정하는 메커니즘이 없습니다. 결과적인 불일치를 수정하는 것은 사용자의 몫입니다.
Resource Exhaustion
섹션 4.3에 정의된 마스크 기반 모드는 IRC 서버(및 네트워크)를 시스템의 단순한 남용에 취약하게 만듭니다. 단일 챈러 운영자는 특정 채널에서 가능한 많은 마스크를 설정할 수 있습니다. 이로 인해 서버가 메모리와 네트워크 대역폭을 쉽게 낭비할 수 있습니다.(정보가 다른 서버로 전파되기 때문에) 이러한 이유로 섹션 4.3에 언급된 대로 채널당 이러한 마스크 수에 제한을 두는 것이 좋습니다. 또한 동일한 채널에 대해 중복 마스크가 설정되는 것을 방지하기 위해 더 복잡한 메커니즘을 사용할 수 있습니다.
Security Considerations
Access Control
채널에 대한 액세스를 제어하는 주요 방법 중 하나는 사용자 연결의 사용과 호스트 이름을 기반으로 하는 마스크를 사용하는 것입니다. 이 메커니즘은 IRC 서버에 정확한 사용자 연결 인증 방법이 있고 사용자가 쉽게 접근 할 수 없는 경우에만 효율적이고 안전할 수 있습니다. 이론적으로는 이러한 엄격한 인증 메커니즘을 구현하는 것이 가능하지만 대부분의 IRC 네트워크(특히 공용 네트워크)에는 이와 같은 것이 없으며 특정 클라이언트 연결에 대한 사용자 이름 및 호스트 이름의 정확성에 대해 거의 보장하지 않습니다.
액세스를 제어하는 또 다른 방법은 채널 키를 사용하는 것입니다. 그러나 이 키는 일반 텍스트로 전송되기 때문에 전통적인 중간자 공격에 취약합니다.
Channel Privacy
채널 충돌은 포괄적인 이벤트로 취급되기 때문에 (섹션 6.3 참조) 사용자가 액세스 제어 설정을 무시하는 채널에 참여할 수 있습니다. 이 방법은 채널에서 채널 운영자의 지위를 “불법적으로” 획득하여 개인이 채널을 “인계”하는 데 오랫동안 사용되어 왔습니다. 동일한 방법을 사용하여 채널 구성원의 정확한 목록을 찾고 결국 채널로 전송 된 일부 메시지를 수신 할 수 있습니다.
Anonymity
익명 채널 플래그(섹션 4.2.1 참조)는 별명이 “익명”인 의사 사용자가 보낸 모든 메시지를 채널에 표시함으로써 이러한 채널의 모든 사용자를 “익명”으로 렌더링하는 데 사용할 수 있습니다. 이것은 클라이언트-서버 수준에서 수행되며 서버-서버 수준에서는 익명성이 제공되지 않습니다. 독자는 제공되는 익명성의 수준이 매우 낮고 안전하지 않으며 클라이언트는 이러한 채널에 참여하는 사용자에게 강력한 경고를 표시해야 한다는 점을 분명히 알고 있어야 합니다.