第二章傳輸層、tcp、udp、和sctp
udp是乙個簡單的、不可靠的傳輸協議,而tcp是乙個複雜、可靠的位元組流協議。
icmp 含義:
icmp是(internet control message protocol)internet控制報文協議。它是tcp/ip協議族的乙個子協議,用於在ip主機、路由器之間傳遞控制訊息。控制訊息是指網路通不通、主機是否可達、路由是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸使用者資料,但是對於使用者資料的傳遞起著重要的作用。
unix協議框架簡介(可通過英文全稱記憶):
ipv4:網際協議版本4.自從二十世紀八十年代早期以來一直是網際協議族的主力協議。使用32位位址。ipv4給tcp、udp、sctp、icmp、igmp提供分組遞送服務
ipv6協議:網際協議版本6,20世紀90年代中期作為ipv4的替代品,主要變化是使用了128位更大的位址,應對20世紀90年代以來網際網路的爆發增長
tcp:傳輸控制協議。tcp是乙個面向連線的協議,為使用者提供全雙工的位元組流。tcp是一種流套接字。tcp關心確認、超時和重傳之類的細節。tcp既可以使用ipv4,也可以使用ipv6
udp:使用者資料報文協議。udp是乙個無連線協議,udp是一種資料報套接字。udp不能保證資料到達目的地,與tcp一樣既可以使用ipv4 也 可以使用ipv6
sctp:流控制傳輸協議。sctp提供乙個可靠的全雙工的面向連線的協議,我們使用關聯一次來指稱sctp中的連線,因為sctp是多宿主的,從而每個關聯的兩端均涉及一組位址和乙個埠號。sctp提供訊息服務,也就維護來自應用層的記錄邊界。與tcp和udp 一樣,sctp既可以使用ipv4,又可以使用ipv6
icmp:網際控制訊息協議。icmp處理在路由器和主機之間流通的錯誤和控制訊息。這些訊息通常由tcp\ip網路支援軟體本身(而不是使用者程序)產生和處理的。用ping和traceroute程式可以同樣使用icmp。有時我們稱這個協議為icmpv4,以便與icmpv6區別
igmp:網際組管理協議,多用於廣播
arp:位址解析協議。arp把乙個ipv4位址對映成乙個硬體位址。arp通常用於諸如乙太網、令牌環網和fddi等廣播網路,在點到點的網路兵不需要
icmpv6:網際控制訊息協議版本6,綜合了icmpv4、tgmp和arp的功能
bpf:bsd分組過濾器。該介面提供與資料鏈路層的訪問能力,通常可以在院子berkeley的核心中找到
dlpi:資料鏈路提供者介面。該介面也提供對於資料鏈路層的訪問能力,通常隨svr4核心提供
所有網際協議遵循rfc的正式規範
tcp先於某個給定的伺服器建立連線,再跨連線與伺服器建立資料交換,最後終止連線
tcp再資料傳送失敗後,可以持續4~10分中的重傳
tcp服務端在接收到客戶端傳送過來的資料後,會根據客戶端發來的先後順序排列,如果由於網路擁堵傳送來的重複資料,tcp服務端將會拋棄這些重複資料
tcp提供了可靠的流量控制,tcp總是會告訴對端一次能接收多少資料 以及緩衝區剩餘大小,當緩衝區滿了以後,服務端必須從緩衝區讀取資料時,方能再從對端接收資料
tcp是一種全雙工的協議
sctp與tcp 不同是多宿主的,而且傳送訊息是乙個模組乙個模組的面向訊息和面向連線的協議
三路握手
1)tcp準備好接收外來的連線,通過socket listen bind 等函式
2)客戶端通過connect 建立連線,傳送乙個syn序列號
3)伺服器必須確認(ack)客戶的syn,然後在傳送乙個syn的分節
4)客戶端確認伺服器的syn
每乙個syn的ack確認號就是syn加1
每乙個fin的確認號就是fin加1
tcp選項
tcp選項:
mss選項(maximum segment size)即mss,通告對端它的最大分節大小,引數tcp_maxseg可以設定這個tcp選項
視窗規模選項:通告對端最大視窗規模是65535,可以通過so_rcvbuf套接字選項來影響這個選項
時間戳選項。
tcp連線終止(四路握手)
1)某個應用程式首先呼叫close,我們稱該端執行主動關閉。該端的tcp於是傳送乙個fin分節,表示資料傳送完畢
2)接收到這個fin的對端執行被動關閉,fin的接收意味著相應的連線上再無資料接收
3)tcp也會傳送乙個fin
4)接收到這個最終fin的原傳送端確認這個fin
類似syn,乙個fin也佔據乙個位元組的空間,每個fin的ack號就是fin的序列號加1
tcp連線狀態
tcp 為乙個連線定義了11種狀態
一方傳送syn 則他的狀態是synsent,收到一段並且傳送ack+1的狀態則變為synrcvd,如過在傳送ack被確認則變為established
如果某個應用程式在接收到乙個fin之前呼叫close,就會轉換為 finwait1狀態。但如果某個應用程式在established狀態期間接收到乙個fin,那就轉換為乙個close wait狀態
主動關閉傳送fin,狀態會變為finwait1
接收端接收到fin 會變為 closewait 對端比為了finwait_2
然後傳送ack確認碼和fin會變為lastack 對端變為了lastack
傳送端再次傳送ack碼,這時對端會變為closed狀態
time_wait狀態
time_wait實在路由異常發生迷途時,花費一定時間找尋另一條路的乙個狀態體現,該斷點停留的時間一般是2msl(maximum segment lifetime)
time_wait存在的理由:
1)可靠的實現tcp的全雙工
close 的主動端很可能會出現time_wait狀態,因為他必須重傳ack到另一端,以確保資料的可靠性
2)允許重複分節在網路中消逝
同乙個ip和埠被重複繫結的時候,保證先前的重複分組都在網路中消逝
建立連線(四路握手)
1)建立連線通過socket,bind和listen這三個函式來完成
2)客戶端呼叫connect關聯訊息進行乙個隱式的主動開啟。這使得使用者sctp傳送乙個init的訊息,這個訊息告訴伺服器客戶的ip和初始序列號、用於標識關聯中所有分組的初始標記,客戶請求外出流的數目以及客戶能支援外來流的數目。
3)伺服器以乙個init ack碼確認客戶的init訊息,其中含有伺服器的ip位址清單、初始序列號、起始標記、伺服器請求的外出流數目 伺服器能支援的外來流數目,以及乙個狀態cookie。狀態cookie 包含伺服器用於確信本關聯有效所需要的所有狀態,他是數位化簽名的確保他的有效性
4)客戶用乙個cookie echo回射伺服器的狀態cookie,處理cookie echo外,該訊息可能在同一分組中還**了使用者資料
5)伺服器用乙個cookie ack訊息確認客戶回射的cookie是正確的
關聯終止
sctp 不允許半關閉,當一端關閉某乙個關聯,另一端必須要停止資料傳送
sctp 沒有time_wait狀態
(由於sctp在unix是乙個比較新的協議,而且並沒有大面積推開,所以就不在繼續看了)
tcp、udp和sctp使用的是16位整數的埠號(1位元組2個16進製制)
服務端指定乙個埠,客戶端是乙個臨時埠
埠號的劃分:
0~1023 這些埠由iana控制,是系統保留埠
已登記埠為:1024~49151
49152~65535是動態的或私用埠,iana並不管這些埠。他們是我們所謂的臨時埠
在unix網路程式設計中通常的做法是主伺服器通過迴圈派生乙個子程序來處理每乙個新的連線,如果乙個子程序繼續使用伺服器眾所周知的埠來服務乙個長時間的請求將發生什麼?伺服器上所有目的埠為21的其他tcp分節都被傳遞送給擁有監聽套機子的最初那個伺服器(即最開始的父程序),然後派生乙個個子程序來處理客戶端請求。
ipv4資料報的最大大小是65535位元組,包括ipv4首部
ipv6資料報最大大小是65575位元組
當乙個ip資料報將從某個介面送出時,如果大小超過相應的鏈路mtu,ipv4和ipv6將會執行分片
每乙個tcp套接字有乙個傳送緩衝區,我們可以使用so_sndbuf來更改緩衝區的大小。當某個應用程式呼叫write的時候,核心從應用程序的緩衝區中複製所有資料到所寫套接字的傳送緩衝區。如果套接字的傳送緩衝區容不下應用程序的所有資料(或者應用程序緩衝區大於傳送程序的緩衝區,或是套接字緩衝區已經有其他資料),該應用程序將休眠,write直到應用程序所有資料都寫到套接字緩衝區才會做返回。但是並不能代表對端已經接收到資料
tcp提取緩衝區的資料傳送對端,對端tcp 必須確認收到的資料,對端ack到達後tcp才會丟去緩衝區中已經確認過的資料。tcp必須對已傳送的乙個資料保留副本,直到收到對方的確認
任何udp套接字都有傳送緩衝區的大小,我們可以使用so_sndbuf,他僅僅是修改了寫到套接字資料報上的大小上限,如果乙個程序寫乙個大於傳送緩衝區大小的資料報,核心會返回乙個emsgsize的錯誤,udp無需乙個真正的傳送緩衝區因為他本身就是不可靠的,通常被複製到某種格式的乙個核心緩衝區中,資料被傳送之後,這個副本會被鏈路層丟棄
如果udp write 成功返回表示所有資料已經被加入鏈路層輸出列隊,如果沒有空間存放資料報貨某個片段,核心通常會返回乙個enobufs錯誤給應用程序
第二章 傳輸層 TCP UDP和SCTP 1
1.tcp ip協議族總圖 ipv4 網際協議版本4 internet protocol version 4 使用32位位址。ipv4給tcp udp sctp icmp和igmp提供分組遞送服務。ipv6 網際協議版本6 internet protocol version 6 使用128位位址。給...
unp 第二章 傳輸層 TCP UDP SCTP
udp 應用程序將訊息寫入udp套接字,訊息被封裝成udp資料報,該資料報進而封裝到乙個ip資料報,傳送到目的地 1 不保證資料報會到達最終目的地 2 不保證各個資料報的先後順序跨網路後保持不變 3 不保證資料報只到達一次 4 udp資料報都有乙個長度 5 無連線的服務 6 udp避免了tcp的連線...
傳輸層和TCP UDP
層傳輸層 定義了一些傳輸資料的協議和埠號 www埠80等 如 tcp 傳輸控制協議,傳輸效率低,可靠性強,用於傳輸可靠性要求高,資料量大的資料 udp 使用者資料報協議,與tcp特性恰恰相反,用於傳輸可靠性要求不高,資料量小的資料,如qq聊天資料就是通過這種方式傳輸的 主要是將從下層接收的資料進行分...