网络 数据库
網(wǎng)絡(luò)相關(guān) 數(shù)據(jù)庫
三次握手
客戶端發(fā)送帶SYN=1 seq=x的包給服務(wù)器端,進(jìn)入syn_send狀態(tài)。
服務(wù)器端接收到客戶端的包后,檢查到SYN=1時表明對方要請求連接,服務(wù)器端同意連接即發(fā)送一個帶ACK=1,ack=x+1,SYN=1,seq=k的包給客戶端,進(jìn)入syn_recv狀態(tài)。
客戶端接收檢查包信息。發(fā)送一個帶ACK=1,ack=k+1,seq=y+1的包給服務(wù)器,進(jìn)入established確認(rèn)狀態(tài),服務(wù)器端接收后也進(jìn)入確認(rèn)狀態(tài)。
擴(kuò)展:
1,為什么是三次而不是兩次?
因?yàn)閮纱蔚脑捴荒茏C明客戶端知道服務(wù)器端的接收和發(fā)送功能是正常的,不能說明服務(wù)端知道客戶端能有效的進(jìn)行接收,服務(wù)端不確定客戶端是否同意它的連接請求。另一方面,如果只有兩次,假設(shè)客戶端發(fā)送了一次請求包,但由于某種原因延遲了到達(dá)服務(wù)端的時間,再發(fā)送了一次請求包,這時先到達(dá)服務(wù)端,服務(wù)端確認(rèn)并發(fā)送確認(rèn)包后由于客戶端沒有響應(yīng),而此時延遲的包到達(dá)了服務(wù)器端,服務(wù)器會認(rèn)為之前的連接失敗,客戶端重新發(fā)送了請求,于是以此次連接為基礎(chǔ)雙方傳輸數(shù)據(jù)時,客戶端不承認(rèn)這個連接,雙方進(jìn)入等待狀態(tài),直到連接結(jié)束。
3,TCP報文格式
| 源端口 |目的端口 |
確認(rèn)號
確認(rèn)序號
數(shù)據(jù)偏移4|保留6|URG|ACK|PSH|RST|SYN|FIN|窗口
校驗(yàn)和|緊急指針
選項(xiàng)和填充
4,SYN網(wǎng)絡(luò)攻擊問題-典型的DDOS網(wǎng)絡(luò)攻擊(客戶端請求連接,服務(wù)器響應(yīng)連接,客戶端一直未響應(yīng)連接)
攻擊者偽造大量的SYN+不存在的ip的包發(fā)送給服務(wù)器,服務(wù)器響應(yīng),但因?yàn)槭莻卧斓膇p所以一直停留在SYN_RECEVED狀態(tài)。
解決:排查偽造包,輸入netstat -n -p TCP或netstat -nap | grep SYN_RECV可以查看大量停留在SYN_RECEVED狀態(tài)且隨機(jī)的ip。
注:也是由于這個原因,所以在確認(rèn)連接前不連帶數(shù)據(jù)一起傳輸?shù)脑?#xff0c;避免大量的偽造數(shù)據(jù)占據(jù)空間。
四次揮手
客戶端(FIN=1,seq=y)>FIN_WAIT1
服務(wù)端接收后發(fā)送ACK=1,ack=y+1進(jìn)入closed_wait,客戶端接收到進(jìn)入FIN_WAIT2
服務(wù)端傳輸數(shù)據(jù)結(jié)束后,發(fā)送FIN=1,seq=k,進(jìn)入last_ack
客戶端接收檢查,發(fā)送ACK=1,ack=k+1回去后,進(jìn)入TIME_WAIT狀態(tài),等待2MSL時間 服務(wù)端接收到后雙方進(jìn)入CLOSED狀態(tài)
http:
應(yīng)用層的超文本傳輸協(xié)議,基于請求和響應(yīng)的,無狀態(tài)的,常基于tcp/ip協(xié)議。提供一種用于發(fā)布和接收HTML頁面的方法。
http報文的格式分請求報文和響應(yīng)報文。請求報文分請求行,首部行,實(shí)體主體,其中請求行包括了方法,url,版本,crlf回車換行。響應(yīng)報文包括了狀態(tài)行,首部行,實(shí)體主體,狀態(tài)行包括了版本,狀態(tài)碼,狀態(tài)短語,crlf。
crlf攻擊:
通過header每一行后有一個crlf,header和body之間兩個crlf,通過在回車換行編碼%0d%0a來給header添加一些屬性,比如設(shè)置cookie,設(shè)置X_XSS_protected:0就可以對xss攻擊不攔截了。
crlf就是回車換行的意思,cr回車lf換行
http的特點(diǎn):
1,無狀態(tài),不會對客戶端的狀態(tài)進(jìn)行存儲,沒有記憶功能
2,無連接,由于無狀態(tài)特征,每次請求都需要重新連接,如果客戶端向同一個資源進(jìn)行請求,服務(wù)端不知道,都會做新的響應(yīng)。
3,基于請求和響應(yīng)。
4,明文傳輸,不能對對方進(jìn)行身份認(rèn)證,不能保證數(shù)據(jù)的完整性
5,簡單快速,靈活。
解決Http無狀態(tài):1,增加cookie/session機(jī)制保存狀態(tài)
2,設(shè)置持久連接,在請求首部字段添加connection:keep-alive代表持久連接
https
是帶ssl加密協(xié)議的http。
特點(diǎn):
1,內(nèi)容加密。2,使用證書認(rèn)證身份。3保護(hù)數(shù)據(jù)完整性,防止被冒充或篡改數(shù)據(jù)。
SSL,https是如何進(jìn)行封裝的?
ssl連接過程: 1,客戶端請求連接到服務(wù)器的443端口,客戶端發(fā)送隨機(jī)數(shù)1和一組加密算法給服務(wù)端
2,服務(wù)端發(fā)送隨機(jī)數(shù)2和客戶端提供的加密算法(客戶端加密算法的子集)給客戶端響應(yīng)握手信息
3,服務(wù)端發(fā)送證書信息給客戶端
4,客戶端檢查證書信息,通過就產(chǎn)生隨機(jī)數(shù)3(預(yù)主秘鑰),使用公鑰加密發(fā)送給服務(wù)器。
5,服務(wù)端使用私鑰解密該秘鑰。使用該秘鑰與之前協(xié)商的隨機(jī)數(shù)12組裝成會話秘鑰。(使用隨機(jī)數(shù)12是為了使每次的會話秘鑰都不同的概率增大)
6,客戶端使用之前協(xié)商的隨機(jī)數(shù)12,和秘鑰組裝成會話秘鑰,加密傳輸數(shù)據(jù)發(fā)送給服務(wù)端,檢驗(yàn)是否正常。
7,服務(wù)端使用會話秘鑰加密信息也發(fā)送給客戶端。
補(bǔ)充:
服務(wù)端會使用哈希函數(shù)先摘要原文成一段密文,再使用秘鑰加密成數(shù)字簽名傳輸,對方會使用公鑰去解密,再把原來的原文使用哈希函數(shù)摘要,比對兩個數(shù)字摘要是否相同,不同表示文件內(nèi)容被篡改了。
怎么保證保證服務(wù)器給客戶端下發(fā)的公鑰是真正的公鑰,而不是中間人偽造的公鑰呢?
解決:使用雙向驗(yàn)證,在客戶端中內(nèi)置服務(wù)器公鑰。服務(wù)器發(fā)送CA證書時要求返回公鑰。客戶端也發(fā)送內(nèi)置的證書。雙方驗(yàn)證比對是否相同且是否和內(nèi)置的公鑰相同。
多路復(fù)用:使用同個tcp連接來多重并行進(jìn)行請求和響應(yīng),提高處理速度
內(nèi)連接、左連接、右連接
內(nèi)連接就是滿足連接條件的元組查詢,外連接就是以一個表為基準(zhǔn)表,除了滿足條件的還要不滿足條件的表的所有內(nèi)容。
內(nèi)連接:顯式使用關(guān)鍵字Inner join,例子:select * from a inner join b on a.id=b.id;
隱式的情況就是普通的聯(lián)表查詢,select * from a,b where a.id=b.id,可能會出現(xiàn)笛卡爾積。取決于where后面的條件在兩個表中是否是唯一性的。
與內(nèi)連接對應(yīng)的有外連接,外連接有三種:左連接,右連接,全外連接。
左連接:以左邊表,也就是from后的表為基礎(chǔ),在它的基礎(chǔ)上找到右邊表滿足的對應(yīng)起來,左邊表存在而右邊表不存在的右邊表的列字段補(bǔ)null。select * from a left join b on a.id=b.id。
右連接:同理。 right join
’全外連接:full join,把左邊表對應(yīng)右邊表,右邊列不存在補(bǔ)空,右邊列對應(yīng)左邊列,左邊列不存在補(bǔ)空,查詢出全部元組。比如:select * from a full join b on a.id=b.id;
一般,選擇合適的聯(lián)表查詢方式很重要,影響到數(shù)據(jù)的正確性。 當(dāng)要查詢兩個表中相同的部分時可以用內(nèi)連接; 當(dāng)右邊表是左邊表的子集時可以用左連接;
當(dāng)左邊表是右邊表的子集時可以用右連接; 當(dāng)左邊表和右邊表彼此有交集且不是彼此的子集時,要查詢?nèi)?#xff0c;使用full join。
補(bǔ)充:交叉連接,也叫笛卡爾積。顯示cross join,隱式,select * from a,b where…
進(jìn)程線程、區(qū)別等。
進(jìn)程:進(jìn)程是一個具體獨(dú)立功能的程序在某個數(shù)據(jù)集合上的一次運(yùn)行活動。它是系統(tǒng)資源分配和調(diào)度的基本單位。
線程:而線程是進(jìn)程的實(shí)體,是比進(jìn)程更小的獨(dú)立單位,它是cpu分配和調(diào)度的基本單位。
區(qū)別:1,進(jìn)程擁有自己的內(nèi)存單位,而線程沒有獨(dú)立的內(nèi)存單位,但是同屬于一個進(jìn)程下的線程可以共享進(jìn)程的內(nèi)存空間和資源。
2,線程不擁有系統(tǒng)資源,除了少部分的運(yùn)行需要的棧,一組寄存器,程序計(jì)數(shù)器外。
3,線程是比進(jìn)程更小的執(zhí)行體,一個程序至少要有一個進(jìn)程,一個進(jìn)程至少要有一個線程。
4,進(jìn)程比線程更健壯。當(dāng)一個進(jìn)程崩掉了,在保護(hù)模式下不會影響其他進(jìn)程,而當(dāng)一個線程崩掉了,整個進(jìn)程也就死掉了。
狀態(tài)碼
1信息提示,接受的請求正在處理 2請求處理完畢 200成功 3重定向,分配了新的url,需要進(jìn)行額外操作才能往下
301永久性重定向 302短暫性重定向 4客戶端錯誤 401請求報文語法錯誤 402未經(jīng)許可,需進(jìn)行http認(rèn)證
403訪問權(quán)限限制拒絕訪問 404找不到請求的資源 5**服務(wù)端錯誤 500服務(wù)器處理請求時發(fā)生了錯誤
503由于服務(wù)器超負(fù)載或者停機(jī)處理導(dǎo)致無法處理請求。
linux搜索一個字符
grep -E -i ‘a(chǎn)|b’ 目錄路徑(-E表示“|”可以不用轉(zhuǎn)義符號,不需寫成“|”,-i表示忽略大小寫區(qū)分)找含有字符a或者b的行。
文件搜索,find -type -name ‘*.png’
總結(jié)
- 上一篇: 行内元素之间产生的间隙
- 下一篇: 注释//TODO的作用