← rfc/
╔══════════════════════════════════════════════════════════════════════════╗
RFC 772 · mail

POSTA AKTARIM PROTOKOLÜ

Yazar
Kurum
Tarih
Eylül 1980
Durum
Network Working Group Yorum Talebi
Kanal
mail/

POSTA AKTARIM PROTOKOLÜ

Network Working Group
S. Sluizer
Request for Comments: 772
J. Postel
ISI
Eylül 1980

ÖNSÖZ

Bu, bu protokolün ilk taslağıdır ve yorumlar kesinlikle talep edilmektedir.

GİRİŞ

Posta Aktarım Protokolü’nün (MTP) amacı, postayı güvenilir ve verimli bir şekilde aktarmaktır.

Bu belge, ARPA Internet Protocol Handbook içinde açıklanan aşağıdaki protokollerin bilindiğini varsayar. Okuyucu, File Transfer Protocol’ün bazı bölümleriyle güçlü benzerlikler olduğunu fark edecektir; bunun bir nedeni, bilgisayar postasının ARPA Network üzerindeki ilk uygulamasının FTP’nin bir özelliği olarak gerçekleştirilmiş olmasıdır.

TARTIŞMA

Bu bölümde, terminoloji ve MTP modeli ele alınmaktadır. Bu bölümde tanımlanan terimler yalnızca MTP içinde özel anlam taşıyanlardır. Terminolojinin bir kısmı MTP modeline oldukça özgüdür; bazı okuyucular terminolojiyi incelerken MTP modeli bölümüne bakmak isteyebilir.

TERMİNOLOJİ

ASCII

ARPA Internet Protocol Handbook içinde tanımlanan ASCII karakter kümesi. MTP’de ASCII karakterleri sekiz bitlik bir kod kümesinin alt yarısı olarak tanımlanır (yani en anlamlı bit sıfırdır) ve NVT-ASCII olarak adlandırılır.

kontrol bağlantısı

Bir sender-MTP ile bir receiver-MTP arasında komutların, yanıtların ve posta metninin değişimi için kullanılan TCP tam çift yönlü iletişim yolu veya iki adet NCP tek yönlü iletişim yolu. Kontrol bağlantısı TELNET Protocol’e göre çalışır.

veri modu

Posta, kontrol bağlantısı üzerinden bir oktet akışı olarak iletilir. (FTP terminolojisinde buna stream mode denir.)

veri yapısı

Postanın iç yapısı, kesintisiz bir veri oktetleri dizisi olarak kabul edilir. (FTP terminolojisinde buna file-structure denir.)

veri gösterimi

Tüm verilerin (yani postanın) iç gösterimi NVT-ASCII biçimindedir.

host

Posta kutularının bulunduğu ağlar arası ortamda yer alan bir bilgisayar.

MTP komutları

sender-MTP’den receiver-MTP’ye akan kontrol bilgilerini oluşturan komutlar kümesi.

posta

Keyfi uzunlukta bilgisayar verilerinden oluşan sıralı bir küme olup RFC 733’te (ARPA Network Text Messages Format Standardı) belirlenen standarda uygundur.

posta kutusu (mailbox)

Posta gönderilecek kullanıcıyı tanımlayan bir karakter dizisi (adres). Posta kutusu genellikle host ve kullanıcı tanımlarından oluşur. Standart posta kutusu adlandırma kuralı "user@host" olarak tanımlanır. Ayrıca postanın saklandığı "kapsayıcıyı" da ifade eder.

NVT

TELNET Protocol içinde tanımlanan Network Virtual Terminal.

oktet

MTP’de baytlar oktet (8 bit) olarak kabul edilir. Bu, verilerin bir host içinde saklandığı bayt boyutuyla mutlaka aynı olmak zorunda değildir.

yanıt (reply)

Yanıt, bir MTP komutuna karşılık olarak receiver’dan sender’a kontrol bağlantısı üzerinden gönderilen bir onaydır (olumlu veya olumsuz). Bir yanıtın genel biçimi, bir tamamlanma kodu (hata kodları dahil) ve ardından gelen bir metin dizisinden oluşur. Kodlar programlar tarafından kullanılmak içindir ve metin genellikle insan kullanıcılar için tasarlanmıştır.

receiver-MTP süreci

Bir sender-MTP süreciyle iş birliği içinde posta aktaran bir süreç. sender-MTP’den gelen bağlantıyı kendi port/socket L üzerinde "dinler" ve TELNET Protocol kullanarak bir kontrol bağlantısı kurar. sender-MTP’den MTP komutlarını alır, yanıtlar gönderir ve posta aktarımını yönetir.

sender-MTP süreci

Bir receiver-MTP süreciyle iş birliği içinde posta aktaran bir süreç. Kullanıcı arayüzü komut/yanıt diyaloğunda yerel bir dil kullanılabilir. sender-MTP, kontrol bağlantısını kendi port/socket U üzerinden receiver-MTP sürecine başlatır. MTP komutlarını başlatır, yanıtları alır ve posta aktarımını yönetir.

kullanıcı

Posta aktarım hizmeti almak isteyen bir insan (veya bir insan adına çalışan bir süreç). Ayrıca bilgisayar postasının alıcısı.

MTP MODELİ

Yukarıdaki tanımlar göz önünde bulundurularak, bir MTP hizmeti için aşağıdaki model (Şekil 1’de gösterilmiştir) diyagram olarak gösterilebilir.

              ------------                ------------
              |          |                |          |    --------
              |          |      MTP       |          |<-->| User |
              | Receiver-|Commands/Replies|  Sender- |    --------
  --------    |   MTP    |<-------------->|    MTP   |    --------
  | Mail |<-->|          |      Mail      |          |<-->| Mail |
  |System|    |          |                |          |    |System|
  --------    ------------                ------------    --------

              Receiver-MTP                 Sender-MTP

                       MTP Kullanım Modeli

                            Şekil 1

Şekil 1’de açıklanan modelde sender-MTP, TELNET Protocol’ü izleyen TCP/NCP kontrol bağlantısını başlatır. Kullanıcının başlatmasıyla, standart MTP komutları sender-MTP tarafından üretilir ve kontrol bağlantısı üzerinden receiver-MTP’ye iletilir. Komutlara yanıt olarak standart yanıtlar kontrol bağlantısı üzerinden receiver-MTP’den sender-MTP’ye gönderilir. Buna ek olarak posta da kontrol bağlantısı üzerinden gönderilir.

POSTA AKTARIM İŞLEVLERİ

Kontrol bağlantısı, gerçekleştirilecek işlevleri tanımlayan komutların aktarımı, komutlara verilen yanıtlar ve postanın gerçek aktarımı için kullanılır. Posta yalnızca kontrol bağlantısı üzerinden aktarılır.

sender-MTP’den receiver-MTP’ye iletişim kanalı, sender’dan standart bir receiver port/socket noktasına kurulan bir TCP/NCP kontrol bağlantısı ile sağlanır. sender-MTP, MTP komutlarını göndermekten, alınan yanıtları yorumlamaktan ve postayı göndermekten sorumludur; receiver-MTP ise komutları yorumlar, yanıtlar gönderir ve postayı alır.

POSTA GÖSTERİMİ VE SAKLAMA

Posta, gönderen host içindeki bir depolama aygıtından alıcı host içindeki bir depolama aygıtına aktarılır. İki sistemdeki veri saklama gösterimleri farklı olduğundan, posta üzerinde bazı dönüşümlerin yapılması gerekebilir. Örneğin, NVT-ASCII farklı sistemlerde farklı veri saklama gösterimlerine sahiptir. PDP-10 sistemleri genellikle NVT-ASCII’yi 36 bitlik bir kelime içinde sola hizalanmış beş adet 7 bitlik ASCII karakter olarak saklar. 360 sistemleri NVT-ASCII’yi 32 bitlik bir kelime içinde dört adet 8 bitlik EBCDIC kodu olarak saklar. Multics ise NVT-ASCII’yi 36 bitlik bir kelime içinde dört adet 9 bitlik karakter olarak saklar.

Basitlik amacıyla tüm veriler MTP içinde NVT-ASCII olarak gösterilmelidir. Bu, gönderici ve alıcı hostlar farklı olsa bile metin iletimi sırasında karakterlerin standart NVT-ASCII gösterimine dönüştürülmesi gerektiği anlamına gelir. Gönderici, veriyi kendi iç karakter gösteriminden standart 8 bitlik NVT-ASCII gösterimine dönüştürür (bkz. TELNET spesifikasyonu). Alıcı ise veriyi standart biçimden kendi iç biçimine dönüştürür. Bu standarda uygun olarak bir metin satırının sonunu belirtmek için dizisi kullanılmalıdır.

MTP’de posta herhangi bir iç yapıya sahip değildir ve kesintisiz bir veri oktetleri dizisi olarak kabul edilir.

HATA KURTARMA VE YENİDEN BAŞLATMA

Veri aktarımı sırasında kaybolan veya bozulmuş bitleri tespit etmeye yönelik bir düzenleme yoktur; bu düzeydeki hata kontrolü TCP/NCP tarafından gerçekleştirilir. Buna ek olarak, göndericileri büyük sistem arızalarına (bir host, bir MTP süreci veya temel ağın arızalanması dahil) karşı koruyacak bir yeniden başlatma prosedürü de sağlanmamıştır.

MTP KOMUTLARI

KOMUT ANLAMBİLİMİ

MTP komutları, kullanıcının talep ettiği posta aktarımı veya posta sistemi işlevini tanımlar. Posta kutularının sözdizimi, alıcı sitenin kurallarına uygun olmalıdır (standart varsayılanlar uygulanabilir). Bir MTP aktarım komutuna yanıt olarak posta her zaman kontrol bağlantısı üzerinden aktarılacaktır.

Mail Transfer Protocol, kontrol bağlantısı üzerindeki tüm iletişimler için TELNET Protocol spesifikasyonlarını izler. TELNET iletişimi için kullanılan dil müzakere edilen bir seçenek olabilse de, "TELNET dili" ve karşılık gelen "TELNET satır sonu kodu" sırasıyla NVT-ASCII ve olmak zorundadır. TELNET Protocol’ün diğer spesifikasyonlarına burada atıfta bulunulmayacaktır.

MTP komutları ile sonlandırılan NVT-ASCII dizileridir. Komut kodları, parametreler varsa (boşluk) karakteriyle, aksi halde ile sonlandırılan alfabetik karakterlerden oluşur.

MTP komutları aşağıda ele alınmıştır. Bu bölümde bazı komutların açıklamasında olası yanıtlar açıkça verilmiştir. MTP yanıtları bir sonraki bölümde ele alınacaktır.

MAIL (MAIL)

Bu komut sender-MTP’nin kontrol bağlantısı üzerinden posta göndermesine olanak tanır. Argüman alanı bir gönderici ve isteğe bağlı bir yol dizisi içerir. Yol dizisi mevcutsa, isteğe bağlı bir host listesi ve bir hedef posta kutusundan oluşur. Host listesi mevcutsa bu kaynak yönlendirme bilgisidir ve postanın listedeki ilk hosta iletilmesi gerektiğini belirtir. Bu komut satırının ardından receiver, sonraki tüm karakterleri göndericiden gelen posta metni olarak kabul eder. Posta metni "CRLF.CRLF" karakter dizisi ile sonlandırılır.

Posta yol dizisi boyunca iletildikçe, her iletici host kendisini listeden çıkarmalıdır. Posta nihai hedefine ulaştığında (yol dizisi yalnızca bir — muhtemelen boş — hedef posta kutusu içerdiğinde), receiver bunu kendi host posta kurallarına göre hedef posta kutusuna yerleştirir. Eğer ikinci argüman alanı boşsa (bir veya daha fazla boşluk) ya da boş () ise posta bir yazıcıya veya site genel teslimat postaları için belirlenmiş başka bir yere yönlendirilir. Posta, ilk argüman alanında belirtilen göndericiden gelmiş olarak işaretlenebilir.

MAIL RECIPIENT SCHEME QUESTION (MRSQ)

Bu MTP komutu, aynı host üzerindeki birden fazla kullanıcıya posta iletimi için kullanılacak şemayı seçmek amacıyla kullanılır. Şemalar, alıcıların önce listelenmesi veya postanın önce gönderilmesi şeklindedir.

MAIL RECIPIENT (MRCP)

Bu komut, tek bir host üzerindeki birden fazla kullanıcıya posta iletimi sırasında bireysel alıcıları tanımlamak için kullanılır.

HELP (HELP)

Bu komut, receiver’ın uygulama durumuna ilişkin yararlı bilgileri kontrol bağlantısı üzerinden göndermesine neden olur. Komut bir argüman alabilir (örneğin herhangi bir komut adı) ve yanıt olarak daha özel bilgiler döndürebilir. Yanıt türü 211 veya 214’tür.

QUIT (QUIT)

Bu komut receiver’ın kontrol bağlantısını kapatması gerektiğini belirtir.

NOOP (NOOP)

Bu komut herhangi bir parametreyi veya daha önce girilmiş komutları etkilemez. Receiver’ın yalnızca bir OK yanıtı göndermesi dışında herhangi bir işlem yapılmadığını belirtir.

KOMUT SÖZDİZİMİ

Komutlar (ve işlevleri ile anlamları) kontrol bağlantısı üzerinden iletilen TELNET NVT-ASCII dizileridir. Komutların işlevleri ve anlamları MTP Komutları bölümünde açıklanmıştır. Yanıt dizileri Komut ve Yanıtların Sıralanması bölümünde ele alınmıştır. Komutların kullanımını gösteren senaryolar Tipik MTP Senaryoları bölümünde verilmiştir. Komut sözdizimi bu bölümde belirtilmiştir.

Komutlar bir komut kodu ile başlar ve ardından bir argüman alanı gelir. Komut kodları dört alfabetik karakterden oluşur. Büyük ve küçük harfler aynı kabul edilir. Dolayısıyla aşağıdakilerin herhangi biri mail komutunu temsil edebilir:

Aynı durum, RECIPIENT first için R veya r gibi parametre değerlerini temsil eden semboller için de geçerlidir. Komut kodları ile argüman alanları bir veya daha fazla boşluk ile ayrılır.

Argüman alanı, karakter dizisiyle sonlanan değişken uzunlukta bir karakter dizisinden oluşur. Alıcının satır sonu kodu alınana kadar herhangi bir işlem yapmaması gerektiği unutulmamalıdır.

Sözdizimi aşağıda NVT-ASCII biçiminde verilmiştir. Argüman alanındaki tüm karakterler ASCII karakterleridir. Köşeli parantezler isteğe bağlı bir argüman alanını gösterir. Seçenek kullanılmazsa uygun varsayılan değer geçerli kabul edilir.

Aşağıdakiler MTP komutlarıdır:

MAIL <SP> FROM:<sender> [<SP> TO:<path>] <CRLF>

MRSQ [<SP> <scheme>] <CRLF>

MRCP <SP> TO:<path> <CRLF>

HELP [<SP> <string>] <CRLF>

QUIT <CRLF>

NOOP <CRLF>

Yukarıdaki argüman alanlarının sözdizimi (uygun yerlerde BNF gösterimi kullanılarak) aşağıda verilmiştir. "..." gösterimi bir alanın bir veya daha fazla kez tekrarlanabileceğini belirtir.

<sender> ::= "<" <mailbox> ">"

<path> ::= "<" ["@" <host> "," ...] <mailbox> ">"

<scheme> ::= "R" | "T" | "?"

<string> ::= <char> | <char><string>

<mailbox> ::= <user> "@" <host>

<host> ::= <string>

<user> ::= <string>

<char> ::= <CR> ve <LF> hariç 128 ASCII karakterinden herhangi biri

KONTROL İŞLEVLERİ

Çoğu zaman paylaşımlı sistem, bir terminal kullanıcısının kontrolden çıkmış bir sürecin kontrolünü yeniden ele almasına izin veren mekanizmalar sağlar. Yerel olarak kullanıldığında bu sistemler, normal karakterler veya özel "bant dışı" sinyaller olsun, kullanıcı tarafından sağlanan tüm sinyallere erişebilir.

Terminaller ağa bağlanarak sisteme bağlandığında sistem tüm kullanıcı sinyallerine mutlaka erişemez; ağın akış kontrol mekanizmaları bu tür sinyallerin başka bir yerde, örneğin kullanıcının hostunda arabelleğe alınmasına neden olabilir.

Bu soruna karşı TELNET "Synch" mekanizması kullanılır. Bir Synch sinyali, TELNET komutu DATA MARK (DM) ile birlikte kullanılan bir TCP Urgent veya bir NCP Interrupt bildiriminden oluşur. TELNET bağlantısına uygulanan akış kontrolüne tabi olmayan bu bildirim, onu alan süreç tarafından veri akışının özel şekilde ele alınmasını başlatmak için kullanılır.

Bu modda veri akışı hemen TELNET Interrupt Process (IP) komutu için taranır. (TELNET IP komutunun kullanılmasının gerekçesi, mevcut bir sunucu TELNET modülünün MTP’nin "altında" çalışabilmesine izin vermektir. Eğer bu kod doğrudan MTP içinde uygulanmış olsaydı IP komutu gereksiz olurdu.)

TELNET komutu DM, veri akışı içindeki eşzamanlama işaretidir ve herhangi bir özel sinyalin zaten gerçekleştiğini ve alıcının veri akışının normal işlenmesine dönebileceğini gösterir. Bu mekanizmanın daha kapsamlı anlaşılması için Internet Protocol Handbook içindeki TELNET Protocol Specification bölümüne bakınız.

Bu mekanizmanın etkisi, Synch gönderen ile alıcısı arasında (DM’ye kadar) tüm karakterlerin atılmasıdır. Dolayısıyla kontrol bağlantısındaki tüm karakterler TELNET komutu DM alınana kadar yok sayılır. Tam dizi aşağıda gösterilmiştir. Her dikey çizgi (|) veri oktetleri arasındaki sınırı temsil eder; IAC ise TELNET komut kodu Interpret As Command anlamına gelir.

               Old                       New
            -+-+-+-+-+-----+---+--+---+--+-
          ...|M|A|I|L| ... |IAC|IP|IAC|DM|...
            -+-+-+-+-+-----+---+--+---+--+-

MTP YANITLARI

Mail Transfer Protocol komutlarına verilen yanıtlar, posta aktarımı sürecinde isteklerin ve eylemlerin senkronizasyonunu sağlamak ve gönderen-MTP'nin alıcının durumunu her zaman bilmesini garanti etmek amacıyla tasarlanmıştır.

Her komut en az bir yanıt üretmelidir, ancak birden fazla da olabilir. İkinci durumda, çoklu yanıtlar kolayca ayırt edilebilir olmalıdır. Ayrıca bazı komutların aşağıdaki gibi sıralı olarak gerçekleşmesi gerekir:

Bu dizilere verilen yanıtlar, tüm önceki komutlar başarılı olmuşsa bir ara durumun varlığını gösterir. Dizinin herhangi bir noktasında meydana gelen bir başarısızlık, tüm dizinin baştan tekrarlanmasını gerektirir.

Komut-yanıt dizisinin ayrıntıları Durum Diyagramları bölümünde açık biçimde açıklanmıştır.

Bir MTP yanıtı, üç basamaklı bir sayıdan (üç alfanümerik karakter olarak iletilir) ve ardından gelen bir metinden oluşur. Bu sayı, otomatalar tarafından bir sonraki girilecek durumu belirlemek için kullanılmak üzere tasarlanmıştır; metin ise insan kullanıcıya yöneliktir. Üç basamağın yeterli miktarda kodlanmış bilgi içermesi amaçlanır; böylece gönderen-MTP'nin metni incelemesine gerek kalmaz ve metni uygun olduğunda ya atabilir ya da kullanıcıya iletebilir. Özellikle metin alıcıya bağlı olabilir; bu nedenle her yanıt kodu için farklı metinler bulunması olasıdır.

Biçimsel olarak bir yanıt şu diziden oluşur: üç basamaklı kod, boşluk , bir satır metin (maksimum satır uzunluğu 65 olacak şekilde) ve sonlandırıcı .

Bazen metin tek bir satırdan daha uzundur; bu durumlarda gönderen-MTP'nin yanıtı okumayı ne zaman durduracağını bilmesi için tam metin köşeli biçimde sınırlandırılmalıdır. Bu, çok satırlı bir yanıtı belirtmek için özel bir ilk satır biçimi ve bitişini belirtmek için son satırda başka bir biçim gerektirir. Her iki satır da işlem durumunu gösteren uygun yanıt kodunu içerir.

Bu nedenle çok satırlı yanıtların biçimi şöyledir: ilk satır tam olarak gerekli yanıt kodu ile başlar, hemen ardından bir tire "-" (eksi olarak da bilinir) gelir ve sonra metin bulunur. Son satır aynı kod ile başlar, hemen ardından boşluk , isteğe bağlı bazı metinler ve gelir.

Örnek:

123-İlk satır
İkinci satır
  234 Sayılarla başlayan bir satır
123 Son satır

Gönderen-MTP'nin yapması gereken tek şey, bir satırın başında aynı yanıt kodunun (boşluk) ile devam eden ikinci kez görünümünü aramak ve aradaki tüm satırları yok saymaktır. Eğer aradaki satırlardan biri üç basamaklı bir sayı ile başlıyorsa, alıcı karışıklığı önlemek için satırın başını doldurmalıdır.

Bu düzen, yanıt bilgileri için standart sistem rutinlerinin kullanılmasına ve "yapay" ilk ve son satırların eklenmesine olanak tanır. Nadir durumlarda bu rutinler herhangi bir satırın başında üç basamak ve bir boşluk oluşturabiliyorsa, her metin satırının başı boşluk gibi nötr bir metinle kaydırılmalıdır.

Bu düzen, çok satırlı yanıtların iç içe geçmeyeceğini varsayar. Genel olarak yanıt iç içeliği yalnızca başka bir yanıtı kesebilen rastgele sistem mesajları (aynı zamanda kendiliğinden yanıtlar olarak da adlandırılır) dışında gerçekleşmez.

Sistem mesajları (yani alıcı-MTP tarafından işlenmeyenler) yanıt kodu taşımayacaktır ve komut–yanıt dizisinin herhangi bir yerinde ortaya çıkabilir. Bunlar yalnızca insan kullanıcı için bilgi olduğundan gönderen-MTP tarafından yok sayılabilir.

Yanıtın üç basamağının her biri özel bir anlam taşır. Bu, gönderen-MTP tarafından çok basitten çok gelişmişe kadar uzanan bir yanıt aralığına izin vermek amacıyla tasarlanmıştır.

Yanıt Kodunun İlk Basamağı

İlk basamak için beş değer vardır:

1yz — Olumlu Ön Yanıt

İstenen işlem başlatılıyor; yeni bir komutla devam etmeden önce başka bir yanıt beklenmelidir. Tamamlama yanıtı gelmeden gönderen-MTP'nin başka bir komut göndermesi protokol ihlali olur. Ancak alıcı-MTP süreçleri, önceki bir komut yürütülürken gelen komutları sıraya koymalıdır.

2yz — Olumlu Tamamlama Yanıtı

İstenen işlem başarıyla tamamlanmıştır. Yeni bir istek başlatılabilir.

3yz — Olumlu Ara Yanıt

Komut kabul edilmiştir, ancak istenen işlem daha fazla bilgi alınana kadar bekletilmektedir. Gönderen-MTP bu bilgiyi belirten başka bir komut göndermelidir. Bu yanıt, komut dizisi gruplarında kullanılır.

4yz — Geçici Olumsuz Tamamlama Yanıtı

Komut kabul edilmemiştir ve istenen işlem gerçekleşmemiştir. Ancak hata durumu geçicidir ve işlem yeniden talep edilebilir. Gönderen, varsa komut dizisinin başlangıcına dönmelidir.

İki farklı sitenin (alıcı ve gönderen MTP'ler) yorum konusunda anlaşması gerektiğinden "geçici" kavramına kesin bir anlam vermek zordur. Bu kategorideki her yanıt farklı bir zaman değerine sahip olabilir, ancak gönderen-MTP'nin yeniden denemesi teşvik edilir.

Bir yanıtın 4yz mi yoksa 5yz kategorisine mi girdiğini belirlemek için pratik bir kural şudur: komut biçiminde veya gönderen ya da alıcının özelliklerinde herhangi bir değişiklik yapılmadan tekrarlanabiliyorsa yanıt 4yz kategorisindedir.

5yz — Kalıcı Olumsuz Tamamlama Yanıtı

Komut kabul edilmemiştir ve istenen işlem gerçekleşmemiştir. Gönderen-MTP'nin aynı isteği (aynı sırayla) tekrar etmesi önerilmez.

Bazı "kalıcı" hata durumları bile düzeltilebilir; bu nedenle insan kullanıcı daha sonra gönderen-MTP'ye komut dizisini yeniden başlatmasını söyleyebilir (örneğin yazım hatası düzeltildikten veya dizin durumu değiştirildikten sonra).

Yanıt Kodunun İkinci Basamağı

İkinci basamak yanıtları belirli kategorilere kodlar:

Üçüncü basamak, ikinci basamak tarafından belirtilen her kategori içinde anlamın daha ayrıntılı bir derecelendirmesini sağlar. Aşağıdaki yanıt listesi bunu göstermektedir. Her yanıt metni zorunlu değil öneri niteliğindedir ve ilgili komuta bağlı olarak değişebilir. Ancak yanıt kodları bu bölümdeki özelliklere kesin olarak uymalıdır.

Alıcı uygulamaları, burada açıklanan durumlardan biraz farklı durumlar için yeni kodlar geliştirmemeli; bunun yerine zaten tanımlanmış kodları uyarlamalıdır.

Başarılı yürütülmesi gönderen-MTP'ye yeni bir bilgi sağlamayan NOOP gibi bir komut 200 yanıtı döndürür. Komut uygulanmamış ve siteye özgü olmayan bir eylem talep ettiğinde yanıt 502 olur. Bunun daha ayrıntılı bir biçimi, uygulanmış bir komutun uygulanmamış bir parametre talep ettiği durumda verilen 504 yanıtıdır.

İŞLEV GRUPLARINA GÖRE YANIT KODLARI

200 Komut tamam

500 Sözdizimi hatası, komut tanınmadı
    [Bu, komut satırının çok uzun olması gibi hataları da içerebilir]

501 Parametrelerde veya argümanlarda sözdizimi hatası

502 Komut uygulanmamış

503 Hatalı komut sırası

211 Sistem durumu veya sistem yardım yanıtı

214 Yardım mesajı
    [Alıcının nasıl kullanılacağı veya belirli bir standart dışı
     komutun anlamı hakkında bilgi; bu yanıt yalnızca insan
     kullanıcı için yararlıdır]

215 <scheme> tercih edilen şemadır

120 <host> Hizmet nnn dakika içinde hazır

220 <host> Hizmet yeni kullanıcı için hazır

221 <host> Hizmet kontrol bağlantısını kapatıyor

421 <host> Hizmet kullanılamıyor, kontrol bağlantısı kapatılıyor
    [Hizmetin kapanması gerektiğini bildiği durumlarda bu
     herhangi bir komuta verilen yanıt olabilir]

Yanıt Kodları

Yanıt Kodlarının Sayısal Sıraya Göre Listesi

Posta Aktarımının Tartışılması

Posta iletmek için temel komut MAIL komutudur. Bu komut iletilen verilerin alıcının posta kutusuna girilmesine neden olur.

MAIL <SP> "FROM:" <sender> [<SP> "TO:" <path>] <CRLF>

<sender> bir posta kutusudur ve <path> kaynak yönlendirme listesi ile hedef posta kutusunu içeren host listesidir. Kabul edilirse 354 yanıtı döndürür ve bundan sonra gelen tüm satırları mesaj metni olarak kabul eder. Yalnızca bir nokta içeren bir satır ile sonlandırılır; bunun üzerine 250 tamamlama yanıtı verilir. Çeşitli hatalar oluşabilir.

Bir alıcının posta kutusu o alıcıda bulunmayan bir kullanıcı için posta kabul ettiğini belirtmek amacıyla kullanabileceği iki olası ön yanıt vardır.

151 Kullanıcı yerel değil; @ adresine yönlendirilecek

Bu yanıt, alıcının kullanıcının posta kutusunun başka bir host üzerinde olduğunu bildiğini ve postayı o hosta iletme sorumluluğunu üstleneceğini gösterir. Örneğin BBN'de (veya ISI'de) birden fazla host vardır. Her birinin hostlar üzerindeki birçok kullanıcıyı içeren bir listesi bulunur. Her host, listesindeki herhangi bir kullanıcı için posta kabul edebilir ve bunu doğru hosta iletebilir.

152 Kullanıcı bilinmiyor; posta operatör tarafından iletilecek

Bu yanıt, hostun kullanıcı adını tanımadığını ancak postayı kabul edeceğini ve operatörün iletimi deneyeceğini belirtir. Kullanıcı adı yanlış yazılmışsa bu yararlı olabilir, ancak posta gerçekten teslim edilemez durumdaysa sorun çıkarabilir.

Operatör aracılığıyla yönlendirme kabul edilemezse veya kullanıcı postayı doğrudan alıcının gerçek hostuna göndermeyi tercih ediyorsa, bu ön yanıtların biri alındığında iletişim sonlandırılabilir.

Bir mesajın metninin aynı anda birden fazla alıcıya gönderilmesine olanak sağlayan iki MTP komutu vardır; bu tür bir mesaj iletimi, aynı metni bir sitedeki her ek alıcı için tekrar tekrar göndermekten çok daha verimlidir. Bir yöntemde önce tüm alıcılar belirtilir, ardından metin gönderilir. Diğerinde sıralama tersidir; önce metin gönderilir, ardından alıcılar belirtilir. Her iki yöntem de gereklidir çünkü tek başına hiçbiri tüm sistemler için en uygun değildir; bu durum daha sonra açıklanacaktır.

Belirli bir yöntemi seçmek için MRSQ komutu kullanılır; yöntem seçildikten sonra alıcıları belirtmek için MRCP komutları verilir; metni sağlamak için ise MAIL komutu kullanılır.

Şema Seçimi: MRSQ

MRSQ, gönderen-MTP'nin MRSQ/MRCP uygulamasını test etmesini, belirli bir şema seçmesini, durumunu sıfırlamasını ve hatta temel düzeyde bir müzakere yapmasını sağlayan araçtır.

MRSQ [<SP> <scheme>] <CRLF>

<scheme> tek karakterdir. Aşağıdakiler tanımlanmıştır:

Argüman olmaması, hiçbir şemanın seçilmediği anlamına gelir (varsayılan durum).

Olası yanıtlar şunlardır:

MRSQ'nun üç yönü vardır.

Birincisi, argümansız bir MRSQ her zaman 200 yanıtı döndürmeli ve hiçbir şemanın seçilmediği varsayılan durumu geri yüklemelidir. Başka herhangi bir yanıt, MRSQ'nun ve dolayısıyla MRCP'nin anlaşılmadığı veya doğru şekilde gerçekleştirilemediği anlamına gelir.

İkincisi, <scheme> olarak "?" kullanılması alıcı MTP'den 215 yanıtı döndürmesini ister; bu yanıtta alıcı "tercih edilen" bir şema belirtir. Bu yanıtın biçimi şöyledir:

215 <SP> <scheme> [<SP> <arbitrary text>] <CRLF>

Başka herhangi bir yanıt (örneğin 4xx veya 5xx), MRSQ ve MRCP'nin uygulanmadığı anlamına gelir; çünkü MRSQ uygulanmışsa "?" her zaman uygulanmış olmalıdır.

MRSQ hakkında üçüncü önemli nokta, her zaman tüm şemaları başlangıç durumuna sıfırlama yan etkisine sahip olmasıdır. Bu sıfırlama, verilecek yanıt ne olursa olsun yapılmalıdır — 200, 215 veya 501. Bir sıfırlama için gerekli eylemler, her şemanın nasıl çalıştığı tartışılırken açıklanacaktır.

Mesaj Metni Belirtimi: MAIL

Hangi şema (varsa) seçilmiş olursa olsun, "TO" argümanı boş olmayan bir MAIL komutu öncekiyle tamamen aynı şekilde davranır; MRSQ/MRCP komutlarının buna etkisi yoktur. Bununla birlikte normal bir MAIL komutu, MRSQ ile aynı yan etkiye sahiptir; mevcut şemayı başlangıç durumuna sıfırlar.

Bu "TO" argümanı null olduğunda (örn., MAIL FROM:<X@Y> <CRLF>) seçilen belirli şema önem kazanır. Bir hata üretmek yerine (çoğu alıcının şu anda yaptığı gibi), alıcı bu "null" belirtimi için ileti metnini kabul edecektir. Bununla ne yapılacağı hangi şemanın etkin olduğuna bağlıdır ve Şema Mekaniği bölümünde açıklanacaktır.

Alıcı Belirtimi: MRCP

Alıcı adlarını (yani posta kutularını) belirtmek ve her ad için bir onay (veya ret) almak amacıyla aşağıdaki komut kullanılır:

MRCP <SP> TO:<path> <CRLF>

Şema yoksa yanıt:

T şeması için yanıtlar MAIL için olanlarla aynıdır.

R şeması için yanıtlar (önce alıcılar):

Henüz hiçbir şema seçilmemişse bu komutun kullanımı hatadır; MRCP kullanılacaksa önceden bir MRSQ <scheme> verilmiş olmalıdır.

Şema Mekaniği: MRSQ R (Önce Alıcılar)

Önce alıcılar şemasında, MRCP alıcı adlarını belirtmek için kullanılır ve MTP alıcısı bu adları bir liste veya tabloda saklar. Normalde her MRCP için yanıt ya kabul anlamına gelen 200 ya da bir 4xx/5xx ret kodu olacaktır.

Tüm 5xx kodları kalıcı retlerdir (örn., kullanıcı bilinmiyor) ve insan kullanıcıya bildirilmelidir; buna karşılık 4xx kodları genellikle daha sonra giderilebilecek geçici bir hatayı gösterir. 452 dışında hiçbir 4xx/5xx yanıtı önceki veya sonraki MRCP komutlarını etkilemez; 452 ise zaten saklanmış alıcılara bir ileti gönderilmedikçe veya bir sıfırlama yapılmadıkça başka MRCP komutlarının başarılı olmayacağını belirtir.

Saklanan alıcılara ileti metni göndermek, "TO" argümanı olmadan bir MAIL komutu verilerek yapılır:

MAIL <SP> <sender> <CRLF>

İleti metninin iletimi normal MAIL ile tamamen aynıdır. İletimin sonunda gelen olumlu bir onay, iletinin MRCP ile hatırlanan tüm alıcılara gönderildiği anlamına gelir. Bir başarısızlık kodu ise bunun belirtilen bu alıcıların tamamı için başarısız olduğu şeklinde değerlendirilmesi gerektiğini gösterir.

Yanıtın anlamı ne olursa olsun, saklanan tüm alıcı adları temizlenir ve unutulur—sistem başlangıç durumuna sıfırlanır. Bu temizleme işlemi, MRSQ kullanımının sıfırlama yan etkisi olarak da gerçekleşmelidir.

Bir MRCP için verilen 452 yanıtı, o anda saklanmış alıcılara iletiyi belirtmek için MAIL kullanılarak ve ardından daha fazla MRCP ile başka bir MAIL gönderilerek ele alınabilir; gerekirse bu işlem tekrarlanır. Örneğin bir alıcı yalnızca 10 isim için yer sağlayabiliyorsa, 50 alıcılı bir ileti beş kez gönderilir ve her seferinde 10 farklı alıcıya iletilir.

Bir gönderici, herhangi bir başarılı MRCP verilmeden önce ileti metni belirtmeye çalışırsa ("TO" argümanı olmayan MAIL), bu durum normal bir MAIL komutunun null alıcıyla kullanılmasıyla tamamen aynı şekilde ele alınmalıdır; bazı alıcılar 550 Null recipient gibi bir hata döndürebilir.

MRSQ R kullanılarak yapılan bir posta aktarımı için Ek A'daki örneğe bakınız.

Şema Mekaniği: MRSQ T (Önce Metin)

Önce metin şemasında, "TO" argümanı olmayan MAIL komutu ileti metnini belirtmek için kullanılır ve alıcı bu metni saklar. Ardından gelen MRCP komutları, saklanan ileti metni kullanılması ve ek metin aktarımı olmaması dışında, MAIL komutlarıymış gibi değerlendirilir.

Saklanan ileti metni, bir sonraki MAIL veya MRSQ komutuna kadar unutulmaz; bu komutlar ya yeni metinle değiştirecek ya da tamamen temizleyecektir. MRSQ komutunun herhangi bir kullanımı saklanan metni temizleyerek bu şemayı sıfırlar; aynı durum null olmayan bir argümana sahip herhangi bir MAIL komutunda da gerçekleşir.

Herhangi bir ileti metni saklanmadan önce bir MRCP görülürse, gönderici fiilen boş bir ileti göndermeye çalışıyordur; bazı alıcılar buna izin verebilir, bazıları ise bir hata kodu döndürebilir.

MRSQ T kullanılarak yapılan bir posta aktarımı için Ek B'deki örneğe bakınız.

Neden İki Şema Var?

Çünkü tek bir şema tüm sistemler için en uygun değildir.

MRSQ R, her şeyin saklanıp ardından eşzamanlı olarak postalanması nedeniyle daha çok bir toplu posta gönderimine izin verir. Bu, MTP alıcısının postayı doğrudan yazmadığı fakat merkezi bir posta hizmeti arka plan sürecine teslim ettiği ITS gibi sistemler için yararlıdır. Tek bir teslim işlemiyle ilişkilendirilen bilgi (örn., alıcılar) ne kadar fazla olursa posta o kadar verimli biçimde iletilebilir.

Buna karşılık MRSQ T, postayı doğrudan ve alıcı başına artımlı şekilde teslim eden alıcı-MTP'ler için uygundur. Bu şemada her alıcı için ayrı bir başarı veya başarısızlık yanıt kodu döndürülür; bu kodlar disk tahsis sınırları veya posta kutusu erişim çakışmaları gibi etkenlere bağlı olabilir.

Bu alıcı-MTP'ler MRSQ R'nin toplu posta yaklaşımını taklit etmeye çalışsaydı, MAIL için verilen bir başarı yanıtının gerçekten belirtilen tüm alıcılara teslim edildiği anlamına geldiğinden emin olmak zorunda kalırlardı—yalnızca bazılarına değil.

Notlar

Mail Transfer Protocol (RFC 772)

Bildirimsel Belirtimler

Asgari Uygulama

Gereksiz hata mesajları olmadan MTP'nin çalışabilir olmasını sağlamak için tüm alıcılar için aşağıdaki asgari uygulama gereklidir:

Komutlar

FTP açısından aktarım parametrelerinin değerleri şu şekilde olmalıdır:

Tüm ana bilgisayarlar posta aktarımı için yukarıdaki değerleri kullanmalıdır.

Bağlantılar

Alıcı-MTP, Port L üzerinde "dinleme" yapacaktır. Gönderici-MTP TCP/NCP kontrol bağlantısını başlatacaktır. Kontrol bağlantısı TCP altında tam çift yönlü bir bağlantıdan oluşur; NCP altında ise iki tek yönlü bağlantıdır.

Alıcı ve gönderici MTP'ler, ARPA Internet Protocol Handbook içinde belirtilen TELNET Protokolü kurallarını izlemelidir. Alıcıların komut satırlarının düzenlenmesini sağlama zorunluluğu yoktur ve bunun gönderici ana bilgisayarda yapılmasını belirtebilirler.

Kontrol bağlantısı, tüm aktarımlar ve yanıtlar tamamlandıktan sonra göndericinin isteği üzerine alıcı tarafından kapatılacaktır.

Komut ve Yanıtların Sıralanması

Gönderici ile alıcı arasındaki iletişim dönüşümlü bir diyalog olarak tasarlanmıştır. Buna göre gönderici bir MTP komutu verir ve alıcı birincil bir istem yanıtıyla cevap verir. Gönderici, daha fazla komut göndermeden önce bu ilk birincil başarı veya başarısızlık yanıtını beklemelidir.

Bazı komutlar göndericinin beklemesi gereken ikinci bir yanıt gerektirir. Bu yanıtlar örneğin posta aktarımının ilerlemesi veya tamamlanması hakkında bilgi verebilir. Bunlar posta aktarım komutlarına verilen ikincil yanıtlardır.

Önemli bir bilgilendirme yanıtı grubu bağlantı selamlamalarıdır. Normal koşullarda bir alıcı bağlantı kurulduğunda 220 yanıtı, "girdi bekleniyor" mesajını gönderir. Gönderici herhangi bir komut göndermeden önce bu selamlama mesajını beklemelidir.

Alıcı girdiyi hemen kabul edemiyorsa, derhal bir 120 "beklenen gecikme" yanıtı göndermeli ve hazır olduğunda bir 220 yanıtı göndermelidir. Böylece gönderici gecikme olduğunda bağlantıyı kesmemesi gerektiğini bilir.

Not: Tüm selamlama türü yanıtların resmi adı, yanıt kodundan sonra gelen ilk kelime olarak sunucu ana bilgisayarın adıdır.

Aşağıdaki tablo her komut için alternatif başarı ve başarısızlık yanıtlarını listeler. Bunlara kesinlikle uyulmalıdır; bir alıcı yanıtlardaki metni değiştirebilir, ancak kod numaralarının ve belirli komut-yanıt dizisinin ima ettiği anlam ve eylem değiştirilemez.

Komut–Yanıt Dizileri

Bu bölümde komut-yanıt dizisi sunulmaktadır. Her komut olası yanıtlarıyla birlikte listelenmiştir; komut grupları birlikte verilmiştir.

Ön yanıtlar önce listelenir (ve onları izleyen yanıtlar altlarında girintili olarak verilir), ardından olumlu ve olumsuz tamamlanma yanıtları ve son olarak ara yanıtlar ile dizide kalan komutlar gösterilir.

421 yanıtı (hizmet mevcut değil, kontrol bağlantısı kapatılıyor) MTP alıcısı kapanması gerektiğini bildiği herhangi bir noktada verilebilir.

Bu liste, daha sonra ayrı olarak sunulacak olan durum diyagramlarının temelini oluşturur.

Bağlantı Kurulumu

Posta İşlemi Komutları

MAIL

MRSQ

MRCP

QUIT

Bilgilendirme Komutları

HELP

Çeşitli Komutlar

NOOP

Durum Diyagramları

Burada oldukça basit düşünülmüş bir MTP uygulaması için durum diyagramları sunulmaktadır. Yalnızca yanıt kodlarının ilk basamağı kullanılır. Her MTP komut grubu için bir durum diyagramı vardır.

Komut gruplamaları, her komut için bir model oluşturulup ardından yapısal olarak aynı modele sahip komutların birlikte toplanmasıyla belirlenmiştir.

Her komut için üç olası sonuç vardır:

Aşağıdaki durum diyagramlarında "başlangıç" için B sembolünü ve "yanıt bekle" için W sembolünü kullanıyoruz.

Çoğu MTP Komutu İçin Diyagram

                           1,3    +---+
                      ----------->| E |
                     |            +---+
                     |
  +---+    cmd    +---+    2      +---+
  | B |---------->| W |---------->| S |
  +---+           +---+           +---+
                     |
                     |     4,5    +---+
                      ----------->| F |
                                  +---+

Bu diyagram şu komutları modeller:

MAIL Komut Diyagramı

               ----  1
              |    |
  +---+  cmd   -->+---+     2     +---+
  | B |---------->| W |---------->| E |
  +---+           +---+        -->+---+
                   | |        |
            3      | | 4,5    |
     --------------  ------   |
    |                      |  |   +---+
    |               ------------->| S |
    |              |   1,3 |  |   +---+
    |             2|  --------
    |              | |     |
    V              | |     |
  +---+   text    +---+ 4,5 ----->+---+
  |   |---------->| W |---------->| F |
  +---+           +---+           +---+

Buradaki "text", göndericiden alıcıya gönderilen ve son satır gönderilene kadar hiçbir yanıt beklenmeyen bir satırlar dizisidir. Son satır yalnızca tek bir nokta karakterinden oluşmalıdır.

Genelleştirilmiş Komut–Yanıt Diyagramı

           ------------------------------------
          |                                    |
  Begin   |                                    |
    |     V                                    |
    |   +---+  cmd   +---+ 2         +---+     |
     -->|   |------->|   |---------->|   |     |
        |   |        | W |           | S |-----|
     -->|   |     -->|   |-----      |   |     |
    |   +---+    |   +---+ 4,5 |     +---+     |
    |     |      |    | |      |               |
    |     |      |   1| |3     |     +---+     |
    |     |      |    | |      |     |   |     |
    |     |       ----  |       ---->| F |-----
    |     |             |            |   |
    |     |             |            +---+
     -------------------
          |
          |
          V
         End

Bağlantı Kurulumu

MTP kontrol bağlantısı, alıcı süreç portu/soketi L ile gönderici süreç portu/soketi U arasında TCP/NCP aracılığıyla kurulur.

Bu protokole hizmet portu/soketi 57 (71 sekizlik) atanmıştır; yani L = 57.


Ek A

MRSQ R Örneği (Önce Alıcılar)

Bu, MRSQ R kullanımına bir örnektir. Öncelikle gönderici, alıcının gerçekten MRSQ uygulayıp uygulamadığını belirlemelidir.

S: MRSQ <CRLF>
R: 200 OK, no scheme selected

Null argümanlı bir MRSQ uygulanmışsa her zaman 200 döndürür ve varsayılan "şema"yı seçer; yani hiçbirini. Eğer MRSQ uygulanmamış olsaydı 4xx veya 5xx kodu dönerdi.

S: MRSQ R <CRLF>
R: 200 OK, using that scheme

Her şey yolunda; şimdi alıcılar belirtilebilir.

S: MRCP TO:<Foo@Y> <CRLF>
R: 200 OK

S: MRCP TO:<Raboof@Y> <CRLF>
R: 553 No such user here

S: MRCP TO:<bar@Y> <CRLF>
R: 200 OK

S: MRCP TO:<@Y,@X,fubar@Z> <CRLF>
R: 200 OK

"Raboof" için başarısızlık oluşmasının "Foo" ve "bar" için posta saklanmasını veya "X" ana bilgisayarı üzerinden "fubar@Z" adresine iletilecek postayı etkilemediğine dikkat edin.

Şimdi ileti metni, "TO" argümanı olmayan bir MAIL komutu verilerek sağlanır.

S: MAIL FROM:<waldo@A><CRLF>
R: 354 Type mail, ended by <CRLF>.<CRLF>
S: Blah blah blah blah....etc. etc. etc.
S: <CRLF>.<CRLF>
R: 250 Mail sent

Posta metni artık "Foo" ve "bar" adreslerine gönderilmiş ve ayrıca "fubar@Z" adresine iletilmek üzere yönlendirilmiştir.


Ek B

MRSQ T Örneği (Önce Metin)

Alıcının MRSQ uyguladığını doğrulamak için önceki örnekle aynı ileti kullanılır.

S: MRSQ ? <CRLF>
R: 215 T Text first, please

MRSQ gerçekten uygulanmıştır ve alıcı "T" tercih ettiğini belirtir; ancak bu, göndericinin başka bir şey denemesini engellemez.

S: MRSQ R <CRLF>
R: 501 Sorry, I really can't do that

Alıcı "R" şemasını da anlayabiliyor olabilir, ancak genel olarak tercih edilen şemayı kullanmak en iyisidir; çünkü alıcı kendi sitesi için hangisinin daha verimli olduğunu bilir.

S: MRSQ T <CRLF>
R: 200 OK, using that scheme

Artık "T" şeması seçilmiştir ve ileti metni "TO" argümanı olmayan bir mail komutu verilerek gönderilir.

S: MAIL FROM:<WALDO@A><CRLF>
R: 354 Type mail, ended by <CRLF>.<CRLF>
S: Blah blah blah blah....etc. etc. etc.
S: <CRLF>.<CRLF>
R: 250 Mail stored

Artık alıcılar belirtilebilir.

S: MRCP TO:<Foo@Y> <CRLF>
R: 250 Stored mail sent

S: MRCP TO:<Raboof@Y> <CRLF>
R: 553 No such user here

S: MRCP TO:<bar@Y> <CRLF>
R: 250 Stored mail sent

S: MRCP TO:<@Y,@X,fubar@Z> <CRLF>
R: 200 OK

Metin artık "Y" ana bilgisayarındaki "Foo" ve "bar" adreslerine gönderilmiş ve "X" ana bilgisayarı üzerinden "fubar@Z" adresine iletilecek şekilde yönlendirilmiştir ve hâlâ saklı durumdadır.

Yeni bir ileti başka bir MAIL/MRCP dizisi ile gönderilebilir, ancak dikkatli bir gönderici aşağıdaki alışverişi kullanarak durumu sıfırlardı.

S: MRSQ ? <CRLF>
R: 215 T Önce metin, lütfen

Bu, yürürlükte olan düzeni değiştirmeden durumu sıfırlar.