Bu konuda iyi bir Wikipedia makalesi var.
ARPAnet tarafından kullanılan en eski NCP yinelemeleri, bayt akışlarından çok bit akışları veya uygun bir bayt boyutu pazarlığı girişimleri gibiydi; 8 bitlik bayt ancak daha sonra standartlaştırıldı. Farklı makinelerde çalışacak dosya aktarım protokolleri oluşturmak birkaç girişimleri de vardı (posta öncelikle olarak, başlangıçta FTP protokolü bir fonksiyonu olduğunu MAIL
veMLFL
komutlar, daha sonra ayrılmıştır OVP , daha sonra SMTP .). Bu makinelerde genellikle farklı karakter kodlamaları vardı - ASCII vs EBCDIC - veya hatta farklı byte boyutları , 8-bit byte vs 6-bit vs ...
Bu nedenle, posta aktarma işlevleri başlangıçta nispeten kısa mesajların düz metin olarak aktarılması için tanımlanmıştır; özellikle, "NVT-ASCII". Örneğin, RFC 772 diyor ki:
POSTA TEMSİLİ VE DEPOLAMA
Posta, gönderen ana bilgisayardaki bir depolama aygıtından alıcı ana bilgisayardaki bir depolama aygıtına aktarılır. İki sistemdeki veri depolama gösterimleri farklı olduğundan, posta üzerinde belirli dönüşümleri gerçekleştirmek gerekebilir. Örneğin, NVT-ASCII farklı sistemlerde farklı veri depolama gösterimlerine sahiptir. PDP-10'lar genellikle NVT-ASCII'yi, 36 bitlik bir kelimeyle sola dayalı, beş adet 7 bitlik ASCII karakter olarak saklar. 360's NVT-ASCII'yi 32 bitlik bir kelimeyle dört adet 8 bitlik EBCDIC kodu olarak saklar. Multics, NVT-ASCII'yi 36 bitlik bir kelimeyle dört 9 bitlik karakter olarak saklar.
Basit olması adına, tüm verilerin MTP'de NVT-ASCII olarak gösterilmesi gerekir. Bu, metinleri iletirken, gönderme ve alma ana bilgisayarlarının birbirine benzememesine bakılmaksızın karakterlerin standart NVT-ASCII temsiline dönüştürülmesi gerektiği anlamına gelir. Gönderen, verileri dahili karakter temsilinden standart 8 bit NVT-ASCII temsiline dönüştürür (bkz. TELNET teknik özellikleri). Alıcı, verileri standart formdan kendi iç formuna dönüştürür. Bu standarda uygun olarak, dizinin bir metin satırının sonunu belirtmek için kullanılması gerekir.
Kablo üzerinden sekiz bit iletilse de, 8. bit genellikle korunma zorunluluğu olmadığı için atılır veya karıştırılır; Aslında bazı protokoller gerekli örneğin ilk olarak, sıfıra ayarlanmış olması 8. biti SMTP RFC aşağıda aktardığı. Başka bir deyişle, yazılım 8-bit temiz değildi .
Veri aktarımı
TCP bağlantısı, 8 bit bayt iletimini destekler. SMTP verileri 7 bitlik ASCII karakterlerdir. Her karakter 8-bit bayt olarak iletilir ve yüksek dereceli bit sıfıra çıkarılır.
Bu, 8 bitlik ISO-8859- # karakter kodlamalarının yaygınlaştırılmasından sonra bile uzun bir süre devam etti. Bazı sunucular zaten 8 bitlik temiz olmasına rağmen, diğerlerinin çoğu değildi ve 8 bitlik verileri kör bir şekilde göndermek karışık mesajlarla sonuçlanacaktı.
Daha sonra, posta sunucularının destekledikleri SMTP uzantılarını bildirmelerini sağlayan "Genişletilmiş SMTP" yayınlandı; bunlardan biri 8BITMIME
, alıcı sunucunun 8 bitlik verileri güvenle kabul edebileceğini gösterir. MIME mesajı bölümlerinde, herhangi bir şekilde kodlanmadıklarını belirten " Content-Transfer-Encoding : 8bit" olabilir.
Bununla birlikte, SMTP protokolü hat bazında kalmıştır ve 998 oktet hat sınırına sahiptir ve .
aynı zamanda "mesajın sonu" göstergesi olarak bir hat (0D 0A 2E 0D 0A) kullanır. Bu, çoğu ikili dosya değiştirilmeden gönderilebilse de, bu oktet dizisini içeren dosyaların aktarılan mesajın sonu ve dosyanın geri kalanının bir SMTP komutu olarak yorumlanması, muhtemelen zarar görmesi anlamına gelir. Benzer şekilde, 998 oktetten daha uzun bir "çizgi" alıcı sunucu tarafından kesilebilir.
2000 yılında "BINARYMIME" ESMTP uzantısı , RFC 3030 olarak yayınlandı ve ham ikili verilerin SMTP üzerinden aktarılmasına izin verdi. Mesaj şimdi, terminatör olarak kullanılan sıfır uzunluklu bir yığın ile önceden belirtilen uzunlukta parçalar halinde aktarılır ve Base64 ve benzer kodlamalara artık gerek yoktur. Ne yazık ki, birkaç SMTP sunucusu bu uzantıyı desteklemektedir; örneğin, ne Postfix ne de Exim4 EHLO'ya CHUNKING
cevap olarak reklam vermez . BINARYMIME'den yararlanmak için , mesaj yolundaki tüm sunucular tarafından desteklenmesi gerekir , ki bu sadece bir veya ikiden fazla olabilir.
Ayrıca bakınız: