目錄
一. 實現網絡通信需要哪些支持
1.通信設備
- 網卡:PC機自帶
- 路由器,交換機
- 光纖、電纜、基站
2.通信協議
- 操作系統自帶協議棧;(Linux的特點:豐富的網絡協議)
- 裸機開發需要獨立的協議棧
二. 協議棧
物理層是第一層。在上面的是上面一層,在下面的是下面一層。
哪個協議在哪一層:FTP,NFS / SMTP(郵件協議),DNS / TCP,UDP / IP,ARP,RARP / IEEE(以太網協議)
1.分層的好處/爲什麼要分層?
- 各層之間是獨立的
- 靈活性好
- 結構上可分隔開
- 易於實現和維護
- 能促進標準化工作
使每一層協議能複用,並得到更好的維護
2.分層的作用
協議棧實現數據的壓縮加密和解壓解密
沒一層都會加相應的數據,到最後加完了一起發給別人,別人再一層層消減數據。
3.各層作用
(1)物理層
將通信介質的信號轉換爲數字信號(二進制0101)
(2)數據鏈路層
實現局域網通信。局域網是通過mac地址(物理網卡)通信的(192.168.1.177是局域網IP)
(3)網路層
生成IP地址,使用路由(通過公網IP訪問全世界,公網IP每天看不一樣的)
(4)傳輸層
做數據傳輸,封裝了TCO和UDP協議。TCP(可靠,速度慢),UDP(不可靠,速度快),端口(讓不同的應用程序同時使用網絡)
(5)會話層
控制發包的數據,可以控制它的快慢
(6)表示層
發送數據的格式
(7)應用層
應用層使用數據做一系列的功能
三. IP地址
1.IP地址
可以通過IP地址找到一臺機器,端口號找到這臺機器上與之通信的軟件
實際上是32位二進制數 (01100100.00000100.00000101.00000110)100.4.5.6
0.0.0.0 - 255.255.255.255
2.公網IP(廣域網通信)
用來做世界任意兩臺電腦之間的通信
- a類 1.0.0.1 —126.255.255.254
- b類 128.0.0.1—191.255.255.254
- c類 192.0.0.1—223.255.255.254
- d類 224.0.0.1—239.255.255.254組播,VRRP協議,keepalive高可用
- e類 240.0.0.1—255.255.255.254 科研
3.私網IP(局域網通信)
不能隨便亂設!一定要在下面範圍內
- A 10.0.0.0~10.255.255.255
- B 172.16.0.0~172.31.255.255
- C 192.168.0.0~192.168.255.255
4.如何解決IP地址慌?
- ipv4升級到ipv6(32位升級到128位)(但成本太高,全世界都要換硬件等)
- 網絡地址轉換NAT(Network Address Translation):將內網ip轉爲公網ip(根據內網看哪個公網可以用,讓公網給你分配個可以用的)
5.子網掩碼的作用
- 決定一個網段的大小(可用ip的數量)(子網掩碼位數不一定要是8的倍數)
- 192.168.11.0/24 ===》 192.168.11.0 netmask 255.255.255.0
192.168.11.0 網絡號
192.168.11.1 起始地址
192.168.11.254 結束地址
192.168.11.255 廣播地址 - 相當於256 - 2 = 254個可用IP
- 192.168.11.0/24 ===》 192.168.11.0 netmask 255.255.255.0
- 同一個網段的ip地址,才能直接相互通信,不同網段的ip地址,需要路由器才能相互通信!
6.DNS協議:域名解析
把域名解析成ip地址(www.baidu.com就是域名)
公網IP一直在變,讓域名和動態IP改變,這樣IP一變,域名就會重新綁定,通過一直不變的域名可以訪問你想要訪問的地方。
7.ARP協議
把ip地址解析成mac地址(物理地址,全球唯一)(局域網通信必須通過MAC地址)
四. TCP協議:傳輸控制協議
1.特點
面向連接、可靠的字節流傳輸
2.TCP的報文段格式
(1)端口號
- 端口號的作用:確定和機器上哪個應用程序通信(指定80端口號,即用HTTP通信)
- 端口號的取值範圍
- 註明端口號不能佔!
- 一般都在動態端口號裏面選
- 特殊端口號
- 端口:21 服務:FTP
- 端口:22 服務:Ssh
- 端口:53 服務:Domain Name Server(DNS)
- 端口:80 服務:HTTP
(2)序列號seq(隨機生成)
拆包時保證數據不紊亂
(3)TCP標識位
表示這個發的包是幹什麼的
- SYN:建立鏈接
- ACK:迴應標識
- FIN: 斷開鏈接
- PSH: 數據包
- URG: 緊急指針
- RST : 重置(重傳)
(4)滑動窗口機制
一種緩衝機制,先把數據全都放到滑動窗口裏面,然後一點一點發。當網絡不好時,會降速,壓縮數據。根據網速帶寬的大小,網絡的快慢分解數據包,把數據包分解爲適應這樣網速帶寬。
(5)檢驗方式
目的:保證數據做到正確傳輸
UDP實現正確傳輸可以依靠下面的方式(知識面廣度,優缺點)
- 奇偶校驗Parity Check
- bcc異或校驗法(block check character)
- crc循環冗餘校驗(Cyclic Redundancy Check)
- md5校驗和數字簽名
- 海明碼校驗
(6)數據大小
- 局域網的鏈路層傳輸數據的最大長度是1518bit,包括幀的頭尾部長度18bit(頭14+尾4),IP頭部長度爲20bit,TCP頭尾部長度爲20bit,UDP頭尾部長度爲8bit
- TCP在局域網中傳輸數據的最長長度=1518-18-20-20 = 1460bit
- 廣域網傳輸不限定大小,因爲超過限定大小,會進行拆包發送
3.如何連接
(1)建立連接:三次握手
記錄對方的ip和端口,正式通信時會自動的使用記錄的ip和端口
- 第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。
- 第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
- 第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手
簡述:客戶端發起連接,先發一個SYN包,發送一個連接請求,再發一個序列號seq,保證我收到的是我想要連接的機器給我回復的包。服務器回覆一個ACK包,表示已經建立和客戶端的讀寫通道,再發一個SYN包,跟客戶端建立連接,雙發建立連接後,客戶端再回一個ACK包。
三次握手缺點:容易被攻擊
- dos攻擊:不斷給服務器發SYN包(連接請求),接着忽略服務器發回的ack包。讓服務器不斷等待客戶端,達到負載
- 解決:等一段時間沒有迴應,就不再等待,斷開連接。或忽略一直給自己發請求的IP。
- ddos攻擊:開源破解軟件,讓下載軟件的客戶端向服務器發SYN包。
(2)斷開連接:四次揮手
- 客戶端進程發出連接釋放報文,並且停止發送數據。釋放數據報文首部,FIN=1,其序列號爲seq=u(等於前面已經傳送過來的數據的最後一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。
- 服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,並且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處於半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。
- 客戶端收到服務器的確認請求後,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最後的數據)。
- 服務器將最後的數據發送完畢後,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由於在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號爲seq=w,此時,服務器就進入了LAST-ACK(最後確認)狀態,等待客戶端的確認。
- 客戶端收到服務器的連接釋放報文後,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連接還沒有釋放,必須經過2∗∗MSL(最長報文段壽命)的時間後,當客戶端撤銷相應的TCB後,才進入CLOSED狀態。
- 服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB後,就結束了這次的TCP連接。可以看到,服務器結束TCP連接的時間要比客戶端早一些。
簡述:客戶端發一個FIN包請求斷開連接,服務器回一個ACK包斷開客戶端項服務器的連接。服務器再發一個FIN請求斷開連接,同時要發一個ACK包確定對方是之前跟自己斷開連接的客戶端,客戶端再回一個ACK包確定斷開連接。
(3)爲什麼是三次握手和四次揮手?
(4)dos、ddos攻擊
4.如何保證可靠有序的傳輸
- 三次握手建立連接
- 拆包時SYN的設置確保了包的順序正確
- 通過校驗機制確保發送數據的準確
- 應答機制,也就是將數據發送給對方後,對方必須應答是否發送成功
- 使用“滑動窗口”機制,根據網絡的好壞,控制發送的分組數據的大小
五. UDP協議:用戶數據報協議
1.特點
無連接不可靠傳輸
2.UDP報文格式
- 局域網:UDP傳輸數據的最長長度 = 1518 - 18 -20 - 8 =1472bit
- 廣域網:用UDP協議發送時,用sendto函數最大能發送數據的長度爲:65535- IP頭(20) - UDP頭(8)=65507字節。用sendto函數發送數據時,如果發送數據長度大於該值,則函數會返回錯誤
3.協議特點
- 無連接的:發送數據之前不需要建立連接,減少了開銷和發送數據之前的延時。(時效性比FTP協議好)
- 視頻用UDP傳,QQ消息也用UDP傳(因爲快,即使),文件傳輸用TCP傳
- 盡最大努力交付:不保證可靠的交付,主機不需要維持複雜的鏈接狀態表。
- 面向報文的:發送方的UDP對應用程序交下來的報文,在添加首部後就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。
- 沒有擁堵控制(發完就收發完就收,不會堵塞)
- 支持一對一、多對一和多對多的交互通信(TCP只能一對一)
六. TCP與UDP
傳輸方式:面向報文(發的報文格式)
首部開銷:就是報文格式在數據前面加的東西