<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你真的懂接口測(cè)試基礎(chǔ)之TCP、UDP和TCP/IP協(xié)議組嗎?

          共 4820字,需瀏覽 10分鐘

           ·

          2020-10-02 08:05

          Python接口自動(dòng)化測(cè)試框架實(shí)戰(zhàn)系列文章第1
          Python接口自動(dòng)化測(cè)試框架實(shí)戰(zhàn)系列文章第
          2

          基礎(chǔ)知識(shí)篇


          TCP與UDP的區(qū)別

          TCP 是面向連接的,UDP 是面向無(wú)連接的
          UDP程序結(jié)構(gòu)較簡(jiǎn)單
          TCP 是面向字節(jié)流的,UDP 是基于數(shù)據(jù)報(bào)的
          TCP 保證數(shù)據(jù)正確性,UDP 可能丟包
          TCP 保證數(shù)據(jù)順序,UDP 不保證


          TCP 為什么是可靠連接

          • 通過(guò) TCP 連接傳輸?shù)臄?shù)據(jù)無(wú)差錯(cuò),不丟失,不重復(fù),且按順序到達(dá)。

          • TCP 報(bào)文頭里面的序號(hào)能使 TCP 的數(shù)據(jù)按序到達(dá)

          • 報(bào)文頭里面的確認(rèn)序號(hào)能保證不丟包,累計(jì)確認(rèn)及超時(shí)重傳機(jī)制

          • TCP 擁有流量控制及擁塞控制的機(jī)制


          UDP 的主要應(yīng)用場(chǎng)景

          • 需要資源少,網(wǎng)絡(luò)情況穩(wěn)定的內(nèi)網(wǎng),或者對(duì)于丟包不敏感的應(yīng)用,比如 DHCP 就是基于 UDP 協(xié)議的。

          • 不需要一對(duì)一溝通,建立連接,而是可以廣播的應(yīng)用。因?yàn)樗幻嫦蜻B接,所以可以做到一對(duì)多,承擔(dān)廣播或者多播的協(xié)議。

          • 需要處理速度快,可以容忍丟包,但是即使網(wǎng)絡(luò)擁塞,也毫不退縮,一往無(wú)前的時(shí)候

          基于 UDP 的幾個(gè)例子

          • 直播。直播對(duì)實(shí)時(shí)性的要求比較高,寧可丟包,也不要卡頓的,所以很多直播應(yīng)用都基于 UDP 實(shí)現(xiàn)了自己的視頻傳輸協(xié)議
          • 實(shí)時(shí)游戲。游戲的特點(diǎn)也是實(shí)時(shí)性比較高,在這種情況下,采用自定義的可靠的 UDP 協(xié)議,自定義重傳策略,能夠把產(chǎn)生的延遲降到最低,減少網(wǎng)絡(luò)問(wèn)題對(duì)游戲造成的影響
          • 物聯(lián)網(wǎng)。一方面,物聯(lián)網(wǎng)領(lǐng)域中斷資源少,很可能只是個(gè)很小的嵌入式系統(tǒng),而維護(hù) TCP 協(xié)議的代價(jià)太大了;另一方面,物聯(lián)網(wǎng)對(duì)實(shí)時(shí)性的要求也特別高。比如 Google 旗下的 Nest 建立 Thread Group,推出了物聯(lián)網(wǎng)通信協(xié)議 Thread,就是基于 UDP 協(xié)議的

          運(yùn)行在TCP協(xié)議上的協(xié)議:

          • HTTP(Hypertext Transfer Protocol,超文本傳輸協(xié)議),主要用于普通瀏覽。
          • HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本傳輸協(xié)議),HTTP協(xié)議的安全版本。
          • FTP(File Transfer Protocol,文件傳輸協(xié)議),由名知義,用于文件傳輸。
          • POP3(Post Office Protocol, version 3,郵局協(xié)議),收郵件用。
          • SMTP(Simple Mail Transfer Protocol,簡(jiǎn)單郵件傳輸協(xié)議),用來(lái)發(fā)送電子郵件。
          • TELNET(Teletype over the Network,網(wǎng)絡(luò)電傳),通過(guò)一個(gè)終端(terminal)登陸到網(wǎng)絡(luò)。
          • SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陸用。

          運(yùn)行在UDP協(xié)議上的協(xié)議:

          • BOOTP(Boot Protocol,啟動(dòng)協(xié)議),應(yīng)用于無(wú)盤(pán)設(shè)備。
          • NTP(Network Time Protocol,網(wǎng)絡(luò)時(shí)間協(xié)議),用于網(wǎng)絡(luò)同步。
          • DHCP(Dynamic Host Configuration Protocol,動(dòng)態(tài)主機(jī)配置協(xié)議),動(dòng)態(tài)配置IP地址。

          TCP/IP 四層協(xié)議

          1.四層協(xié)議

          應(yīng)用層
          傳輸層
          網(wǎng)絡(luò)層
          數(shù)據(jù)鏈路層

          (物理層)


          2.TCP/IP分層的目的:
          (1)將網(wǎng)絡(luò)的通信過(guò)程劃分為小一些、簡(jiǎn)單一些的部件,有助于各個(gè)部件的開(kāi)發(fā)、設(shè)計(jì)和故障排除;
          (2)通過(guò)網(wǎng)絡(luò)組件的標(biāo)準(zhǔn)化,允許多個(gè)供應(yīng)商開(kāi)發(fā),鼓勵(lì)產(chǎn)業(yè)標(biāo)準(zhǔn)化;
          (3)允許各種類型的網(wǎng)絡(luò)硬件和軟件相互通信;
          (4)防止某一層的改動(dòng)影響到其它層,有利于開(kāi)發(fā)(主要)。


          3.各層的主要協(xié)議:

          (1)應(yīng)用層:?HTTP(超文本傳輸協(xié)議 80), HTTPS(更安全的超文本傳輸協(xié)議 443), FTP(文件傳輸協(xié)議), SMTP(簡(jiǎn)單郵件傳輸協(xié)議), DNS(域名服務(wù)),ping命令(調(diào)試網(wǎng)絡(luò)環(huán)境),OSPF(開(kāi)放最短路徑優(yōu)先);
          應(yīng)用層處理應(yīng)用程序的邏輯,且應(yīng)用層在用戶空間。

          (2)傳輸層:?UDP(用戶數(shù)據(jù)報(bào)協(xié)議), TCP(傳輸控制協(xié)議);
          傳輸層采用端到端的通信方式,其中:
          UDP:不可靠的,無(wú)連接的,基于數(shù)據(jù)報(bào)的協(xié)議;
          TCP:可靠的,面向連接的,基于字節(jié)流的協(xié)議;

          (3)網(wǎng)絡(luò)層:?IP(因特網(wǎng)協(xié)議), ICMP(控制報(bào)文協(xié)議), ARP(地址解析協(xié)議), RARP(反向地址轉(zhuǎn)換協(xié)議);
          網(wǎng)絡(luò)層主要實(shí)現(xiàn)數(shù)據(jù)包的選路和轉(zhuǎn)發(fā)。

          (4)數(shù)據(jù)鏈路層:?傳輸單位是幀,分為邏輯鏈路控制子層(LLC),媒體訪問(wèn)控制子層(MAC);
          數(shù)據(jù)鏈路層是網(wǎng)卡接口的驅(qū)動(dòng)程序,處理數(shù)據(jù)在物理媒介的傳輸

          (5)物理層:?傳輸單位是比特流
          傳輸?shù)闹饕橘|(zhì):集線器、中繼器、調(diào)制解調(diào)器、網(wǎng)線、雙絞線、同軸電纜。


          一次完整的HTTP請(qǐng)求與響應(yīng)涉及了哪些知識(shí)?
          答:包括TCP三次握手和TCP的四次揮手


          TCP 三次握手 建立連接

          所有的問(wèn)題,首先都要建立連接,所以首先是連接維護(hù)的問(wèn)題(而UDP是不需要確認(rèn)的,直接傳輸數(shù)據(jù))
          TCP 的建立連接稱為三次握手,可以簡(jiǎn)單理解為下面這種情況:

          A:您好,我是 A
          B:您好 A,我是 B
          A:您好 B

          至于為什么是三次握手我這里就不細(xì)講了,可以看其他人的博客,總結(jié)的話就是通信雙方全都有來(lái)有回
          對(duì)于 A 來(lái)說(shuō)它發(fā)出請(qǐng)求,并收到了 B 的響應(yīng),對(duì)于 B 來(lái)說(shuō)它響應(yīng)了 A 的請(qǐng)求,并且也接收到了響應(yīng)。

          TCP 的三次握手除了建立連接外,主要還是為了溝通 TCP 包的序號(hào)問(wèn)題。

          A 告訴 B,我發(fā)起的包的序號(hào)是從哪個(gè)號(hào)開(kāi)始的,B 同樣也告訴 A,B 發(fā)起的 包的序號(hào)是從哪個(gè)號(hào)開(kāi)始的。
          雙方建立連接之后需要共同維護(hù)一個(gè)狀態(tài)機(jī),在建立連接的過(guò)程中,雙方的狀態(tài)變化時(shí)序圖如下所示:
          狀態(tài)變化時(shí)序圖

          第一次握手:
          客戶端想要連接,創(chuàng)建傳輸控制塊TCB,狀態(tài)變?yōu)橹鲃?dòng)打開(kāi)。發(fā)送給服務(wù)器不包含數(shù)據(jù)內(nèi)容的連接請(qǐng)求報(bào)文。該請(qǐng)求報(bào)文首部中同步位SYN=1,同時(shí)選擇一個(gè)初始序列號(hào)seq=x(攜帶了x個(gè)字節(jié))。然后客戶端進(jìn)入 SYN-SENT (同步已發(fā)送)狀態(tài),告訴服務(wù)器我想和你同步連接。TCP規(guī)定,SYN報(bào)文段(SYN=1的報(bào)文段)不能攜帶數(shù)據(jù),但需要消耗掉一個(gè)序號(hào)。

          第二次握手:
          TCP服務(wù)器收到連接請(qǐng)求報(bào)文,如果同意連接則發(fā)送確認(rèn)報(bào)文。為了保證下次客戶端發(fā)送報(bào)文時(shí)seq序列號(hào)是正確的,需要發(fā)送確認(rèn)號(hào)ack=x+1,同時(shí)確認(rèn)號(hào)ack要生效必須發(fā)送ACK=1,再加上同步位SYN=1,序列號(hào)seq=y(攜帶Y個(gè)字節(jié)),然后服務(wù)器也進(jìn) 入SYN-RCVD (同步已收到) 狀態(tài),完成同步連接。這個(gè)報(bào)文也是SYN報(bào)文,也不能攜帶數(shù)據(jù),但是同樣要消耗一個(gè)序號(hào)。?

          第三次握手:
          ?客戶端收到確認(rèn)后還要再向服務(wù)器發(fā)送確認(rèn)報(bào)文。確認(rèn)報(bào)文已經(jīng)不是請(qǐng)求報(bào)文SYN了,不再包含SYN同步位。發(fā)送的內(nèi)容有序列號(hào)seq=x+1(和第二次握手的ACK對(duì)應(yīng)),確認(rèn)號(hào)ack=y+1,ACK=1。客戶端發(fā)送確認(rèn)報(bào)文以后進(jìn)入ESTABLISHED(已建立)狀態(tài),服務(wù)器接收到確認(rèn)報(bào)文以后也進(jìn)入ESTABLISHED狀態(tài)。此時(shí)TCP連接完成建立。

          然后就可以發(fā)送TCP接收到Http的數(shù)據(jù)包后生成的新數(shù)據(jù)包了!

          TCP 四次揮(分)手 斷開(kāi)連接

          說(shuō)完建立連接,再說(shuō)下斷開(kāi)連接,也被稱為四次揮手,可以簡(jiǎn)單理解如下

          A:B 啊,我不想玩了
          B:哦,你不想玩了啊,我知道了
          這個(gè)時(shí)候,只是 A 不想玩了,即不再發(fā)送數(shù)據(jù),但是 B 可能還有未發(fā)送完的數(shù)據(jù),所以需要等待 B 也主動(dòng)關(guān)閉。
          B:A 啊,好吧,我也不玩了,拜拜
          A:好的,拜拜

          這樣整個(gè)連接就關(guān)閉了,當(dāng)然上面只是正常的狀態(tài),也有些非正常的狀態(tài)(比如 A 說(shuō)完不玩了,直接跑路,B 發(fā)起的結(jié)束得不到 A 的回答,不知道該怎么辦或則 B 直接跑路 A 不知道該怎么辦),TCP 協(xié)議專門(mén)設(shè)計(jì)了幾個(gè)狀態(tài)來(lái)處理這些非正常狀態(tài)


          解讀:斷開(kāi)的時(shí)候,當(dāng) A 說(shuō)不玩了,就進(jìn)入 FIN_WAIT_1 的狀態(tài),B 收到 A 不玩了的消息后,進(jìn)入 CLOSE_WAIT 的狀態(tài)。

          A 收到 B 說(shuō)知道了,就進(jìn)入 FIN_WAIT_2 的狀態(tài),如果 B 直接跑路,則 A 永遠(yuǎn)處于這個(gè)狀態(tài)。TCP 協(xié)議里面并沒(méi)有對(duì)這個(gè)狀態(tài)的處理,但 Linux 有,可以調(diào)整 tcp_fin_timeout 這個(gè)參數(shù),設(shè)置一個(gè)超時(shí)時(shí)間。
          如果 B 沒(méi)有跑路,A 接收到 B 的不玩了請(qǐng)求之后,從 FIN_WAIT_2 狀態(tài)結(jié)束,按說(shuō) A 可以跑路了,但是如果 B 沒(méi)有接收到 A 跑路的 ACK 呢,就再也接收不到了,所以這時(shí)候 A 需要等待一段時(shí)間,因?yàn)槿绻?B 沒(méi)接收到 A 的 ACK 的話會(huì)重新發(fā)送給 A,所以 A 的等待時(shí)間需要足夠長(zhǎng)。
          第一次揮手:
          客戶端從ESTABLISHED狀態(tài)變?yōu)橹鲃?dòng)關(guān)閉狀態(tài),客戶端發(fā)送請(qǐng)求釋放連接報(bào)文給服務(wù)器,F(xiàn)IN=1,seq=u(等于前面已經(jīng)傳送過(guò)來(lái)的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1),此時(shí)客戶端進(jìn)入FIN-WAIT-1(終止等待1)狀態(tài)。?TCP規(guī)定,F(xiàn)IN報(bào)文段即使不攜帶數(shù)據(jù),也要消耗一個(gè)序號(hào)。

          第二次揮手:
          服務(wù)器接收到客戶端發(fā)來(lái)的請(qǐng)求釋放報(bào)文以后,發(fā)送確認(rèn)報(bào)文告訴客戶端我收到了你的請(qǐng)求,內(nèi)容差不多就是seq=v,ack=u+1,ACK=1,此時(shí)服務(wù)器進(jìn)入CLOSE-WAIT(關(guān)閉等待)狀態(tài)。
          為什么是CLOSE-WAIT狀態(tài)?可能自己服務(wù)器這端還有數(shù)據(jù)沒(méi)有發(fā)送完,所以這個(gè)時(shí)候整個(gè)TCP的連接就變成了半關(guān)閉狀態(tài)。服務(wù)器還能發(fā)送數(shù)據(jù),客戶端也能接收數(shù)據(jù),但客戶端不能再發(fā)送數(shù)據(jù)了,只能發(fā)送確認(rèn)報(bào)文。
          客戶端接收到服務(wù)器傳來(lái)的確認(rèn)報(bào)文以后,進(jìn)入?FIN-WAIT-1(終止等待2)狀態(tài),等待服務(wù)器發(fā)送連接釋放的報(bào)文(在這之前,還需要接受服務(wù)器沒(méi)有發(fā)送完的最后的數(shù)據(jù))。?

          第三次揮手:
          服務(wù)器所有的數(shù)據(jù)都發(fā)送完了,認(rèn)為可以關(guān)閉連接了,于是向客戶端發(fā)送連接釋放報(bào)文,內(nèi)容FIN=1,seq=w,ack=u+1(客戶端沒(méi)發(fā)送消息,所以提醒客戶端下一次還是從u+1開(kāi)始發(fā)送序列),ACK=1。此時(shí)服務(wù)器進(jìn)入了 LAST-ACK(最后確認(rèn))狀態(tài),等待客戶端發(fā)送確認(rèn)報(bào)文。

          第四次揮手:
          客戶端接收到了服務(wù)器發(fā)送的連接釋放報(bào)文,必須發(fā)出確認(rèn)。確認(rèn)報(bào)文seq=u+1,ack=w+1,ACK=1。此時(shí)客戶端進(jìn)入 TIME-WAIT (時(shí)間等待)狀態(tài),但是沒(méi)有立馬關(guān)閉。此時(shí)TCP連接還沒(méi)有釋放,必須經(jīng)過(guò)2??MSL(最長(zhǎng)報(bào)文段壽命)的時(shí)間后,當(dāng)客戶端撤銷相應(yīng)的TCB后,才進(jìn)入CLOSED狀態(tài)。



          Appium往期推文:

          1. Appium移動(dòng)端自動(dòng)化測(cè)試--基礎(chǔ)預(yù)熱
          2. Appium移動(dòng)端自動(dòng)化測(cè)試--搭建測(cè)試環(huán)境
          3. Appium移動(dòng)端自動(dòng)化測(cè)試--錄制測(cè)試用例并運(yùn)行
          4. Appium移動(dòng)端自動(dòng)化測(cè)試--使用IDE編輯并強(qiáng)化腳本
          5. Appium移動(dòng)端自動(dòng)化測(cè)試--控件定位方法
          6. Appium移動(dòng)端自動(dòng)化測(cè)試--元素操作與觸摸動(dòng)作
          7. Appium移動(dòng)端自動(dòng)化測(cè)試--搭建模擬器和真機(jī)環(huán)境
          8. Appium移動(dòng)端自動(dòng)化測(cè)試--測(cè)試用例改造
          9. Appium移動(dòng)端自動(dòng)化測(cè)試--capability使用和常用設(shè)備交互命令

          送書(shū)活動(dòng):

          言+分享贈(zèng)書(shū)
          免費(fèi)贈(zèng)送技術(shù)類圖書(shū),無(wú)套路,純免費(fèi)!

          北大出版社《Python自動(dòng)化測(cè)試實(shí)戰(zhàn)》

          (活動(dòng)碼004)
          點(diǎn)擊下圖留言送書(shū)


          文章合集

          Selenium?|?Appium??|?Jenkins??|??Jmeter?

          軟件測(cè)試方法匯總?|?Postman接口參數(shù)化?|?測(cè)試用例設(shè)計(jì)?|?安卓APP抓包

          視頻教程

          Selenium?|?Appium?|?Jenkins?|?Jmeter


          微信群:
          軟件自動(dòng)化測(cè)試交流群
          已創(chuàng)建,公號(hào)回復(fù)入群即可獲取入群二維碼。

          瀏覽 81
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品久久久久久久久久久久久久久久 | 伊人性视频 | 国产色情性黄 片免费视频 | 人人射视频 | 久久一卡二卡 |