tcp/ip模型實際上是osi模型的乙個濃縮版本,它只有四個層次:
應用層:對應這osi的應用層、表示層、會話層
傳輸層:對應著osi的傳輸層
網路層:對應著osi的網路層
網路介面層:對應著osi的資料鏈路層和物理層
osi模型的網路層同時支援面向連線和無連線的通訊,但是傳輸層只支援面向連線的通訊;tcp/ip模型的網路層只提供無連線服務,但是傳輸層同時提供兩種通訊模式。
time to live
資料報在傳輸過程中沒經過乙個路由器,ttl就減1,直到ttl=0,資料報被丟棄,並傳送icmp報文通知源主機防止重**送。
由於不同的硬體的物理特性不同,對資料幀的最大長度都有不同的限制,這個最大長度成為mtu(然後通過路由對ip報文進行分片完成傳輸)
①部分報頭資訊宣告
seq:序列號,表示資料第乙個位元組的序號
ack:確認序列號,表示期望收到的第乙個位元組的序號
flag位
常用的由syn、ack、fin。
syn:用作建立連線時的同步訊號。
ack:用作對收到的資料進行確認。
fin:表示後面沒有資料需要傳送,連線需要關閉。
②握手過程
第一次握手:客戶端傳送資料報將syn置1,表示希望建立連線,seq=x,傳送完後進入syn_send狀態。
第二次握手:伺服器收到請求之後,通過syn確認是建立連線請求,然後傳送乙個響應包,將syn=1,ack=1 seq=y ack=x+1,然後進入syn_rcvdz狀態。
第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=y+1),此包傳送完畢,客戶端伺服器進入established狀態,完成三次握手。
保持資訊對等
防止請求超時導致髒連線
如果兩次握手就建立連線,傳輸完資料並釋放連線後,第乙個超時的連線請求才到達伺服器,服務區會認為是客戶端建立新連線的請求,然後建立連線,此時客戶端的狀態不是syn_sent,所以會直接丟棄伺服器傳過來的確認資料,導致最後只是伺服器單方面建立了連線。
客戶端想要關閉連線,然後傳送fin訊號帶上seq資訊給伺服器,伺服器應答ack告訴客戶端可以斷開,但是要等我把資料傳送完整,注意這時候客戶端進入fin_wait_2狀態。
伺服器將資料傳送完後傳送fin+ack給客戶端,告訴客戶端ok了,然後自己進入close_wait狀態。
客戶端收到後,給伺服器傳送ack確認收到,然後自己進入time_wait狀態,經過2msl,客戶端沒有收到伺服器傳來的報文,則確認沒有收到伺服器傳來的報文,則確定伺服器已經收到最後的ack訊號,連線正式釋放。
為什麼 不直接關閉而是進入time_wait呢?
客戶端要確認伺服器能收到ack訊號。(如果不確定這一點,伺服器會認為客戶端沒有收到自己的fin+ack報文,所以會重發)
防止失效請求(為了防止已失效的連線請求資料報和正常的混淆)
tcp面向連線,udp面向非連線
tcp提供可靠的服務(資料傳輸無差錯,不丟失,不重複,按序到達),udp不可靠
tcp面向位元組流,udp面向報文
tcp資料傳輸慢,udp資料傳輸快
tcp首部開銷20位元組,udp8位元組
dns解析,找到對應的ip位址
客戶端發起http/https請求,然後交給傳輸層
傳輸層將請求分成報文段,新增目標源和埠並隨機用乙個本地介面封裝進行報頭,然後交給網路層。
網路層加上雙方ip位址資訊,並負責路由分發。
鏈路層中,包通過鏈路層傳送到路由器,通過鄰居協議查詢給定的ip位址的mac位址,然後傳送arp請求查詢目的的位址,如果得到回應後就可以使用arp的請求應答交換的ip資料報進行傳輸了,然後傳送ip資料報到達伺服器的位址
位址解析協議。
每個主機都會在自己的arp緩衝區中建立乙個arp列表,以表示ip位址和mac位址之間的對應關係。
當源主機要傳送資料時,首先檢查arp列表中是否有對應ip位址的目的主機的mac位址,如果有,則直接傳送資料,如果沒有,就向本網段的所有主機傳送arp資料報,該資料報包括的內容有:源主機ip位址,源主機mac位址,目的主機的ip位址。
當本網路的所有主機收到該arp資料報時,首先檢查資料報中的ip位址是否是自己的ip位址,如果不是,則忽略該資料報,如果是,則首先從資料報中取出源主機的ip和mac位址寫入到arp列表中,如果已經存在,則覆蓋,然後將自己覺得mac位址寫入arp列表,並利用此資訊傳送資料。如果源主機一直沒有收到arp響應資料報,表示arp查詢失敗。
廣播傳送arp請求,單播發送arp響應。
乙個區域網的網路協議,使用udp協議工作,用途:給內部網路或網路服務**商自動分配ip位址,給使用者或者內部網路管理員作為對所有計算機作**管理的手段。
子網掩碼只有乙個作用,就是將某個ip位址劃分成網路位址和主機位址兩部分。
通過ip和子網掩碼計算網路號
計算出ip二進位制和子網掩碼的二進位制,然後取餘
網路程式設計常見面試題
1.四層網路模型和七層網路模型 四層網路模型 a.應用層 應用程式間溝通的層,如簡單電子郵件傳輸 smtp 檔案傳輸協議 ftp 網路遠端訪問協議 telnet 等。b.傳輸層 在此層中,它提供了節點間的資料傳送服務,如傳輸控制協議 tcp 使用者資料報協議 udp 等,tcp和 udp給資料報加入...
網路面試題
http協議2.0和1.1的區別 tomcat的一次訪問過程,怎麼實現檔案斷點續傳 如何理解冪等?專案中介面的冪等是如何做的?冪等是指多次執行,影響相同。比如大多數post操作,重複提交訂單等,最終只會有乙個訂單生成成功。還有一種情況就是訊息,由於大多數mq之保證at least once,所以訊息...
程式設計面試題
1.自定義乙個分頁函式,傳參當前頁數 總頁數,輸出以下 1.34567.10 123456.10 1 showpage是掐頭去尾的顯示數量 2 這個函式的重點就在於起始值和結束值的運算 3function page currentpage,totalpages,showpage 5 412 13 p...