freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

tcpip協(xié)議規(guī)范及uip處理流程(編輯修改稿)

2025-05-04 06:42 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 。在需要回答收到的報(bào)文時(shí),應(yīng)把發(fā)送端的套接字地址一起傳遞給接收進(jìn)程。 UDP軟件包共包括5個(gè)構(gòu)件:一個(gè)控制塊表、若干個(gè)輸入隊(duì)列、一個(gè)控制塊模塊、一個(gè)輸入模塊和一個(gè)輸出模塊。在UDP中,隊(duì)列是與端口相關(guān)聯(lián)在一起的。這里的實(shí)現(xiàn)只創(chuàng)建與每一個(gè)進(jìn)程相關(guān)聯(lián)的輸入隊(duì)列,而不創(chuàng)建輸出隊(duì)列。l 控制塊表UDP控制塊表來(lái)記錄打開的端口。表中的每一個(gè)項(xiàng)目有最小的4個(gè)字段:狀態(tài)(FREE或INUSE)、進(jìn)程ID、端口號(hào)以及相應(yīng)的隊(duì)列號(hào)。l 輸入隊(duì)列使用了一組輸入隊(duì)列,每一個(gè)對(duì)應(yīng)于一個(gè)進(jìn)程。l 控制塊模塊負(fù)責(zé)管理控制塊表。當(dāng)進(jìn)程啟動(dòng)時(shí),它就從操作系統(tǒng)請(qǐng)求得到一個(gè)端口號(hào)。操作系統(tǒng)把熟知端口號(hào)指派給服務(wù)器,而把短暫端口號(hào)指派給客戶。進(jìn)程把進(jìn)程ID和端口號(hào)傳遞給控制塊模塊,以便在表中為這個(gè)進(jìn)程創(chuàng)建一個(gè)項(xiàng)目。這個(gè)模塊不創(chuàng)建隊(duì)列。隊(duì)列數(shù)字段值為零。l 輸入模塊輸入模塊從IP接收用戶數(shù)據(jù)報(bào)。它查找控制塊表,查找具有和這個(gè)用戶數(shù)據(jù)報(bào)同樣端口號(hào)的項(xiàng)目。若找到這樣的項(xiàng)目,模塊就利用這項(xiàng)目中的信息把這個(gè)數(shù)據(jù)放入隊(duì)列。若未找到這樣的項(xiàng)目,它就產(chǎn)生ICMP“端口不可達(dá)”報(bào)文,并丟棄這個(gè)項(xiàng)目。l 輸出模塊負(fù)責(zé)創(chuàng)建和發(fā)送用戶數(shù)據(jù)報(bào)。 傳輸控制協(xié)議(TCP)TCP叫做面向連接的、可靠的運(yùn)輸協(xié)議。它提供進(jìn)程到進(jìn)程、全雙工和面向連接的服務(wù)。TCP使用滑動(dòng)窗口機(jī)制實(shí)現(xiàn)流量控制,來(lái)避免接收端因數(shù)據(jù)過(guò)多而過(guò)載;使用差錯(cuò)控制來(lái)提供可靠的服務(wù)。兩個(gè)設(shè)備之間使用TCP軟件傳送的數(shù)據(jù)單元叫做報(bào)文段,它有20~60字節(jié)的首部,首部后面是來(lái)自應(yīng)用程序的數(shù)據(jù)。首部結(jié)構(gòu)如前所述。 TCP連接TCP的連接通常包括3個(gè)階段:連接建立、數(shù)據(jù)傳送和連接終止。連接建立需要三向握手:l 客戶發(fā)送第一個(gè)報(bào)文段,SYN報(bào)文段。SYN報(bào)文段是控制報(bào)文段,不攜帶任何數(shù)據(jù),但是消耗一個(gè)序號(hào)。當(dāng)數(shù)據(jù)傳送開始時(shí),每發(fā)送一個(gè)字節(jié),序號(hào)應(yīng)該加1. 在接收端可以根據(jù)序號(hào)排出數(shù)據(jù)包的正確順序,也可以發(fā)現(xiàn)丟包的情況。l 服務(wù)器發(fā)送第二個(gè)報(bào)文段,SYN+ACK報(bào)文段,有兩個(gè)標(biāo)志位置1(SYN和ACK)。服務(wù)器使用這個(gè)報(bào)文段同步初始序號(hào),以便從服務(wù)器向客戶發(fā)送字節(jié)。使用ACK確認(rèn)已從客戶端收到了SYN報(bào)文段,確認(rèn)號(hào)為客戶端發(fā)送SYN報(bào)文段序號(hào)值加1.l 客戶發(fā)送第三個(gè)報(bào)文ACK,確認(rèn)號(hào)為服務(wù)器發(fā)送報(bào)文段的序號(hào)值加1。該報(bào)文段的序號(hào)與SYN報(bào)文段使用的序號(hào)一樣。ACK報(bào)文段如果不攜帶數(shù)據(jù)就不消耗序號(hào)。連接建立后,數(shù)據(jù)開始雙向傳送:在數(shù)據(jù)傳輸過(guò)程中,ACK和確認(rèn)序號(hào)是非常重要的,應(yīng)用程序交給TCP協(xié)議發(fā)送的數(shù)據(jù)會(huì)暫存在TCP層的發(fā)送緩沖區(qū)中,發(fā)出數(shù)據(jù)包給對(duì)方之后,只有收到對(duì)方應(yīng)答的ACK段才知道該數(shù)據(jù)包確實(shí)發(fā)到了對(duì)方,可以從發(fā)送緩沖區(qū)中釋放掉了,如果因?yàn)榫W(wǎng)絡(luò)故障丟失了數(shù)據(jù)包或者丟失了對(duì)方發(fā)回的ACK段,經(jīng)過(guò)等待超時(shí)后TCP協(xié)議自動(dòng)將發(fā)送緩沖區(qū)中的數(shù)據(jù)包重發(fā)。 以上情況只描述了最簡(jiǎn)單的一問(wèn)一答的情景,事實(shí)上TCP協(xié)議為應(yīng)用層提供了全雙工(fullduplex)的服務(wù),雙方都可以主動(dòng)甚至同時(shí)給對(duì)方發(fā)送數(shù)據(jù)。如果通訊過(guò)程只能采用一問(wèn)一答的方式,收和發(fā)兩個(gè)方向不能同時(shí)傳輸,在同一時(shí)間只允許一個(gè)方向的數(shù)據(jù)傳輸,則稱為39。39。39。半雙工(halfduplex)39。39。39。,假設(shè)某種面向連接的協(xié)議是半雙工的,則只需要一套序號(hào)就夠了,不需要通訊雙方各自維護(hù)一套序號(hào)了。參加交換數(shù)據(jù)的雙方中的任何一方都可以關(guān)閉連接, 連接終止的四向握手:l 在正常情況下,客戶機(jī)TCP接收到客戶進(jìn)程發(fā)來(lái)的關(guān)閉命令后,就發(fā)送第一個(gè)報(bào)文段——把FIN位置1。如果FIN報(bào)文段不攜帶數(shù)據(jù),它消耗一個(gè)序號(hào)。同時(shí)更改狀態(tài)為FIN_WAIT_1,關(guān)閉應(yīng)用程序進(jìn)程。l 服務(wù)器TCP在收到這個(gè)FIN報(bào)文段后,向自己對(duì)應(yīng)的進(jìn)程發(fā)送一個(gè)文件結(jié)束符EOF,同時(shí)更改狀態(tài)為CLOSE_WAIT,并發(fā)送第二個(gè)報(bào)文段——ACK,以證實(shí)從客戶端收到了FIN報(bào)文段。如果不攜帶數(shù)據(jù),客戶端接到ACK后狀態(tài)更改為FIN_WAIT_2。l 服務(wù)器關(guān)閉應(yīng)用程序進(jìn)程,更改狀態(tài)為L(zhǎng)AST_ACK。并發(fā)送第三個(gè)報(bào)文段——FIN,若不攜帶數(shù)據(jù),F(xiàn)IN消耗一個(gè)序號(hào)。l 客戶TCP接收到FIN后,更改狀態(tài)為TIMEWAIT,同時(shí)發(fā)送最后一個(gè)報(bào)文段——ACK,證實(shí)從TCP服務(wù)器收到了一個(gè)FIN報(bào)文段,該報(bào)文段的確認(rèn)號(hào)等于從服務(wù)器發(fā)送的FIN報(bào)文段的序號(hào)加1 。除上述的情況外,建立連接時(shí),客戶端和服務(wù)器端可以同時(shí)打開;關(guān)閉連接時(shí),可以同時(shí)關(guān)閉或者進(jìn)行三向握手。TCP的狀態(tài)機(jī)轉(zhuǎn)換圖如下所示:圖212TCP的各種狀態(tài)如下表2所示:表23 TCP的各種狀態(tài)狀態(tài)說(shuō)明CLOSED 沒(méi)有連接LISTEN 收到了被動(dòng)打開,等待SYNSYNSENT 已發(fā)送SYN;等待ACKSYNRCVD 已發(fā)送SYN+ACK;等待ACKESTABLISHED 連接已建立;數(shù)據(jù)傳送在進(jìn)行FINWAIT1 第一個(gè)FIN已發(fā)送;等待ACKFINWAIT2 對(duì)第一個(gè)FIN的ACK已收到;等待第二個(gè)FINCLOSEWAIT 收到第一個(gè)FIN,已發(fā)送ACK;等待應(yīng)用程序關(guān)閉TIMEWAIT 收到第二個(gè)FIN,已發(fā)送ACK;等待2MSL超時(shí)LASTACK 已發(fā)送第二個(gè)FIN;等待ACKCLOSING 雙方都已決定同時(shí)關(guān)閉 流量控制:如果發(fā)送端發(fā)送的速度較快,接收端接收到數(shù)據(jù)后處理的速度較慢,而接收緩沖區(qū)的大小是固定的,就會(huì)丟失數(shù)據(jù)。TCP協(xié)議通過(guò)39。39。39?;瑒?dòng)窗口(Sliding Window)39。39。39。機(jī)制解決這一問(wèn)題。TCP在接收緩存上定義一個(gè)窗口,TCP發(fā)送數(shù)據(jù)的多少由滑動(dòng)窗口協(xié)議定義。為了完成流量控制,TCP使用滑動(dòng)窗口協(xié)議。兩個(gè)主機(jī)為向外通信(發(fā)送數(shù)據(jù))各使用一個(gè)窗口,這個(gè)接收窗口覆蓋了緩存的一部分。這個(gè)窗口有兩個(gè)沿:一個(gè)在左邊,另一個(gè)在右邊。這個(gè)窗口叫做滑動(dòng)窗口,因?yàn)樽笱睾陀已囟伎梢曰瑒?dòng)。窗口可以展開、合攏或縮回,這三種活動(dòng)受接收端而不是發(fā)送端的控制(取決與網(wǎng)絡(luò)上的擁塞狀態(tài)),發(fā)送端必須聽從接收端的命令。一般,窗口縮回必須避免。TCP的滑動(dòng)窗口是面向字節(jié)的,窗口大小取決于接收窗口(rwnd)和擁塞窗口(cwnd)中的較小值。接收端在一段時(shí)間內(nèi)不愿意從發(fā)送端接收任何數(shù)據(jù)時(shí),可以發(fā)送rwnd為0的報(bào)文段來(lái)暫時(shí)關(guān)閉窗口,此時(shí)發(fā)送端窗口大小并非真正地縮回,而是暫停發(fā)送數(shù)據(jù),直到一個(gè)新的通告收到為止。 差錯(cuò)控制:差錯(cuò)控制由檢驗(yàn)和、確認(rèn)和超時(shí)來(lái)處理。受損傷的和重復(fù)的報(bào)文段要重傳,重復(fù)的報(bào)文段要丟棄。數(shù)據(jù)可能不按序到達(dá),接收端TCP把它們暫時(shí)存儲(chǔ)下來(lái),但TCP保證交付給進(jìn)程的報(bào)文段都是按序的。重傳發(fā)生在:當(dāng)重傳超時(shí)(RTO)計(jì)時(shí)器時(shí)間到,或已到達(dá)3個(gè)重復(fù)的ACK報(bào)文段。TCP使用擁塞機(jī)制來(lái)避免和檢測(cè)網(wǎng)絡(luò)中的擁塞。在擁塞控制中使用曼開始(指數(shù)增大)、擁塞避免(加法增大)和擁塞檢測(cè)(乘法減?。┑炔呗浴CP在運(yùn)行中使用4個(gè)計(jì)時(shí)器(重傳計(jì)時(shí)器、持久計(jì)時(shí)器、?;钣?jì)時(shí)器和時(shí)間等待計(jì)時(shí)器)。三、 UIP處理流程. 簡(jiǎn)介uIP協(xié)議棧去掉了完整的TCP/IP中不常用的功能,簡(jiǎn)化了通訊流程,但保留了網(wǎng)絡(luò)通信必須使用的協(xié)議,設(shè)計(jì)重點(diǎn)放在了ARP/ IP/ICMP/UDP/TCP這些網(wǎng)絡(luò)層和傳輸層協(xié)議上,保證了其代碼的通用性和結(jié)構(gòu)的穩(wěn)定性。由于uIP協(xié)議棧專門為嵌入式系統(tǒng)而設(shè)計(jì),它具有如下的優(yōu)點(diǎn):l 代碼非常少,其協(xié)議棧代碼不到6K;l 占用的內(nèi)存數(shù)非常少,RAM占用僅幾百字節(jié);l 其硬件處理層、協(xié)議棧層和應(yīng)用層共用一個(gè)全局緩存區(qū),不存在數(shù)據(jù)的拷貝,且發(fā)送和接收都是依靠這個(gè)緩存區(qū),極大的節(jié)省空間和時(shí)間。l 支持多個(gè)主動(dòng)連接和被動(dòng)連接并發(fā);l 通用性強(qiáng),移植起來(lái)基本不用修改就可以通過(guò);l 對(duì)數(shù)據(jù)的處理采用輪循機(jī)制,不需要操作系統(tǒng)的支持。. 層次結(jié)構(gòu)uIP相當(dāng)于一個(gè)代碼庫(kù),通過(guò)一系列的函數(shù)實(shí)現(xiàn)與底層硬件和高層應(yīng)用程序的通訊,對(duì)于整個(gè)系統(tǒng)來(lái)說(shuō)它內(nèi)部的協(xié)議組是透明的,從而增加了協(xié)議的通用性。 uIP協(xié)議棧與系統(tǒng)底層和高層應(yīng)用之間的關(guān)系如圖11所示:應(yīng)用程序UIP網(wǎng)卡驅(qū)動(dòng)系統(tǒng)定時(shí)器應(yīng)用層UIP協(xié)議棧硬件驅(qū)動(dòng)圖313 實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)與UIP對(duì)接需要的7個(gè)接口程序,:l define uip_input() uip_process(UIP_DATA)l define uip_periodic(conn) do { uip_conn = amp。uip_conns[conn]。 \ uip_process(UIP_TIMER)。 } while (0)l define uip_conn_active(conn) (uip_conns[conn].tcpstateflags != UIP_CLOSED)l define uip_periodic_conn(conn) do { uip_conn = conn。 \ uip_process(UIP_TIMER)。 } while (0)l define uip_poll_conn(conn) do { uip_conn = conn。 \ uip_process(UIP_POLL_REQUEST)。 } while (0)l define uip_udp_periodic(conn) do { uip_udp_conn = amp。uip_udp_conns[conn]。 \ uip_process(UIP_UDP_TIMER)。 } while (0)l define uip_udp_periodic_conn(conn) do { uip_udp_conn = conn。 \ uip_process(UIP_UDP_TIMER)。 } while (0)還有一個(gè)變量,在接口中要用到:u8_t uip_buf[UIP_BUFSIZE+2]。 對(duì)以上接口進(jìn)行詳細(xì)介紹:w define uip_input()處理輸入數(shù)據(jù)包。當(dāng)設(shè)備從網(wǎng)絡(luò)上接收到數(shù)據(jù)包時(shí)調(diào)用此函數(shù)。在調(diào)用此函數(shù)之前,應(yīng)將接收到的數(shù)據(jù)包內(nèi)容存入uip_buf緩沖區(qū),并將其長(zhǎng)度賦給uip_len.以太網(wǎng)內(nèi)使用的uip需要用到ARP協(xié)議,因此在調(diào)用此函數(shù)之前先調(diào)用uip的ARP代碼。此函數(shù)返回時(shí),如果系統(tǒng)有數(shù)據(jù)要輸出,會(huì)直接將數(shù)據(jù)存入uip_buf,并將其長(zhǎng)度值賦給uip_len。如果沒(méi)有數(shù)據(jù)要發(fā)送,則uip_len值為0.使用舉例如下:uip_len = tapdev_read(uip_buf)。 if(uip_len 0) { if(BUFtype == htons(UIP_ETHTYPE_IP)) { uip_arp_ipin()。 uip_input()。 if(uip_len 0) { uip_arp_out()。 tapdev_send(uip_buf,uip_len)。 } } else if(BUFtype == htons(UIP_ETHTYPE_ARP)) { uip_arp_arpin()。 if(uip_len 0) { tapdev_send(uip_buf,uip_len)。 } } }w define uip_periodic(conn)周期性的處理一個(gè)連接,需用到該連接的連接號(hào),conn為將要輪詢的連接號(hào)。該函數(shù)對(duì)一個(gè)uip的TCP連接進(jìn)行一些必要的周期性處理(如定時(shí)器、輪詢等),它應(yīng)該在周期性u(píng)ip定時(shí)器期滿消息到來(lái)時(shí)被調(diào)用。每一個(gè)連接都應(yīng)該調(diào)用該函數(shù),不論連接是否打開。該函數(shù)返回時(shí),若緩沖區(qū)內(nèi)有需要被發(fā)送出去的數(shù)據(jù)包等待處理,就將uip_len的值置為大于零的數(shù)。以太網(wǎng)內(nèi)使用的uip需要用到ARP協(xié)議,因此在調(diào)用驅(qū)動(dòng)程序之前先調(diào)用uip的ARP代碼uip_arp_out(),再調(diào)用設(shè)備驅(qū)動(dòng)程序?qū)?shù)據(jù)包發(fā)送出去。使用舉例如下:for(uint32_t i = 0。 i UIP_CONNS。 i++) { uip_periodic(i)。 if(uip_len 0) { uip_arp_out()。 tapdev_send(uip_buf,uip_len)。 } }w define uip_conn_active(conn) w define uip_periodic_conn(conn)對(duì)一個(gè)連接進(jìn)行周期性處理,需用到指向該連接結(jié)構(gòu)體的指針。該函數(shù)與uip_periodic執(zhí)行的操作是相同的,不同之處在于傳入的參數(shù)是一個(gè)指向uip_conn結(jié)構(gòu)體的指針。此函數(shù)可用于對(duì)某個(gè)連接強(qiáng)制進(jìn)行周期性處理。w define uip_poll_conn(conn)請(qǐng)求對(duì)特定連接進(jìn)行輪詢。該函數(shù)功能與uip_periodic()相同,但是不執(zhí)行任何定時(shí)器處理。通過(guò)輪詢從應(yīng)用程序得到新數(shù)據(jù)。w
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1