在使用ftp軟件,以及設(shè)置路由器時,經(jīng)常會遇到“端口”,那么這個端口該如何理解呢?
下面跟隨小編一起看看吧。
先上一張示意圖:
我們把電腦中的各種應用軟件、驅(qū)動程序等,理解成“軟件邊界”包圍的一個“東西”。
“網(wǎng)口”就是網(wǎng)絡數(shù)據(jù)流進出電腦的口子。
“端口”就像一個個插座,通過“協(xié)議”這些數(shù)據(jù)“管道”和網(wǎng)口連接。
“應用程序”需要使用網(wǎng)絡傳送數(shù)據(jù)時,“插”在端口上即可。
為了識別眾多的端口,我們給他們編上號:0、1、2、3......65535。
所以網(wǎng)絡端口在表現(xiàn)上就是一個數(shù)字。
為什么要這樣呢?那讓我們再想想一下下面的情況:
電腦上打開了QQ、ftp、郵件客戶端、瀏覽器等網(wǎng)絡應用程序,當系統(tǒng)底層的網(wǎng)絡協(xié)議收到一系列數(shù)據(jù)包之后,應該傳遞給哪個應用程序呢?是不是蒙圈啦。
所以網(wǎng)絡工作者們發(fā)明了端口這個東西,以ftp文件傳輸端口為例:
假設(shè)我們使用filezilla這個ftp軟件從服務器下載文件,filezilla就“插”在21這個端口上,當協(xié)議收到的數(shù)據(jù)包標明是21號的,就通過21號管道“排”出,filezilla自然就接到想要的數(shù)據(jù)啦。
當然,實際情況比這個復雜多了,ftp還涉及20號端口,請小伙伴們自行搜索。
那么,應用軟件是怎么“插”在端口上呢?程序員們編程的時候可能就像下面的語句樣:
socket.Bind(21);
這里只是舉個例子,不同的庫函數(shù)提供的形式都會不一樣,但萬變不離“端口”。
從0到65535,部分端口是約定好的,比如http的80,DNS 53,SMTP 25,telnet 23等。
其他的比如windows系統(tǒng)的遠程桌面 3389,mysql數(shù)據(jù)庫 3306等都是軟件開發(fā)者自行定義的。這個“約定”需要動態(tài)的理解,就是說,某個軟件(確切的說應該是協(xié)議)產(chǎn)生的時候,使用了某個端口,逐漸的,這個軟件變得非常流行,眾人皆知,那么他用的端口也就被“約定”了。
說了這么多,不會有人把上面所說的端口理解成設(shè)備上的“端口”了吧?
最后提一個,windows系統(tǒng)局域網(wǎng)資源共享時涉及到的端口,在配置防火墻時經(jīng)常碰到,小伙伴們可以搜索下:135,136,137,138,139,445。