1.客戶端經過向服務器端發送一個SYN來建立一個主動打開,做爲三路握手的一部分。客戶端把這段鏈接的序號設定爲隨機數 A。 2.服務器端應當爲一個合法的SYN回送一個SYN/ACK。ACK 的確認碼應爲 A+1,SYN/ACK 包自己又有一個隨機序號 B。 3.最後,客戶端再發送一個ACK。當服務端受到這個ACK的時候,就完成了三路握手,並進入了鏈接建立狀態。此時包序號被設定爲收到的確認號 A+1,而響應則爲 B+1。 通俗描述3次握手就是: A對B說:個人序號是x,我要向你請求鏈接;(第一次握手,發送SYN包,而後進入SYN-SEND狀態) B聽到以後對A說:個人序號是y,期待你下一句序號是x+1的話(意思就是收到了序號爲x的話,即ack=x+1),贊成創建鏈接。(第二次握手,發送ACK-SYN包,而後進入SYN-RCVD狀態) A聽到B說贊成創建鏈接以後,對A說:與確認你贊成與我鏈接(ack=y+1,ACK=1,seq=x+1)。(第三次握手,A已進入ESTABLISHED狀態) B聽到A的確認以後,也進入ESTABLISHED狀態。
通俗得描述四次揮手就是: 1.A與B交談結束以後,A要結束這次會話,對B說:我要關閉鏈接了(seq=u,FIN=1)。(第一次揮手,A進入FIN-WAIT-1) 2.B收到A的消息後說:確認,你要關閉鏈接了。(seq=v,ack=u+1,ACK=1)(第二次揮手,B進入CLOSE-WAIT) 3.A收到B的確認後,等了一段時間,由於B可能還有話要對他說。(此時A進入FIN-WAIT-2) 4.B說完了他要說的話(只是可能還有話說)以後,對A說,我要關閉鏈接了。(seq=w, ack=u+1,FIN=1,ACK=1)(第三次揮手) 5.A收到B要結束鏈接的消息後說:已收到你要關閉鏈接的消息。(seq=u+1,ack=w+1,ACK=1)(第四次揮手,而後A進入CLOSED) 6.B收到A的確認後,也進入CLOSED。
地址解析協議(Address Resolution Protocol): 根據IP地址獲取物理地址的一個TCP/IP協議
這個面試官確實問過,當時答的urllib2能夠Post而urllib不能夠. 1.urllib提供urlencode方法用來GET查詢字符串的產生,而urllib2沒有。這是爲什麼urllib常和urllib2一塊兒使用的緣由。 urllib2能夠接受一個Request類的實例來設置URL請求的headers,urllib僅能夠接受URL。這意味着,你不能夠假裝你的User Agent字符串等。
GET和POST有什麼區別?及爲何網上的多數答案都是錯的 get: RFC 2616 – Hypertext Transfer Protocol — HTTP/1.1 post: RFC 2616 – Hypertext Transfer Protocol — HTTP/1.1
Cookie | Session 儲存位置:客戶端 | 服務器端 目的: 跟蹤會話,也能夠保存用戶偏好設置或者保存用戶名密碼等 | 跟蹤會話 安全性:不安全 | 安全 session技術是要使用到cookie的,之因此出現session技術,主要是爲了安全。
nginx 相對 apache 的優勢:linux
1.輕量級,一樣起web 服務,比apache 佔用更少的內存及資源apache 相對nginx 的優勢:nginx
1.rewrite ,比nginx 的rewrite 強大
2.模塊超多,基本想到的均可以找到
3.少bug ,nginx 的bug 相對較多
4.超穩定web
1.明文保存 2.明文hash後保存,如md5 3.MD5+Salt方式,這個salt能夠隨機 4.知乎使用了Bcrypy(好像)加密
狀態碼 | 定義 1xx 報告 接收到請求,繼續進程 2xx 成功 步驟成功接收,被理解,並被接受 3xx 重定向 爲了完成請求,必須採起進一步措施 4xx 客戶端出錯 請求包括錯的順序或不能完成 5xx 服務器出錯 服務器沒法完成顯然有效的請求 403: Forbidden 404: Not Found HTTPS握手,對稱加密,非對稱加密,TLS/SSL,RSA
CSRF(Cross-site request forgery)跨站請求僞造 XSS(Cross Site Scripting)跨站腳本攻擊 CSRF重點在請求,XSS重點在腳本
1.管道(Pipe):管道可用於具備親緣關係進程間的通訊,容許一個進程和另外一個與它有共同祖先的進程之間進行通訊。 2.命名管道(named pipe):命名管道克服了管道沒有名字的限制,所以,除具備管道所具備的功能外,它還容許無親緣關係進程間的通訊。命名管道在文件系統中有對應的文件名。命名管道經過命令mkfifo或系統調用mkfifo來建立。 3.信號(Signal):信號是比較複雜的通訊方式,用於通知接受進程有某種事件發生,除了用於進程間通訊外,進程還能夠發送信號給進程自己;linux除了支持Unix早期信號語義函數sigal外,還支持語義符合Posix.1標準的信號函數sigaction(實際上,該函數是基於BSD的,BSD爲了實現可靠信號機制,又可以統一對外接口,用sigaction函數從新實現了signal函數)。 4.消息(Message)隊列:消息隊列是消息的連接表,包括Posix消息隊列system V消息隊列。有足夠權限的進程能夠向隊列中添加消息,被賦予讀權限的進程則能夠讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字節流以及緩衝區大小受限等缺 5.共享內存:使得多個進程能夠訪問同一塊內存空間,是最快的可用IPC形式。是針對其餘通訊機制運行效率較低而設計的。每每與其它通訊機制,如信號量結合使用,來達到進程間的同步及互斥。 6.內存映射(mapped memory):內存映射容許任何多個進程間通訊,每個使用該機制的進程經過把一個共享的文件映射到本身的進程地址空間來實現它。 7.信號量(semaphore):主要做爲進程間以及同一進程不一樣線程之間的同步手段。 套接口(Socket):更爲通常的進程間通訊機制,可用於不一樣機器之間的進程間通訊。起初是由Unix系統的BSD分支開發出來的,但如今通常能夠移植到其它類Unix系統上:Linux和System V的變種都支持套接字