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