? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 一些容易忘的概念 ?
1.三次握手四次揮手:?
????????????????????????簡明理解三次握手和四次揮手 - CSDN博客
? ? ? ? ? ? ? ? ? ? ? ? ?? https://blog.csdn.net/zixiaomuwu/article/details/60965466
問題1: 為什么要三次握手?
????三次握手的目的是建立可靠的通信信道,說到通訊,簡單來說就是數(shù)據(jù)的發(fā)送與接收,而三次握手最主要的目的就是雙方確認自己與對方的發(fā)送與接收機能正常。
????????第一次握手:Client什么都不能確認;Server確認了對方發(fā)送正常
??????? 第二次握手:Client確認了:自己發(fā)送、接收正常,對方發(fā)送、接收正常;Server確認了:自己接收正常,對方發(fā)送正常
??????? 第三次握手:Client確認了:自己發(fā)送、接收正常,對方發(fā)送、接收正常;Server確認了:自己發(fā)送、接收正常,對方發(fā)送接收正常
????????所以三次握手就能確認雙發(fā)收發(fā)功能都正常,缺一不可。
問題2:為什么要發(fā)送特定的數(shù)據(jù)包,隨便發(fā)不行嗎?
????????三次握手的另外一個目的就是確認雙方都支持TCP,告知對方用TCP傳輸。
第一次握手:Server 猜測Client可能要建立TCP請求,但不確定,因為也可能是Client亂發(fā)了一個數(shù)據(jù)包給自己。
第二次握手:通過ack=J+1,Client知道Server是支持TCP的,且理解了自己要建立TCP連接的意圖。
第三次握手:通過ack=K+1,Server知道Client是支持TCP的,且確實是要建立TCP連接。
問題3:上圖中的SYN和ACK是什么?
答:SYN是標志位,SYN=1表示請求連接;
ACK其實就是ack后面加上的那個數(shù),真正發(fā)送的時候不單獨發(fā)ACK,只發(fā)ack。
問題4: 為什么要四次揮手?
答:根本原因是,一方發(fā)送FIN只表示自己發(fā)完了所有要發(fā)的數(shù)據(jù),但還允許對方繼續(xù)把沒發(fā)完的數(shù)據(jù)發(fā)過來。
??????? 舉個例子:A和B打電話,通話即將結(jié)束后,A說“我沒啥要說的了”,B回答“我知道了”,但是B可能還會有要說的話,A不能要求B跟著自己的節(jié)奏結(jié)束通話,于是B可能又巴拉巴拉說了一通,最后B說“我說完了”,A回答“知道了”,這樣通話才算結(jié)束。
問題2:為什么雙方要發(fā)送這樣的數(shù)據(jù)包?
答:和握手的情況類似,只是為了讓對方知曉自己理解了對方的意圖。
2.python垃圾回收機制
? ? ?? 1. python采用的是
引用計數(shù)機制為主,標記-清除和分代收集兩種機制為輔的策略。? ? ? ? 2.python里每一個東西都是對象,它們的核心就是一個結(jié)構(gòu)體:PyObject
3.當引用計數(shù)為0時,該對象生命就結(jié)束了。
引用計數(shù)機制的缺點:維護引用計數(shù)消耗資源循環(huán)引用
list1 = []
list2 = []
list1.append(list2)list2.append(list1)