UNIX網絡編程總結二

絕大多數客戶-服務程序使用TCP和UDP,這兩個協議轉而使用IP。UDP是一種簡單的,不可靠的數據報協議,TCP是一種精緻的可靠的字節流協議。緩存

在TCP/IP協議族中:服務器

mrouted:IGMP→IPv4網絡

ping:ICMP→IPv4/IPv6併發

Traceout:ICMP→IPv4/IPv6,IPv4/IPv6socket

Application:TCP/UDP→IPv4/IPv6server

UDP:

  UDP是一個簡單的傳輸層協議,應用進程寫數據報到UDP套接口,由它封裝成IP數據報,而後發送到目的地,可是UDP不保證數據報最終可達目的地。咱們也稱UDP提供無鏈接的服務,由於UDP客戶與服務沒必要存在長期的關係。排序

TCP:

一、TCP提供客戶與服務器的連接。接口

二、TCP提供可靠性。進程

三、TCP經過給每個所發送的字節關聯一個序號進行排序。ip

四、TCP提供流量控制。

五、TCP是全雙工的。

TCP鏈接三路握手:

一、服務端經過socket、bind、listen完成被動打開。

二、客戶端經過connect執行主動打開,併發送一個SYN分節,他告訴服務器他將在連接中發送的數據的初始序列號,通常SYN分節不攜帶數據,它只含有一個IP頭部,一個TCP頭部和可能存在的TCP選項(一次握手)。

三、服務器確認客戶的SYN分節,同時發送一個SYN分節,他含有服務器將在連接中發送的數據的初始序列號(二次握手)。

四、客戶端需確認服務端的SYN(三次握手)。

TCP的SYN選項:

MSS選項:通知對方它的最大分節大小。

窗口規模選項:TCP通知雙方的最大窗口大小。

時間戳選項:防止失而復得的分組形成的數據損壞,高速鏈接是使用。

TCP終止:

一、調用close執行主動關閉(發送FIN分節)。

二、接收FIN的一端執行被動關閉,也做爲文件結束符傳給應用進程。

三、接收文件接收符的應用進程執行close,它的TCP發送一個FIN。

四、原發送方收到後執行確認ACK。

TCP狀態轉換:

Client發送SYN分節調用主動打開,狀態轉爲SYN_SENT;

Server接收到SYN分節,向client發送SYN分節和ACK信息,變爲SYN_RCVD;

Client接收到SYN分節和ACK信息,向server發送ACK,client變爲ESTABLISHED;

server接收到ACK狀態轉爲ESTABLISHED;

--------------------------------------------------------------------------------------------------------------------

Client發送FIN發起關閉,狀態轉換爲FIN_WAIT_1;

Client接收到ACK,狀態轉換爲FIN_WAIT_2;

Client接收到,發出ACK,狀態轉換爲TIME_WAIT;

TIME_WAIT持續2MSL(最長分節生命期),狀態轉爲關閉。

--------------------------------------------------------------------------------------------------------------------

Client發送FIN發起關閉,狀態轉換爲FIN_WAIT_1;

Client接收到server的FIN並回ACK,狀態轉換爲CLOSING;

Client接收到server的ACK,狀態轉換爲TIME_WAIT;

TIME_WAIT持續2MSL,狀態轉爲關閉。

--------------------------------------------------------------------------------------------------------------------

Client發送FIN發起關閉,狀態轉換爲FIN_WAIT_1;

Client接收到server的FIN;ACK並回ACK,狀態轉換爲TIME_WAIT;

TIME_WAIT持續2MSL,狀態轉爲關閉。

-----------------------------------------------------------------------------------------------------------

ESTABLISHED的server接收到FIN,並返回ACK,狀態轉換爲CLOSE_WAIT;

Server發送FIN,狀態轉換爲LAST_ACK;

Server接收到ACK,狀態轉爲關閉。

TIME_WAIT存在的理由:

一、實現TCP全雙工的可靠性。

若最終的ACK丟失,服務端可能重發最後的FIN,客戶端可能不得不重發最終的ACK。

二、容許老的重複分節在網絡中消逝。

在關閉鏈接後,以後又從新用相同的IP地址和端口建立鏈接,2MSL能夠保證兩個方向發送的分組被徹底丟棄,保證老的分組已經在網絡中消逝。

緩存區:

IPv4數據報最大爲65535字節,包括IPv4頭部(20字節)。

IPv6數據報最大爲65575,IPv6頭部佔40字節,有效負載長度16位。

最大傳輸單元(MTU),以太網的MTU爲1500,IPv4的最小MTU爲68,IPv6爲576字節,路徑MTU在不一樣方向能夠不一樣。若一個ip數據報超過最大MTU,IPv4和IPv6都會執行分片,IPv4在主機和路由器轉發的數據報都會執行分片,IPv6只在主機對數據報進行分片。但若IPv4的DF位被設置,則不容許分片,但會拋錯。IPv4支持的最小數據報爲576字節,IPv6爲1500字節。

調用write時,內核從應用進程的緩存器拷貝數據到套接口的緩存區,拷貝完成write返回,因此write完成只表明拷貝完成,不表明數據傳輸成功。

UDP套接口的發送緩存區僅僅是發送到該套接口的UDP數據報的大小上限。

相關文章
相關標籤/搜索