1.TCP三次握手栏豺、四次揮手
https://www.cnblogs.com/zmlctt/p/3690998.html
TCP標志位含義:
https://blog.csdn.net/zengrenyuan/article/details/80313449
2.滑動窗口機制
由發(fā)送方和接收方在三次握手階段植康,互相將自己的最大可接收的數據量告訴對方悍汛。也就是自己的數據接收緩沖池的大小充包。這樣對方可以根據已發(fā)送的數據量來計算是否可以接著發(fā)送跨算。在處理過程中哺呜,當接收緩沖池的大小發(fā)生變化時蜘澜,要給對方發(fā)送更新窗口大小的通知。這就實現了流量的控制慨飘。
https://www.cnblogs.com/luoquan/p/4886345.html
3.擁塞避免機制
擁塞:對資源的需求超過了可用的資源确憨。若網絡中許多資源同時供應不足,網絡的性能就要明顯變壞套媚,整個網絡的吞吐量隨之負荷的增加而下降缚态。
擁塞控制:防止過多的數據注入到網絡中磁椒,使得網絡中的路由器或鏈路不致過裁堤瘤。
擁塞控制方法:
流量控制具體的技術是采用滑動窗口,以便通信雙方能夠充分利用帶寬浆熔。流量控制作為接受方管理發(fā)送方發(fā)送數據的方式本辐,用來防止接受方可用的數據緩存空間的溢出。
流控制是一種局部控制機制医增,其參與者僅僅是發(fā)送方和接收方慎皱,它只考慮了接收端的接收能力,而沒有考慮到網絡的傳輸能力叶骨;
而擁塞控制則注重于整體茫多,其考慮的是整個網絡的傳輸能力,是一種全局控制機制忽刽。正因為流控制的這種局限性天揖,從而導致了擁塞崩潰現象的發(fā)生。所以引入了另外兩個變量跪帝,擁塞窗口-->cwnd 和 慢啟動閾值--> ssthreshold來實現擁塞控制今膊。
- 慢開始 + 擁塞避免;
慢啟動:cwnd = cwnd + 1MSS, cwnd < ssthreshold
擁塞避免:cwnd = cwnd + 1MSS * 1MSS/cwnd, cwnd >= ssthreshold
但當發(fā)生ack超時時伞剑,認為造成了擁塞斑唬,將閾值置為cwnd,然后將cwnd置為1,再次走慢啟動的流程恕刘。 - 快速重傳 + 快速恢復缤谎。
快速重傳: 當有三個重復ACK到達時,TCP就認為發(fā)生了丟包褐着,在重新發(fā)送請求的數據包之后:
- 設置ssthresh = cwnd/2, cwnd = ssthreshold + 3MSS弓千;
- 之后若仍有重復ACK到達,cwnd = cwnd + 1 MSS献起, 發(fā)送1MSS(若滑動窗口允許)
- 收到新的ACK后洋访,cwnd = ssthreshold, 以便啟動擁塞避免(快速恢復)
http://blog.chinaunix.net/uid-31422160-id-5784645.html
https://www.cnblogs.com/hupp/p/4856134.html
4.TCP協議和UDP協議的區(qū)別是什么
- TCP協議是有連接的谴餐,有連接的意思是開始傳輸實際數據之前TCP的客戶端和服務器端必須通過三次握手建立連接姻政,會話結束之后也要結束連接。而UDP是無連接的
- TCP協議保證數據按序發(fā)送岂嗓,按序到達汁展,提供超時重傳來保證可靠性,但是UDP不保證按序到達厌殉,甚至不保證到達食绿,只是努力交付,即便是按序發(fā)送的序列公罕,也不保證按序送到器紧。
- TCP協議所需資源多,TCP首部需20個字節(jié)(不算可選項)楼眷,UDP首部字段只需8個字節(jié)铲汪。
- TCP有流量控制和擁塞控制,UDP沒有罐柳,網絡擁堵不會影響發(fā)送端的發(fā)送速率
- TCP是一對一的連接掌腰,而UDP則可以支持一對一,多對多张吉,一對多的通信齿梁。
- TCP面向的是字節(jié)流的服務,UDP面向的是報文的服務肮蛹。
- TCP介紹: TCP提供了一種可靠的面向連接的字節(jié)流運輸層服務勺择。
- UDP:(User Datagram Protocol),用戶數據報協議
5.三次握手建立連接時蔗崎,發(fā)送方再次發(fā)送確認的必要性
主要是為了防止已失效的連接請求報文段突然又傳到了B,因而產生錯誤酵幕。假定出現一種異常情況,即A發(fā)出的第一個連接請求報文段并沒有丟失缓苛,而是在某些網絡結 點長時間滯留了芳撒,一直延遲到連接釋放以后的某個時間才到達B邓深,本來這是一個早已失效的報文段。但B收到此失效的連接請求報文段后笔刹,就誤認為是A又發(fā)出一次 新的連接請求芥备,于是就向A發(fā)出確認報文段,同意建立連接舌菜。假定不采用三次握手萌壳,那么只要B發(fā)出確認,新的連接就建立了日月,這樣一直等待A發(fā)來數據袱瓮,B的許多 資源就這樣白白浪費了。
6.四次揮手釋放連接時爱咬,等待2MSL的意義
- 第一尺借,為了保證A發(fā)送的最有一個ACK報文段能夠到達B。這個ACK報文段有可能丟失精拟,因而使處在LAST-ACK狀態(tài)的B收不到對已發(fā)送的FIN和ACK 報文段的確認燎斩。B會超時重傳這個FIN和ACK報文段,而A就能在2MSL時間內收到這個重傳的ACK+FIN報文段蜂绎。接著A重傳一次確認栅表。
- 第二,就是防止上面提到的已失效的連接請求報文段出現在本連接中师枣,A在發(fā)送完最有一個ACK報文段后怪瓶,再經過2MSL,就可以使本連接持續(xù)的時間內所產生的所有報文段都從網絡中消失坛吁。
7.常見的應用中有哪些是應用TCP協議的劳殖,哪些又是應用UDP協議的,為什么它們被如此設計
以下應用一般或必須用udp實現
- 多播的信息一定要用udp實現拨脉,因為tcp只支持一對一通信。
- 如果一個應用場景中大多是簡短的信息宣增,適合用udp實現玫膀,因為udp是基于報文段的,它直接對上層應用的數據封裝成報文段爹脾,然后丟在網絡中帖旨,如果信息量太大,會在鏈路層中被分片灵妨,影響傳輸效率解阅。
- 如果一個應用場景重性能甚于重完整性和安全性,那么適合于udp泌霍,比如多媒體應用货抄,缺一兩幀不影響用戶體驗,但是需要流媒體到達的速度快,因此比較適合用udp
- 如果要求快速響應蟹地,那么udp聽起來比較合適
- 如果又要利用udp的快速響應優(yōu)點积暖,又想可靠傳輸,那么只能考上層應用自己制定規(guī)則了怪与。
- 常見的使用udp的例子:ICQ,QQ的聊天模塊夺刑。
8.瀏覽器中輸入:“www.xxx.com” 之后都發(fā)生了什么?請詳細闡述分别。
- 由域名→IP地址 尋找IP地址的過程依次經過了瀏覽器緩存遍愿、系統緩存、hosts文件耘斩、路由器緩存错览、 遞歸搜索根域名服務器。
- 建立TCP/IP連接(三次握手具體過程)
- 由瀏覽器發(fā)送一個HTTP請求
- 經過路由器的轉發(fā)煌往,通過服務器的防火墻倾哺,該HTTP請求到達了服務器
- 服務器處理該HTTP請求,返回一個HTML文件
- 瀏覽器解析該HTML文件刽脖,并且顯示在瀏覽器端
- 這里需要注意:
HTTP協議是一種基于TCP/IP的應用層協議羞海,進行HTTP數據請求必須先建立TCP/IP連接
可以這樣理解:HTTP是轎車练般,提供了封裝或者顯示數據的具體形式搔涝;Socket是發(fā)動 機骄蝇,提供了網絡通信的能力舰讹。
兩個計算機之間的交流無非是兩個端口之間的數據通信,具體的數據會以什么樣的形式展現是以不同的應用層協議來定義的遮晚。
9.常見http狀態(tài)碼
- 1xx(臨時響應)
- 2xx(成功)
- 3xx(重定向):表示要完成請求需要進一步操作
- 4xx(錯誤):表示請求可能出錯鬼贱,妨礙了服務器的處理
- 5xx(服務器錯誤):表示服務器在嘗試處理請求時發(fā)生內部錯誤
- 常見狀態(tài)碼:
200(成功)
304(未修改):自從上次請求后响蓉,請求的網頁未修改過烁设。服務器返回此響應時檬某,不會返回網頁內容
401(未授權):請求要求身份驗證
403(禁止):服務器拒絕請求
404(未找到):服務器找不到請求的網頁