计算机网络知识整理
OSI七層
物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層、應(yīng)用層。
物理層涉及信道上傳輸?shù)谋忍亓鳌?
數(shù)據(jù)鏈路層的主要任務(wù)是加強(qiáng)物理層傳輸原始比特流的功能,是指對(duì)應(yīng)的網(wǎng)路層顯現(xiàn)為一條無錯(cuò)線路。發(fā)送包把數(shù)據(jù)封裝在數(shù)據(jù)幀,按順序傳送出去并處理接收方會(huì)送的確認(rèn)幀。
網(wǎng)絡(luò)層關(guān)系到子網(wǎng)的運(yùn)行控制,其中一個(gè)關(guān)鍵問題是確認(rèn)從源端到目的算如何選擇路由。
傳輸層的基本功能是從會(huì)話層接收數(shù)據(jù)而且把其分成較小的單元傳遞給網(wǎng)絡(luò)層。
會(huì)話層允許不同機(jī)器上的用戶建立會(huì)話關(guān)系。
表示層用來完成某些特定的功能。
應(yīng)用層包含著大量人們普遍需要的協(xié)議。
TCP和UDP
TCP是傳輸控制協(xié)議,提供的是面向連接、可靠的字節(jié)流服務(wù)。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須現(xiàn)在雙方,之間建立一個(gè)TCP連接,之后才能傳輸數(shù)據(jù)。TCP提供超時(shí)重發(fā)、丟棄重讀數(shù)據(jù)、檢驗(yàn)數(shù)據(jù)、流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端。
UDP是用戶數(shù)據(jù)報(bào)協(xié)議,是一個(gè)簡(jiǎn)單地面向數(shù)據(jù)報(bào)的運(yùn)輸協(xié)議。UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去,但是并不保證它們能夠到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒有超時(shí)重發(fā)等機(jī)制,故而傳輸速度快。
TCP就像是打電話,兩者之間必須有一條不間斷的通路,數(shù)據(jù)不到達(dá)對(duì)方,對(duì)方就一直在等待,除非對(duì)方直接掛電話。先說的話先到,后說的話后到,有順序。
UDP就像寄一封信,發(fā)現(xiàn)者只管發(fā),不管到。但是你的新風(fēng)尚必須寫明對(duì)方的資質(zhì)。發(fā)現(xiàn)者和收信者之間沒有通路,靠郵電局聯(lián)系。信發(fā)到時(shí)可能已經(jīng)過了很久,也可能根本沒有發(fā)到。先發(fā)的信未必先到,后發(fā)的信也未必后到。
Socket套接字
Socket相當(dāng)于進(jìn)行網(wǎng)絡(luò)通信兩端的插座,只要對(duì)方的Socket和自己的Socket有通信聯(lián)接,雙方就可以發(fā)送和接收數(shù)據(jù)了。其定義類似于文件句柄的定義。如果你要編寫的是一個(gè)服務(wù)程序,那么先調(diào)用socket()創(chuàng)建一個(gè)套接字,調(diào)用bind()綁定IP地址和端口號(hào),然后啟動(dòng)一個(gè)死循環(huán),循環(huán)中調(diào)用accept()接受連接。對(duì)于每個(gè)接受的鏈接,可以啟動(dòng)多線程方式進(jìn)行處理,在線程中調(diào)用send()、recv()發(fā)送和接收數(shù)據(jù)。
如果要編寫的是一個(gè)客戶端程序,那么久簡(jiǎn)單多了,先調(diào)用socket()創(chuàng)建一個(gè)套接字,然后調(diào)用connect()鏈接服務(wù)器,之后就是調(diào)用send()、recv()發(fā)送和接受數(shù)據(jù)了。
服務(wù)器端程序編寫:
1. 調(diào)用ServerSocket(int port)創(chuàng)建一個(gè)服務(wù)器端套接字,并綁定到制定端口上。
2. 調(diào)用accept(),監(jiān)聽連接請(qǐng)求,則接收連接,返回通信套接字。
3. 調(diào)用Socket類的getOutStream()和getInputStream()獲取輸出流和輸入流,開始網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收。
4. **關(guān)閉通信套接字**Socket.close()。
客戶端程序編寫:
1. 調(diào)用Socket()創(chuàng)建一個(gè)流套接字,并連接到服務(wù)器端。
2. 調(diào)用Socket類的getOutStream()和getInputStream()獲取輸出流和輸入流,開始網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收。
3. **關(guān)閉通信套接字**Socket.close()。
TCP三次握手四次握手
在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用3次握手建立一個(gè)連接。
第1次握手:建立連接時(shí),客戶端發(fā)送SYN包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn)。
第2次握手:服務(wù)器收到SYN包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)。
第3次握手:客戶端和服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此時(shí)發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成3次握手。
完成3次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù)。在上述過程中,還有一些概念。
未連接隊(duì)列:在3次握手協(xié)議中,服務(wù)器維護(hù)一個(gè)未連接隊(duì)列,該隊(duì)列為每個(gè)客戶端的SYN包(syn=j)開設(shè)一個(gè)條目,該條目表明服務(wù)器已收到SYN包,并向客戶發(fā)出確認(rèn),正在等待的客戶的確認(rèn)包。這些條目所標(biāo)識(shí)的鏈接在服務(wù)器處于Syn_RECV狀態(tài),當(dāng)服務(wù)器收到客戶的確認(rèn)保濕,刪除該條目,服務(wù)器進(jìn)入ESTABLISHED狀態(tài)。
Backlog參數(shù):標(biāo)識(shí)未連接隊(duì)列的最大容納數(shù)目。
SYN-ACK重傳次數(shù):服務(wù)器發(fā)送完SYN_ACK包,如果未收到客戶確認(rèn)包,服務(wù)器進(jìn)行首次重傳,等待一段時(shí)間仍未收到客戶確認(rèn)包,進(jìn)行第二次沖床,如果重傳次數(shù)超過系統(tǒng)規(guī)定的最大重傳次數(shù),系統(tǒng)將該連接信息從半連接隊(duì)列中刪除。注意,每次重傳等待的時(shí)間不一定相同。
半連接存活時(shí)間:是指半連接隊(duì)列的條目存活的最長(zhǎng)時(shí)間,即服務(wù)從收到SYN包到確認(rèn)這個(gè)報(bào)文無效的最長(zhǎng)時(shí)間,該時(shí)間值是左右重傳請(qǐng)求包的最長(zhǎng)等待時(shí)間總和。有時(shí)我們也成辦理按揭存活時(shí)間為Timeout時(shí)間、SYN_RECV存活時(shí)間。
總結(jié)
- 上一篇: 造影显示输卵管堵塞准确吗
- 下一篇: 英雄联盟 给介绍个 3150的远程英雄啊