动态

详情 返回 返回

hnclou:TCPIP協議詳解 - 动态 详情

TCP/IP在數據包設計上採用封裝和分用的策略,所謂封裝就是在應用程序在發送數據的過程中,每一層都增加一些首部信息,這些信息用於和接收端同層次進行溝通,例如當數據從應用程序發送到以太網過程中數據逐層加工。

1.應用層
應用層做為 TCP/IP 協議的最高層級,對於我們移動開發來説,是接觸最多的。

運行在TCP協議上的協議:
HTTP(Hypertext Transfer Protocol,超文本傳輸協議),主要用於普通瀏覽。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本傳輸協議),HTTP協議的安全版本。
FTP(File Transfer Protocol,文件傳輸協議),由名知義,用於文件傳輸。
POP3(Post Office Protocol, version 3,郵局協議),收郵件用。
SMTP(Simple Mail Transfer Protocol,簡單郵件傳輸協議),用來發送電子郵件。
TELNET(Teletype over the Network,網絡電傳),通過一個終端(terminal)登陸到網絡。
SSH(Secure Shell,用於替代安全性差的TELNET),用於加密安全登陸用。
運行在UDP協議上的協議:
BOOTP(Boot Protocol,啓動協議),應用於無盤設備。
NTP(Network Time Protocol,網絡時間協議),用於網絡同步。
DHCP(Dynamic Host Configuration Protocol,動態主機配置協議),動態配置IP地址。
其他:
DNS(Domain Name Service,域名服務),用於完成地址查找,郵件轉發等工作(運行在TCP和UDP協議上)。
ECHO(Echo Protocol,迴繞協議),用於查錯及測量應答時間(運行在TCP和UDP協議上)。
SNMP(Simple Network Management Protocol,簡單網絡管理協議),用於網絡信息的收集和網絡管理。
ARP(Address Resolution Protocol,地址解析協議),用於動態解析以太網硬件的地址。

2.傳輸層
傳輸層提供了兩種到達目標網絡的方式:

(1)用户數據報協議UDP:

只提供了基本的錯誤檢測,是一個無連接的協議。
特點:把數據打包,數據大小有限制(64k),不建立連接,速度快,但可靠性低。

(2)傳輸控制協議TCP:

提供了完善的錯誤控制和流量控制,能夠確保數據正常傳輸,是一個面向連接的協議。
特點:建立連接通道,數據大小無限制速度慢,但是可靠性高。由於傳輸層涉及的東西比較多,比如端口,Socket等。

TCP三次握手

第一次握手:Client將標誌位SYN置為1,隨機產生一個值seq=J,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。

第二次握手:Server收到數據包後由標誌位SYN=1知道Client請求建立連接,Server將標誌位SYN和ACK都置為1,ack=J+1,隨機產生一個值seq=K,並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。

第三次握手:Client收到確認後,檢查ack是否為J+1,ACK是否為1,如果正確則將標誌位ACK置為1,ack=K+1,並將該數據包發送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸數據了。

簡單來説,就是:

1):建立連接時,客户端發送SYN包(SYN=i)到服務器,並進入到SYN-SEND狀態,等待服務器確認

2):服務器收到SYN包,必須確認客户的SYN(ack=i+1),同時自己也發送一個SYN包(SYN=k),即SYN+ACK包,此時服務器進入SYN-RECV狀態

3):客户端收到服務器的SYN+ACK包,向服務器發送確認報ACK(ack=k+1),此包發送完畢,客户端和服務器進入ESTABLISHED狀態,完成三次握手,客户端與服務器開始傳送數據。

TCP四次揮手

由於TCP連接時全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成數據發送任務後,發送一個FIN來終止這一方向的連接,收到一個FIN只是意味着這一方向上沒有數據流動了,即不會再收到數據了,但是在這個TCP連接上仍然能夠發送數據,直到這一方向也發送了FIN。首先進行關閉的一方將執行主動關閉,而另一方則執行被動關閉,上圖描述的即是如此。

第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。

第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。

第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。

第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號為收到序號+1,Server進入CLOSED狀態,完成四次揮手。

為什麼建立連接是三次握手,而關閉連接卻是四次揮手呢?

   這是因為服務端在LISTEN狀態下,收到建立連接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客户端。而關閉連接時,當收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方也未必全部數據都發送給對方了,所以己方可以立即close,也可以發送一些數據給對方後,再發送FIN報文給對方來表示同意現在關閉連接,因此,己方ACK和FIN一般都會分開發送。

3.網絡層
IP地址由兩部分組成,即網絡地址和主機地址,二者是主從關係:

(1)網絡號 net-id,它標誌主機(或路由器)所連接到的網絡,網絡地址表示其屬於互聯網的哪一個網絡

(2)主機號 host-id,它標誌該主機(或路由器),主機地址表示其屬於該網絡中的哪一台主機。

**4.網絡接口層
協議拆分**

   類似地,許多應用進程使用TCP或UDP傳送數據,則需要在TCP段或UDP數據報首部定義一個應用程序標識符。TCP和UDP都使用一個16位的端口號來標識不同的應用程序,TCP和UDP把“源端口號”和“目的端口號”分別存人TCP段首部和UDP數據報首部。網絡接口分別發送和接收IP、ARP、RARP的數據,同理,也必須在以太網(假定物理網絡是一個以太網)的首部加入一個字段,用來説明是哪個協議的數據。為此,以太網幀首部定義了一個16位的“類型”字段。當接收方(也稱目的主機)收到一個以太網幀時,數據就開始在協議棧中自下而上傳送。各層協議利用報文首部所攜帶的協議控制信息做相應的處理,然後去掉各層協議數據單元的首部,將封裝的數據交給上層協議。每層協議都要檢查協議首部中的協議標識,以確定讓哪一個協議接收數據,這個過程稱為拆封,如上圖所示。

局域網數據傳輸

   任何兩個對等層(peerlayer),例如傳輸層、網際層、網絡接口層之間的通信,如同上圖中標識的一樣,好像是將數據通過水平虛線直接傳遞給對方,這就是所謂的對等層之間的通信。實際上,協議就是在兩個對等層之間傳遞數據時的各種規定。由此可以這樣認為:實際通信是按垂直方向進行的,層與層之間經過封裝和拆封這樣的操作實現物理通信。但是邏輯上,卻是在水平方向上利用協議進行的對等層通信。

廣域網數據傳輸

  應用層和傳輸層使用端到端(end-to-end)協議,路由器中沒有這兩層協議,只有端系統才有這兩層協議。網際層是逐跳(hop-by-hop)協議,端系統和路由器都有網際層協議。一個路由器具有兩個或多個網絡接口,這樣才能連接兩個或多個網絡。互聯網的目的之一是在應用程序中屏蔽所有的物理網絡細節。在上圖中,應用層不需要關心一個端系統是在以太網上還是在令牌環網上,它們通過路由器進行通信。隨着不同類型物理網絡的增加,互聯網的規模變得越來越大,也需要增加路由器,但是應用層仍然是一樣的。
user avatar mirrorship 头像 dns1 头像 abelethan 头像 wangtian_65f943469b2c3 头像
点赞 4 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.