1.QQ及時通信軟件既使用UDP也使用TCP
- 登錄過程,客戶端采用TCP協議向服務器發送消息,HTTP協議下載信息。登錄之后,會有一個TCP連接來保持在線狀態。
- 和好友發消息,客戶端采用UDP協議,但是需要通過服務器轉發。騰訊為了確保傳輸消息的可靠性,采用上層協議來保證可靠傳輸:如果客戶端收到UDP發送的消息,需要使用UDP發送一個應答包,以此保證消息可以無遺漏傳輸。
- 在內網中兩個客戶端傳文件,QQ采用P2P技術,不需要服務器中轉。
2.TCP長連接為什么要發送心跳包
因為當電腦連接上網絡時,運營商分配給電腦的IP只是一個內網的IP,手機要連上Internet必須要通過運營商的網關進行IP轉化,這個網關稱為NAT,電腦連接Internet是將運營商的內網ip和端口與外網相互映射來完成的。
但是運營商為了減少網關NAT映射表的負荷,當一個鏈路有一段時間沒有通信時,就會刪除對應表,造成鏈路中斷,這個時間一般為五分鐘,所以長連接后臺需要定時發送心跳包來維持長連接。
同時,長連接的心跳周期不能設置的太長,否則長連接會被釋放掉,造成客戶端的重連和登錄,同時也不能設置太短,太短會加重服務器的負擔。
3.GET和POST在TCP階段的不同
- 對于GET請求,瀏覽器會把http頭部和數據部分一起發送出去,服務端響應200(返回數據)
- 對于POST請求,瀏覽器會先發送http頭部,服務器響應100 continue,瀏覽器再發送數據部分,服務端響應200(ok)
- 并不是所有的瀏覽器都會在POST中發送兩次包,Firefox只發送一次