TCP
TCP 三次握手和四次揮手、畫圖厉萝、fin_wait恍飘,time_wait 狀態(tài)介紹一下、time_wait如何避免谴垫、每一次發(fā)送報(bào)文的具體格式章母、擁塞控制機(jī)制、報(bào)文大小(20B)
UDP
TCP 與 UDP 區(qū)別翩剪?都適用哪些業(yè)務(wù)場(chǎng)景乳怎?用TCP發(fā)大包會(huì)出現(xiàn)什么情況?UDP會(huì)嗎前弯?
UDP報(bào)文大小 (8B)
封包和解包
-
TCP 粘包現(xiàn)象:
在做TCP通信的時(shí)候蚪缀,如果需要在一條連接上連續(xù)發(fā)送不同結(jié)構(gòu)的數(shù)據(jù)時(shí),可能遇到其中的某些包完整恕出,某些包不完整询枚,也可能遇到某些包包含多個(gè)數(shù)據(jù)。這就是典型的TCP粘包現(xiàn)象浙巫。TCP粘包現(xiàn)象是指在使用TCP通信的時(shí)候金蜀,一個(gè)完成的消息可能會(huì)被TCP拆分成多個(gè)包進(jìn)行發(fā)送刷后,也有可能把多個(gè)小的包封裝成一個(gè)大的數(shù)據(jù)包進(jìn)行發(fā)送。 -
TCP 粘包原因
1渊抄、由Nagle算法造成的發(fā)送端的粘包尝胆。發(fā)送端需要等緩沖區(qū)滿才發(fā)送數(shù)據(jù)出去,這就有可能把多個(gè)小的包封裝成一個(gè)大的數(shù)據(jù)包進(jìn)行發(fā)送护桦。
2含衔、接收端接收不及時(shí)造成的接收端粘包。TCP會(huì)把接收到的數(shù)據(jù)存在自己的緩沖區(qū)中,然后通知應(yīng)用層取數(shù)據(jù)嘶炭。當(dāng)應(yīng)用層不能及時(shí)的把TCP的數(shù)據(jù)取出來(lái),就會(huì)造成緩沖區(qū)中存放了多個(gè)MSS數(shù)據(jù)抱慌。 - 為了解決 "粘包" 問題,大家通常會(huì)在所發(fā)送的內(nèi)容前眨猎,加上發(fā)送內(nèi)容的長(zhǎng)度,所以對(duì)方會(huì)先收 4 Byte 强经,解析獲得接下來(lái)需要接收的長(zhǎng)度睡陪,再進(jìn)行收包
- 對(duì)于 UDP 來(lái)說(shuō)就不存在拆包問題。因?yàn)?UDP 是個(gè) '數(shù)據(jù)包' 協(xié)議匿情,也就是兩段數(shù)據(jù)間是有界限的兰迫,在接收端要么接收不到數(shù)據(jù)要么就是接收一段完整的數(shù)據(jù),不會(huì)少接收也不會(huì)多接收
HTTP vs HTTPS
了解多少炬称?HTTP狀態(tài)碼了解多少汁果?HTP頭部有哪些字段?
cookie 和 session 區(qū)別
參考1 參考2
Session 是服務(wù)器用來(lái)跟蹤用戶的一種手段玲躯,每個(gè) Session 都有一個(gè)唯一標(biāo)識(shí):Session ID据德。當(dāng)服務(wù)器創(chuàng)建了一個(gè) Session 時(shí),給客戶端發(fā)送的響應(yīng)報(bào)文就包含了 Set-Cookie 字段跷车,其中有一個(gè)名為 sid 的鍵值對(duì)棘利,這個(gè)鍵值對(duì)就是 Session ID⌒嘟桑客戶端收到后就把 Cookie 保存在瀏覽器中善玫,并且之后發(fā)送的請(qǐng)求報(bào)文都包含 Session ID。HTTP 就是 Session 和 Cookie 這兩種方式一起合作來(lái)實(shí)現(xiàn)跟蹤用戶狀態(tài)的密强,而 Session 用于服務(wù)器端茅郎,Cookie 用于客戶端。
DNS 域名系統(tǒng)
- DNS 是因特網(wǎng)使用的命名系統(tǒng)或渤,用來(lái)把便于人們記憶的含有特定含義的主機(jī)名(www.baidu.com) 轉(zhuǎn)換為便于機(jī)器處理的 IP 地址
- DNS 采用客戶/服務(wù)器模型系冗,其協(xié)議運(yùn)行在 UDP 之上,使用 53 號(hào)端口
- 瀏覽器輸入 www.baidu.com 發(fā)生的事
1劳坑,瀏覽器分析鏈接指向頁(yè)面的URL (www.baidu.com)
2毕谴,瀏覽器向 DNS 請(qǐng)求解析 www.baidu.com 的 IP 地址
3,域名系統(tǒng) DNS 解析出百度服務(wù)器的 IP 地址
4,瀏覽器與該服務(wù)器建立 TCP 鏈接 (默認(rèn)端口號(hào)80)
5涝开,瀏覽器發(fā)出 HTTP 請(qǐng)求: GET 百度首頁(yè)面
6循帐,服務(wù)器通過 HTTP 響應(yīng)把文件 (首頁(yè)面) 發(fā)送給瀏覽器
7,TCP 連接釋放
8舀武,瀏覽器將文件 (首頁(yè)面) 進(jìn)行解釋拄养,并將 web 頁(yè)顯示給用戶
常見web安全問題,SQL注入银舱、XSS瘪匿、CSRF,基本原理以及如何防御
XSS(跨站腳本攻擊):用戶過分信任網(wǎng)站寻馏,放任來(lái)自瀏覽器地址欄代表的那個(gè)網(wǎng)站代碼在自己本地任意執(zhí)行棋弥。如果沒有瀏覽器的安全機(jī)制限制,xss代碼可以在用戶瀏覽器為所欲為诚欠;
CSRF(跨站請(qǐng)求偽造):網(wǎng)站過分信任用戶顽染,放任來(lái)自所謂通過訪問控制機(jī)制的代表合法用戶的請(qǐng)求執(zhí)行網(wǎng)站的某個(gè)特定功能。
XSS(盜用用戶的身份)原理上利用的是瀏覽器可以拼接成任意的javascript轰绵,然后黑客拼接好javascript讓瀏覽器自動(dòng)地給服務(wù)器端發(fā)出多個(gè)請(qǐng)求(get粉寞、post請(qǐng)求)。
CSRF(服務(wù)端程序員背鍋左腔,沒驗(yàn)證好)原理上利用的是網(wǎng)站服務(wù)器端所有參數(shù)都是可預(yù)先構(gòu)造的原理唧垦,然后黑客拼接好具體請(qǐng)求****url,可以引誘你提交他構(gòu)造好的請(qǐng)求液样。
協(xié)議
RIP振亮,BGP,ARP了解多少說(shuō)多少
地址解析協(xié)議 ARP(Address Resolution Protocol)
網(wǎng)絡(luò)層實(shí)現(xiàn)主機(jī)之間的通信蓄愁,而鏈路層實(shí)現(xiàn)具體每段鏈路之間的通信双炕。因此在通信過程中,IP 數(shù)據(jù)報(bào)的源地址和目的地址始終不變撮抓,而 MAC 地址隨著鏈路的改變而改變妇斤。
ARP 實(shí)現(xiàn)由 IP 地址得到 MAC 地址。
每個(gè)主機(jī)都有一個(gè) ARP 高速緩存丹拯,里面有本局域網(wǎng)上的各主機(jī)和路由器的 IP 地址到 MAC 地址的映射表站超。
如果主機(jī) A 知道主機(jī) B 的 IP 地址,但是 ARP 高速緩存中沒有該 IP 地址到 MAC 地址的映射乖酬,此時(shí)主機(jī) A 通過廣播的方式發(fā)送 ARP 請(qǐng)求分組死相,主機(jī) B 收到該請(qǐng)求后會(huì)發(fā)送 ARP 響應(yīng)分組給主機(jī) A 告知其 MAC 地址,隨后主機(jī) A 向其高速緩存中寫入主機(jī) B 的 IP 地址到 MAC 地址的映射咬像。
網(wǎng)際控制報(bào)文協(xié)議 ICMP(Internet Control Message Protocol)
ICMP 報(bào)文分為差錯(cuò)報(bào)告報(bào)文和詢問報(bào)文算撮。1生宛、 Ping
- Ping 是 ICMP 的一個(gè)重要應(yīng)用甩挫,主要用來(lái)測(cè)試兩臺(tái)主機(jī)之間的連通性祟敛。
- Ping 的原理是通過向目的主機(jī)發(fā)送 ICMP Echo 請(qǐng)求報(bào)文,目的主機(jī)收到之后會(huì)發(fā)送 Echo 回答報(bào)文疟游。Ping 會(huì)根據(jù)時(shí)間和成功響應(yīng)的次數(shù)估算出數(shù)據(jù)包往返時(shí)間以及丟包率审洞。
2莱睁、Traceroute
- Traceroute 是 ICMP 的另一個(gè)應(yīng)用,用來(lái)跟蹤一個(gè)分組從源點(diǎn)到終點(diǎn)的路徑芒澜。
- Traceroute 發(fā)送的 IP 數(shù)據(jù)報(bào)封裝的是無(wú)法交付的 UDP 用戶數(shù)據(jù)報(bào)仰剿,并由目的主機(jī)發(fā)送終點(diǎn)不可達(dá)差錯(cuò)報(bào)告報(bào)文。
- 源主機(jī)向目的主機(jī)發(fā)送一連串的 IP 數(shù)據(jù)報(bào)痴晦。第一個(gè)數(shù)據(jù)報(bào) P1 的生存時(shí)間 TTL 設(shè)置為 1南吮,當(dāng) P1 到達(dá)路徑上的第一個(gè)路由器 R1 時(shí),R1 收下它并把 TTL 減 1阅酪,此時(shí) TTL 等于 0旨袒,R1 就把 P1 丟棄,并向源主機(jī)發(fā)送一個(gè) ICMP 時(shí)間超過差錯(cuò)報(bào)告報(bào)文术辐;
- 源主機(jī)接著發(fā)送第二個(gè)數(shù)據(jù)報(bào) P2,并把 TTL 設(shè)置為 2施无。P2 先到達(dá) R1辉词,R1 收下后把 TTL 減 1 再轉(zhuǎn)發(fā)給 R2,R2 收下后也把 TTL 減 1猾骡,由于此時(shí) TTL 等于 0瑞躺,R2 就丟棄 P2,并向源主機(jī)發(fā)送一個(gè) ICMP 時(shí)間超過差錯(cuò)報(bào)文兴想。
- 不斷執(zhí)行這樣的步驟幢哨,直到最后一個(gè)數(shù)據(jù)報(bào)剛剛到達(dá)目的主機(jī),主機(jī)不轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)嫂便,也不把 TTL 值減 1捞镰。但是因?yàn)閿?shù)據(jù)報(bào)封裝的是無(wú)法交付的 UDP,因此目的主機(jī)要向源主機(jī)發(fā)送 ICMP 終點(diǎn)不可達(dá)差錯(cuò)報(bào)告報(bào)文毙替。
- 之后源主機(jī)知道了到達(dá)目的主機(jī)所經(jīng)過的路由器 IP 地址以及到達(dá)每個(gè)路由器的往返時(shí)間岸售。
路由選擇協(xié)議 RIP OSPF BGP
網(wǎng)際組管理協(xié)議 IGMP(Internet Group Management Protocol)
其他
- socket編程,recv返回收到包是真的收到包了嗎厂画?會(huì)用 socket 嗎凸丸?
- get 和 post 區(qū)別 參考1 參考2
GET請(qǐng)求的數(shù)據(jù)會(huì)附在URL之后(就是把數(shù)據(jù)放置在HTTP協(xié)議頭中),以?分割URL和傳輸數(shù)據(jù)袱院,參數(shù)之間以&相連
POST把提交的數(shù)據(jù)則放置在是HTTP包的包體中屎慢。
對(duì)于GET方式的請(qǐng)求瞭稼,瀏覽器會(huì)把http header和data一并發(fā)送出去,服務(wù)器響應(yīng)200(返回?cái)?shù)據(jù))腻惠;
而對(duì)于POST环肘,瀏覽器先發(fā)送header,服務(wù)器響應(yīng)100 continue妖枚,瀏覽器再發(fā)送data廷臼,服務(wù)器響應(yīng)200 ok(返回?cái)?shù)據(jù))。
對(duì)參數(shù)的數(shù)據(jù)類型绝页,GET只接受ASCII字符荠商,而POST沒有限制。
GET比POST更不安全续誉,因?yàn)閰?shù)直接暴露在URL上莱没,所以不能用來(lái)傳遞敏感信息。
GET參數(shù)通過URL傳遞酷鸦,POST放在Request body中饰躲。