關於同一條TCP鏈結資料報到達順序的問題

2021-07-16 14:40:27 字數 703 閱讀 4980

以前作者也一直以為資料報先發的不一定先到,直到今天才意識這個問題的缺陷,資料報是不一定先發先到,但是對於tcp有一點特殊,若我們接受的資料報是在應用層,並且應用層用的是tcp的傳輸協議的話,這個順序是保證,這個順序的保證是在傳輸層保證的,舉個例子:

client發生資料a,b給server,使用的tcp傳輸,client傳送毫無疑問是先傳送a,然後傳送b,但是有些搞網路的同學可能會有這個疑問,a跟b在物理層走的鏈路不一樣,傳輸速度不一樣,b是會比a先到達server,這個是沒有錯的,但是這個資料報被接受是在網路層跟傳輸層,請記住網路跟傳輸層的作用,網路層是保證同乙個包的完整,就是說若你的傳輸層發出的包過大,在網路層(也就是ip層)會被分包,同時在sever的網路接受的時候會被組包,有乙個完整的包才會交給傳輸層,若包不完整是會丟棄,同時他也不保證你的包的是否達到,資料報的保證是在傳輸層做的,就是說若傳輸層(tcp協議才會,udp並不保證)沒有收到對方的確認包,會有超時重傳,每個資料報也是有序列號的,同時,傳輸層就是根據這個序列號來保證a,b包的順序,即使b比a先到達了,tcp也會是等a到達之後,先把a提交給應用層,再把b的資料提交給應用層,從而保證了,同一條tcp鏈結,先發的包先到

注:這個順序的保證是傳輸層做的,tcp這個協議保證的,udp並不保證,網路層接收包的順序是錯亂的。

下面這張就是網路的傳輸圖

同一張表中複製一條資料

insert into db exampl pid title img release id release time last edit time scene id brand id style id type describe group id is open status select pid...

關於資料庫Group By取最新一條資料

根據欄位super find id分組查詢opt time最新的一條資料,如以上示例表中期望查詢結果為第2條。select b.super find id,max b.opt time as opt time from info super feedback b group by b.super f...

高併發情況下使用者處理同一條資料解決方法

如果2個及以上的使用者同時開啟一條資料,並修改資料,提交後會造成資料衝突。資料庫表字段 假設現在有2個使用者都已經開啟同一條資料,並且顯示的資料都是id 1 name 張三 age 15 a使用者 b使用者 現在我們假設使用者a先操作,使用者b後操作,此時資料庫儲存的資料為 使用者a沒有對該記錄進行...