Network Working Group Abhay Bhushan Request for Comments: 354 MIT-MAC NIC: 10596 8 Temmuz 1972 Categories D.4, D.5, D.7 Yerini Alır: RFC 264 ve 265
DOSYA AKTARIM PROTOKOLÜ
I. GİRİŞ
Dosya Aktarım Protokolü (FTP), ARPA Bilgisayar Ağı (ARPANET) üzerinde, HOST’lar (terminal IMP’ler dahil) arasında dosya aktarımı için kullanılan bir protokoldür. FTP’nin temel işlevi, HOST’lar arasında dosyaları verimli ve güvenilir bir biçimde aktarmak ve uzaktaki dosya depolama yeteneklerinin kolayca kullanılmasını sağlamaktır.
FTP’nin amaçları şunlardır: 1) dosyaların (bilgisayar programları ve/veya veriler) paylaşımını teşvik etmek, 2) uzaktaki bilgisayarların dolaylı veya örtük (programlar aracılığıyla) kullanımını özendirmek, 3) kullanıcıyı HOST’lar arasındaki dosya depolama sistemlerindeki farklılıklardan yalıtmak ve 4) verileri güvenilir ve verimli bir şekilde aktarmak. FTP, bir kullanıcı tarafından terminal üzerinden doğrudan kullanılabilse de, esas olarak programlar tarafından kullanılmak üzere tasarlanmıştır.
Bu belirtimdeki amaç, maxi-HOST’lar, mini-HOST’lar, TIP’ler ve Datacomputer kullanıcılarının farklı gereksinimlerini, basit, zarif ve kolayca uygulanabilir bir protokol tasarımıyla karşılamaktır.
Bu belge, aşağıdaki protokoller hakkında bilgi sahibi olunduğunu varsayar:
- HOST-HOST Protokolü (NIC #8246)
- İlk Bağlantı Protokolü (Initial Connection Protocol, NIC #7101)
- TELNET Protokolü (NWG/RFC #318, NIC #9348)
II. TARTIŞMA
Bu bölümde, terminoloji ve FTP modeli ele alınmaktadır. Bu bölümde tanımlanan terimler, yalnızca FTP bağlamında özel anlam taşıyan terimlerdir.
II.A. Terminoloji
ASCII
NIC #7104’te tanımlandığı şekliyle USASCII karakter kümesi. FTP’de ASCII karakterleri, sekiz bitlik bir kod kümesinin alt yarısı olarak tanımlanır (yani en anlamlı bit sıfırdır).
erişim denetimleri
Erişim denetimleri, kullanıcıların bir sistemi ve o sistemdeki dosyaları kullanma ayrıcalıklarını tanımlar. Erişim denetimleri, dosyaların yetkisiz veya kazara kullanılmasını önlemek için gereklidir. Erişim denetimlerini sağlamak, bir user-FTP sürecinin yetkisindedir.
bayt boyutu
Veri aktarımı için belirtilen bayt boyutu. Veri bağlantısı bu bayt boyutuyla açılır. Veri bağlantısının bayt boyutu, verinin bir sistemde saklanacağı bayt boyutu olmak zorunda değildir ve veri yapısıyla ilişkili olmayabilir.
veri bağlantısı
Belirli bir bayt boyutunda, modda ve türde veri aktarımının yapıldığı, tek yönlü (simplex) bir bağlantı. Aktarılan veri, bir dosyanın bir parçası, tüm dosya ya da birden fazla dosya olabilir. Veri bağlantısı her iki yönde de olabilir (sunucudan kullanıcıya veya kullanıcıdan sunucuya).
veri soketi
Bir user-FTP sürecinin veri bağlantısı için "dinleme" yaptığı soket.
EOF
Aktarılan bir dosyanın sonunu tanımlayan dosya-sonu koşulu.
EOR
Aktarılan bir kaydın sonunu tanımlayan kayıt-sonu koşulu.
hata kurtarma
HOST sistemlerinden birinin veya aktarım sürecinin başarısız olması gibi belirli hatalardan kullanıcının kurtulmasını sağlayan bir prosedür. FTP’de hata kurtarma, bir dosya aktarımının belirli bir denetim noktasından yeniden başlatılmasını içerebilir.
FTP komutları
User-FTP sürecinden server-FTP sürecine akan denetim bilgilerini oluşturan komutlar kümesi.
dosya
Bir yol adıyla benzersiz biçimde tanımlanan, keyfi uzunlukta, sıralı bir bilgisayar verileri (programlar dahil) kümesi.
mod
Verinin veri bağlantısı üzerinden aktarılacağı mod. Mod, EOR ve EOF dâhil olmak üzere veri biçimini tanımlar. FTP’de tanımlanan aktarım modları Bölüm III.A’da açıklanmaktadır.
NVT
ARPANET TELNET Protokolünde tanımlanan Ağ Sanal Terminali (Network Virtual Terminal).
NVFS
Ağ Sanal Dosya Sistemi (Network Virtual File System). Standart komutlar ve yol adı kurallarıyla standart bir ağ dosya sistemini tanımlayan bir kavramdır. FTP şu anda NFS kavramını yalnızca kısmen benimsemektedir.
yol adı
Yol adı, bir dosyayı tanımlamak için bir kullanıcının dosya sistemine girmesi gereken karakter dizisi olarak tanımlanır. Yol adı normalde aygıt ve/veya dizin adlarını ve dosya adı belirtimini içerir. FTP henüz standart bir yol adı kuralı tanımlamamaktadır. Her kullanıcı, kullanmak istediği dosya sistemlerinin dosya adlandırma kurallarına uymalıdır.
kayıt
Sıralı bir dosya, kayıtlar olarak adlandırılan bitişik parçalardan oluşacak şekilde yapılandırılabilir. Kayıt yapıları FTP tarafından desteklenir ancak zorunlu değildir.
yanıt
Yanıt, FTP komutlarına karşılık olarak TELNET bağlantıları üzerinden sunucudan kullanıcıya gönderilen bir onaydır (olumlu veya olumsuz). Bir yanıtın genel biçimi, bir tamamlanma kodu (hata kodları dâhil) ve bunu izleyen bir ASCII metin dizisidir. Kodlar programlar için, metin ise insan kullanıcılar içindir.
server-FTP süreci
Bir user-FTP süreciyle iş birliği içinde dosya aktarımı işlevini yerine getiren bir süreç veya süreçler kümesi. Server-FTP süreci, kullanıcı komutlarını yorumlamak ve yanıtlamak ve veri bağlantısını başlatmak zorundadır.
sunucu sitesi
Bir server-FTP sürecine sahip olan bir HOST sitesi.
server-TELNET
Bir user-TELNET tarafından başlatılan bir ICP’yi belirli bir sokette dinleyen ve ARPANET TELNET Protokolüne uygun olarak çalışan bir TELNET süreci.
TELNET bağlantıları
Bir user-TELNET ile bir server-TELNET arasındaki tam çift yönlü iletişim yolu. TELNET bağlantıları, standart ARPANET İlk Bağlantı Protokolü (ICP) aracılığıyla kurulır.
tür
Veri aktarımı ve depolama için kullanılan veri gösterim türü. Tür, verinin depolanması ile aktarımı arasındaki süreçte belirli dönüşümleri ima eder. FTP’de tanımlanan gösterim türleri Bölüm III.B’de açıklanmaktadır.
kullanıcı
Bir insan adına çalışan bir süreç veya dosya aktarım hizmeti almak isteyen bir insan.
kullanıcı sitesi
Aşağıdaki koşullardan herhangi birini sağlayan bir HOST sitesi: 1) kullanıcının bulunduğu site, 2) bir user-FTP sürecinin bulunduğu site, 3) bir sunucu tarafından veri bağlantısı kurulan site. Normal durumda, 1, 2 ve 3 ile tanımlanan siteler aynıdır, ancak FTP’de bunun böyle olmasını zorunlu kılan hiçbir şey yoktur.
user-FTP süreci
Bir server-FTP süreciyle iş birliği içinde dosya aktarımı işlevini yerine getiren bir süreç veya süreçler kümesi. User-FTP süreci: 1) ICP’yi (bir user-TELNET aracılığıyla) başlatır, 2) FTP komutlarını başlatır ve 3) veri bağlantısı için veri soketinde "dinleme" yapar. Bazı açık durumlarda (TIP’lerden ve diğer mini-HOST’lardan kullanımda) bir user-FTP süreci, "kullanıcı" terimi altında yer alabilir.
user-TELNET
Belirli bir server-TELNET soketine bir ICP başlatan ve ARPANET TELNET Protokolüne uygun olarak çalışan bir TELNET süreci.
II.B. FTP Modeli
Yukarıdaki tanımlar göz önünde bulundurularak, bir FTP hizmeti için aşağıdaki model (Şekil 1’de gösterildiği gibi) diyagramlaştırılabilir.
TELNET
bağlantıları
Dosya Sunucu Sunucu<------------ Kullanıcı Kullanıcı Dosya
Sistemleri<-> FTP <->TELNET FTP Komutları TELNET<->FTP <->Sistemi
Süreci ------------> Süreci
Veri
<------------------------------>Soketi
Veri Bağlantısı(ları) |
|
USER
Notlar:
- Veri bağlantısı her iki yönde de olabilir.
- Veri bağlantısının sürekli olarak var olması gerekmez.
- User-FTP ile user-TELNET ve server-FTP ile server-TELNET arasındaki ayrımlar, yukarıda gösterildiği kadar net olmayabilir. Örneğin, bir user-TELNET doğrudan kullanıcı tarafından yönlendirilebilir.
Şekil 1. FTP Kullanım Modeli
Şekil 1’de açıklanan modelde, user-TELNET TELNET bağlantısını başlatır. Daha sonra standart FTP komutları kullanıcı tarafından üretilir ve TELNET bağlantıları üzerinden sunucu sitesine iletilir. FTP komutları, NVT kurallarına ve TELNET protokolüne uygun olarak ASCII biçimindedir. Komutların, kullanıcı tarafından doğrudan user-TELNET aracılığıyla veya bir user-FTP süreci üzerinden başlatılabileceği unutulmamalıdır. Standart yanıtlar, komutlara karşılık olarak TELNET bağlantıları üzerinden sunucudan kullanıcıya gönderilir.
FTP komutları, veri bağlantısının parametrelerini (veri soketi, bayt boyutu, aktarım modu ve gösterim türü) ve dosya sistemi işleminin niteliğini (saklama, alma, ekleme, silme vb.) belirtir. User-FTP süreci veya onun yetkilendirdiği bileşen, belirtilen veri soketinde "dinleme" yapmalıdır ve veri bağlantısını ve veri aktarımını belirtilen veri bağlantısı parametrelerine uygun olarak başlatmak sunucunun sorumluluğundadır. Veri soketinin, TELNET bağlantısı üzerinden FTP komutlarını başlatan HOST ile aynı HOST’ta bulunmasının gerekmediği, ancak kullanıcının veya onun user-FTP sürecinin belirtilen veri soketinde bir "dinleme" yapılmasını sağlaması gerektiği unutulmamalıdır. Üçüncü HOST’lara dosya aktarımına ilişkin pratik bir örnek, bir maxi-HOST kullanıcısının (gerçekte bir TIP kullanıcısı olabilir) TIP’e bağlı bir G/Ç aygıtına veya bu aygıttan dosya aktarmak istemesidir. Ayrıca, biri gönderme diğeri alma için olmak üzere iki veri bağlantısının eşzamanlı olarak var olabileceği de belirtilmelidir.
Protokol, veri aktarımı sürerken TELNET bağlantılarının açık olmasını gerektirir. FTP hizmetinin kullanımı tamamlandığında TELNET bağlantılarını kapatmak kullanıcının sorumluluğundadır. TELNET bağlantıları kapatılırsa sunucu veri aktarımını iptal edebilir.
III. VERİ AKTARIM İŞLEVLERİ
Veri ve dosyalar yalnızca veri bağlantısı üzerinden aktarılır. Veri aktarımı, TELNET bağlantıları üzerinden alınan FTP veri aktarım komutları tarafından yönetilir. Veri aktarım işlevleri; belirtilen HOST’taki belirtilen veri soketine (belirtilen bayt boyutu kullanılarak) veri bağlantısının kurulmasını, belirtilen gösterim türü ve aktarım modunda verinin gönderilmesini ve alınmasını, EOR ve EOF koşullarının ele alınmasını ve (uygulanabildiği durumlarda) hata kurtarmayı içerir.
III.A. Veri Bağlantısının Kurulması
Kullanıcı sitesi, belirtilen veri soketinde "dinleme" yapacaktır. FTP istek komutu, veri aktarımının yönünü ve veri bağlantısının kurulmasında kullanılacak soket numarasını (tek veya çift) belirler. Sunucu, uygun saklama veya alma isteğini aldığında, belirtilen kullanıcı veri soketine belirtilen bayt boyutunda (varsayılan bayt boyutu 8 bittir) veri bağlantısını başlatacak ve dosya aktarımının devam edebileceğini belirten bir yanıt gönderecektir. Bundan önce, sunucu veri bağlantısı için sunucu soketini belirten bir yanıt göndermelidir. Kullanıcı, veri aktarımının güvenliğini sağlamak için bu sunucu soketi bilgisini kullanabilir. Sunucu bu yanıtı, veri bağlantısını başlatmadan önce veya sonra gönderebilir.
Veri bağlantısı için bayt boyutu, TYPE (ASCII 8 bittir) ya da TYPE ve BYTE komutları ile belirtilir. Protokol, sunucuların olası tüm bayt boyutlarını kabul etmesini zorunlu kılmaz. Farklı bayt boyutlarının kullanımı, veri aktarımında verimlilik içindir ve sunucular yalnızca veri aktarımının verimli olduğu bayt boyutlarını uygulayabilir. Bununla birlikte, sunucuların en azından 8 bitlik bayt boyutunu uygulaması önerilir.
Veri aktarımı tamamlandıktan sonra, kullanıcı veri gönderen taraf olmadığı sürece veri bağlantısını kapatmak sunucunun sorumluluğundadır. Veri bağlantısı aşağıdaki koşullardan herhangi biri altında kapatılacaktır:
- Sunucu, kullanıcıdan bir iptal komutu alırsa.
- Akış modunda EOF, veri bağlantısının kapatılmasıyla belirtilirse.
- Soket veya bayt boyutu belirtimi değiştirilirse.
- TELNET bağlantılarından herhangi biri kapatılırsa.
- Kurtarılamaz bir hata durumu oluşursa.
Gönderme ve alma için iki eşzamanlı veri bağlantısının var olabileceği unutulmamalıdır. Ancak her dosya aktarımından sonra veri bağlantısını kapatmak sunucunun tercihine bağlı bir seçenektir.
III.B. Veri Gösterimi ve Depolama
Veri, gönderen HOST’taki bir depolama aygıtından, alan HOST’taki bir depolama aygıtına aktarılır. Çoğu zaman, iki sistemdeki veri depolama gösterimleri farklı olduğundan, veri üzerinde belirli dönüşümlerin yapılması gerekir. Örneğin, NVT-ASCII farklı sistemlerde farklı veri depolama gösterimlerine sahiptir. PDP-10’lar genellikle NVT-ASCII’yi, 36 bitlik bir sözcükte sola hizalanmış beş adet 7 bitlik ASCII karakter olarak saklar. 360’lar NVT-ASCII’yi 8 bitlik EBCDIC kodları olarak saklar. Multics, NVT-ASCII’yi 36 bitlik bir sözcükte dört adet 9 bitlik karakter olarak saklar. Benzer olmayan sistemler arasında metin aktarımı yapılırken karakterlerin standart NVT-ASCII gösterimine dönüştürülmesi istenebilir. Gönderen ve alan sitelerin, standart gösterim ile kendi iç gösterimleri arasındaki gerekli dönüşümleri yapması gerekir.
Gösterimle ilgili farklı bir sorun, farklı sözcük uzunluklarına sahip HOST sistemleri arasında ikili verilerin (karakter kodları olmayan) aktarımı sırasında ortaya çıkar. Gönderenin veriyi nasıl göndermesi ve alıcının nasıl saklaması gerektiği her zaman açık değildir. Örneğin, 32 bitlik sözcük uzunluğuna sahip bir sistemden 36 bitlik sözcük uzunluğuna sahip bir sisteme 32 bitlik baytlar aktarılırken, verimlilik ve kullanışlılık nedenleriyle bu 32 bitlik baytların ikinci sistemde 36 bitlik bir sözcük içinde sağa hizalanarak saklanması istenebilir. Her durumda, kullanıcının veri gösterimini ve dönüşüm işlevlerini belirtme seçeneğine sahip olması gerekir. FTP’nin çok sınırlı veri türü gösterimleri sağladığı unutulmamalıdır. Bu sınırlı yeteneklerin ötesinde istenen dönüşümler, kullanıcı tarafından doğrudan veya Veri Yeniden Yapılandırma Hizmeti (Data Reconfiguration Service, DRS, RFC #138, NIC #6715) kullanılarak yapılmalıdır. Gösterilebilir bir gereksinim olması durumunda, ileride ek gösterim türleri tanımlanabilir.
FTP’de Veri Gösterimi
Veri gösterimleri, FTP’de kullanıcının bir gösterim türü belirtmesiyle ele alınır. Tür, ayrıca sabit bir aktarım bayt boyutunu da belirtebilir. Örneğin, ASCII ve Yazdırma Dosyası (Print File) gösterimlerinde, aktarım bayt boyutu 8 bit olmak zorundadır. Yalnızca Image ve Yerel Bayt gösterimlerinde, BYTE komutu ile belirtilen bayt boyutu kullanılır. FTP’de şu anda tanımlanmış olan veri gösterim türleri aşağıda verilmiştir:
1. ASCII
Gönderen, veriyi kendi iç karakter gösteriminden standart ARPANET ASCII biçimine dönüştürür. Alıcı, veriyi standart biçimden kendi iç biçimine dönüştürür. Veri, standart biçimde aktarılır. Aktarım bayt boyutu 8 bit olmak zorundadır. Bu tür, metin dosyalarının aktarımı için kullanılır. Bu varsayılan türdür ve herkes tarafından uygulanması önerilir.
2. Image
Gönderen, veriyi aktarım için bitlerden baytlara dönüştürür. Alıcı, baytları bitlere dönüştürerek, veri aktarımı için seçilen bayt boyutundan bağımsız olarak bitleri bitişik biçimde saklar. Image türünün tipik kullanım alanları, benzer makineler arasında çalıştırılabilir programların aktarımı ve ikili (metin olmayan) verilerin aktarımıdır. En azından 8 bitlik bayt boyutu dâhil olmak üzere, bazı bayt boyutları için bu türün uygulanması herkes için önerilir.
3. Yerel Bayt
Bu gösterim, verilerin verimli bir şekilde depolanmasına, kullanılmasına ve geri çağrılmasına olanak tanır. Verilerin hangi biçimde dönüştürüleceği, veri aktarımı için bayt boyutuna ve kullanılan belirli HOST'a bağlıdır. Farklı bayt boyutları için dönüşüm şemasının tüm sunucu siteleri tarafından iyi şekilde duyurulması gerekir. Bu dönüşüm tersine çevrilebilir olmalıdır (yani bir dosya belirli bir aktarım bayt boyutu kullanılarak depolanmışsa, aynı bayt boyutu ve gösterim türü kullanılarak özdeş bir dosya geri alınabilmelidir). Aktarımında kullanılan gösterim türünü ve bayt boyutunu takip etmek kullanıcının sorumluluğundadır. Yerel Bayt türünün tipik kullanımları, dosyaların verimli biçimde depolanması ve geri alınması ile yapılandırılmış ikili verilerin aktarımıdır. Bu tür, bayt boyutlarının bilgisayar sözcük uzunluğunun tam katları veya bölenleri olduğu durumlarda Image türü ile özdeş olabilir.
4. Yazdırma Dosyası — ASCII
Sunucu sitesi, ASCII dosyasını sunucu sitesinde yazdırmaya uygun bir biçime dönüştürecektir. Bayt boyutu 8 bit olmalıdır. Dönüşüm tersine çevrilebilir olmayabilir. Bu tür, TAB'ler, FF'ler ve diğer ASCII biçim etkileyici karakterlerin SP'ler, LF'ler ve diğer ikame karakterlerle değiştirilebilmesi açısından ASCII'den farklıdır. Yazdırma dosyası dönüşümleri tüm sunucu siteleri tarafından iyi şekilde duyurulmalıdır. Bu tür, dosyanın bir ASCII yazıcıya gönderileceği durumlarda kullanılır. Bu tür bazı sistemlerde ASCII türü ile özdeş olabilir. Bu türün tüm sistemler tarafından uygulanması tavsiye edilir.
5. EBCDIC Yazdırma Dosyası
Sunucu sitesi, EBCDIC dosyasını sunucu sitesinde yazdırmaya uygun bir biçime dönüştürecektir. Bayt boyutu 8 bit olmalıdır. Dönüşüm tersine çevrilebilir olmayabilir. Bu tür, dosyanın bir EBCDIC yazıcıya gönderileceği durumlarda kullanılır. Yalnızca dahili karakter gösterimi için EBCDIC kullanan sistemlerin bu türü kabul etmesi gerekir.
Bir hizmet veren HOST'un tüm gösterim türlerini ve/veya bayt boyutlarını kabul etmesinin gerekmediği, ancak bunu uygun bir yanıt göndererek kullanıcıya bildirmesi gerektiği unutulmamalıdır.
III.C Dosya Yapısı ve Aktarım Kipleri
Günümüzde FTP'de doğrudan desteklenen tek dosya yapıları kayıt yapılarıdır. Bununla birlikte, kayıt yapılarının kullanımı zorunlu değildir. Dosyasında kayıt yapısı bulunmayan bir kullanıcı, dosyasını herhangi bir HOST'ta depolayabilmeli ve geri alabilmelidir. Kayıt yapılı bir dosya iletmek isteyen bir kullanıcı, uygun FTP STRU komutunu göndermelidir (varsayılan kabul, kayıt yapısının olmadığıdır). Hizmet veren bir HOST'un kayıt yapılarını kabul etmesi gerekmez, ancak bunu uygun bir yanıt göndererek kullanıcıya bildirmesi gerekir. Veri akışındaki herhangi bir kayıt yapısı bilgisi daha sonra alıcı tarafından atılabilir.
Tüm veri aktarımları bir EOF ile sonlanmalıdır. EOF, veri aktarım kipi tarafından tanımlanır. Kayıt yapıları olan dosyalar için, bir EOR da aktarım kipi tarafından tanımlanır. Yalnızca EOR'un tanımlı olduğu aktarım kipleri ve gösterim türü birleşimleri, kayıt yapıları olan dosyaların aktarımı için kullanılabilir. Kayıtlar sıfır uzunlukta olabilir, ancak dosya sınırları içinde yer almalıdır. Dosyalar ile kayıtlar arasındaki ilişki hiyerarşiktir ve bir EOF, bir EOR'u ima eder.
FTP'de aşağıdaki veri aktarım kipleri tanımlanmıştır:
1. Akış
Dosya, belirtilen bayt boyutunda bir bayt akışı olarak iletilir. EOF, veri bağlantısının kapatılmasıyla işaretlenir. Akış kipinde herhangi bir gösterim türü ve bayt boyutu kullanılabilir, ancak kayıt yapıları yalnızca ASCII gösterim türü ile mümkündür. Gelenek olarak, ASCII karakteri CR'nin (Carriage Return, kod 13) ardından LF'nin (Line Feed, kod 10) gelmesi, akış kipinde ve ASCII gösterim türünde bir EOR'u gösterir. Bu varsayılan kiptir ve tüm sistemler tarafından uygulanması tavsiye edilir.
2. Metin
Dosya, ASCII gösterim türünde 8 bitlik baytlar dizisi olarak iletilen ASCII metindir. Bu kipte kayıt yapılarına izin verilir. EOR ve EOF, veri akışında özel TELNET-kontrol kodlarının (en anlamlı bit bire ayarlanmış) varlığı ile tanımlanır. EOR kodu 192'dir (sekizlik 300, onaltılık C0). EOF kodu 193'tür (sekizlik 301, onaltılık C1). Aktarım için bayt boyutu 8 bittir.
3. Blok
Dosya, bir veya daha fazla başlık baytının önüne eklendiği bir dizi veri bloğu olarak iletilir. Başlık baytları bir sayaç alanı ve tanımlayıcı kod içerir. Sayaç alanı, veri bloğunun toplam uzunluğunu bayt cinsinden belirtir ve böylece bir sonraki veri bloğunun başlangıcını işaretler (dolgu bitleri yoktur). Tanımlayıcı kod; son dosya bloğunu (EOF), son kayıt bloğunu (EOR), yeniden başlatma işaretçisini (bkz. bölüm III.D) veya şüpheli veriyi (yani aktarılan verinin hatalı olduğundan şüphelenildiğini ve güvenilir olmadığını) tanımlar. Bu kipte kayıt yapılarına izin verilir ve herhangi bir gösterim türü veya bayt boyutu kullanılabilir.
Başlık, uzunluğu 24 bitten büyük veya ona eşit olan, tam sayıda bayttan oluşur. Başlığın yalnızca en az anlamlı 24 biti (sağa yaslanmış) bilgi içerecektir; diğer daha anlamlı bitler sıfır olmalıdır. Başlık bilgisinin 24 bitinin, düşük sıralı 16 biti bayt sayısını, yüksek sıralı 8 biti ise aşağıda gösterildiği gibi tanımlayıcı kodları temsil edecektir.
| Alan | Boyut |
|---|---|
| Sıfır olmalıdır | 0 ila 231 bit |
| Tanımlayıcı | 8 bit |
| Bayt sayısı | 16 bit |
Aşağıdaki tanımlayıcı kodlar atanmıştır:
| Kod | Anlamı |
|---|---|
| 0 | Sıradan bir veri bloğu |
| 1 | Veri bloğunun sonu EOR'dur |
| 2 | Veri bloğunun sonu EOF'tur |
| 3 | Veri bloğunda şüpheli hatalar |
| 4 | Veri bloğu bir yeniden başlatma işaretçisidir |
Yeniden başlatma işaretçisi, veri akışına, tam sayıda 8 bitlik bayt (yazdırılabilir ASCII karakterlerini temsil eden) olarak, 8 bitten büyük olan tam sayıda veri baytı içinde sağa yaslanmış şekilde gömülür. Örneğin, bayt boyutu 7 bit ise, yeniden başlatma işaretçisi baytı, her iki 7 bitlik bayt için bir bayt olacak şekilde sağa yaslanmış olur.
Bayt boyutları 16 bit veya daha fazla olduğunda, iki veya daha fazla işaretçi baytı sağa yaslanmış olarak paketlenecektir. İşaretçinin sonu SP karakteri (kod 32) ile sınırlandırılabilir. İşaretçi karakterleri tam sayıda bir bayta tam olarak sığmıyorsa, kullanılmayan karakter yuvaları ASCII karakteri SP (kod 32) içermelidir. Örneğin, 36 bitlik bir bayt boyutunda altı karakterlik bir işaretçi iletmek için aşağıdaki üç adet 36 bitlik bayt gönderilecektir.
4. Hasp
Dosya, standart Hasp-sıkıştırılmış veri biçiminde 8 bitlik baytlar dizisi olarak iletilir (belge Bob Braden, UCLA tarafından yayımlanacaktır). Bu kip, yazdırma dosyaları için verilerin önemli ölçüde sıkıştırılmasını sağlar. Hasp kipinde kayıt yapılarına izin verilir.
III.D Hata Kurtarma ve Yeniden Başlatma
Veri aktarımı sırasında kaybolan veya karışan bitleri saptamak için bir düzenleme yoktur. Bu konu, muhtemelen kullanıcıların çoğuna en fazla fayda sağlayacağı NCP düzeyinde en iyi şekilde ele alınmaktadır. Bununla birlikte, sistem arızalarına (HOST'lardan birinin, FTP sürecinin veya IMP alt ağının arızalanması gibi) karşı kullanıcıları korumak için bir yeniden başlatma yordamı sağlanmıştır.
Yeniden başlatma yordamı yalnızca blok kipindeki veri aktarımı için tanımlanmıştır. Veri göndericisinin, veri akışına bazı işaretçi bilgileri içeren özel bir işaretçi kodu eklemesini gerektirir. İşaretçi bilgileri yalnızca gönderici için anlamlıdır, ancak yazdırılabilir ASCII karakterlerinden oluşmalıdır. Yazdırılabilir ASCII karakterleri, 33 ile 126 arasındaki kodlar olarak tanımlanır (yani 0 ile 31 arasındaki kodlar ile SP ve DEL karakterleri hariçtir). İşaretçi, bir bit sayısını, bir kayıt sayısını veya bir sistemin bir veri kontrol noktasını tanımlayabileceği herhangi bir başka bilgiyi temsil edebilir. Veriyi alan taraf, yeniden başlatma yordamını uyguluyorsa, bu işaretçinin alıcı sistemdeki karşılık gelen konumunu işaretler ve bu bilgiyi kullanıcıya geri gönderir.
Bir sistem arızası durumunda, kullanıcı FTP yeniden başlatma yordamını kullanarak işaretçi noktasını tanımlayıp veri aktarımını yeniden başlatabilir. Aşağıdaki örnekler, yeniden başlatma yordamının kullanımını göstermektedir.
Sunucu verinin göndericisi olduğunda, sunucu-FTP süreci veri akışına uygun bir veri noktasında uygun bir işaretçi bloğu ekler. Veriyi alan kullanıcı-FTP süreci, kendi dosya sisteminde karşılık gelen veri noktasını işaretler ve bilinen son gönderici ve alıcı işaretçi bilgilerini kullanıcıya iletir. Bir sistem arızası durumunda, kullanıcı veya kullanıcı-FTP süreci, sunucuyu son sunucu işaretçisinden itibaren yeniden başlatmak için, sunucunun işaretçi kodunu argüman olarak içeren bir yeniden başlatma komutu gönderir. Yeniden başlatma komutu TELNET bağlantısı üzerinden iletilir ve sistem arızası meydana geldiğinde yürütülmekte olan komuttan (örneğin store veya retrieve) hemen sonra gönderilir.
Kullanıcı verinin göndericisi olduğunda, kullanıcı-FTP süreci veri akışına uygun işaretçi bloğunu ekler. Veriyi alan sunucu-FTP süreci, kendi dosya sisteminde karşılık gelen veri noktasını işaretler. Sunucu bu işaretçiyi depolamaz, ancak uygun yanıt kodları aracılığıyla bilinen son gönderici ve alıcı işaretçi bilgilerini TELNET bağlantıları üzerinden kullanıcıya iletir. Kullanıcı veya kullanıcı-FTP süreci daha sonra, birinci örnekte açıklananla özdeş bir biçimde aktarımı yeniden başlatır.
IV. DOSYA AKTARIM FONKSİYONLARI
FTP komutlarının ve yanıtlarının iletildiği TELNET bağlantıları, kullanıcı-FTP süreci tarafından standart bir sunucu soketine bir ICP aracılığıyla başlatılır. Daha sonra FTP komutları kullanıcıdan sunucuya, yanıtlar ise sunucudan kullanıcıya iletilir. Kullanıcı dosya aktarım işlevleri; FTP komutlarının gönderilmesini, alınan yanıtların yorumlanmasını ve verinin belirtilen biçimde veri bağlantısı üzerinden aktarılmasını içerir. Sunucu dosya aktarım işlevleri ise FTP komutlarını kabul etmeyi ve yorumlamayı, yanıtları göndermeyi, veri bağlantısını kurmayı ve veriyi aktarmayı içerir.
IV.A FTP Komutları
FTP komutları, ASCII karakter dizisi CRLF (Carriage Return ardından Line Feed) ile sonlandırılan ASCII'dir. Komut kodlarının kendileri, ASCII boşluk karakteri (kod = 32) ile sonlandırılan ASCII alfabetik karakterlerdir. Kolaylık olması açısından, komut kodları dört (veya daha az) ASCII alfasayısal karakter (hem büyük hem küçük harf alfabetik karakterler dahil) olarak tanımlanmıştır. Komut kodları ve komutların anlamsal karşılıkları bu bölümde açıklanmaktadır; ancak komutların ayrıntılı sözdizimi Bölüm V.B'de belirtilmiş, yanıt dizileri Bölüm V.C'de tartışılmış ve komutların kullanımını gösteren senaryolar Bölüm V.D'de verilmiştir.
FTP komutları; erişim denetimi tanımlayıcılarını, veri aktarım parametrelerini veya FTP hizmet isteklerini belirten komutlar olarak bölümlendirilebilir.
IV.A.1 Erişim Denetimi Komutları
Aşağıdaki komutlar erişim denetimi tanımlayıcılarını belirtir (komut kodları parantez içinde gösterilmiştir).
Kullanıcı adı (USER) – Argüman alanı, kullanıcıyı tanımlayan bir ASCII dizgesidir. Kullanıcı tanımlaması, sunucunun dosya sistemine erişim için gerekli gördüğü tanımlamadır. Bu komut, normalde TELNET bağlantıları kurulduktan sonra kullanıcı tarafından iletilen ilk komut olacaktır (bazı sunucular bunu gerektirebilir). Parola komutu biçiminde ek tanımlama bilgileri de bazı sunucular tarafından istenebilir.
Parola (PASS) – Argüman alanı, kullanıcının parolasını tanımlayan bir ASCII dizgesidir. Bu komut, kullanıcı adı komutundan hemen önce gelmelidir ve birlikte erişim denetimi için kullanıcının tanımlamasını tamamlar.
IV.A.2 Veri Aktarım Komutları
Tüm veri aktarım parametrelerinin varsayılan değerleri vardır ve veri aktarım parametrelerini belirten komutlar, yalnızca varsayılan parametre değerlerinin değiştirilmesi istendiğinde gereklidir. Varsayılan değer, en son belirtilen değerdir; eğer hiç değer belirtilmemişse, burada belirtilen standart varsayılan değerdir. Bu, sunucunun geçerli varsayılan değerleri "hatırlaması" gerektiği anlamına gelir. Komutlar herhangi bir sırada olabilir, ancak FTP hizmet isteğinden önce gelmeleri gerekir. Aşağıdaki komutlar veri aktarım parametrelerini belirtir.
Bayt boyutu (BYTE) – Argüman, yerel bayt ve image gösterim türleri için veri bağlantısında kullanılacak bayt boyutunu belirten, ASCII ile gösterilmiş ondalık bir tam sayıdır (1 ile 255 arası). Varsayılan bayt boyutu 8 bittir. ASCII ve Yazdırma dosyası gösterim türlerinde bayt boyutu her zaman 8 bittir. Bir sunucu, uygun bir yanıt göndererek belirli bayt boyutu/tür birleşimlerini reddedebilir.
Veri soketi (SOCK) – Argüman, veri bağlantısında kullanılacak veri soketi için bir HOST-soket belirtimidir. Sunucudan kullanıcıya ve kullanıcıdan sunucuya veri aktarımı için iki veri soketi bulunabilir. Tek sayılı bir soket numarası gönderme soketini, çift sayılı bir soket numarası ise alma soketini tanımlar. Varsayılan HOST, TELNET bağlantılarının kurulduğu kullanıcı HOST'udur. Varsayılan veri soketleri, TELNET ICP'de kullanılan soket numarasının U olduğu durumda (U+4) ve (U+5)'tir ve TELNET bağlantıları (U+2) ve (U+3) soketleri üzerindedir.
Gösterim Türü (TYPE) – Argüman, Bölüm III.B'de açıklanan gösterim türlerini belirten tek bir ASCII karakter kodudur. Tür için aşağıdaki kodlar atanmıştır:
- A – ASCII
- I – Image
- L – Yerel Bayt
- P – ASCII Yazdırma dosyası
- E – EBCDIC yazdırma dosyası
Varsayılan gösterim türü ASCII'dir.
Dosya Yapısı (STRU) – Argüman, Bölüm III.C'de açıklanan dosya yapısını belirten tek bir ASCII karakter kodudur. Yapı için aşağıdaki kodlar atanmıştır:
- F – Dosya (kayıt yapısı yok)
- R – Kayıt yapısı
Varsayılan yapı Dosya'dır (yani kayıt yoktur).
Aktarım Kipi (MODE) – Argüman, Bölüm III.C'de açıklanan veri aktarım kiplerini belirten tek bir ASCII karakter kodudur. Aktarım kipleri için aşağıdaki kodlar atanmıştır:
- S – Akış (baytlar, kapatma EOF'tur)
- B – Blok (tanımlayıcı ve sayaç içeren başlık)
- T – Metin (EOR, EOF için TELNET denetim kipi)
- H – Hasp (özel biçimlendirilmiş sıkıştırılmış veri)
Varsayılan aktarım kipi Akış'tır.
IV.A.3 FTP Hizmet Komutları
FTP hizmet komutları, kullanıcı tarafından istenen dosya aktarımı veya dosya sistemi işlevini tanımlar. Bir FTP hizmet komutunun argümanı normalde bir yol adıdır. Yol adlarının sözdizimi, ASCII karakterlerin kullanılması (TELNET Protokolüne uygun olarak) dışında, sunucu sitesinin kurallarına (uygulanabilir standart varsayılanlarla birlikte) uymalıdır. Önerilen varsayılan davranış, en son belirtilen aygıtı, dizini veya dosya adını ya da yerel kullanıcılar için tanımlanan standart varsayılanı kullanmaktır. Komutlar herhangi bir sırada olabilir; ancak bir "yeniden adlandırmadan" komutunun ardından bir "yeniden adlandırmaya" komutunun gelmesi gerekir ve bazı sunucular bir "store" komutundan önce bir "allocate" komutu isteyebilir. FTP hizmet komutlarına yanıt olarak aktarılan veri her zaman veri bağlantısı üzerinden olacaktır. Aşağıdaki komutlar FTP hizmet isteklerini belirtir:
Geri Alma (RETR) – Bu komut, yol adında belirtilen dosyanın bir kopyasının sunucu sitesinden kullanıcı sitesine aktarılmasını sağlar. Sunucu sitesindeki bir dosyanın durumu ve içeriği etkilenmeyecektir.
Store (STOR) – Bu komut, bir dosyanın kullanıcıdan sunucu sitesine bir kopyasının aktarılmasını sağlar. Pathname içinde belirtilen dosya sunucu sitesinde mevcutsa, içeriği aktarılmakta olan dosyanın içeriğiyle değiştirilecektir. Pathname içinde belirtilen dosya sunucu sitesinde mevcut değilse, sunucu sitesinde yeni bir dosya oluşturulur.
Append (with create) (APPE) – Bu komut, verinin kullanıcıdan sunucu sitesine aktarılmasını sağlar. Pathname içinde belirtilen dosya sunucu sitesinde mevcutsa, aktarılan veri bu dosyanın sonuna eklenecektir; aksi halde pathname içinde belirtilen dosya sunucu sitesinde oluşturulacaktır.
Rename from (RNFR) – Bu komut, yeniden adlandırılacak dosyayı belirtir. Bu komutu, yeni dosya pathname’ini belirten bir "rename to" komutu derhal izlemelidir.
Delete (DELE) – Bu komut, pathname içinde belirtilen dosyanın sunucu sitesinde silinmesine neden olur. Ek bir koruma düzeyi isteniyorsa (örneğin, "Gerçekten silmek istiyor musunuz?" sorgusu gibi), bu koruma kullanıcı-FTP süreci tarafından sağlanmalıdır.
List (LIST) – Bu komut, sunucudan kullanıcı sitesine bir listenin gönderilmesine neden olur. Pathname bir dizini belirtiyorsa, sunucu belirtilen dizindeki dosyaların bir listesini aktarmalıdır. Pathname bir dosyayı belirtiyorsa, sunucu dosya hakkında güncel bilgileri göndermelidir. Bu komut, bir dosya dizininin içeriğini elde etmek (yanıt ASCII türünde gönderilmelidir) veya bir dosyanın varlığını ve mevcut durumunu sınamak için kullanılabilir.
Allocate (ALLO) – Bu komut, bazı sunucular tarafından aktarılacak yeni dosyayı barındırmak için yeterli depolama alanı ayırmak amacıyla gerekebilir. Komut alanı, dosya için ayrılacak depolama alanının (bayt boyutu komutuyla belirtilen boyutta) bayt sayısını temsil eden ondalık bir tamsayı olacaktır. Bu komutu bir store veya append komutu izlemelidir. Dosyanın azami boyutunun önceden bildirilmesini gerektirmeyen sunucular tarafından ALLO komutu bir NO-OP (işlem yok) olarak ele alınmalıdır.
Restart (REST) – Argüman alanı, dosya aktarımının yeniden başlatılacağı sunucu işaretleyicisini temsil eder. Bu komut dosya aktarımına neden olmaz, ancak dosya üzerinde belirtilen veri kontrol noktasına kadar "atlama" yapar. Bu komutu, dosya aktarımının devam etmesini sağlayacak uygun FTP hizmet komutu derhal izlemelidir.
Status (STAT) – Bu komut, TELNET bağlantısı üzerinden bir yanıt biçiminde bir durum yanıtının gönderilmesine neden olur. Komut, pathname gibi bir argüman alanına sahip olabilir. Argüman bir pathname ise, bu komut LIST komutuna benzer; ancak veriler TELNET bağlantısı üzerinden ASCII olarak aktarılacaktır. Argüman belirtilmezse, sunucu sunucu FTP süreci hakkında genel durum bilgisi döndürmelidir. Bu bilgiler, hizmet kullanılabilirliğini, ilgili FTP parametreleri için mevcut ayarları (varsayılan ayarlar dahil) ve komut yürütme ile bağlantıların durumunu içerebilir.
Abort (ABOR) – Bu komut, sunucuya önceki FTP hizmet komutunu ve ilişkili tüm veri aktarımını iptal etmesini bildirir. Abort komutundan önce TELNET SYNCH koşulu (DATA MARK ve INS birleşimi ile gösterilir) gelmelidir. Önceki komut tamamlanmışsa (veri aktarımı dahil), hiçbir işlem yapılmamalıdır. TELNET bağlantısı sunucu tarafından kapatılmamalıdır, ancak veri bağlantısı kapatılabilir. Sunucu tarafından uygun bir yanıt gönderilmelidir.
Logout (BYE) – Bu komut bir USER oturumunu sonlandırır ve dosya aktarımı devam etmiyorsa TELNET bağlantısını kapatır. Dosya aktarımı devam ediyorsa, bağlantı sonuç yanıtı için açık kalacak ve ardından kapanacaktır. Bu ara sürede, yeni bir USER komutu (ve başka hiçbir komut) kabul edilebilir.
TELNET bağlantısının beklenmedik şekilde kapanması, sunucunun bir abort (ABOR) ve bir logout (BYE) işleminin fiili etkisini uygulamasına neden olacaktır.
IV.B FTP Yanıtları
Sunucu, FTP komutlarına yanıt olarak TELNET bağlantıları üzerinden kullanıcıya FTP yanıtları gönderir. FTP yanıtları, onay veya tamamlanma kodunu (hatalar dahil) oluşturur. FTP sunucu yanıtları, insan veya program tarafından yorumlanacak şekilde biçimlendirilmiştir. Yanıtlar, başta üç haneli sayısal bir kod, ardından bir boşluk ve kodun metinsel bir açıklamasından oluşur. Sayısal kodlar gruplar halinde atanır ve programlar tarafından yorumlamayı kolaylaştırmak için RJE protokolü gibi diğer protokollerle tutarlı bir şekilde düzenlenir. Kodun üç hanesi aşağıdaki şekilde yorumlanır:
a) İlk hane, aşağıda belirtildiği üzere yanıt türünü belirtir:
- 000 – Bu yanıtlar tamamen bilgilendiricidir ve ne olumlu ne de olumsuz bir onay oluşturur.
- 1xx – Durum sorgularına yönelik bilgilendirici yanıtlar. Bunlar durum komutuna olumlu bir onay oluşturur.
- 2xx – Önceki komutun veya başka bir başarılı eylemin olumlu onayı.
- 3xx – Eksik bilgi. Daha fazla belirtim ve girdi olmadan işlem devam edemez.
- 4xx – Başarısız yanıt. İstek doğru şekilde belirtilmiştir ancak sunucu bunu doğru şekilde yerine getirmede başarısız olmuştur.
- 5xx – Yanlış veya yasa dışı komut. Komut veya parametreleri sözdizimsel açıdan geçersiz ya da eksiktir veya komut önceki bir komutla tutarsızdır. Söz konusu komut tamamen yok sayılmıştır.
- 6xx–9xx – Gelecekteki genişleme için ayrılmıştır.
b) İkinci hane, yanıtın ait olduğu genel kategoriyi belirtir:
- x00–x29 – Diğer kategorilere atanamayan genel amaçlı yanıtlar.
- x30 – Birincil erişim. "Log-on" girişimine yönelik bilgilendirici yanıtlar.
- x40 – İkincil erişim. Birincil sunucu, ikincil bir hizmete erişebilme yeteneği hakkında yorum yapmaktadır.
- x5x – FTP sonuçları.
- x6x – RJE sonuçları.
- x7x–x9x – Gelecekteki genişleme için ayrılmıştır.
c) Son hane, belirli bir ileti türünü belirtir. Kod, bir otomaton süreci tarafından yorumlanmak üzere tasarlandığından, bir yanıtın her varyasyonu için benzersiz bir numara olması gerekli değildir. Yalnızca yanıtların temel anlamlarının benzersiz numaralara sahip olması gerekir. Bir yanıtın metni, bu yanıtın özel nedenini insan kullanıcıya açıklayabilir.
Sunucudan gelen her TELNET satırı (CRLF ile sonlanan) tam bir yanıt iletisi olmayı amaçlar. Bir yanıtın metninin sonraki satırlara devam ettirilmesi gerekiyorsa, bu devam yanıtları üç boşluktan oluşan özel yanıt kodunu içerir. Yanıt metinlerinin insan kullanıcı için tasarlandığı unutulmamalıdır. Yalnızca yanıt kodları ve bazı durumlarda metnin ilk satırı programlar için tasarlanmıştır.
FTP ile ilgili olarak atanmış yanıt kodları şunlardır:
- 000 Genel bilgi iletisi (site, günün saati vb.)
- 030 Sunucu kullanılabilirlik bilgisi.
- 050 FTP açıklaması veya kullanıcı bilgisi.
- 100 Sistem durumu yanıtı.
- 150 Dosya durumu yanıtı.
- 151 Dizin listeleme yanıtı.
- 200 Son komut doğru şekilde alındı.
- 201 Bir ABORT, istenildiği üzere etkinliği sonlandırdı.
- 202 Abort isteği yok sayıldı, devam eden bir etkinlik yok.
- 230 Kullanıcı "oturum açtı", devam edebilir.
- 231 Kullanıcı "oturum kapattı". Hizmet sonlandırıldı.
- 232 Logout komutu kaydedildi, aktarım bittiğinde tamamlanacak.
- 250 FTP dosya aktarımı doğru şekilde başlatıldı.
- 251 FTP Restart-işaretleyici yanıtı
- Metin:
MARK yyyy = mmmm - burada
yyyykullanıcının veri akışı işaretleyicisidir (seninki) - ve
mmmmsunucunun eşdeğer işaretleyicisidir (benimki) - (İşaretleyiciler ile
=arasındaki boşluklara dikkat edin.)
- Metin:
- 252 FTP aktarımı doğru şekilde tamamlandı.
- 253 Yeniden adlandırma tamamlandı.
- 254 Silme tamamlandı.
- 255 FTP sunucu veri soketi yanıtı
- Metin:
SOCK nnnn - burada
nnnn, veri bağlantısı için sunucu soketini temsil eden ondalık bir tamsayıdır.
- Metin:
- 300 Bağlantı karşılama iletisi, girdi bekleniyor.
- 301 Mevcut komut tamamlanmamış (uzun süre CRLF yok).
- 330 Parolayı girin (girdi gizleme ile gönderilebilir).
- 400 Bu hizmet uygulanmamış.
- 401 Bu hizmet şu anda kullanıcı kabul etmiyor, hoşça kalın.
- 430 Oturum açma süresi veya deneme sayısı aşıldı, hoşça kalın.
- 431 Oturum açma başarısız. Kullanıcı ve/veya parola geçersiz.
- 432 Kullanıcı bu hizmet için geçerli değil.
- 434 Operatör eylemiyle zorunlu oturum kapatma. Telefonla site.
- 435 Sistem problemi nedeniyle zorunlu oturum kapatma.
- 436 Hizmet kapatılıyor, hoşça kalın.
- 450 FTP: Dosya bulunamadı.
- 451 FTP: Dosyaya erişim size reddedildi.
- 452 FTP: Dosya aktarımı tamamlanmadı, veri bağlantısı kapatıldı.
- 453 FTP: Dosya aktarımı tamamlanmadı, yetersiz depolama alanı.
- 500 Son komut satırı tamamen tanınmadı.
- 501 Son komutun sözdizimi yanlış.
- 502 Son komut eksik, parametreler yok.
- 503 Son komut geçersiz (yok sayıldı), yasa dışı parametre birleşimi.
- 504 Son komut geçersiz, bu anda eylem mümkün değil.
- 505 Son komut önceki komut(lar)la yasa dışı biçimde çakışıyor.
- 506 İstenen eylem sunucu tarafından uygulanmıyor.
V. Bildirimsel Özellikler
V.A. Bağlantılar
Sunucu sitesindeki sunucu-FTP süreci, sunucu-TELNET üzerinden Soket 3 üzerinde "dinleme" yapacaktır. Kullanıcı sitesindeki kullanıcı veya kullanıcı-FTP süreci, ARPANET standart İlk Bağlantı Protokolü’nü (ICP) gerçekleştirerek sunucu soket 3’e kullanıcı-TELNET üzerinden tam çift yönlü TELNET bağlantılarını başlatacaktır. TELNET bağlantıları, kullanım tamamlandığında kullanıcı sitesi tarafından kapatılacaktır.
Kullanıcı sitesi, belirtilen veri soketi veya soketleri (bir gönderme ve/veya bir alma soketi) üzerinde "dinleme" yapacaktır. Sunucu sitesi, belirtilen veri soketi ve bayt boyutunu kullanarak veri bağlantısını başlatacaktır. Veri bağlantısının yönü ve kullanılan veri soketi, FTP hizmet komutu tarafından belirlenecektir. Sunucu, kullanıcının veri aktarımının güvenliğini sağlayabilmesi için sunucu veri soketini belirten bir yanıtı kullanıcıya gönderecektir. Bu, bir veri bağlantısı üzerinden ilk veri aktarımından önce herhangi bir zamanda yapılabilir.
Veri bağlantısı, Bölüm III.A’da açıklanan koşullar altında sunucu sitesi tarafından kapatılacaktır. Sunucu, kullanıcı tarafında sorunları önlemek için genel olarak veri bağlantısını kapatmadan önce bir yanıt göndermelidir.
V.B. Komutlar
Komutlar, Bölüm IV.A’da açıklandığı gibi TELNET bağlantıları üzerinden iletilen ASCII karakter dizeleridir. Komut işlevleri ve anlambilimleri Bölüm IV.A.1, IV.A.2, IV.A.3 ve IV.A.4’te açıklanmıştır. Komut sözdizimi burada belirtilmiştir.
Komutlar, bir komut kodu ve ardından bir argüman alanı ile başlar. Komut kodları dört veya daha az ASCII alfabetik karakterden oluşur. Büyük ve küçük harfli alfabetik karakterler aynı şekilde ele alınacaktır. Dolayısıyla aşağıdakilerin herhangi biri retrieve komutunu temsil edebilir:
RETR Retr retr ReTr rETr
Komut kodları ile argüman alanları bir veya daha fazla boşluk ile ayrılır.
Argüman alanı, CRLF (hemen ardından Satır Sonu gelen Taşıyıcı Dönüş) karakter dizisi ile sona eren, değişken uzunlukta bir ASCII karakter dizisinden oluşur. Sözdizimiyle ilgili aşağıdaki bölümde, argüman alanındaki tüm karakterlerin ASCII karakterleri olduğu vurgulanmalıdır. Dolayısıyla ondalık bir tamsayı, ASCII ile temsil edilmiş bir ondalık tamsayı anlamına gelir.
Aşağıda, şu anda tanımlanmış tüm FTP komutları yer almaktadır:
USER <user name> CRLF
PASS <password> CRLF
BYTE <byte size> CRLF
SOCK <HOST-socket> CRLF
TYPE <type code> CRLF
STRU <structure code> CRLF
MODE <mode code> CRLF
RETR <pathname> CRLF
STOR <pathname> CRLF
APPE <pathname> CRLF
RNFR <pathname> CRLF
RNTO <pathname> CRLF
DELE <pathname> CRLF
LIST <pathname> CRLF
ALLO <decimal integer> CRLF
REST <marker> CRLF
STAT <pathname> CRLF
ABOR <empty> CRLF
BYE <empty> CRLF
Yukarıdaki argüman alanlarının sözdizimi (uygun yerlerde BNF gösterimi kullanılarak) şöyledir:
<username> ::= <string>
<password> ::= <string>
<string> ::= <empty> | <char> | <char><string>
<char> ::= CR ve LF hariç 128 ASCII karakterinden herhangi biri.
<marker> ::= <pr string>
<pr string> ::= <empty> | <pr char> | <pr char><pr string>
<pr char> ::= 33 ile 126 arasındaki herhangi bir ASCII kodu.
<byte size> ::= 1 ile 255 arasındaki herhangi bir ondalık tamsayı.
<HOST-socket> ::= <socket> | <HOST number>,<socket>
<HOST number> ::= bir ARPANET HOST’u belirten ondalık bir tamsayı.
<socket> ::= 0 ile (2**32)-1 arasındaki ondalık tamsayı
<type code> ::= A | I | L | P | E
<structure code> ::= F | R
<mode code> ::= S | B | T | H
<pathname> ::= <string>
<decimal integer> ::= <digit> | <digit><decimal integer>
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<empty> ::= boş dize (varsayılanın kullanılmasını belirtir).
V.C. Komutların ve Yanıtların Sıralanması
Kullanıcı ile sunucu arasındaki iletişim, dönüşümlü bir diyalog olarak tasarlanmıştır. Buna göre kullanıcı bir FTP komutu gönderir ve sunucu birincil bir yanıtla karşılık verir. Kullanıcı, daha fazla komut göndermeden önce bu ilk birincil başarı veya başarısızlık yanıtını beklemelidir.
İkinci tür bir yanıt, kullanıcı komutlarına göre eşzamansız olarak gönderilir. Bu yanıtlar, örneğin dosya aktarımının ilerleyişi veya tamamlanması hakkında rapor verebilir ve bu bakımdan dosya aktarım komutlarına ikincil yanıtlar niteliğindedir.
Üçüncü yanıt sınıfı, herhangi bir zamanda gelebilecek bilgilendirici ve kendiliğinden yanıtlar olup aşağıda kendiliğinden olarak listelenmiştir.
Komut–Yanıt Eşleştirme Tablosu
| Komut | Başarı | Başarısızlık |
|---|---|---|
| USER | 230, 330 | 430–432, 500–505 |
| PASS | 230 | 430–432, 500–505 |
| BYE | 231, 232 | 430–432, 500–505 |
| BYTE | 200 | 500–506 |
| SOCK | 200 | 500–506 |
| TYPE | 200 | 500–506 |
| MODE | 200 | 500–506 |
| RETR | 250 | 450, 451, 500–506 |
| Secondary Reply | 252 | 452 |
| STOR | 250 | 451, 500–506 |
| Secondary Reply | 252 | 452, 453 |
| APPE | 250 | 451, 500–506 |
| Secondary Reply | 252 | 452, 453 |
| RNFR | 200 | 450, 451, 500–506 |
| RNTO | 253 | 450, 451, 500–505 |
| DELE | 254 | 450, 451, 500–506 |
| LIST | 250 | 450, 453, 500–506 |
| Secondary Reply | 252 | 452 |
| ALLO | 200 | 500–506 |
| STAT | 100, 150, 151 | 450, 451, 500–506 |
| REST | 200 | 500–506 |
| ABOR | 201, 202 | 500–505 |
Kendiliğinden Yanıtlar:
- Başarı: 0xx, 300, 301, 251, 255
- Başarısızlık: 400, 401, 434–436
V.D. Tipik FTP Senaryoları
1. HOST X’ten yerel yazıcıya dosya aktarmak isteyen TIP kullanıcısı
a) TIP kullanıcısı, ICP aracılığıyla HOST X’e, soket 3’e TELNET bağlantılarını açar.
b) Aşağıdaki komutlar ve yanıtlar alışverişi yapılır:
TIP HOST X
USER username CRLF -------->
<------- 330 Enter Password CRLF
PASS password CRLF -------->
<------- 230 User logged in CRLF
SOCK 65538 CRLF -------->
<------- 200 Command received OK CRLF
RETR this.file CRLF -------->
<------- 255 SOCK 5533 CRLF
(HOST X initiates data connection to
TIP socket 65538, i.e., PORT 1 receive)
<------- 250 File transfer started
BYE CRLF -------->
<------- 252 File transfer completed
c) HOST X, TELNET ve veri bağlantılarını kapatır.
Not: TIP kullanıcısı satır modunda olmalıdır ve bu nedenle karakter silme gibi yerel TIP düzenleme işlemlerini kullanabilir.
2. HOST U üzerindeki kullanıcının HOST S’ye dosya aktarmak istemesi (gidiş/dönüş)
Genel olarak kullanıcı, aracı bir user-FTP süreci aracılığıyla sunucu ile iletişim kurar. Aşağıda tipik bir senaryo yer alabilir. User-FTP istemleri parantez içinde gösterilmiştir, ----> HOST U’dan HOST S’ye giden komutları, <---- ise HOST S’den HOST U’ya gelen yanıtları temsil eder.
Kullanıcı Tarafından Yerel Komutlar İlgili İşlem
ftp (host) multics CR HOST S’ye ICP, soket 3,
TELNET bağlantılarının kurulması.
username Doe CR USER Doe CRLF ---->
<---- 330 password CRLF
password mumble CR PASS mumble CRLF ---->
<---- 230 Doe logged in CRLF
retrieve (local type) ASCII CR
(local pathname) test1 CR USER-FTP yerel dosyayı ASCII olarak açar.
(for. pathname) test.pl1 CR RETR test.pl1 CRLF ---->
<---- 255 SOCK 1233 CRLF
Sunucu (U+4)’e veri bağlantısı kurar.
<---- 250 File transfer starts CRLF
<---- 252 File transfer complete CRLF
type image CR TYPE I CRLF ---->
<---- 200 Command OK CRLF
byte 36 CR BYTE 36 CRLF ---->
<---- 200 Command OK CRLF
store (local type) Image CR
(local pathname) file_dump CR User-FTP yerel dosyayı Image olarak açar.
(for. pathname) >udd>cn>fd CR STOR >udd>cn>fd CRLF ---->
<---- 451 Access denied CRLF
terminate BYE CRLF
<---- 231 Doe logged out CRLF
Sunucu tüm bağlantıları kapatır.
Teşekkürler
Dosya aktarım protokolü üzerindeki çalışmalar birçok kişiyi içermiştir. Bu belge, yalnızca yazarın değil, bir grubun çalışmasını raporlamaktadır. Yazar, aşağıdakilerin katkılarını minnetle kabul eder:
- Bob Braden — UCLA-CCCN
- Arvola Chan — MIT-MAC
- Bill Crowther — BBN-TIP
- Eric Harslem — RAND
- John Heafner — RAND
- Chuck Holland — UCSD
- Alex McKenzie — BBN (NET)
- Bob Metcalfe — XPARC
- Jon Postel — UCLA
- Neal Ryan — MIT-MAC
- Bob Sundberg — HARVARD
- Ray Tomlinson — BBN (TENEX)
- Dick Watson — SRI-ARC
- Jim White — SRI-ARC
- Richard Winter — CCA
Bu RFC, çevrimiçi RFC arşivlerine girilmek üzere makine tarafından okunabilir biçime Gottfried Janik tarafından, 9/97 tarihinde dönüştürülmüştür.