国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

TCP協(xié)議學(xué)習(xí)總結(jié)

2019-11-17 02:40:53
字體:
供稿:網(wǎng)友
TCP協(xié)議學(xué)習(xí)總結(jié)

1.傳輸全雙工通信,即 一個(gè)鏈接 雙向通信 互不影響

2.在TCP層,有個(gè)FLAGS字段,這個(gè)字段有以下幾個(gè)標(biāo)識(shí):SYN, FIN, ACK, PSH, RST, URG.

  含義是:

  SYN表示建立連接,

  FIN表示關(guān)閉連接,

  ACK表示響應(yīng),

  PSH表示有 DATA數(shù)據(jù)傳輸,

  RST表示連接重置。

3.TCP建立鏈接需要三次握手:

  

  1).C -> S 標(biāo)志位:SYN = 1 , ACK = 0 ,隨機(jī)序列號(hào):seq:10000 

  (如何理解:客戶端C 自己隨機(jī)一個(gè)序列號(hào)seq發(fā)送給服務(wù)端 ;發(fā)送標(biāo)識(shí) SYN = 1 & ACK = 0 表示要求建立鏈接)

  發(fā)送報(bào)文:SYN=1,ACK=0,SEQ=10000 

  2). S -> C 標(biāo)志位:SYN = 1 , ACK = 1 ,隨機(jī)序列號(hào):seq:20000,ack:10000 +1

   (如何理解:服務(wù)端S 接到 SYN = 1 & ACK = 0 標(biāo)識(shí)的報(bào)文后, 自己隨機(jī)一個(gè)序列號(hào)seq,并將客戶端的seq+1 作為ack發(fā)送給客戶端 ;發(fā)送 標(biāo)識(shí) SYN = 1 & ACK = 1 表示已收到新鏈接請(qǐng)求,請(qǐng)繼續(xù)握手)

  發(fā)送報(bào)文:SYN=1,ACK=1,SEQ=20000,ack=10001

 

  3). C -> S 標(biāo)志位:SYN = 0 , ACK = 1 ,序列號(hào):seq:10001,ack:2000+1

  (如何理解:客戶端C 接到 SYN = 1 & ACK = 1 標(biāo)識(shí)的報(bào)文后, 檢查收到ack是不是等于自己第一發(fā)送的seq +1,如果正確則將服務(wù)端的seq+1 作為ack發(fā)送給客戶端 ;發(fā)送 標(biāo)識(shí) SYN = 0 & ACK = 1 表示客戶端已與服務(wù)端確認(rèn)鏈接,此時(shí)鏈接成功,可以傳輸數(shù)據(jù)。)

  內(nèi)容參考引用:

    http://blog.csdn.net/onlyou930/article/details/7386484

    http://m.survivalescaperooms.com/azraelly/archive/2012/12/25/2832393.html

  PS1:

在TCP/ip協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。 第一次握手:建立連接時(shí),客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn); 第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù) 器進(jìn)入SYN_RECV狀態(tài);

第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。完成三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù)

PS2:

三次握手Three-way Handshake一個(gè)虛擬連接的建立是通過三次握手來實(shí)現(xiàn)的1. (B) --> [SYN] --> (A)假如服務(wù)器A和客戶機(jī)B通訊. 當(dāng)A要和B通信時(shí),B首先向A發(fā)一個(gè)SYN (Synchronize) 標(biāo)記的包,告訴A請(qǐng)求建立連接.注意: 一個(gè) SYN包就是僅SYN標(biāo)記設(shè)為1的TCP包(參見TCP包頭Resources). 認(rèn)識(shí)到這點(diǎn)很重要,只有當(dāng)A受到B發(fā)來的SYN包,才可建立連接,除此之外別無他法。因此,如果你的防火墻丟棄所有的發(fā)往外網(wǎng)接口的SYN包,那么你將不能讓外部任何主機(jī)主動(dòng)建立連接。2. (B) <-- [SYN/ACK] <--(A)接著,A收到后會(huì)發(fā)一個(gè)對(duì)SYN包的確認(rèn)包(SYN/ACK)回去,表示對(duì)第一個(gè)SYN包的確認(rèn),并繼續(xù)握手操作.注意: SYN/ACK包是僅SYN 和 ACK 標(biāo)記為1的包.3. (B) --> [ACK] --> (A)B收到SYN/ACK 包,B發(fā)一個(gè)確認(rèn)包(ACK),通知A連接已建立。至此,三次握手完成,一個(gè)TCP連接完成Note: ACK包就是僅ACK 標(biāo)記設(shè)為1的TCP包. 需要注意的是當(dāng)三此握手完成、連接建立以后,TCP連接的每個(gè)包都會(huì)設(shè)置ACK位這就是為何連接跟蹤很重要的原因了. 沒有連接跟蹤,防火墻將無法判斷收到的ACK包是否屬于一個(gè)已經(jīng)建立的連接.一般的包過濾(Ipchains)收到ACK包時(shí),會(huì)讓它通過(這絕對(duì)不是個(gè)好主意). 而當(dāng)狀態(tài)型防火墻收到此種包時(shí),它會(huì)先在連接表中查找是否屬于哪個(gè)已建連接,否則丟棄該包四次握手Four-way Handshake四次握手用來關(guān)閉已建立的TCP連接1. (B) --> ACK/FIN --> (A)2. (B) <-- ACK <-- (A)3. (B) <-- ACK/FIN <-- (A)4. (B) --> ACK --> (A)注意: 由于TCP連接是雙向連接, 因此關(guān)閉連接需要在兩個(gè)方向上做。ACK/FIN 包(ACK 和FIN 標(biāo)記設(shè)為1)通常被認(rèn)為是FIN(終結(jié))包.然而, 由于連接還沒有關(guān)閉, FIN包總是打上ACK標(biāo)記. 沒有ACK標(biāo)記而僅有FIN標(biāo)記的包不是合法的包,并且通常被認(rèn)為是惡意的連接復(fù)位Resetting a connection四次握手不是關(guān)閉TCP連接的唯一方法. 有時(shí),如果主機(jī)需要盡快關(guān)閉連接(或連接超時(shí),端口或主機(jī)不可達(dá)),RST (Reset)包將被發(fā)送. 注意在,由于RST包不是TCP連接中的必須部分, 可以只發(fā)送RST包(即不帶ACK標(biāo)記). 但在正常的TCP連接中RST包可以帶ACK確認(rèn)標(biāo)記請(qǐng)注意RST包是可以不要收到方確認(rèn)的?無效的TCP標(biāo)記Invalid TCP Flags到目前為止,你已經(jīng)看到了 SYN, ACK, FIN, 和RST 標(biāo)記. 另外,還有PSH (Push) 和URG (Urgent)標(biāo)記.最常見的非法組合是SYN/FIN 包. 注意:由于 SYN包是用來初始化連接的, 它不可能和 FIN和RST標(biāo)記一起出現(xiàn). 這也是一個(gè)惡意攻擊.由于現(xiàn)在大多數(shù)防火墻已知 SYN/FIN 包, 別的一些組合,例如SYN/FIN/PSH, SYN/FIN/RST, SYN/FIN/RST/PSH。很明顯,當(dāng)網(wǎng)絡(luò)中出現(xiàn)這種包時(shí),很你的網(wǎng)絡(luò)肯定受到攻擊了。別的已知的非法包有FIN (無ACK標(biāo)記)和"NULL"包。如同早先討論的,由于ACK/FIN包的出現(xiàn)是為了關(guān)閉一個(gè)TCP連接,那么正常的FIN包總是帶有 ACK 標(biāo)記。"NULL"包就是沒有任何TCP標(biāo)記的包(URG,ACK,PSH,RST,SYN,FIN都為0)。到目前為止,正常的網(wǎng)絡(luò)活動(dòng)下,TCP協(xié)議棧不可能產(chǎn)生帶有上面提到的任何一種標(biāo)記組合的TCP包。當(dāng)你發(fā)現(xiàn)這些不正常的包時(shí),肯定有人對(duì)你的網(wǎng)絡(luò)不懷好意。

PS3: 數(shù)據(jù)傳輸階段:

序號(hào)  方向    seq   ack             size23   A->B   40000   70000           151424   B->A   70000   40000+1514-54=41460   5425   A->B   41460   70000+54-54=70000   151426   B->A   70000   41460+1514-54=42920   54解釋:23:B接收到A發(fā)來的seq=40000,ack=70000,size=1514的數(shù)據(jù)包24:于是B向A也發(fā)一個(gè)數(shù)據(jù)包,告訴B,你的上個(gè)包我收到了。B的seq就以它收到的數(shù)據(jù)包的ACK填充,ACK是它收到的數(shù)據(jù)包的SEQ加上數(shù)據(jù)包的大小(不包括以太網(wǎng)協(xié)議頭,IP頭,TCP頭),以證實(shí)B發(fā)過來的數(shù)據(jù)全收到了。25:A在收到B發(fā)過來的ack為41460的數(shù)據(jù)包時(shí),一看到41460,正好是它的上個(gè)數(shù)據(jù)包的seq加上包的大小,就明白,上次發(fā)送的數(shù)據(jù)包已安全到達(dá)。于是它再發(fā)一個(gè)數(shù)據(jù)包給B。這個(gè)正在發(fā)送的數(shù)據(jù)包的seq也以它收到的數(shù)據(jù)包的ACK填充,ACK就以它收到的數(shù)據(jù)包的seq(70000)加上包的size(54)填充,即ack=70000+54-54(全是頭長,沒數(shù)據(jù)項(xiàng))。其實(shí)在握手和結(jié)束時(shí)確認(rèn)號(hào)應(yīng)該是對(duì)方序列號(hào)加1,傳輸數(shù)據(jù)時(shí)則是對(duì)方序列號(hào)加上對(duì)方攜帶應(yīng)用層數(shù)據(jù)的長度.如果從以太網(wǎng)包返回來計(jì)算所加的長度,就嫌走彎路了.另外,如果對(duì)方?jīng)]有數(shù)據(jù)過來,則自己的確認(rèn)號(hào)不變,序列號(hào)為上次的序列號(hào)加上本次應(yīng)用層數(shù)據(jù)發(fā)送長度.


上一篇:WebClient 支持 gzip, deflate

下一篇:Linq研究

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 勃利县| 祥云县| 天峻县| 肥城市| 荔波县| 巴林左旗| 永川市| 榆树市| 普陀区| 宜黄县| 潍坊市| 雷波县| 武安市| 康马县| 东安县| 丽江市| 和平区| 乐东| 尼木县| 合作市| 淮安市| 林周县| 鄱阳县| 息烽县| 高要市| 昔阳县| 昂仁县| 英吉沙县| 洛隆县| 平南县| 汉沽区| 西贡区| 张北县| 新民市| 桐乡市| 偏关县| 汕头市| 高淳县| 尼玛县| 灵台县| 莲花县|