協議
從應用的角度出發,協議可理解為「規則」,是資料傳輸和資料的解釋的規則。假設,a、b雙方欲傳輸檔案。規定:
第一次,傳輸檔名,接收方接收到檔名,應答ok給傳輸方;
第二次,傳送檔案的尺寸,接收方接收到該資料再次應答乙個ok;
第三次,傳輸檔案內容。同樣,接收方接收資料完成後應答ok表示檔案內容接收成功。
由此,無論a、b之間傳遞何種檔案,都是通過三次資料傳輸來完成。a、b之間形成了乙個最簡單的資料傳輸規則。雙方都按此規則傳送、接收資料。a、b之間達成的這個相互遵守的規則即為協議。
這種僅在a、b之間被遵守的協議稱之為原始協議。
當此協議被更多的人採用,不斷的增加、改進、維護、完善。最終形成乙個穩定的、完整的檔案傳輸協議,被廣泛應用於各種檔案傳輸過程中。該協議就成為乙個標準協議。最早的ftp協議就是由此衍生而來。
典型協議
傳輸層 常見協議有tcp/udp協議。
應用層 常見的協議有http協議,ftp協議。
網路層 常見協議有ip協議、icmp協議、igmp協議。
網路介面層 常見協議有arp協議、rarp協議。
tcp傳輸控制協議(transmission control protocol)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。
udp使用者資料報協議(user datagram protocol)是osi參考模型中一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務。
http超文字傳輸協議(hyper text transfer protocol)是網際網路上應用最為廣泛的一種網路協議。
ftp檔案傳輸協議(file transfer protocol)
ip協議是網際網路互聯協議(internet protocol)
icmp協議是internet控制報文協議(internet control message protocol)它是tcp/ip協議族的乙個子協議,用於在ip主機、路由器之間傳遞控制訊息。
igmp協議是 internet 組管理協議(internet group management protocol),是網際網路協議家族中的乙個組播協議。該協議執行在主機和組播路由器之間。
arp協議是正向位址解析協議(address resolution protocol),通過已知的ip,尋找對應主機的mac位址。
rarp是反向位址轉換協議,通過mac位址確定ip位址。
package main
import (
「net」
「fmt」
)func main()
defer listener.close() // 主協程結束時,關閉listener
fmt.println(「伺服器等待客戶端建立連線…」)
// 等待客戶端連線請求
conn, err := listener.accept()
if err != nil
defer conn.close() // 使用結束,斷開與客戶端鏈結
fmt.println(「客戶端與伺服器連線建立成功…」)
// 接收客戶端資料
buf := make(byte, 1024) // 建立1024大小的緩衝區,用於read
n, err := conn.read(buf)
if err != nil
fmt.println(「伺服器讀到:」, string(buf[:n])) // 讀多少,列印多少。
}
go語言網路程式設計
go語言的defer,你真的懂了嗎?這篇文章通過幾個生動的例子闡述了go語言當中return的執行順序和原理,也解答了為什麼defer明明執行在return之前,但是看起來卻是在return之後進行的 package main import net fmt func main else else e...
Go語言之Go語言網路程式設計
go語言的 net 包中有乙個 tcpconn 型別,可以用來建立 tcp 客戶端和 tcp 伺服器端間的通訊通道,tcpconn 型別裡有兩個主要的函式 func c tcpconn write b byte n int,err os.error func c tcpconn read b byt...
go語言網路程式設計 TCP程式設計
一.tcp socket程式設計 go的tcp服務端流程分為三步 1 監聽埠 2 接收客戶端請求連線,返回conn 3 建立goroutine處理請求 乙個例項如下 tcp服務端 package main import fmt net bufio func process conn net.conn...