RFC 2812

Labels

이 섹션에서는 IRC 프로토콜의 다양한 구성 요소에 사용되는 식별자를 정의합니다.

Servers

서버는 이름으로 고유하게 식별되며 최대 길이는 63자입니다. 서버 이름에 사용될 수 있는 것과 사용되지 않을 수 있는 것에 대해서는 프로토콜 문법 규칙(섹션 2.3.1)을 참조하십시오.

Clients

각 클라이언트의 경우 모든 서버에는 반드시 다음과 같은 정보가 있어야 합니다 nETWIDE 고유 식별자(클라이언트 유형에 따라 달라지는 형식) 및 클라이언트를 소개한 서버가 있어야 합니다.

  • Users
    • 각 사용자는 최대 길이가 9자인 고유 한 별명으로 다른 사용자와 구별됨
    • 닉네임에 사용할 수 있는 것과 사용할 수 없는 것에 대해서는 프로토콜 문법 규칙(섹션 2.3.1)을 참조
    • 최대 길이는 9자로 제한되지만 클라이언트는 향후 프로토콜 발전에 사용될 수 있으므로 더 긴 문자열을 허용해야 함
    • Operators
      • IRC 네트워크 내에서 합리적인 양의 주문을 유지할 수 있도록 특수 계층의 사용자(운영자)가 네트워크에서 일반 유지 관리 기능을 수행 할 수 있음
      • 운영자에게 부여 된 권한은 ‘위험한 것’으로 간주될 수 있지만 그럼에도 불구하고 종종 필요함
      • 운영자는 필요에 따라 서버 연결 해제 및 다시 연결과 같은 기본 네트워크 작업을 수행 할 수 있어야 함
      • 이러한 필요성을 인식하여, 여기에서 논의 된 프로토콜은 운영자가 그러한 기능을 수행 할 수만 있도록 제공함
      • 3.1.8(squit), 3.4.7(connect) 섹션을 참조
      • 논란이 되는 것은 운영자의 힘은 ‘강제’에 의해 연결된 네트워크에서 사용자를 제거하는 기능
      • 운영자는 모든 클라이언트와 서버 간의 연결을 닫을 수 있음
      • 그 남용은 파괴적이고 성가시며 그 혜택은 거의 존재하지 않기 때문에 이에 대한 정당성은 매우 섬세함
      • 이러한 유형의 조치에 대한 자세한 내용은 섹션 3.7.1(KILL)을 참조
  • Services
    • 각 서비스는 별명과 서버 이름으로 구성된 서비스 이름으로 다른 서비스와 구별됨
    • 사용자의 경우 닉네임의 최대 길이는 9자
    • 닉네임에 사용할 수 있는 것과 사용할 수 없는 것에 대해서는 프로토콜 문법 규칙(섹션 2.3.1) 참조

Channels

채널 이름은 최대 50자 길이의 문자열(‘&’, ‘#’, ‘+’ 또는 ‘!’ 문자로 시작)입니다. 첫 번째 문자가 ‘&’, ‘#’, “+’ 또는 ‘!’여야 한다는 요구 사항 외에도 채널 이름에 대한 유일한 제한은 공백, Ctrl+G(^G 또는 ASCII 7), 쉼표를 포함하지 않는다는 것입니다. 공백은 매개 변수 구분 기호로 사용되며 명령은 프로토콜에서 목록 항목 구분 기호로 사욛됩니다. 콜론을 채널 마스크의 구분 기호로 사용할 수도 있습니다. 채널 이름은 대소문자를 구분하지 않습니다.

채널 이름의 정확한 구문은 프로토콜 문법 규칙(섹션 2.3.1)을 참조하십시오.

각 접두사는 다른 채널 유형을 특징으로 합니다. 채널 유형의 정의는 클라이언트-서버 프로토콜과 관련이 없으므로 이 문서의 범위를 벗어납니다. 자세한 내용은 “IRC:Channel Management”에서 확인할 수 있습니다.

The IRC Client Specification

Overview

여기에 설명 된 프로토콜은 클라이언트가 사용자로 등록 할 때 클라이언트 대 서버 연결에만 사용하기 위한 것입니다.

Characater codes

특정 문자 집합이 지정되지 않았습니다. 이 프로토콜은 8비트를 구성하는 8비트로 구성된 코드 세트를 기반으로 합니다. 각 메시지는 이러한 8진수로 구성 될 수 있습니다. 그러나 일부 옥텟 값은 메시지 구분 기호로 작동하는 제어 코드에 사용됩니다.

8비트 프로토콜에 관계없이 구분 기호와 키워드는 프로토콜이 대부분 US-ASCII 터미널 및 텔넷 연결에서 사용 가능하도록 되어 있습니다.

IRC의 스칸디나비아 기원으로 인해 {}|^ 문자는 각각 []~ 문자의 소문자로 간주됩니다. 이것은 두 개의 별명 또는 채널 이름의 동등성을 판별 할 때 중요한 문제입니다.

Messages

서버와 클라이언트는 서로에게 메시지를 보내며 응답을 생성하거나 생성하지 않을 수 있습니다. 메시지에 유효한 명령이 포함 된 경우(나중 섹션에서 설명함) 클라이언트는 지정된대로 응답을 예상해야 하지만 응답을 영원히 기다리지 않는 것이 좋습니다. 클라이언트 대 서버 및 서버 대 서버 통신은 본질적으로 비동기식입니다.

각 IRC 메시지는 접두어(OPTIONAL), 명령 및 명령 매개 변수(최대 15개)의 세 가지 주요 부분으로 구성 될 수 있습니다. 접두사, 명령 및 모든 매개 변수는 각각 하나의 ASCII 공백 문자(0x20)로 구분됩니다.

접두사의 존재는 단일 선행 ASCII 콜론 문자로 표시되며 메시지 자체의 첫 번째 문자여야 합니다. 콜론과 접두사 사이에 공백이 없어야 합니다. 접두사는 서버에서 메시지의 실제 출처를 나타내는 데 사용됩니다. 접두사가 메시지에서 누락 된 경우 해당 접두사가 수신 된 연결에서 시작된 것으로 간주됩니다. 클라이언트는 메시지를 보낼 때 접두사를 사용해서는 안됩니다. 하나를 사용하는 경우 유일한 유효한 접두사는 클라이언트와 관련된 등록 된 별명입니다.

명령은 유효한 IRC 명령이거나 ASCII 텍스트로 표시되는 3자리 숫자여야 합니다.

IRC 메시지는 항상 CRLF쌍으로 끝나는 문자 줄이며, 이러한 메시지는 후행 CR-LF를 포함한 모든 문자를 계산하여 길이가 512자를 초과하지 않아야 합니다. 따라서 명령 및 해당 매개 변수에 허용되는 최대 문자 수는 510자입니다. 메시지 라인의 연속에 대한 규정은 없습니다. 현재 구현에 대한 자세한 내용은 섹션 6을 참조하십시오.

  • Message format in Augmented BNF
    • 프로토콜 메시지는 연속적인 옥텟 스트림에서 추출되어야 함
    • 현재 해결책은 메시지 구분 기호로 CR과 LF라는 두 문자를 지정하는 것
    • 빈 메시지는 자동으로 무시되므로 추가 문제 없이 메시지 사이에 CR-LF 시퀀스를 사용할 수 있음
    • 추출 된 메시지는 구성 요소 [prefix], [command] 및 매개 변수 목록([params])로 구문 분석됨
    • message = [”:” prefix SPACE ] command [ params ] crlf
    • prefix = servername / ( nickname [ [ “!” user ] “@” host ] )
    • command = 1*letter / 3digit
    • params = *14( SPACE middle ) [ SPACE “:” trailing ] =/ 14( SPACE middle ) [ SPACE [ “:” ] trailing ]
    • nospcrlfcl = %x01-09 / %x0B-0C / %x0E-1F / %x21-39 / %x3B-FF ; any octet except NUL, CRL, LF, “ “ and “:”
    • middle = nospcrlfcl *( “:” / nospcrlfcl )
    • trailing = *( “:” / “ “ / nospcrlfcl )
    • SPACE = %x20 ; space character
    • crlf = %x0D %x0A ; “carriage return” “linefeed”
    • 매개 변수 목록을 추출한 후 [middle] 또는 [trailing] 중 일치하는 모든 매개변수는 동일함
    • [trailing]은 매개 변수 내에 SPACE를 허용하는 구문 적 트릭
    • NUL 문자는 메시지 프레이밍에서 특별하지 않으며 기본적으로 매개 변수 내부에서 끝날 수 있지만 일반 C 문자열 처리에서 추가 복잡성을 유발
    • NUL은 메시지 내에서 허용되지 않음
    • 대부분의 프로토콜 메시지는 목록에서의 위치에 따라 추출 된 매개 변수 문자열에 대한 추가 의미와 구문을 지정함
    • 많은 서버 명령은 명령 뒤의 첫 번째 매개 변수가 다음과 같이 설명 될 수 있는 대상 목록이라고 가정함
    • target = nickname / server
    • msgtarget = msgto *( “,” msgto )
    • msgto = channel / ( user [ “%” host ] “@” servername )
    • msgto =/ ( user “%” host ) / targetmask
    • msgto =/ nickname / ( nickname “!” user “@” host )
    • channel = ( “#” / “+” / ( “!” channelid ) / “&” ) chanstring [ “:” chanstring ]
    • servername = hostname
    • host = hostname / hostaddr
    • hostname = shortname *( “.” shortname )
    • shortname = ( letter / digit ) *( letter / digit / “-“ ) *( letter / digit ) ; as specified in RFC 1123[HNAME]
    • hostaddr = ip4addr / ip6addr
    • ip4addr = 13digit “.” 13digit “.” 13digit “.” 13digit
    • ip6addr = 1hexdigit 7( “:” 1hexdigit )
    • ip6addr =/ “0:0:0:0:0:” ( “0” / “FFFF” ) “:” ip4addr
    • nickname = ( letter / special ) *8( letter / digit / special / “-“ )
    • targetmask = ( “$” / “#” ) mask ; see details on allowed masks in section 3.3.1
    • chanstring = %x01-07 / %x08-09 / %x0B-0C / %x0E-1F / %x21-2B
    • chanstring =/ %x2D-39 / %x3B-FF ; any octet except NUL, BELL, CR, LF, “ “, “,”, and “:”
    • channelid = 5( %x41-5A / digit ) ; 5( A-Z / 0-9 )
    • 기타 매개 변수 구문은 다음과 같습니다.
    • user = 1*( %x01-09 / %x0B-0C / %x0E-1F / %x21-3F / %x41-FF ) ; any octet except NUL, CR, LF, “ “ and “@”
    • key = 1*23( %x01-05 / %x07-08 / %x0C / %x0E-1F / %x21-7F ) ; any 7bit US_ASCII character, except NUL, CR, LF, FF, h/v TABs, and “ “
    • letter = %x41-5A / %x61-7A ; A-Z / a-z
    • digit = %x30-39 ; 0-9
    • hexdigit = digit / “A” / “B” / “C” / “D” / “E” / “F”
    • special = %x5B-60 / %x7B-7D ; “[”, “]”, “", “`”, “_”, “^”, “{“, “|”, “}”
    • [hostaddr] 구문은 IP주소에 따라야 할 형식을 표시하기 위한 목적으로만 여기에 제공됨
    • 이 프로토콜의 사용 가능한 유일한 구현이 TCP/IP를 기본 네트워크 프로토콜로 사용하지만 다른 프로토콜이 사용되는 것을 방지하기 위한 것은 아니라는 사실을 반영
    • [hostname]의 최대 길이는 63자
    • 인터넷 호스트 이름이 더 길 수 있으므로 프로토콜의 제한임
    • IRC 메시지의 길이는 512자로 제한되기 때문에 이러한 제한이 필요
    • 63자 이상의 호스트에서 연결하는 클라이언트는 호스트 이름 대신 호스트 주소를 사용하여 등록
    • 이 문서의 다음 섹션에서 사용되는 일부 매개변수는 편의를 위해 사용되는 이름 외에 특정 매개 변수가 없으므로 여기서 정의하지 않음
    • 이런 매개 변수는 [params]에 대해 정의 된 일반 구분을 따름

Numeric replies

서버로 전송되는 대부분의 메시지는 일종의 응답을 생성합니다. 가장 일반적인 응답은 오류 및 일반 응답 모두에 사용되는 숫자 응답입니다. 숫자 응답은 발신자 접두사, 3자리 숫자 및 응답 대상으로 구성된 하나의 메시지로 전송되어야 합니다. 숫자 응답은 클라이언트에서 시작할 수 없습니다. 다른 모든 측면에서 숫자 응답은 키워드가 문자열이 아닌 3자리 숫자로 구성된다는 점을 제외하면 일반 메시지와 같습니다. 다른 응답 목록은 섹션 5(Replies)에 제공됩니다.

Wildcard expressions

문자열에 와일드 카드가 허용되면 “마스크”라고 합니다.

문자열 일치를 위해 프로토콜은 두 개의 특수 문자 ‘?’를 사용할 수 있습니다. ‘?’(%x3F)는 한 문자만 일치시키고 ‘*’(%x2A)는 임의의 문자와 일치시킵니다. 이 두 문자는 문자 ‘'(%x5C)를 사용하여 이스케이프 할 수 있습니다.

이를 위한 증강 BNF 구문은 다음과 같습니다.

  • mask = *( nowild / noesc wildone / noesc wildmany )
  • wildone = %x3F
  • wildmany = %x01-29 / %x2B-3E / %x40-FF ; any octet except NUL, “*”, “?”
  • noesc = %x01-5B / %x5D-FF ; any octet except NUL and “"
  • matchone = %x01-FF ; matches wildone
  • matchmany = *matchone ; matches wildmany

Message Details

다음 페이지에는 IRC 서버와 클라이언트가 인식하는 각 메시지에 대한 설명이 있습니다. 이 섹션에 설명 된 모든 명령은 이 프로토콜에 대해 모든 서버에서 구현해야 합니다.

ERR_NOSUCHSERVER 응답이 리턴되면 메시지 대상을 찾을 수 없음을 의미합니다. 서버는 해당 명령에 대해 이 오류 이후 다른 응답을 보내면 안됩니다.

전체 미시지를 구문 분석하고 적절한 오류를 반환하려면 클라이언트가 연결된 서버가 필요합니다.

여러 매개 변수가 제공되는 경우 각 매개 변수의 유효성을 확인하고 적절한 응답을 클라이언트로 다시 보내야 합니다. 항목 구분 기호로 쉼표가 있는 매개 변수 목록을 사용하는 잘못된 메시지의 경우 각 항목에 대해 응답을 보내야 합니다.

Connection Registration

  • Password message
  • Nick message
  • User message
  • Oper message
  • User mode message
  • Service message
  • Quit
  • Squit

Channel operations

  • Join message
    • Command
      • JOIN
    • Parameters
      • ( <channel> *( ","<channel> )[ <key>*(","<key>) ] | "0"
    • 사용자가 특정 채널 청취를 시작하도록 요청하는 데 사용
    • 서버는 대상 목록 형식의 인수를 구문 분석 할 수 있어야 하지만 클라이언트에 JOIN 메시지를 보낼 때 목록을 사용해서는 안됨
    • 사용자가 채널에 가입하면 서버가 채널에 영향을 미치는 모든 명령에 대한 정보를 받음
      • JOIN, MODE, KICK, PART, QUIT, PRIVMSG, NOTICE 포함
      • 채널 구성원은 다른 채널 구성원과 채널 모드를 추적할 수 있음
    • JOIN이 성공하면 사용자는 확인으로 JOIN메시지를 수신한 다음 채널의 주제(RPL_TOPIC 사용)과 채널에 있는 사용자 목록(RPL_NAMREPLY 사용)을 전송
      • User Joining은 반드시 포함
    • 사용자가 현재 구성원으로 있는 모든 채널에서 탈퇴하기 위한 특수 인수인 0을 허용함
      • 사용자가 자신이 속한 각 채널에 대해 PART 명령(3.2.2 PART Message)을 보낸 것 처럼 처리
    • Numeric Replies
      • ERR_NEEDMOREPARAMS
      • ERR_INVITEONLYCHAN
      • ERR_CHANNELISFULL
      • ERR_NOSUCHCHANNEL
      • ERR_TOOMANYTARGETS
      • ERR_BANNEDFROMCHAN
      • ERR_BADCHANNELKEY
      • ERR_BADCHANMASK
      • ERR_TOOMANYCHANNELS
      • ERR_UNAVAILRESOURCE
      • RPL_TOPIC
    • Examples
      • JOIN #foobar
        • #foobar 채널에 참여
      • JOIN &foo fubar
        • &foo 채널에 fubar 키 값으로 참여
      • JOIN #foo, &bar fubar
        • #foo 채널에 fubar 키 값으로 참여하고 &bar 채널은 키 값 없이 참여
      • JOIN #foo, #bar fubar, foobar
        • #foo 채널에 fubar 키 값, #bar 채널에 foobar 키 값으로 참여
      • JOIN #foo, #bar
        • #foo, #bar 채널에 참여
      • JOIN 0
        • 현재 join 상태인 모든 채널에서 나감
      • :WiZ!jto@tolsun.oulu.fi JOIN #Twilight_zone
        • WiZ로부터 #Twilight_zone에 Join 한다는 메시지를 전송 받음
  • Part message
    • Command
      • PART
    • Parameters
      • <channel> *(","<channel> ) [ <Part Message> ]
    • 사용자가 매개 변수 문자열에 나열된 모든 주어진 채널의 활성 구성원 목록에서 제거되도록 함
    • Part Message가 제공되면 기본 메시지인 닉네임 대신 이 메시지가 전송됩니다.
  • Channel mode message
  • Topic message
  • Names message
  • List message
  • Invite message
  • Kick command

Sending messages

  • Private messages
  • Notice

Server queries and commands

  • Motd message
  • Lusers message
  • Version message
  • Stats message
  • Links message
  • Time message
  • Connect message
  • Trace message
  • Admin command
  • Info command

Service Query and Commands

  • Servlist message
  • Squery

User based queries

  • Who query
  • Whois query
  • Whowas

Miscellaneous messages

  • Kill message
  • Ping message
  • Pong message
  • Error

Optional features

Away

Rehash message

Die message

Restart message

Summon message

Users

Operwall message

Userhost message

Ison message

Replies

Command response

Error Replies

Reserved numerics

Current implementations

Current Problem

Nicknames

Limitation of wildcards

Security considerations

Categories:

Updated: