❶ TCP在計算校驗和時包括哪些內容
TCP校驗和的范圍包括首部和數據這兩部分。和UDP用戶數據報一樣,在計算校驗和時,要在TCP報文段的前面加上12位元組的偽首部。
❷ tcp頭部校驗和計算方法的實現需要什麼軟體來實現
以前看計算機網路相關的書,每次看到IP或者UDP報頭校驗和時,都一瞥而過,以為相當簡單,不就是16bit數據的相加嗎。最近在研究《TCP/IP詳解 卷1:協議》這本書,看到校驗和是16bit字的二進制反碼和(暈,以前都沒注意原來是反碼和,看來以前看書不仔細啊!罪過,罪過~~),覺得很奇怪,為什麼會用反碼和,而不是直接求和呢?(因為我認為TCP/IP協議裡面的演算法和思想一般都是非常經典的,人家這么做一定有原因的)下面就來探索一下這個校驗和演算法具體怎麼實現的。 首先,IP、ICMP、UDP和TCP報文頭部都有校驗和欄位,大小都是16bit,演算法也基本一樣: 在發送數據時,為了計算數據包的校驗和。應該按如下步驟: (1)把校驗和欄位置為0; (2)把需校驗的數據看成以16位為單位的數字組成,依次進行二進制反碼求和; (3)把得到的結果存入校驗和欄位中。 在接收數據時,計算數據包的校驗和相對簡單,按如下步驟: (1)把首部看成以16位為單位的數字組成,依次進行二進制反碼求和,包括校驗和欄位; (2)檢查計算出的校驗和的結果是否為0; (3)如果等於0,說明被整除,校驗是和正確。否則,校驗和就是錯誤的,協議棧要拋棄這個數據包。 雖然上面四種報文的校驗和演算法一樣,但在作用范圍存在不同:IP校驗和只校驗20位元組的IP報頭;而ICMP校驗和覆蓋整個報文(ICMP報頭+ICMP數據);UDP和TCP校驗和不僅覆蓋整個報文,而且還有12位元組的IP偽首部,包括源IP地址(4位元組)、目的IP地址(4位元組)、協議(2位元組,第一位元組補0)和TCP/UDP包長(2位元組)。另外UDP、TCP數據報的長度可以為奇數位元組,所以在計算校驗和時需要在最後增加填充位元組0(注意,填充位元組只是為了計算校驗和,可以不被傳送)。 這里還要提一點,UDP的校驗和是可選的,當校驗和欄位為0時,表明該UDP報文未使用校驗和,接收方就不需要校驗和檢查了!那如果UDP校驗和的計算結果是0時怎麼辦呢?書上有這么一句話:如果校驗和的計算結果為0,則存入的值為全1(65535),這在二進制反碼計算中是等效的。 講了這么多,那這個校驗和到底是怎麼算的呢? 1. 什麼是二進制反碼求和 對一個無符號的數,先求其反碼,然後從低位到高位,按位相加,有溢出則向高位進1(跟一般的二進制加法規則一樣),若最高位有進位,則向最低位進1。 首先這里的反碼好像跟我們以前學的有符號數的反碼不一樣(即正數的反碼是其本身,負數的反碼是在其原碼的基礎上,符號位不變,其餘各位取反),這里不分正負數,直接每個位都取反! 下面再舉例兩種二進制反碼求和的運算: 原碼加法運算 反碼加法運算 3(0011)+ 5(0101)= 8(1000) 3(1100)+ 5(1010)= 8(0111) 8(1000)+ 9(1001)= 1(0001) 8(0111)+ 9(0110)= 2(1101) 從上面兩個例子可以看出,當加法未發生溢出時,原碼與反碼加法運算結果一樣;當有溢出時,結果就不一樣了,原碼是滿10000溢出,而反碼是滿1111溢出,所以相差正好是1。舉例只是為了形象地觀察二進制反碼求和的運算規則,至於為什麼要定義這樣的規則以及該運算規則還存在其它什麼特性,可能就需要涉及代數理論的東西的了(嗚嗚~~數學理論沒學好啊,只能從表面上分析分析)。 另外關於二進制反碼求和運算需要說明的一點是,先取反後相加與先相加後取反,得到的結果是一樣的!(事實上我們的編程演算法里,幾乎都是先相加後取反。) 2. 校驗和演算法的實現 講了什麼是二進制反碼求和,那麼校驗和的演算法實現就簡單多了。廢話少說,直接上代碼: 復制代碼代碼如下: [cpp] view plain //計算校驗和 USHORT checksum(USHORT *buffer,int size) { unsigned long cksum=0; while(size1) { cksum+=*buffer++; size-=sizeof(USHORT); } if(size) { cksum+=*(UCHAR *)buffer; } //將32位數轉換成16 while (cksum16) cksum=(cksum16)+(cksum 0xffff); return (USHORT) (~cksum); } buffer是指向需校驗數據緩存區的指針,size是需校驗數據的總長度(位元組為單位) 4~13行代碼對數據按16bit累加求和,由於最高位的進位需要加在最低位上,所以cksum必須是32bit的unsigned long型,高16bit用於保存累加過程中的進位;另外代碼10~13行是對size為奇數情況的處理! 14~16行代碼的作用是將cksum高16bit的值加到低16bit上,即把累加中最高位的進位加到最低位上。這里使用了while循環,判斷cksum高16bit是否非零,因為第16行代碼執行的時候,仍可能向cksum的高16bit進位。有些地方是通過下面兩條代碼實現的:cksum = (cksum 16) + (cksum 0xffff); cksum += (cksum 16);這里只進行了兩次相加,即可保證相加後cksum的高16位為0,兩種方式的效果一樣。事實上,上面的循環也最多執行兩次! 17行代碼即對16bit數據累加的結果取反,得到二進制反碼求和的結果,然後函數返回該值。
❸ 如何關閉UDP接收時的校驗
UDP的校驗和需要計算UDP首部加數據荷載部分,但也需要加上UDP偽首部。
這個偽首部指,源地址、目的地址、UDP數據長度、協議類型(0x11),協議類型就一個位元組,但需要補一個位元組的0x0,構成12個位元組。
偽首部+UDP首部+數據 一起計算校驗和。
在抓包實驗中,也發現過在Linux系統下UDP檢驗和僅計算在UDP首部的情況,沒具體分析是否包含了偽首部,但是肯定沒計算數據。在windows系統的接收端上用wireshark抓包,發現校驗和是對的。
UDP檢驗和的計算方法是:
1.按每16位求和得出一個32位的數;
2.如果這個32位的數,高16位不為0,則高16位加低16位再得到一個32位的數;
3.重復第2步直到高16位為0,將低16位取反,得到校驗和。
較難和的計算,帖個代碼。自己組了個碼流,同時也從抓包中把UDP的碼流和偽首部直接寫到數組里了,兩個相互比較,只是為了做個驗證。代碼也就沒有寫得那麼通用。
當然,要注意的是,算出來的這個校驗和是主機序的,如果要跟抓包中的校驗和相比較,轉成網路序再對比。
#include <stdio.h>
#include <unistd.h>
#include
typedef struct {
int srcIp;
int dstIp;
short udp_len;
char rsv;
char protocol;
unsigned short src_port;
unsigned short dst_port;
unsigned short len;
unsigned short check_sum;
char data[2];
} UDPHDR;
char arr[100] = {0xc0, 0xa8, 0xd1, 0x80, 0xc0, 0xa8, 0xd1, 0x01, 0x00, 0x0a, 0x00, 0x11, 0x13, 0x88, 0x13, 0x88, 0x00, 0x0a, 0x00, 0x00, 0x61, 0x66};
unsigned short check_sum(unsigned short *a, int len);
int main()
{
short b = 0;
UDPHDR udphdr = {0};
udphdr.srcIp = inet_addr("192.168.209.128");
udphdr.dstIp = inet_addr("192.168.209.1");
udphdr.udp_len = htons(10);
udphdr.protocol = 0x11;
udphdr.rsv = 0;
udphdr.src_port = htons(5000);
udphdr.dst_port = htons(5000);
udphdr.len = htons(10);
udphdr.check_sum = 0;
udphdr.data[0] = 0x61;
udphdr.data[1] = 0x66;
b = check_sum((short *)&udphdr, 22);
printf("[test ...] b = %04x\n", b & 0xffff);
b = check_sum((short *)arr, 22);
printf("[test arr] b = %04x\n", b & 0xffff);
return 0;
}
unsigned short check_sum(unsigned short *a, int len)
{
unsigned int sum = 0;
while (len > 1) {
sum += *a++;
len -= 2;
}
if (len) {
sum += *(unsigned char *)a;
}
while (sum >> 16) {
sum = (sum >> 16) + (sum & 0xffff);
}
return (unsigned short)(~sum);
}
❹ 既然UDP協議不可靠,那UDP報頭中「校驗和」的作用是什麼
UDP校驗和只負責校驗此數據是否有錯,並不糾錯,如果錯了,就丟失。應用層也只有在收到全部的數據後才上交個網路層。
如果發現校驗和錯誤,那麼只能要求重發了,因為校驗和只是盡量幫助發現錯誤。
❺ 為什麼udp校驗和出錯,但udp報文能正常收發
UDP校驗和只負責校驗此數據是否有錯,並不糾錯,如果錯了,就丟失。應用層也只有在收到全部的數據後才上交個網路層。
如果發現校驗和錯誤,那麼只能要求重發了,因為校驗和只是盡量幫助發現錯誤。
❻ 把圖5-7計算udp檢驗和的例子自己具體演算一下,看是否能夠得出書上的計算結果
不難還有3年啊什麼都可以改變的給你點學習方法經驗一:1、不妨給自己定一些時間限制。連續長時間的學習很容易使自己產生厭煩情緒,這時可以把功課分成若干個部分,把每一部分限定時間,例如一小時內完成這份練習、八點以前做完那份測試等等,這樣不僅有助於提高效率,還不會產生疲勞感。如果可能的話,逐步縮短所用的時間,不久你就會發現,以前一小時都完不成的作業,現在四十分鍾就完成了。2、不要在學習的同時干其他事或想其他事。一心不能二用的道理誰都明白,可還是有許多同學在邊學習邊聽音樂。或許你會說聽音樂是放鬆神經的好法,那麼你盡可以專心的學習一小時後全身放鬆地聽一刻鍾音樂,這樣比帶著耳機做功課的效果好多了。3、不要整個晚上都復習同一門功課。我以前也曾經常用一個晚上來看數學或物理,實踐證明,這樣做非但容易疲勞,而且效果也很差。後來我在每晚安排復習兩三門功課,情況要好多了。除了十分重要的內容以外,課堂上不必記很詳細的筆記。如果課堂上忙於記筆記,聽課的效率一定不高,況且你也不能保證課後一定會去看筆記。課堂上所做的主要工作應當是把老師的講課消化吸收,適當做一些簡要的筆記即可。經驗二:學習效率這東西,我也曾和很多人談起過。我們經常看到這樣的情況:某同學學習極其用功,在學校學,回家也學,不時還熬熬夜,題做得數不勝數,但成績卻總上不去其實面對這樣的情況,我也是十分著急的,本來,有付出就應該有回報,而且,付出的多就應該回報很多,這是天經地義的事。但實際的情況卻並非如此,這里邊就存在一個效率的問題。效率指什麼呢?好比學一樣東西,有人練十次就會了,而有人則需練一百次,這其中就存在一個效率的問題。如何提高學習效率呢?我認為最重要的一條就是勞逸結合。學習效率的提高最需要的是清醒敏捷的頭腦,所以適當的休息,娛樂不僅僅是有好處的,更是必要的,是提高各項學習效率的基礎。那麼上課時的聽課效率如何提高呢?以我的經歷來看,課前要有一定的預習,這是必要的,不過我的預習比較粗略,無非是走馬觀花地看一下課本,這樣課本上講的內容、重點大致在心裡有個譜了,聽起課來就比較有針對性。預習時,我們不必搞得太細,如果過細一是浪費時間,二是上課時未免會有些鬆懈,有時反而忽略了最有用的東西。上課時認真聽課當然是必須的,但就象我以前一個老師講的,任何人也無法集中精力一節課,就是說,連續四十多分鍾集中精神不走神,是不太可能的,所以上課期間也有一個時間分配的問題,老師講有些很熟悉的東西時,可以適當地放鬆一下。另外,記筆記有時也會妨礙課堂聽課效率,有時一節課就忙著抄筆記了,這樣做,有時會忽略一些很重要的東西,但這並不等於說可以不抄筆記,不抄筆記是不行的,人人都會遺忘,有了筆記,復習時才有基礎,有時老師講得很多,在黑板上記得也很多,但並不需要全記,書上有的東西當然不要記,要記一些書上沒有的定理定律,典型例題與典型解法,這些才是真正有價值去記的東西。否則見啥記啥,勢必影響課上聽課的效率,得不償失。作題的效率如何提高呢?最重要的是選"好題",千萬不能見題就作,不分青紅皂白,那樣的話往往會事倍功半。題都是圍繞著知識點進行的,而且很多題是相當類似的,首先選擇想要得到強化的知識點,然後圍繞這個知識點來選擇題目,題並不需要多,類似的題只要一個就足夠,選好題後就可以認真地去做了。作題效率的提高,很大程度上還取決於作題之後的過程,對於做錯的題,應當認真思考錯誤的原因,是知識點掌握不清還是因為馬虎大意,分析過之後再做一遍以加深印象,這樣作題效率就會高得多。評:夏宇同學對於聽課和做題的建議,實際上反應了提高學習效率的一個重要方法--"把勁兒使在刀刃上",即合理分配時間,聽課、記筆記應抓住重點,做習題應抓住典型,這就是學習中的"事半功倍"。經驗三:學習效率是決定學習成績的重要因素。那麼,我們如何提高自己學習效率呢?第一點,要自信。很多的科學研究都證明,人的潛力是很大的,但大多數人並沒有有效地開發這種潛力,這其中,人的自信力是很重要的一個方面。無論何時何地,你做任何事情,有了這種自信力,你就有了一種必勝的信念,而且能使你很快就擺脫失敗的陰影。相反,一個人如果失掉了自信,那他就會一事無成,而且很容易陷入永遠的自卑之中。提高學習效率的另一個重要的手段是學會用心。學習的過程,應當是用腦思考的過程,無論是用眼睛看,用口讀,或者用手抄寫,都是作為輔助用腦的手段,真正的關鍵還在於用腦子去想。舉一個很淺顯的例子,比如說記單詞,如果你只是隨意的瀏覽或漫無目的地抄寫,也許要很多遍才能記住,而且不容易記牢,而如果你能充分發揮自己的想像力,運用聯想的方法去記憶,往往可以記得很快,而且不容易遺忘。現在很多書上介紹的英語單詞快速記憶的方法,也都是強調用腦筋聯想的作用。可見,如果能做7到集中精力,發揮腦的潛力,一定可以大大提高學習的效果。另一個影響到學習效率的重要因素是人的情緒。我想,每個人都曾經有過這樣的體會,如果某一天,自己的精神飽滿而且情緒高漲,那樣在學習一樣東西時就會感到很輕松,學的也很快,其實這正是我們的學習效率高的時候。因此,保持自我情緒的良好是十分重要的。我們在日常生活中,應當有較為開朗的心境,不要過多地去想那些不順心的事,而且我們要以一種熱情向上的樂觀生活態度去對待周圍的人和事,因為這樣無論對別人還是對自己都是很有好處的。這樣,我們就能在自己的周圍營造一個十分輕松的氛圍,學習起來也就感到格外的有精神。經驗四:很多學生看上去很用功,可成績總是不理想。原因之一是,學習效率太低。同樣的時間內,只能掌握別人學到知識的一半,這樣怎麼能學好?學習要講究效率,提高效率,途徑大致有以下幾點:一、每天保證8小時睡眠。晚上不要熬夜,定時就寢。中午堅持午睡。充足的睡眠、飽滿的精神是提高效率的基本要求。二、學習時要全神貫注。玩的時候痛快玩,學的時候認真學。一天到晚伏案苦讀,不是良策。學習到一定程度就得休息、補充能量。學習之餘,一定要注意休息。但學習時,一定要全身心地投入,手腦並用。我學習的時侯常有陶淵明的"雖處鬧市,而無車馬喧囂"的境界,只有我的手和腦與課本交流。三、堅持體育鍛煉。身體是"學習"的本錢。沒有一個好的身體,再大的能耐也無法發揮。因而,再繁忙的學習,也不可忽視放鬆鍛煉。有的同學為了學習而忽視鍛煉,身體越來越弱,學習越來越感到力不從心。這樣怎麼能提高學習效率呢?四、學習要主動。只有積極主動地學習,才能感受到其中的樂趣,才能對學習越發有興趣。有了興趣,效率就會在不知不覺中得到提高。有的同學基礎不好,學習過程中老是有不懂的問題,又羞於向人請教,結果是鬱郁寡歡,心不在焉,從何談起提高學習效率。這時,唯一的方法是,向人請教,不懂的地方一定要弄懂,一點一滴地積累,才能進步。如此,才能逐步地提高效率。五、保持愉快的心情,和同學融洽相處。每天有個好心情,做事干凈利落,學習積極投入,效率自然高。另一方面,把個人和集體結合起來,和同學保持互助關系,團結進取,也能提高學習效率。六、注意整理。學習過程中,把各科課本、作業和資料有規律地放在一起。待用時,一看便知在哪。而有的學生查閱某本書時,東找西翻,不見蹤影。時間就在忙碌而焦急的尋找中逝去。我認為,沒有條理的學生不會學得很好。評:學習效率的提高,很大程度上決定於學習之外的其他因素,這是因為人的體質、心境、狀態等諸多因素與學習效率密切相關。【總結】學習必須講究方法,而改進學習方法的本質目的,就是為了提高學習效率。學習效率的高低,是一個學生綜合學習能力的體現。在學生時代,學習效率的高低主要對學習成績產生影響。當一個人進入社會之後,還要在工作中不斷學習新的知識和技能,這時候,一個人學習效率的高低則會影響他(或她)的工作成績,繼而影響他的事業和前途。可見,在中學階段就養成好的學習習慣,擁有較高的學習效率,對人一生的發展都大有益處。可以這樣認為,學習效率很高的人,必定是學習成績好的學生(言外之意,學習成績好未必學習效率高)。因此,對大部分學生而言,提高學習效率就是提高學習成績的直接途徑。提高學習效率並非一朝一夕之事,需要長期的探索和積累。前人的經驗是可以借鑒的,但必須充分結合自己的特點。影響學習效率的因素,有學習之內的,但的因素在學習之外。首先要養成良好的學習習慣,合理利用時間,另外還要注意"專心、用心、恆心"等基本素質的培養,對於自身的優勢、缺陷等更要有深刻的認識。總之,"世上無難事,只怕有心人。"漫談學習方法周總理生前教導我們:「活到老,學到老。」人離不開學習,生命不息,學習不止。學習是一個人終生獲得知識,取得經驗,轉化為行為的重要途徑。它可以充實生活,發展身心,促使個人得到全面的發展和提高。要學好,就得講究科學的學習方法。所謂學習方法,就是人們在學習過程中所採用的手段和途徑。它包括知識的方法,學習技能的方法,發展智力與培養能力的方法。愛因斯坦總結自己獲得偉大成就的公式是:W=X+Y+Z。並解釋W代表成功,X代表刻苦努力,Y代表方法正確,Z代表不說空話。德國哲學家笛卡爾也曾說過:「最有價值的知識是關於方法的知識。」古今中外無數事實已經證明:科學的學習方法將使學習者的才能得到充分的發揮、越學越聰明。給學習者帶來高效率和樂趣,從而節省大量的時間。而不得法的學習方法,會阻礙才能的發揮,越學越死。給學習者帶來學習的低效率和煩惱。由此可見,方法在獲得成功中佔有十分重要的地位。那麼,究竟怎樣學才能掌握科學的學習方法呢?下面主要談五個方面的學習方法。(一)抓好預習環節預習,即課前的自學。指在教師講課之前,自己先獨立地閱讀新課內容。初步理解內容,是上課做好接受新知識的准備過程。有些學生由於沒有預習習慣,對老師一堂課要講的內容一無所知,坐等教師講課。老師講什麼就聽什麼,老師叫干什麼就干什麼,顯得呆板被動,缺乏學習的積極性和主動性。有些學生雖能預習,但看起書來似走馬觀花,不動腦、不分析。這種預習一點也達不到效果。1.預習的好處(1)能發現自己知識上的薄弱環節,在上課前補上這部分的知識,不使它成為聽課時的「拌腳石」。這樣,就會順利理解新知識。(2)有利於聽課時跟著老師講課的思路走。對聽課內容選擇性強。明確哪些知識應該放上主要精力,加強理解和消化;哪裡應該重點記筆記,做到心中有數。(3)預習有利於弄清重點、難點所在,便於帶著問題聽課與質疑。注意力集中到難點上。這樣,疑惑易解,聽起來輕松、有味,思起來順利主動,學習效果高。(4)預習可以提高記筆記水平。由於課前預習過,講的內容和板書,心中非常清楚。上課時可以不記或少記書上有的,著重記書上沒有的或自己不太清楚的部分,以及老師反復提醒的關鍵問題。從而可以把的時間用在思考理解問題上。2.預習要注意的幾個問題(1)預習時要讀、思、問、記同步進行。對課本內容能看懂多少就算多少,不必求全理解,疑難也不必鑽深,只需順手用筆作出不同符號的標記。把沒有讀懂的問題記下來,作為聽課的重點。但對牽涉到已學過的知識以及估計老師講不到的小問題,自己一定要搞懂,以消滅「攔路虎。」(2)若以前沒有預習的習慣,現在想改變方法,先預習後上課,但不能一下子全面鋪開,每門功課都搞提前預習。這樣做會感到時間不夠用。顯得非常緊張,不能達到預習效果。因此,剛開始預習時,要先選一兩門自己學起來感到吃力的學科進行預習試點,等到嘗到甜頭,取得經驗後,並在時間允許的條件下,再逐漸增加學科,直到全面鋪開。(3)預習應在當天作業做完之後再進行。時間多,就多預習幾門,鑽得深一點;反之,就少預習幾門,鑽得淺一點。切不可以每天學習任務還未完成就忙著預習,打亂了正常的學習秩序。(4)學習差的學生,課前不預習,上課聽不懂,課後還需花大量的時間去補缺和做作業,整天忙得暈頭轉向,擠不出一點時間去預習。其實,這種學生差的根本原因就在不預習上。學習由預習、上課、整理復習、作業四個環節組成。缺了預習這個環節就會影響下面環節的順利運轉。這些學生必須作好在短期內要多吃點苦的思想准備。在完成每天的學習任務後,要安排一點時間預習。這樣做雖然費了時間,但上課能聽得懂,減少了因上課聽不懂而浪費的時間,同時,還可以減少花在課後整理、消化、作業上的時間。時間一長,運轉正常了,學習的被動局面也就會改變,就再也不需加班加點了。3.預習的要求(1)要注重講究實效,不搞形式。要根據學習計劃安排時間,不能顧此失彼。預習一般要安排在新課的前一天晚上進行。這樣,印象會較深。新課難度大,就多預習一些時間,難度小就少預習一些時間。應重點選擇那些自己學起來吃力,又輪到講授新課的科目進行預習,其他科目只需一般性的預習。某些學科,也可以利用星期天,集中預習下一周要講授的課程,以減輕每天預習的負擔。(2)預習的任務是通過初步閱讀,先理解感知新課的內容(如概念、定義、公式、論證方法等),為順利聽懂新課掃除障礙。具體任務是:①復習、鞏固和補習有關已學的舊知識,找出新課中自己不理解的問題,並把理解不透的記下來。②初步弄清新課中的基本內容是什麼?這些知識內容在原有的基礎上向前發展了什麼?並找出書中的重點、難點和自己費解的地方。③預習時要看、思、做結合進行。看:一般是把新課通讀一遍,然後用筆勾劃出書上的重要內容。需要查的就去查一查;需要想的就應該認真想一想;需要記的就應該記下來。思:指有的時候要想,做到低頭看書,抬頭思考,手在寫題,腦在思考。做:在看的過程中,需要動手做的准備工作以及對課本後的練習題要進行嘗試性的做一做。問答題答一答。不會做,不會答可以再預習,也可以記下來。等教師在授課時集中注意聽講或向老師提出。預習以後,還要合上書本,小結一下。這樣做能使自己對新教材有更深刻的印象。(二)注重聽課環節學生的大部分時間是在課堂中度過的。因此,聽課是學生接受教師指導,掌握知識,發展智力的中心環節。是獲取知識的重要途徑。是保證高效率學習的關鍵。聽課時,有的學生全神貫注,專心聽講;有的分心走神,萎靡不振,打瞌睡。有的像錄音機,全聽全錄;有的邊聽邊記,基本上能把教師講的內容都記下來;有的以聽為主,邊聽邊思考,有了問題記下來;有的乾脆不記,只顧聽講;有的邊聽邊劃邊思考。思考時,有的思考當堂內容,有的思考與本課相關的知識體系,有的思考教師的思路,有的拿自己的思路與教師的思路比較。那麼,怎樣才能達到聽好課的目的呢?總的要求是要抓住各學科的不同特點,帶著問題聽,聽清內容,記住要點,抓住關鍵,著重聽老師的講課方法與思路,釋疑的過程與結論。具體要求:1.要充分認識老師在上課時的重要作用。因為教師在課堂教學中起著主導的作用。他在課堂中的分析講解遠比課後輔導要詳細得多,這也是學生自已看書無法比較的。課堂教學是老師指導學生掌握知識的一條最簡捷的路。因此,每個學生都應該虛心向老師學習。在老師的啟發誘導下上好每一節課。2.要集中注意力,全神貫注地聽老師講解,跟著老師的講課思路走,千萬不能思想開小差。如果在老師啟發下,自己有了比較好的想法,可以在筆記本上記下來,等下課後再去深入思考或請教老師和同學。總之,課堂上的「分心」,是學習的大敵。3.聽課中可以嘗試在老師沒有作出判斷、結論之前,自己試作判斷、試下結論。看看自己想的與老師講的是否一致。找出對與不對的原因。4.要力求當堂理解。理解是掌握事物本質、內部聯系及規律的思考過程。那麼,怎樣才能做到當堂理解呢?在課堂上,你想的應與老師講的統一,你思考的問題應與老師講的問題統一。在教師的啟發下,你要始終開動腦筋,積極思考。如果在思考中出現不理解或理解不透的地方,應舉手提出問題。如果課堂上老師沒有時間解答你的問題,應繼續聽老師的講解。課後再去請教老師。5.要跟著老師的思路跑。聽課是為了增長知識和發展智力。因此,不能把知識聽懂了就算課聽好了等同起來。高水平的聽課應該不僅注意老師傳授的具體知識,更應該注意老師講課的思路。追著老師的思路跑,目的在於把老師講課過程中運用的各種思維方式,思維過程搞清楚。學習老師是如何進行周密科學思考的,從而提高自己的思維能力和智力水平。有的學生不注意老師的講課思路,而偏重於記憶老師的推導,總結出來的公式或結論,認為這是聽課的主要目的。其實,這樣掌握的知識,是知其然而不知其所以然的死知識。這種死知識忘得快,又不能用於解決實際問題,更談不上發展智力。6.要抓住一節課的知識內容和學科特點的關鍵。知識內容的關鍵一般指基本概念、基本原理、基本關系式以及公式、定義。當老師講解這些關鍵知識時,你一定要特別注意,抓住不放。同樣,不抓住學科特點的關鍵學習,也會影響你的學習效果。實際上,各門學科的內容體系、發展思路、訓練要求以及教的方法各有特點。學習中非抓住這些特點不可。如物理、化學、生物課要特別注意觀察和實驗,在獲得感性知識的基礎上,通過思考來掌握科學概念和規律。數學要通過大量演算,證明等練習獲得數學知識,培養出數學思維能力。語文和外語在聽課時,主要抓住字、詞、句、篇等方面的知識點,並且通過聽、說、讀、寫來提高閱讀和寫作能力。以便更好地理解和掌握語言和文字。(三)緊抓復習環節復習是對前面已學過的知識進行系統再加工,並根據學習情況對學習進行適當調整,為下一階段的學習做好准備。因此,每上完一節課,每學完一篇課文,一個單元,一冊書都要及時復習。若復習適時恰當,知識遺忘就少。早在1885年,德國的心理學家艾濱浩斯,通過實驗發現剛記住的材料,一小時後只能保持44%;一天後能記住33%;兩天後留下的只有28%;六天後為25%。所有的人,學習的知識都會發生先快後慢的遺忘過程。一些記性好的學生是因為能經常從不同的角度、不同的層次上進行復習,做到「每天有復習,每周有小結,每章有總結」,從而形成了驚人的記憶力。因此,很多學生對所學知識記不住,並不是腦子笨,而是不善於復習,或復習功夫不深。1.復習的要求(1)課後應及時把老師講的和板書的知識像放電影一樣,在腦子里過一遍。看看能想起多少,忘了多少。然後翻開筆記,查找漏缺。(2)看教材時,應邊看邊思,深思重點、難點。分析疑點、深化理解。(3)看閱必要的參考書,充實課堂所學的內容。(4)整理與充實筆記,對知識進行歸類,使知識深化、簡化、條理化,並按規律去加強記憶。(5)加強練習。練習一般應在復習後進行,也可邊復習邊練習。在復習過程中,加強練習,能提高復習效果。(1)及時復習。當天學的知識,要當天復習清,決不能拖拉。做到不欠「帳」。否則,內容生疏了,知識結構散了就要花費加倍時間重新學習。要明白「修復總比重建倒塌了的房子省事得多」。(2)要緊緊圍繞概念、公式、法則、定理、定律復習。思考它們是怎麼形成與推導出來的?能應用到哪些方面?它們需要什麼條件?有無其他說法或證明方法?它與哪些知識有聯系?通過追根溯源、牢固掌握知識。(3)要反復復習。學完一課復習一次,學完一章(或一個單元),復習一次。學習一階段系統總結一遍。期末再重點復習一次。通過這種步步為營的復習,形成的知識聯系就不會消退。(4)復習要有自己的思路。通過一課、一節、一章的復習,把自己的想法,思路寫成小結、列出圖表、或者用提綱摘要的方法,把前後知識貫穿起來,形成一個完整的知識網。(5)復習中遇到問題,不要急於看書或問人,要先想後看(問)。這對於集中注意力、強化記憶、提高學習效率很有好處。每次復習時,要先把上次的內容回憶一下。這樣做不僅保持了學習的連貫性,而且對記憶有很好的效果。(6)復習中要適當看點題、做點題。選的題要圍繞復習的中心來選。在解題前,要先回憶一下過去做過的有關習題的解題思路,在這基礎上再做題。做題的目的是檢查自己的復習效果,加深對知識的理解,培養解決問題的能力。做綜合題能加深知識的完整化和系統化的理解,培養綜合運用知識的能力。(四)獨立完成作業環節獨立完成作業是深化知識,鞏固知識,檢查學習效果的重要手段,也是復習與應用相結合的主要形式。然而,有些學生沒有真正利用好這個環節。他們一下課就搶著做作業,作業一完,萬事大吉。更有些學生課上根本沒聽懂,下課後也不問,作業抄襲後向老師交差完事。其實,做好作業有以下意義:1.可以檢查自己的學習效果。通過做作業可以發現問題,以便及時補救。2.通過做作業時的思考,可以加深對知識的理解,把易混淆的概念搞清楚,把公式的變換搞熟練。總之,有利於把書本上的知識轉化成自己的知識。3.可以培養思維能力。因為作業中提出的各種問題,必然會促使自己積極思考,增強分析問題和解決問題的能力。4.做完作業後,不能把它一扔了事,而應當定期進行分類整理,為總復習積累資料。復習時,翻閱一下記錄的作業,既方便省事,又印象深刻。做作業的基本要求和方法:1.審題。審題是做作業十分重要的一步。拿到一個題目,首先應判斷它屬於哪一類,難易的程度如何?分清題目的條件和要求。已知條件是什麼?從題目提供的信息中還能挖掘出什麼條件?它的要求是什麼?同時要讓自己的思路順著題目的路子思考。通過思考、准確、透徹地理解題目的意思,分清已知條件有哪些,題目要求的結論是什麼。在審題過程中,還要注意哪些地方沒有直接用語言表示出來,而隱含在題目中的其他形式條件,即注意隱含條件的挖掘。2.尋找解題途徑。方法一般有三種:一種是「由因導果」,可以表述為:「已知→可知→可知……」,最後到達結論。第二種是「執果索因」,即結論←需知←需知←……」。這樣一層一層的追下去,直到追到已知條件全部有了為止。這樣。已知條件和要求結論之間的道路就打通了。第三種是對於一些比較復雜的題目,就需要我們用前兩種的綜合法,以盡量縮短條件與結論的距離。即一方面從已知條件推出一些可知的中間結果,另一方面根據題目的要求分析出一些需知的中間結果。需知與已知一旦統一,則可得到解題的途徑。在尋找解題途徑中,要廣泛聯想與這些條件和結論有關的概念、公式、法則和方法等。聯想過去是否解過和與此相同或相近的題目。那時是怎樣解的?如果能聯想起有關的舊知識,即與此題相應的規律原理、原則、公式就會浮現在腦海中,使解題的思路更加開闊。聯想越廣,跨度越大,得到的解題效果也越佳。有時因為題目較復雜,為了思考方便,也可以把審題的過程畫成簡圖。這實際上是一個運用學過的知識,把題目加工、改造的過程。經過加工,思路明了,解題捷徑就會出現在眼前。3.正確解題,經過①②兩個步驟,已經尋得解題的途徑,判定了解題的方案。但在實施時還要注意解題的保質保量。要做到這點,解題的步驟必須按部就班,一步步演算。書寫規范化,格式明了,表達准確。要做到這點,必須要有扎實的基礎。除此以外,在解題中,重要的知識點應寫出來,繁題要簡寫,簡題要詳寫。4.注意檢查。就是回過頭來再檢查一遍,看看是否題目要求的解都求出來了,有沒有漏解。是否求出的解均符合題目的要求,有沒有錯解。檢查是培養學生獨立思考能力的重要一環。檢查的方法很多。①步步檢查法。即從審題開始,一步步檢查。這種方法可以檢查出計算、表達上的錯誤。②重做法。即重做一遍,看結果是否一樣。③代入法。將計算結果代入公式或式子看看是否合理。同時,還要注意鍛煉一題多解、一題多想。比較歸類的解題習慣,不斷提高自己分析問題和解決問題的能力。(五)認真記好課堂筆記記筆記是為了學,為了懂,為了用。記筆記的原則是以聽為主,以記為輔。簡練明白,提綱挈領,詳略得當。難點不放過,疑點有標記。不亂,不混,條理明。對聯想、發現的問題,要及時記。筆記要留有空白處,便於復習時補缺。筆記的主要內容有:1.記講課提綱,解題思路,難於理解的重點及難點以及自己悟出的重要體會。2.老師解決問題時提出的觀點、論據與推導論證過程。精、巧、新的解題方法。3.課堂上沒有解決的疑難。新知識和舊知識的聯系或結合點。容易發生錯誤和混淆的概念。4.記要點,書上有的不必多記,可在筆記上留下空白,課後補記或對照課本復習。5.預習時發現的問題、體會,自己掌握不好的舊知識。6.摘錄參考書上對課本內容有針對性幫助的材料。記筆記的好處有:1.思想不易開小差,因上課時要邊聽邊記邊思考。能保持注意力集中、持久,加強對知識的接受與理解。2.記筆記要手、眼、耳、腦並用,使感覺器官和思維得到綜合訓練,提高學習能力參考資料:如何尋找適合自己的學習方法最後一句最重要的是堅持
❼ 如何計算UDP/TCP檢驗和checksum
如何計算UDP/TCP檢驗和checksum 一、下面的圖是一個UDP的檢驗和所需要用到的所有信息,包括三個部分: 1.UDP偽首部 2.UDP首部 3.UDP的數據部分(切記不要遺漏該部分,否則就~吐血了~) 首先解釋下偽首部的概念,偽首部包含IP首部一些欄位。其目的是讓UDP兩次檢查數據是否已經正確到達目的地,只是單純為了做校驗用的。 還有一個概念十分重要,那就是16位UDP總長度,請注意該長度不是報文的總長度,而只是UDP(包括UDP頭和數據部分)的總長度(之前就是因為這個概念沒弄清楚,走了不少彎路,吐血~~)。 二、計算檢驗和(checksum)的過程很關鍵,主要分為以下幾個步驟: 1.把偽首部添加到UDP上; 2.計算初始時是需要將檢驗和欄位添零的; 3.把所有位劃分為16位(2位元組)的字 4.把所有16位的字相加,如果遇到進位,則將高於16位元組的進位部分的值加到最低位上,舉例,0xBB5E+0xFCED=0x1 B84B,則將1放到最低位,得到結果是0xB84C 5.將所有字相加得到的結果應該為一個16位的數,將該數取反則可以得到檢驗和checksum。 三、事實勝於雄辯,還是舉個例子來分析一下吧,該例子計算的是一個TCP的檢驗和(和UDP的演算法一致) TCP計算檢驗和的報文結構如下所示: 抓包工具抓了一個TCP 的syn報文做研究,呵呵,下面就是整個報文: 1.首先將檢驗和部分添零; 2.然後將TCP偽首部部分,TCP首部部分,數據部分都劃分成16位的一個個16進制數; 3.將這些數逐個相加,記得溢出的部分加到最低位上,這是循環加法: 0xc0a8+ 0x0166+……+0x0402=0x9b49 4.最後將得到的結果取反,則可以得到檢驗和位0x64B6 按照上述步驟進行計算就可以得到檢驗和為0x64B6,大家也可以試試看 IP數據報只檢驗IP數據報的首部,但UDP檢驗的是把首部和數據部分一起都檢驗。
❽ 在經過NAT路由器要修改UDP的校驗和,那為什麼UDP校驗和為0的時候不修改呢
UDP協議校驗和是一個可選項,可以校驗也可以不校驗,當不校驗時其值為0。當原報文不校驗時經過NAT後也不校驗,因此其值也為0;
UDP校驗和使用虛報頭及整個UDP數據進行校驗,校驗方式與IP頭部校驗和相同。
❾ 如何計算TCP的CHECKSUM
如何計算UDP/TCP檢驗和checksum
一、下面的圖是一個UDP的檢驗和所需要用到的所有信息,包括三個部分:
UDP偽首部
2.UDP首部
3.UDP的數據部分(切記不要遺漏該部分,否則就~吐血了~)
首先解釋下偽首部的概念,偽首部包含IP首部一些欄位。其目的是讓UDP兩次檢查數據是否已經正確到達目的地,只是單純為了做校驗用的。
還有一個概念十分重要,那就是16位UDP總長度,請注意該長度不是報文的總長度,而只是UDP(包括UDP頭和數據部分)的總長度(之前就是因為這個概念沒弄清楚,走了不少彎路,吐血~~)。
二、計算檢驗和(checksum)的過程很關鍵,主要分為以下幾個步驟:
把偽首部添加到UDP上;
2.計算初始時是需要將檢驗和欄位添零的;
3.把所有位劃分為16位(2位元組)的字
4.把所有16位的字相加,如果遇到進位,則將高於16位元組的進位部分的值加到最低位上,舉例,0xBB5E+0xFCED=0x1 B84B,則將1放到最低位,得到結果是0xB84C
5.將所有字相加得到的結果應該為一個16位的數,將該數取反則可以得到檢驗和checksum。
三、事實勝於雄辯,還是舉個例子來分析一下吧,該例子計算的是一個TCP的檢驗和(和UDP的演算法一致)
TCP計算檢驗和的報文結構如下所示:
抓包工具抓了一個TCP 的syn報文做研究,呵呵,下面就是整個報文:
首先將檢驗和部分添零;
2.然後將TCP偽首部部分,TCP首部部分,數據部分都劃分成16位的一個個16進制數;
3.將這些數逐個相加,記得溢出的部分加到最低位上,這是循環加法:
0xc0a8+ 0x0166+……+0x0402=0x9b49
4.最後將得到的結果取反,則可以得到檢驗和位0x64B6
按照上述步驟進行計算就可以得到檢驗和為0x64B6,大家也可以試試看
IP數據報只檢驗IP數據報的首部,但UDP檢驗的是把首部和數據部分一起都檢驗。