什么是TCP/IP協(xié)議?
- 互聯(lián)網(wǎng)地址:也就是IP地址,一般為網(wǎng)絡(luò)號+子網(wǎng)號+主機號
- 域名系統(tǒng):通俗的來說,就是一個數(shù)據(jù)庫,可以將主機名轉(zhuǎn)換成IP地址
- RFC:TCP/IP協(xié)議的標準文檔
- 端口號:一個邏輯號碼,IP包所帶有的標記
- Socket:應(yīng)用編程接口
- 為IP模塊發(fā)送和接收IP數(shù)據(jù)報
- 為ARP模塊發(fā)送ARP請求和接收ARP應(yīng)答(ARP:地址解析協(xié)議,將IP地址轉(zhuǎn)換成MAC地址)
- 為RARP發(fā)送RARP請求和接收RARP應(yīng)答
- ping查詢:主機是否可達,通過計算間隔時間和傳送多少個包的數(shù)量
- 子網(wǎng)掩碼
- 時間戳:獲得當前時間
- ICMP差錯報文不產(chǎn)生差錯報文
- 源地址為零地址、環(huán)目地址、廣播地址、多播地址
- 配置接口以默認方式生成路由表項,或者使用route add手動添加表項
- ICMP報文(ICMP重定向報文)更新表項
- 動態(tài)路由選擇(只使用在路由之間)
- 給每一個已知路由器發(fā)送RIP請求報文,要求給出完整的路由表
- 如果接受請求,就將自己的路由表交給請求者;如果沒有,就處理IP請求表項(自己部分+跳數(shù)/沒有的部分+16)
- 接受回應(yīng),更新路由表
- 定期更新路由表(一般為30s,只能說太頻繁~)
- 當鏈路狀態(tài)發(fā)生變化時,采用可靠的洪泛法,向所有的路由器發(fā)送信息(相鄰的所有路由器的鏈路狀態(tài))
- 最終會建立一個全網(wǎng)的拓撲結(jié)構(gòu)圖
- 在建立連接之前,B先創(chuàng)建TCB(傳輸控制塊),準備接受客戶進程的連接請求,處于LISTEN(監(jiān)聽)狀態(tài)
- A首先創(chuàng)建TCB,然后向B發(fā)出連接請求,SYN置1,同時選擇初始序號seq=x,進入SYN-SEND(同步已發(fā)送)狀態(tài)
- B收到連接請求后向A發(fā)送確認,SYN置1,ACK置1,同時產(chǎn)生一個確認序號ack=x+1。同時隨機選擇初始序號seq=y,進入SYN-RCVD(同步收到)狀態(tài)
- A收到確認連接請求后,ACK置1,確認號ack=y+1,seq=x+1,進入到ESTABLISHED(已建立連接)狀態(tài)。向B發(fā)出確認連接,最后B也進入到ESTABLISHED(已建立連接)狀態(tài)。
- 建立連接時,客戶端發(fā)送SYN包(SYN=i)到服務(wù)器,并進入到SYN-SEND狀態(tài),等待服務(wù)器確認
- 服務(wù)器收到SYN包,必須確認客戶的SYN(ack=i+1),同時自己也發(fā)送一個SYN包(SYN=k),即SYN+ACK包,此時服務(wù)器進入SYN-RECV狀態(tài)
- 客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認報ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進入ESTABLISHED狀態(tài),完成三次握手
- A發(fā)送一個FIN,用來關(guān)閉A到B的數(shù)據(jù)傳送,A進入FIN_WAIT_1狀態(tài)。
- B收到FIN后,發(fā)送一個ACK給A,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號),B進入CLOSE_WAIT狀態(tài)。
- B發(fā)送一個FIN,用來關(guān)閉B到A的數(shù)據(jù)傳送,B進入LAST_ACK狀態(tài)。
- A收到FIN后,A進入TIME_WAIT狀態(tài),接著發(fā)送一個ACK給B,確認序號為收到序號+1,B進入CLOSED狀態(tài),完成四次揮手。
- 客戶端A發(fā)送一個FIN,用來關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送(報文段4)。
- 服務(wù)器B收到這個FIN,它發(fā)回一個ACK,確認序號為收到的序號加1(報文段5)。和SYN一樣,一個FIN將占用一個序號。
- 服務(wù)器B關(guān)閉與客戶端A的連接,發(fā)送一個FIN給客戶端A(報文段6)。
- 客戶端A發(fā)回ACK報文確認,并將確認序號設(shè)置為收到序號加1(報文段7)。
- 為了保證A發(fā)送的最后一個ACK報文段能夠到達B
- 防止“已失效的連接請求報文段”出現(xiàn)在本連接中
- 客戶端發(fā)個請求“開門吶,我要進來”給服務(wù)器
- 服務(wù)器發(fā)個“進來吧,我去給你開門”給客戶端
- 客戶端有很客氣的發(fā)個“謝謝,我要進來了”給服務(wù)器
- 客戶端發(fā)個“時間不早了,我要走了”給服務(wù)器,等服務(wù)器起身送他
- 服務(wù)器聽到了,發(fā)個“我知道了,那我送你出門吧”給客戶端,等客戶端走
- 服務(wù)器把門關(guān)上后,發(fā)個“我關(guān)門了”給客戶端,然后等客戶端走(尼瑪~矯情?。?/span>
- 客戶端發(fā)個“我知道了,我走了”,之后自己就走了
精彩推薦:
【1】 編過SPI的程序嗎?時鐘相位和時鐘極性是什么? 【2】I2C操作筆記-以 AT24C04為例 【3】RS485是硬件接口,那么他是怎么實現(xiàn)數(shù)據(jù)通訊的呢?Modbus-RTU協(xié)議解析【4】 主流協(xié)議族TCP/IP協(xié)議,對此你了解多少
免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!