成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

TCP 協(xié)議簡(jiǎn)單說明

cfanr / 949人閱讀

摘要:網(wǎng)絡(luò)層負(fù)責(zé)數(shù)據(jù)報(bào)的傳輸功能,相關(guān)的重要協(xié)議如協(xié)議等,它的傳送靠網(wǎng)卡驅(qū)動(dòng)程序來提供。

本文章簡(jiǎn)要的說明該協(xié)議的大概內(nèi)容,具體請(qǐng)百度哦!
TCP協(xié)議分為四層【有的分七層】
圖片來源于德州儀器網(wǎng)卡芯片的datasheet

1、數(shù)據(jù)鏈路層 【核心該層最重要,上層的協(xié)議都基于該層提供的驅(qū)動(dòng)程序來工作的,所以廢話會(huì)特別多】
2、網(wǎng)絡(luò)層
3、傳輸層
4、應(yīng)用層
數(shù)據(jù)鏈路層重要協(xié)議是ARP協(xié)議,其實(shí)ARP就是個(gè)C語(yǔ)言寫的驅(qū)動(dòng)程序,數(shù)據(jù)鏈路層重要的東西就是網(wǎng)卡芯片的驅(qū)動(dòng)程序,網(wǎng)卡芯片內(nèi)部含有大量的工作寄存器。圖如下


該芯片圖來自于臺(tái)灣半導(dǎo)體廠商的資料!【具體芯片圖可聯(lián)系本人獲取哦】 該芯片用于嵌入式系統(tǒng)的以太網(wǎng)控制器,編寫驅(qū)動(dòng)程序即可實(shí)現(xiàn)數(shù)據(jù)收發(fā)功能【tcp,udp僅僅只是一種協(xié)議,低層還得依賴芯片的驅(qū)動(dòng)程序,寫過驅(qū)動(dòng)程序的同學(xué)應(yīng)該比較清楚,上層應(yīng)用都是用下層提供的功能來做的】

內(nèi)部結(jié)構(gòu)有物理收發(fā)器即PHY,Mac,處理器接口,內(nèi)存管理,內(nèi)存隨機(jī)寄存器SRAM,MII管理寄存器,包括EEPROM可電擦除寄存器等。

風(fēng)卡芯片的外部硬件連接圖

寄存器是一種具有存儲(chǔ)功能的邏輯電路,它的驅(qū)動(dòng)靠時(shí)鐘脈方波信號(hào)驅(qū)動(dòng)其工作,其輸出與輸入及當(dāng)時(shí)的狀態(tài)有關(guān),不像組合邏輯電路,寄存器是由大量的觸發(fā)器構(gòu)成的,一個(gè)觸發(fā)器具有記憶一位二進(jìn)制的功能,其輸出與輸入的信號(hào)有關(guān),無非就是0或1,觸發(fā)器由門電路構(gòu)成【常規(guī)的門如與門,或門,非門,與或門,與非門等門電路,就是實(shí)現(xiàn)與,或,非,與或,與非,異或等邏輯運(yùn)算的電路】這些電路呢由半導(dǎo)體二極管或三極管或場(chǎng)效應(yīng)管元件構(gòu)成,總之呢記住寄存器具有數(shù)據(jù)記憶功能就行了。

芯片的功能


它支持了字節(jié),單字節(jié),雙字節(jié)指令可訪問內(nèi)部數(shù)據(jù),集成了10、100的收發(fā)器,支持IEEE協(xié)會(huì)的標(biāo)準(zhǔn),支持喚醒,集成了4k大小的雙字節(jié)寄存器,并且呢EEPROM內(nèi)在出廠的時(shí)候內(nèi)置了一些數(shù)據(jù),用戶可以讀取其數(shù)據(jù),兼容3.3V和5V的工作電壓,芯片有32位的數(shù)據(jù)總線,支持4個(gè)字節(jié)進(jìn)行訪問。

芯片引腳說明
處理器接口說明:


部分引腳具有輸出和輸入功能即IO,輸入為I,輸入為O,供電為P
有讀指令引腳,寫指令引腳,數(shù)據(jù)總線引腳,數(shù)據(jù)總線都能輸入電壓或輸出電壓【數(shù)據(jù)】,包括芯片使能引腳,以及地址總線引腳用于選中芯片

時(shí)鐘脈沖接口

芯片的讀寫操作
一般來說網(wǎng)卡芯片會(huì)連接相應(yīng)的處理器芯片如單片機(jī)S3C2440或是STM32等這些處理器芯片,網(wǎng)卡芯片一般支持32位或是16位的數(shù)據(jù)總線,處理器的數(shù)據(jù)總線引腳會(huì)連接網(wǎng)卡芯片的數(shù)據(jù)引腳如SD0~SD31,其中最重要的是處理器引腳如CMD,IOR#,IOW#,AEN,CMD輸入不同的信號(hào)【高電平或低電平會(huì)選擇數(shù)據(jù)總線傳輸過來的是寄存器地址或是寄存的數(shù)據(jù)】

寫操作
一般是指定寄存器地址,再給寄存器數(shù)據(jù),首先是指定TXSRAM寄存器,再往該寄存器寫上數(shù)據(jù),通過控制引腳CMD端口的電平信號(hào),往數(shù)據(jù)總線上寫入要發(fā)送的數(shù)據(jù),再使能TX控制器寄存發(fā)送數(shù)據(jù),數(shù)據(jù)的發(fā)送狀態(tài)會(huì)記錄到TX狀態(tài)寄存器和網(wǎng)絡(luò)狀態(tài)寄存器。TXSRAM一般由MWCMD關(guān)聯(lián)。操作寫時(shí)指定該寄存器。再發(fā)送的時(shí)候同時(shí)要把發(fā)送數(shù)據(jù)的長(zhǎng)度大小也寫入TXPLH,TXPLL的寄存器里。

讀操作
同樣是指定RXSRAM寄存器,地址是MRCMD指定,網(wǎng)卡芯片接受到數(shù)據(jù)時(shí),數(shù)據(jù)會(huì)保存在RXSRAM寄存器里,通過指定該寄存器,數(shù)據(jù)會(huì)從數(shù)據(jù)總線SD輸出到處理器【即單片機(jī)】 ,程序會(huì)不斷的讀取RXSRAM寄存是否有數(shù)據(jù),有數(shù)據(jù)后直接從數(shù)據(jù)總線獲取輸出的數(shù)據(jù)即可。

【讀寫一般接的是數(shù)據(jù)總線,不接數(shù)據(jù)總線就得按讀寫時(shí)序來處理】
數(shù)據(jù)的發(fā)送和接受必須知道對(duì)方的mac地址,mac地址一般在出廠的時(shí)候就寫在相應(yīng)的寄存器里了,所以數(shù)據(jù)在傳輸前會(huì)先得到另一塊網(wǎng)卡芯片的mac地址,mac地址一般是6個(gè)字節(jié),而通常是傳輸對(duì)方的ip換回對(duì)方的mac地址返回,這一過程就是地址解析即ARP?!綼rp的請(qǐng)求和響應(yīng)過程具體可自行查找資料】

由此得出數(shù)據(jù)鏈路層的驅(qū)動(dòng)程序在發(fā)送和接受時(shí),需要知道對(duì)方的mac地址和要發(fā)送的數(shù)據(jù)即可。

網(wǎng)卡芯片的驅(qū)動(dòng)程序主要是為上層提供服務(wù)的,反正都是讀數(shù)據(jù)和寫數(shù)據(jù),知道要哪個(gè)mac【哪張網(wǎng)卡】讀寫就可以了。

網(wǎng)絡(luò)層:
負(fù)責(zé)數(shù)據(jù)報(bào)的傳輸功能,相關(guān)的重要協(xié)議如ICMP,IP協(xié)議等,它的傳送靠網(wǎng)卡驅(qū)動(dòng)程序來提供。

傳輸層:
TCP,UDP一個(gè)是基于字節(jié)流的傳輸,一個(gè)是基于數(shù)據(jù)報(bào)的傳輸,字節(jié)流的傳輸穩(wěn)定,采用應(yīng)答機(jī)制,具有超時(shí)重傳等功能讓數(shù)據(jù)能完全到達(dá)接收端,而UDP則相反。
針對(duì)TCP編程操作系統(tǒng)提供了socket接口給上層使用,基于此接口開發(fā)了一堆應(yīng)用層協(xié)議,如比較常見的http,ftp等協(xié)議。
TCP協(xié)議說明:
TCP在傳輸數(shù)據(jù)時(shí)會(huì)經(jīng)過tcp打包封裝【反正每一層都封裝,對(duì)應(yīng)的接收端就是分發(fā)層層解析】,此層2個(gè)重要的參數(shù)就是ip,port即地址和端口號(hào),端口號(hào)【由用戶指定,一般最多是65535個(gè),有部分端口是系統(tǒng)用的,有部分端口是那些著名的軟件用的端口如80,6379,3306這些玩意用了】 ip嘛不用說,因?yàn)锳RP驅(qū)動(dòng)在運(yùn)行時(shí)需要知道對(duì)方的mac地址,這個(gè)ip呢是對(duì)方的ip,端口號(hào)用于區(qū)分是哪個(gè)應(yīng)用程序了,到底是http如web服務(wù)器還是其它服務(wù)器,所以接收時(shí)根據(jù)port端口號(hào)以便區(qū)分。

TCP在傳輸?shù)臅r(shí)候會(huì)封裝成目的ip,端口,源ip,源端口,32位的序列號(hào),32位的確認(rèn)號(hào),以及一些標(biāo)志位如SYN,ACK,FIN,PUSH,RST等標(biāo)志位。 具體圖如下

SYN:是一個(gè)連接標(biāo)志位,表示發(fā)送端發(fā)起了一次連接請(qǐng)求,一般是客戶端發(fā)起,如通過socket接口的connect函數(shù)發(fā)送一個(gè)SYN【此時(shí)它時(shí)SYN_SENT狀態(tài)】,這個(gè)時(shí)間如果服務(wù)器響應(yīng)了就會(huì)發(fā)送一個(gè)確認(rèn)標(biāo)志位 即ACK
確認(rèn)序列號(hào)呢會(huì)在32序列號(hào)的基礎(chǔ)上加1表示確認(rèn)此時(shí)服務(wù)器處于SYN_RVD狀態(tài),如果客戶也確認(rèn)了也會(huì)發(fā)送ACK應(yīng)答標(biāo)志位此時(shí)都處于ESTABLISHED狀態(tài)了,雙方就可以互相發(fā)送消息,以上的過程就是典型的三次握手 【有的人搞四次握手】
通過測(cè)試【測(cè)試圖片位于本人的github上】

所以當(dāng)你在調(diào)用【如你擼的PHP調(diào)用socket連接函數(shù)時(shí)客戶端會(huì)發(fā)送一次SYN連接請(qǐng)求報(bào)文,SYN標(biāo)志位會(huì)發(fā)送過去,當(dāng)然服務(wù)器端一般會(huì)先啟動(dòng),主要是調(diào)用listen函數(shù)時(shí)入LISTEN狀態(tài)【你用talent命令就能看到服務(wù)器-tcp的狀態(tài)了-擼過workerman,swoole或是c的socket API應(yīng)該清楚了】,此時(shí)低層驅(qū)動(dòng)運(yùn)行后,服務(wù)器接受到后【確認(rèn)是發(fā)送給自己的】會(huì)發(fā)送一個(gè)SYN的應(yīng)答即ACK+1,當(dāng)客戶端也確認(rèn)后就連接成功,如果說端口不存在或是端口被占用了就會(huì)連接失敗。

當(dāng)你客戶端調(diào)用close函數(shù)時(shí),客戶端會(huì)發(fā)送一個(gè)FIN結(jié)束報(bào)文,此時(shí)客戶端處于FIN_WAIT1狀態(tài),服務(wù)器端確認(rèn)后即也發(fā)送了ACK應(yīng)答確認(rèn)報(bào)文,此時(shí)服務(wù)器處于CLOSE_WAIT狀態(tài),客戶端也確認(rèn)了處于FIN_WAIT2狀態(tài),目前這狀態(tài)客戶端或是服務(wù)器都能發(fā)送數(shù)據(jù),因?yàn)檫€沒有真正的關(guān)掉【有的叫半打開狀態(tài)?】如果服務(wù)器也發(fā)送FIN結(jié)束報(bào)文,此時(shí)服務(wù)器端處于【就是服務(wù)器也調(diào)用了close函數(shù)】LAST_LOCK狀態(tài),客戶端如果確認(rèn)了服務(wù)器就處于CLOSED狀態(tài)了,客戶端處于TIME_WAIT狀態(tài)【它有一定的生存周期,目的是能確認(rèn)安全的關(guān)閉了,萬(wàn)一服務(wù)器發(fā)送了FIN報(bào)文時(shí),網(wǎng)斷了客戶端沒有收到,然后呢又通網(wǎng)了,它能再次接受到這個(gè)報(bào)文】

通過分析【我發(fā)的測(cè)試圖片,你們可以自己去測(cè)試不知道的可以百度或是聯(lián)系我】我們得出了TCP確認(rèn)是采用應(yīng)答機(jī)制,不管是連接,關(guān)閉,發(fā)送數(shù)據(jù),都要得到對(duì)方的答應(yīng)報(bào)文進(jìn)行確認(rèn)后再進(jìn)行下一步的操作。

地址說明:
操作系統(tǒng)提供的地址有通用地址,以及IPV4,IPV6,UNIX地址【具體可以看C語(yǔ)言的相關(guān)函數(shù)說明】
地址一般提供了IP,PORT,FAMILY即ip,端口號(hào)和地址族以及相關(guān)的協(xié)議族和數(shù)據(jù)流類型主要有字節(jié)流如SOCK_STREAM和數(shù)據(jù)報(bào)服務(wù)如SOCK_DGRAM【UDP協(xié)議就是】

當(dāng)大家對(duì)TCP/IP協(xié)議了解清楚以后,應(yīng)用層的協(xié)議HTTP,FTP,TELNET等協(xié)議就簡(jiǎn)單了
【驅(qū)動(dòng)工程師才不管這些協(xié)議,操作網(wǎng)卡芯片驅(qū)動(dòng)就能完成局域網(wǎng)的傳輸了】

通過以上簡(jiǎn)單的分析大家應(yīng)該了解TCP/IP協(xié)議的一個(gè)通信過程了,包括低層驅(qū)動(dòng)也做了簡(jiǎn)單的說明。
具體大家可以自行查找資料補(bǔ)充

本文轉(zhuǎn)載時(shí)請(qǐng)指明來源!謝謝各位

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31703.html

相關(guān)文章

  • TCP/IP協(xié)議

    摘要:協(xié)議族的構(gòu)成數(shù)據(jù)鏈路層網(wǎng)絡(luò)層傳輸層應(yīng)用層和是網(wǎng)絡(luò)層的協(xié)議,但是它所工作的內(nèi)容是鏈路層的。。。發(fā)送的時(shí)候,協(xié)議為每個(gè)包編號(hào),簡(jiǎn)稱,以便接收的一方按照順序還原。并沒有提供任何機(jī)制,表示原始文件的大小,這由應(yīng)用層的協(xié)議來規(guī)定。 TCP/IP協(xié)議族的構(gòu)成 * 數(shù)據(jù)鏈路層:ARP,RARP * 網(wǎng)絡(luò)層: IP,ICMP,IGMP * 傳輸層:TCP ,UDP,UGP * 應(yīng)用層:Telnet,F...

    CrazyCodes 評(píng)論0 收藏0
  • 服務(wù)器常用端口大全

    大家在學(xué)習(xí)計(jì)算機(jī)的時(shí)候,對(duì)于最常用的幾個(gè)端口比如80端口肯定有很深的印象,但是對(duì)于其他一些不是那么常用的端口可能就沒那么了解。所以,在一些使用頻率相對(duì)較高的端口上,很容易會(huì)引發(fā)一些由于陌生而出現(xiàn)的錯(cuò)誤,或者被黑客利用某些端口進(jìn)行入侵。對(duì)于這件事情,大部分人都很頭疼——最多可達(dá)65535個(gè)的端口,讓人怎么記?別怕,小編專門給大家整理了一些比較常見端口信息,遇到問題,一查就好啦!一個(gè)計(jì)算機(jī)最多有655...

    UCloud小助手 評(píng)論0 收藏0
  • tcp的認(rèn)知和應(yīng)用

    摘要:表示首部的長(zhǎng)度為字節(jié)除掉和剛好字節(jié)。差錯(cuò)控制,校驗(yàn)和的計(jì)算包括首部數(shù)據(jù)和其它填充字節(jié)。如果兩次校驗(yàn)和一致說明數(shù)據(jù)是正確的,否則將認(rèn)為數(shù)據(jù)被破壞,接收端將丟棄該數(shù)據(jù)。此時(shí)包的序號(hào)被設(shè)定為收到的確認(rèn)號(hào),而響應(yīng)號(hào)則為。 什么是tcp tcp定義 tcp是網(wǎng)絡(luò)七層模型當(dāng)中傳輸層的協(xié)議,由IETF的RFC 793定義,是面向連接的、可靠的、基于字節(jié)流的通信協(xié)議。而傳輸層位于七層模型的中間,下面是...

    chanthuang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<