網路程式設計(一)

2021-06-02 19:34:32 字數 1130 閱讀 2615

最近在學習網路程式設計,還是寫點筆記來督促下自己,邊寫邊學才不至於懶惰。

我其實一直對網路通訊很是好奇,以前也經常想網路遊戲和聊天軟體是如何使使用者互連並進行通訊的呢?後來接觸到套接字,並且還能做些簡單的通訊,但對其中的工作原理渾然不知,凡事總是如此,你不想被某事束縛或牽著鼻子走,就總會想著去了解更深一層的東西。以讓其為你所用,方便自如,進入正題。首先介紹tcp和udp。

在介紹這兩種協議之前,不得不把osi 7層結構擺出來,畢竟他們也只是其中的一層而已。

osi 7層結構由上至下分為:

應用層 表示層 會話層 傳輸層 網路層 資料鏈路層 物理層

而tcp、udp協議則位於傳輸層,用過套接字的人都知道套接字有不同的型別,不同型別的套接字制定不同的傳輸協議。當我們通過套接字來傳送資訊是,資料就被封裝到乙個tcp資料報或udp資料報中。所謂協議也就是雙方彼此統一的資料格式和通訊規則。

tcp和udp雖然同為傳輸協議,但有非常大的區別。udp只能說是簡單的傳輸協議,它提供的是一種無連線的服務。何為無連線?就是說它不必事先和服務端建立連線就可以直接傳送資料報。自身不提供校驗和重傳機制,資料報一旦發出去,便與它無關係了。所以它是一種不可靠的傳輸協議。

而tcp則不同,它可謂是集多功能一體的「變形金剛」,首先它是基於連線的傳輸協議,也就是說在與接收端通訊前必須先建立一條連線,如何建立連線?那就要通過家喻戶曉的「三次握手」來實現了,那連線的目的是什麼呢?我們都知道「三次握手」中相互傳遞的事syn和ack,而syn中包含了多個tcp選項,比如說,mss、視窗規模等。所謂的連線並非是明確從源端到目的端的一條路由,我想應該是明確和協商對方的配置資訊。比如說視窗大小、每個tcp分節願意接受的最大資料量。

不但如此,tcp協議還提供重傳、校驗、序列號等機制,保證了資料的完整性、可靠性、無冗餘,這些在udp中是見不到的。那豈不是說tcp完勝udp?非也!不同協議自然有其用武之地,tcp有如此多的裝備,自然其複雜性可想而知肯定很高,傳輸過程越複雜,其速率自然也就相應較低。udp雖然簡單,但也保證了它的傳輸速度絕對一流,對於小型資料,udp的效率足夠讓你開懷大笑。像偶爾也會玩的cf,它用的就是udp,要是用tcp,雖然不是我設計的遊戲,但可以想象一下,如果網路不太好,那豈不是你一直在玩「情景重現」,因為至少有重傳機制吧。(我瞎猜的,呵~)

其實要了解兩者的不同,大可以去看看他們的各自的協議資料報格式,奧秘就自然在其中。

網路程式設計(一)

網路通訊三素質 一 ip位址 二 埠號 三 傳輸協議 tcp安全但慢,udp快。socket程式設計 一收一發 在python3裡,無論是收,還是發,必須是 bytes型別。怎麼改?bytes x,utf8 x 是要改的變數,注意後面要加編碼格式 utf8server下的方法 client下的方法 ...

網路程式設計(一)

osi七層模型 開放系統互連參考模型 open system interconnect 是國際標準化組織iso和國際電報 諮詢委員會ccitt聯合制定的開放系統互連參考模型,為開放式互連系統提供了一種功能結構的框架。osi系統分為七層,物理層,資料鏈路層,網路層,傳輸層,會話層,表示層,應用層。tc...

網路程式設計(一)

網路檢視器 傳送http請求 url url new url address 獲取連線物件,並沒有建立連線 設定連線和讀取超時 conn.setconnecttimeout 5000 conn.setreadtimeout 5000 設定請求方法,注意必須大寫 conn.setrequestmeth...