摘要:網絡層負責數據報的傳輸功能,相關的重要協議如協議等,它的傳送靠網卡驅動程序來提供。
本文章簡要的說明該協議的大概內容,具體請百度哦!
TCP協議分為四層【有的分七層】
圖片來源于德州儀器網卡芯片的datasheet
1、數據鏈路層 【核心該層最重要,上層的協議都基于該層提供的驅動程序來工作的,所以廢話會特別多】
2、網絡層
3、傳輸層
4、應用層
數據鏈路層重要協議是ARP協議,其實ARP就是個C語言寫的驅動程序,數據鏈路層重要的東西就是網卡芯片的驅動程序,網卡芯片內部含有大量的工作寄存器。圖如下
該芯片圖來自于臺灣半導體廠商的資料!【具體芯片圖可聯系本人獲取哦】 該芯片用于嵌入式系統的以太網控制器,編寫驅動程序即可實現數據收發功能【tcp,udp僅僅只是一種協議,低層還得依賴芯片的驅動程序,寫過驅動程序的同學應該比較清楚,上層應用都是用下層提供的功能來做的】
內部結構有物理收發器即PHY,Mac,處理器接口,內存管理,內存隨機寄存器SRAM,MII管理寄存器,包括EEPROM可電擦除寄存器等。
風卡芯片的外部硬件連接圖
寄存器是一種具有存儲功能的邏輯電路,它的驅動靠時鐘脈方波信號驅動其工作,其輸出與輸入及當時的狀態有關,不像組合邏輯電路,寄存器是由大量的觸發器構成的,一個觸發器具有記憶一位二進制的功能,其輸出與輸入的信號有關,無非就是0或1,觸發器由門電路構成【常規的門如與門,或門,非門,與或門,與非門等門電路,就是實現與,或,非,與或,與非,異或等邏輯運算的電路】這些電路呢由半導體二極管或三極管或場效應管元件構成,總之呢記住寄存器具有數據記憶功能就行了。
芯片的功能
它支持了字節,單字節,雙字節指令可訪問內部數據,集成了10、100的收發器,支持IEEE協會的標準,支持喚醒,集成了4k大小的雙字節寄存器,并且呢EEPROM內在出廠的時候內置了一些數據,用戶可以讀取其數據,兼容3.3V和5V的工作電壓,芯片有32位的數據總線,支持4個字節進行訪問。
芯片引腳說明
處理器接口說明:
部分引腳具有輸出和輸入功能即IO,輸入為I,輸入為O,供電為P
有讀指令引腳,寫指令引腳,數據總線引腳,數據總線都能輸入電壓或輸出電壓【數據】,包括芯片使能引腳,以及地址總線引腳用于選中芯片
時鐘脈沖接口
芯片的讀寫操作
一般來說網卡芯片會連接相應的處理器芯片如單片機S3C2440或是STM32等這些處理器芯片,網卡芯片一般支持32位或是16位的數據總線,處理器的數據總線引腳會連接網卡芯片的數據引腳如SD0~SD31,其中最重要的是處理器引腳如CMD,IOR#,IOW#,AEN,CMD輸入不同的信號【高電平或低電平會選擇數據總線傳輸過來的是寄存器地址或是寄存的數據】
寫操作
一般是指定寄存器地址,再給寄存器數據,首先是指定TXSRAM寄存器,再往該寄存器寫上數據,通過控制引腳CMD端口的電平信號,往數據總線上寫入要發送的數據,再使能TX控制器寄存發送數據,數據的發送狀態會記錄到TX狀態寄存器和網絡狀態寄存器。TXSRAM一般由MWCMD關聯。操作寫時指定該寄存器。再發送的時候同時要把發送數據的長度大小也寫入TXPLH,TXPLL的寄存器里。
讀操作
同樣是指定RXSRAM寄存器,地址是MRCMD指定,網卡芯片接受到數據時,數據會保存在RXSRAM寄存器里,通過指定該寄存器,數據會從數據總線SD輸出到處理器【即單片機】 ,程序會不斷的讀取RXSRAM寄存是否有數據,有數據后直接從數據總線獲取輸出的數據即可。
【讀寫一般接的是數據總線,不接數據總線就得按讀寫時序來處理】
數據的發送和接受必須知道對方的mac地址,mac地址一般在出廠的時候就寫在相應的寄存器里了,所以數據在傳輸前會先得到另一塊網卡芯片的mac地址,mac地址一般是6個字節,而通常是傳輸對方的ip換回對方的mac地址返回,這一過程就是地址解析即ARP。【arp的請求和響應過程具體可自行查找資料】
由此得出數據鏈路層的驅動程序在發送和接受時,需要知道對方的mac地址和要發送的數據即可。
網卡芯片的驅動程序主要是為上層提供服務的,反正都是讀數據和寫數據,知道要哪個mac【哪張網卡】讀寫就可以了。
網絡層:
負責數據報的傳輸功能,相關的重要協議如ICMP,IP協議等,它的傳送靠網卡驅動程序來提供。
傳輸層:
TCP,UDP一個是基于字節流的傳輸,一個是基于數據報的傳輸,字節流的傳輸穩定,采用應答機制,具有超時重傳等功能讓數據能完全到達接收端,而UDP則相反。
針對TCP編程操作系統提供了socket接口給上層使用,基于此接口開發了一堆應用層協議,如比較常見的http,ftp等協議。
TCP協議說明:
TCP在傳輸數據時會經過tcp打包封裝【反正每一層都封裝,對應的接收端就是分發層層解析】,此層2個重要的參數就是ip,port即地址和端口號,端口號【由用戶指定,一般最多是65535個,有部分端口是系統用的,有部分端口是那些著名的軟件用的端口如80,6379,3306這些玩意用了】 ip嘛不用說,因為ARP驅動在運行時需要知道對方的mac地址,這個ip呢是對方的ip,端口號用于區分是哪個應用程序了,到底是http如web服務器還是其它服務器,所以接收時根據port端口號以便區分。
TCP在傳輸的時候會封裝成目的ip,端口,源ip,源端口,32位的序列號,32位的確認號,以及一些標志位如SYN,ACK,FIN,PUSH,RST等標志位。 具體圖如下
SYN:是一個連接標志位,表示發送端發起了一次連接請求,一般是客戶端發起,如通過socket接口的connect函數發送一個SYN【此時它時SYN_SENT狀態】,這個時間如果服務器響應了就會發送一個確認標志位 即ACK
確認序列號呢會在32序列號的基礎上加1表示確認此時服務器處于SYN_RVD狀態,如果客戶也確認了也會發送ACK應答標志位此時都處于ESTABLISHED狀態了,雙方就可以互相發送消息,以上的過程就是典型的三次握手 【有的人搞四次握手】
通過測試【測試圖片位于本人的github上】
所以當你在調用【如你擼的PHP調用socket連接函數時客戶端會發送一次SYN連接請求報文,SYN標志位會發送過去,當然服務器端一般會先啟動,主要是調用listen函數時入LISTEN狀態【你用talent命令就能看到服務器-tcp的狀態了-擼過workerman,swoole或是c的socket API應該清楚了】,此時低層驅動運行后,服務器接受到后【確認是發送給自己的】會發送一個SYN的應答即ACK+1,當客戶端也確認后就連接成功,如果說端口不存在或是端口被占用了就會連接失敗。
當你客戶端調用close函數時,客戶端會發送一個FIN結束報文,此時客戶端處于FIN_WAIT1狀態,服務器端確認后即也發送了ACK應答確認報文,此時服務器處于CLOSE_WAIT狀態,客戶端也確認了處于FIN_WAIT2狀態,目前這狀態客戶端或是服務器都能發送數據,因為還沒有真正的關掉【有的叫半打開狀態?】如果服務器也發送FIN結束報文,此時服務器端處于【就是服務器也調用了close函數】LAST_LOCK狀態,客戶端如果確認了服務器就處于CLOSED狀態了,客戶端處于TIME_WAIT狀態【它有一定的生存周期,目的是能確認安全的關閉了,萬一服務器發送了FIN報文時,網斷了客戶端沒有收到,然后呢又通網了,它能再次接受到這個報文】
通過分析【我發的測試圖片,你們可以自己去測試不知道的可以百度或是聯系我】我們得出了TCP確認是采用應答機制,不管是連接,關閉,發送數據,都要得到對方的答應報文進行確認后再進行下一步的操作。
地址說明:
操作系統提供的地址有通用地址,以及IPV4,IPV6,UNIX地址【具體可以看C語言的相關函數說明】
地址一般提供了IP,PORT,FAMILY即ip,端口號和地址族以及相關的協議族和數據流類型主要有字節流如SOCK_STREAM和數據報服務如SOCK_DGRAM【UDP協議就是】
當大家對TCP/IP協議了解清楚以后,應用層的協議HTTP,FTP,TELNET等協議就簡單了
【驅動工程師才不管這些協議,操作網卡芯片驅動就能完成局域網的傳輸了】
通過以上簡單的分析大家應該了解TCP/IP協議的一個通信過程了,包括低層驅動也做了簡單的說明。
具體大家可以自行查找資料補充
本文轉載時請指明來源!謝謝各位
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31703.html
摘要:協議族的構成數據鏈路層網絡層傳輸層應用層和是網絡層的協議,但是它所工作的內容是鏈路層的。。。發送的時候,協議為每個包編號,簡稱,以便接收的一方按照順序還原。并沒有提供任何機制,表示原始文件的大小,這由應用層的協議來規定。 TCP/IP協議族的構成 * 數據鏈路層:ARP,RARP * 網絡層: IP,ICMP,IGMP * 傳輸層:TCP ,UDP,UGP * 應用層:Telnet,F...
摘要:表示首部的長度為字節除掉和剛好字節。差錯控制,校驗和的計算包括首部數據和其它填充字節。如果兩次校驗和一致說明數據是正確的,否則將認為數據被破壞,接收端將丟棄該數據。此時包的序號被設定為收到的確認號,而響應號則為。 什么是tcp tcp定義 tcp是網絡七層模型當中傳輸層的協議,由IETF的RFC 793定義,是面向連接的、可靠的、基于字節流的通信協議。而傳輸層位于七層模型的中間,下面是...
閱讀 1993·2021-11-24 10:45
閱讀 1849·2021-10-09 09:43
閱讀 1291·2021-09-22 15:38
閱讀 1219·2021-08-18 10:19
閱讀 2837·2019-08-30 15:55
閱讀 3057·2019-08-30 12:45
閱讀 2961·2019-08-30 11:25
閱讀 356·2019-08-29 11:30