<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è)試開發(fā)面經(jīng)(二)

          共 5373字,需瀏覽 11分鐘

           ·

          2021-04-22 17:57

          點(diǎn)擊藍(lán)字關(guān)注我們,獲取更多面經(jīng)








          tcp三握四揮




          最初,客戶機(jī)A與服務(wù)器B的TCP進(jìn)程都處于 CLOSED 狀態(tài)。

          然后由服務(wù)器B先創(chuàng)建TCB(傳輸控制塊),進(jìn)入到 LISTEN 狀態(tài),準(zhǔn)備隨時(shí)響應(yīng)客戶請(qǐng)求

          下面開始三握:

          第一次握手

            A的TCP進(jìn)程創(chuàng)建TCB(傳輸控制塊),然后向B發(fā)出連接請(qǐng)求報(bào)文段。段首部中的 同步位SYN=1,同時(shí)選擇一個(gè)初始序列號(hào)seq=x;(SYN報(bào)文段不能攜帶數(shù)據(jù),但需要消耗一個(gè)序列號(hào))這時(shí)客戶端A進(jìn)入到 SYN-SENT(同步已發(fā)送)狀態(tài)。


          第二次握手

            B收到連接請(qǐng)求報(bào)文段,如果同意建立連接,則向A發(fā)送確認(rèn)。在確認(rèn)報(bào)文段中 同步位SYN=1、確認(rèn)位ACK=1、確認(rèn)號(hào)ack=x+1(對(duì)接收的序列號(hào)seq=x的報(bào)文段進(jìn)行確認(rèn),并期望接收的下一個(gè)報(bào)文段的序號(hào)seq=x+1),同時(shí)也為自己選擇一個(gè)初始序列號(hào)seq=y,這時(shí)服務(wù)器B進(jìn)入 SYN-RCVID 狀態(tài)。

            注:該報(bào)文段是ACK報(bào)文段的同時(shí)也是SYN報(bào)文段,所以該報(bào)文段也不能攜帶數(shù)據(jù)。


          第三次握手

            A收到B的確認(rèn)以后,再向B發(fā)出確認(rèn)。確認(rèn)報(bào)文 ACK=1、確認(rèn)號(hào)ack=y+1(對(duì)接收的序列號(hào)seq=y的報(bào)文段進(jìn)行確認(rèn),并期望接收的下一個(gè)報(bào)文段的序號(hào)seq=y+1)。這時(shí)A進(jìn)入到 ESTAB-LISHED 狀態(tài)。當(dāng)B接收到A的確認(rèn)后,也進(jìn)入 ESTAB-LISHED 狀態(tài)。連接建立完成

            注:ACK報(bào)文段可以攜帶數(shù)據(jù),但如果不攜帶數(shù)據(jù)則不消耗序列號(hào),在這種情況下,下一個(gè)報(bào)文段的序號(hào)不變,seq仍是x+1。


          下面對(duì) 同步位SYN、確認(rèn)位ACK、確認(rèn)號(hào)ack 以及 三次握手時(shí)出現(xiàn)的五個(gè)狀態(tài) 進(jìn)行下解釋

          同步位SYN:在建立連接時(shí)用來(lái)同步序號(hào);當(dāng)SYN=1,ACK=0時(shí),表明這是一個(gè)連接請(qǐng)求報(bào)文段。當(dāng)SYN=1,ACK=1時(shí),表明這是一個(gè)連接接收?qǐng)?bào)文段;

          確認(rèn)位ACK:當(dāng)ACK=1時(shí),確認(rèn)號(hào)ack才生效。在請(qǐng)求建立連接后(第一次握手后),所有的報(bào)文段都必須把ACK置1。

          確認(rèn)號(hào)ack:期望收到的下一個(gè)報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào),比如:B正確接收到了A發(fā)送過(guò)來(lái)的一個(gè)報(bào)文段,序號(hào)是501,數(shù)據(jù)長(zhǎng)度是200字節(jié);這表明B正確接收到了序號(hào)501-700的數(shù)據(jù)。所以,B期望的下一個(gè)序號(hào)是701,于是B在發(fā)送給A的確認(rèn)報(bào)文段中確認(rèn)號(hào)ack=701。


          CLOSED:初始關(guān)閉狀態(tài)

          LISTEN:監(jiān)聽狀態(tài),等待客戶連接

          SYB-SENT:同步已發(fā)送

          SYN-RCVD:同步已接收

          ESTAB-LISHED:已建立連接


          為什么不是兩次握手?

          這主要是為了防止已失效的連接請(qǐng)求報(bào)文段突然又傳送到了 B,從而造成資源浪費(fèi)。

          考慮一種異常情況,即 A 發(fā)出的第一個(gè)連接請(qǐng)求報(bào)文段并沒(méi)有丟失,而是在某些網(wǎng)絡(luò)結(jié)點(diǎn)長(zhǎng)時(shí)間的滯留了,以致延誤到連接釋放以后的某個(gè)時(shí)間才到達(dá) B。本來(lái)這是一個(gè)早已失效的報(bào)文段,但 B 收到此失效的連接請(qǐng)求報(bào)文段后,就誤認(rèn)為是 A 又發(fā)出了一次新的連接請(qǐng)求,于是就向 A 發(fā)出確認(rèn)報(bào)文段,同意建立連接。假定不采用報(bào)文握手,那么只要 B 發(fā)出確認(rèn),新的連接就建立了。

          由于現(xiàn)在 A 并沒(méi)有發(fā)出建立連接的請(qǐng)求,因此不會(huì)理睬 B 的確認(rèn),也不會(huì)向 B 發(fā)送數(shù)據(jù),但 B 卻認(rèn)為新的運(yùn)輸連接已經(jīng)建立了,并一直等待 A 發(fā)來(lái)數(shù)據(jù),B 的許多資源就這樣浪費(fèi)了。

          采用三次握手的辦法,可以防止上述現(xiàn)象的發(fā)生,例如在剛才的異常情況下,A 不會(huì)向 B 的確認(rèn)發(fā)出確認(rèn),B 由于收不到確認(rèn),就知道 A 并沒(méi)有要求建立連接。


          為什么不是四次握手?

          完全可靠的通信協(xié)議是根本不存在的,我們?nèi)魏蔚耐ㄐ艆f(xié)議都是在接受這樣的現(xiàn)實(shí)情況之上進(jìn)行的。三次握手后,A 和 B 至少可以確認(rèn)之前的通信情況,但無(wú)法確認(rèn)之后的情況。在這個(gè)道理上說(shuō),無(wú)論是四次還是五次或是更多次都是徒勞的。


          A與B想要斷開連接,需要經(jīng)過(guò)四次揮手


          第一次揮手:A先發(fā)送連接釋放報(bào)文段,段首部的終止控制位FIN=1,序號(hào)seq=u(等于A前面發(fā)送數(shù)據(jù)的最后一個(gè)序號(hào)加1);然后A進(jìn)入 FIN-WAIT-1(終止等待1)狀態(tài),等待B的確認(rèn)。A

            注:FIN報(bào)文段即使不攜帶數(shù)據(jù)也要消耗一個(gè)序列。


          第二次揮手:B收到A的連接釋放報(bào)文段后,立刻發(fā)出確認(rèn)報(bào)文段,確認(rèn)號(hào)ack=u+1,序號(hào)seq=v(等于B前面發(fā)送數(shù)據(jù)的最后一個(gè)序號(hào)加1);然后B進(jìn)入CLOSE-WAIT(關(guān)閉等待)狀態(tài)。

            注:TCP服務(wù)器這時(shí)會(huì)通知高層應(yīng)用進(jìn)程,從A到B這個(gè)方向的連接就斷開了,這時(shí)TCP連接處于半關(guān)閉(half-close)狀態(tài);但B到A這個(gè)方向的連接并沒(méi)有斷,B仍然可以向A發(fā)送數(shù)據(jù)。


          第三次揮手:A收到B的確認(rèn)報(bào)文段后進(jìn)入到 FIN-WAIT-2(終止等待2)狀態(tài),繼續(xù)等待B發(fā)出連接釋放報(bào)文段;若B已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送,B就會(huì)向A發(fā)送連接釋放報(bào)文段,段首部的終止控制位 FIN=1,序號(hào)seq=w(半關(guān)閉狀態(tài)可能又發(fā)送了一些數(shù)據(jù)),確認(rèn)號(hào)ack=u+1,這時(shí)B進(jìn)入LAST-ACK(最后確認(rèn))狀態(tài),等待A的確認(rèn)。

            特別注意:確認(rèn)號(hào)ack沒(méi)有變,仍然為上次發(fā)送過(guò)的確認(rèn)號(hào)u+1。


          第四次揮手:A收到B的連接釋放報(bào)文段并發(fā)出確認(rèn),確認(rèn)段中 確認(rèn)位ACK=1,確認(rèn)號(hào)ack=w+1,序號(hào)seq=u+1;然后A進(jìn)入到TIME-WAIT(時(shí)間等待)狀態(tài)。當(dāng)B再接收到該確認(rèn)段后,B就進(jìn)入CLOSED狀態(tài)。

            注:處于TIME-WAIT狀態(tài)的A必須等待2MSL時(shí)間后,才會(huì)進(jìn)入CLOSED狀態(tài)。MSL(Maximum Segment Lifetime)最長(zhǎng)報(bào)文段壽命,RFC 793 建議設(shè)為兩分鐘,對(duì)于現(xiàn)在的網(wǎng)絡(luò),MSL=2分鐘可能太長(zhǎng)了一些,我們可根據(jù)具體情況使用更小的MSL值。


          四揮的七個(gè)狀態(tài):

          ESTAB-LISHED:已建立連接

          FIN-WAIT-1:終止等待1

          CLOSE-WAIT:關(guān)閉等待

          FIN-WAIT-2:終止等待2

          LAST-ACK:最后確認(rèn)

          TIME-WAIT:時(shí)間等待

          CLOSED:關(guān)閉


          為什么A要等待2MSL的時(shí)間?

          為了保證A發(fā)送的最后一個(gè)報(bào)文段能夠到達(dá)B。因?yàn)檫@個(gè) ACK 有可能丟失,從而導(dǎo)致處在 LAST-ACK 狀態(tài)的服務(wù)器收不到對(duì) FIN-ACK 的確認(rèn)報(bào)文。服務(wù)器會(huì)超時(shí)重傳這個(gè) FIN-ACK,接著客戶端再重傳一次確認(rèn),重新啟動(dòng)時(shí)間等待計(jì)時(shí)器。最后客戶端和服務(wù)器都能正常的關(guān)閉。假設(shè)客戶端不等待 2MSL,而是在發(fā)送完 ACK 之后直接釋放關(guān)閉,一旦這個(gè) ACK 丟失的話,服務(wù)器就無(wú)法正常的進(jìn)入關(guān)閉連接狀態(tài)。

          可以防止已失效的報(bào)文段。客戶端在發(fā)送最后一個(gè) ACK 之后,再經(jīng)過(guò)經(jīng)過(guò) 2MSL,就可以使本連接持續(xù)時(shí)間內(nèi)所產(chǎn)生的所有報(bào)文段都從網(wǎng)絡(luò)中消失,從保證在關(guān)閉連接后,不會(huì)有仍在網(wǎng)絡(luò)中滯留的報(bào)文段去騷擾服務(wù)器。


          linux服務(wù)器出現(xiàn)大量 TIME-WAIT 狀態(tài)的TCP連接 的處理方法

          通過(guò)調(diào)整內(nèi)核參數(shù)解決,

          vi /etc/sysctl.conf 


          編輯文件,加入以下內(nèi)容:

          net.ipv4.tcp_syncookies = 1

          net.ipv4.tcp_tw_reuse = 1

          net.ipv4.tcp_tw_recycle = 1

          net.ipv4.tcp_fin_timeout = 30


          然后執(zhí)行 /sbin/sysctl -p 讓參數(shù)生效。 

          net.ipv4.tcp_syncookies = 1 表示開啟SYN Cookies。當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時(shí),啟用cookies來(lái)處理,可防范少量SYN攻擊,默認(rèn)為0,表示關(guān)閉;

          net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將 TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉;

          net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中 TIME-WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉。

          net.ipv4.tcp_fin_timeout 修改系統(tǒng)默認(rèn)的 TIMEOUT 時(shí)間。


          為什么要四次揮手?

          A 向 B 發(fā)送一個(gè)連接釋放請(qǐng)求報(bào)文,代表 A 的數(shù)據(jù)傳送完了,請(qǐng)求釋放連接;

          B 收到后,B 立即向 A 發(fā)送一個(gè)確認(rèn)報(bào)文,代表 B 已經(jīng)知道 A 沒(méi)有數(shù)據(jù)要傳送了,但是 B 可能還有數(shù)據(jù)要向 A 傳送;

          B 的數(shù)據(jù)傳送完后,向 A 發(fā)送一個(gè)連接釋放請(qǐng)求報(bào)文,代表 B 的數(shù)據(jù)也傳送完了,請(qǐng)求釋放連接;

          A 收到后,也立即向 B 發(fā)送一個(gè)確認(rèn)報(bào)文,同時(shí)等待 2MSL 后,連接斷開。

            注:TCP 是全雙工通信,因此必須兩個(gè)方向分別斷開連接。


          為什么建立連接三次,斷開連接四次?

          因?yàn)榻⑦B接時(shí),服務(wù)器的確認(rèn) ACK 和請(qǐng)求同步 SYN 可以放在一個(gè)報(bào)文里,而斷開連接時(shí),服務(wù)器可能還有數(shù)據(jù)要傳送,因此,必須先發(fā)一個(gè)客戶端斷開連接請(qǐng)求的確認(rèn) ACK,以免客戶端超時(shí)重傳,待服務(wù)器的數(shù)據(jù)傳送完畢后,再發(fā)送一個(gè)請(qǐng)求斷開連接的報(bào)文段。

          斷開時(shí)次數(shù)比連接多一次,是因?yàn)檫B接過(guò)程,通信只需要處理「連接」,而斷開過(guò)程,通信需要處理「數(shù)據(jù)+連接」。







          什么是幻讀




              1、幻讀:指的是一個(gè)事務(wù)在前后兩次查詢同一個(gè)范圍的時(shí)候,后一次查詢看到了前一次查詢沒(méi)有看到         的數(shù)據(jù)行。

              2、innodb 默認(rèn)是可重復(fù)讀隔離級(jí)別

              3、在可重復(fù)讀隔離級(jí)別下,普通的傳是快照讀,是不會(huì)看到別的事務(wù)插入的數(shù)據(jù)。只有幻讀才能看到

              4、幻讀專指“新插入的行”

              5、幻讀引發(fā)的問(wèn)題:(1)語(yǔ)義有問(wèn)題.(2)數(shù)據(jù)不一致性

              6、如何解決幻讀,innodb引入了間隙鎖,它加了7個(gè)間隙鎖,防止新數(shù)據(jù)插入。一般無(wú)特殊說(shuō)明都是左閉區(qū)間,右開區(qū)間,即前開后閉

              7、除此之外也可以把隔離級(jí)別改為讀提交,同時(shí)配合binlog_format=row來(lái)進(jìn)行組合使用。

              8、查看當(dāng)前庫(kù)使用的隔離級(jí)別:select @@tx_isolation;

              9、事務(wù)隔離級(jí)別

                  事務(wù)隔離級(jí)別                                   臟讀  不可重復(fù)讀   幻讀

                  讀未提交(read-uncommitted)      是          是            是

                  不可重復(fù)讀(read-committed)       否          是            是

                  可重復(fù)讀(repeatable-read)           否          否            是

                  串行化(serializable)                      否          否            否









          更多面經(jīng)





          360-測(cè)試開發(fā)面經(jīng)(一)


          百度-測(cè)試開發(fā)面經(jīng)(一)


          字節(jié)跳動(dòng)-測(cè)試開發(fā)面經(jīng)(一)


              掃描二維碼

             獲取更多面經(jīng)

            扶搖就業(yè)  


          瀏覽 23
          點(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>
                  91麻豆精品天天摸夜夜摸 | 欧美成人性爱精品 | 操老女人视频 | 五月天操逼网站 | 青青草在线视频免费在线观看 |