review --- data link layer負責hop的transmission quality network layer負責路由定址 end-to-end找一條路出來 transport layer負責end-to-end的transmission quaity 1. packet lost 2. out of data 3. duplicate 網路用的3個位址: MAC addr(physical addr),ip addr(logic addr),port num(區分不同application) transport layer有分 server/client端 http 80 https 443 ssh 22 ip protocol:路由、定址 ipv4 x.x.x.x(0~255之間) 32bit ipv6 128bit ipv6也可以稱為ipng(next generation) ipv6特色:128bit,安全性(ipv4的安全性是補丁patch上去的),ipv6的長度是固定的效能更好(不會一下快一下慢) 位置分配: 網路位元+主機位元->階層式 ip addr分類 class c: 2^8-2 太少 class b: 2^16-2 太多 用classless的方式解決了位置浪費的問題 私有ip a class: 10.0.0.0/8/8 b class: 172.16.0.0/16 (172.16.x.x ~ 172.31.x.x) c class: 192.168.0.0/24 255.255.255.255 broadcast addr NAT(network address translation) 私有網路連到internet需要進行ip轉換 ![image](https://hackmd.io/_uploads/rJy3KNaSke.png) ![image](https://hackmd.io/_uploads/B1719EaSJe.png) 現在的nat技術全文是 NAPT(network address port translation)轉換ip的同時一起轉換port number,還會紀錄port number * 這種轉換技術也稱 source Nat destination nat也稱port-forwarding ![image](https://hackmd.io/_uploads/rJzOcVTrke.png) 將192.168.1.1應射到1.2.3.4:80 目的是private server想架server讓外部網路連上私有ip ping sop: 1. ping 127.0.0.1 正常來講是可以ping的,不行代表TCP/IP protocol有問題 2. ping自己ip 不行代表網路卡壞了 3. ping default router/gateway 從內定router轉送封包到外部,不能ping檢查網路線 4. ping 8.8.8.8 5. ping www.google.com 如果4可以5不行,代表dns壞了 DHCP --- DHCP(dynamic host conguration protocol) 動態主機設定協定 D discover O offer R request A ack dhcp在設定時一定要提供:ip,default router,dns,mask ![image](https://hackmd.io/_uploads/SkQb3VpSyx.png) ![image](https://hackmd.io/_uploads/SJetMn4TrJe.png) PC client確認要哪個dhcp用哪個dhcp,送出request 廣播封包讓所有dhcp server 知道用哪個dhcp 但dhcp有隱患,dhcp通常是選最快回應的,可能hacker在附近架一個dhcp server, client連上這個dhcp, hacker就可以來監聽 讓多個client連上一台dhcp,用router去幫dhcp的忙,不用一個網路一個dhcp ![image](https://hackmd.io/_uploads/Hk_WpNTHyl.png) DNS --- DNS(domain name system)用UDP傳輸協定 53port www -> ip 為正向解析 ip -> www 為反向解析 透過ip轉domain name可以了解user的國家,進行統計 nslookup 可以將www的網址轉ip 用nslookup可能會給多個ipv4 addr,為了負載均衡,讓user不會集中在同一台server,這是以前的做法 現在可能給的ip就是一台負載均衡的ip,連上之後再轉到其他ip 用nslookup可能會有未經授權的回答,是因為在client端的區域網路內有人已經查過該網域ip,有快取記錄,所i以不會再經由存取網路ip的dns讀取 ![image](https://hackmd.io/_uploads/HksqRETHJx.png) dns步驟 1. 先到catch看有沒有暫存記錄 2. 到window裡的host查ip跟domain name的對應 3. 都沒有,再到dns要,並存在catch fully qualified domain name(FQDN):網域名最後面要加上一點 ex. www.google.com. FQDN最多有5個層級,每一級最少2字最多63字元,總長度不能超過253字元 FQDN分為3部分 1. host name 2. domain name 網域名 3. 「.」 根網域 ![image](https://hackmd.io/_uploads/SkdBgSpBJx.png) top level domain以國家、組織為主 DNS由ICNN負責ip、DNS的管理分配,但會經由國家地區個別設立管理 ex.台灣 TWNIC ![image](https://hackmd.io/_uploads/HkAAeSTSyl.png) Dynamic DNS:用於傳統撥接網路ip不固定,想要架server...需要DDNS ip是floating的可以到ddns公司註冊domain name,要進行連線就用這告domain name當ip變更時,更新一份新的ip到ddns上就可以實時更新floating ip IP protocol-ipv4 --- ![image](https://hackmd.io/_uploads/H1Q3-H6rkx.png) ipv4可以切割和重組,ipv6不行 ipv6會找MTU ip的header通常是20bytes,如果有option項大於20bytes,不可能小於20bytes,而且是4的倍數,因為有padding來補齊 ver:第幾版 ex.ipv4:4 IHL:ip header length 正常值是5 TOS or DS:根據不同標籤給於不同處理,但這欄幾乎沒用,現在的路由基本採取FIFO、Droptail的設計,所以這邊是0 FIFO: schedule排程 first in first out會有starvation的問題 Round robin:一個round的schedule way不會有starvation的問題 Droptail:buffer,management buffer滿了就丟最後面的封包,也有dropfront的方式可能跟即時性有關 TOS:precedence優先權,共8種 111最高~000最小 D delay 重要設為1,但路由器不支持 T throughput 吞吐量,重要設為1 R reality 可靠線路,選哲可靠路線 C cost 選擇成本 DS: differentiated service DSCP ECN: explioit congestion notificiation 網際網路是 best effort service想要提供QOS(quality of service) IS:傳送前先跟會經過的路由保留要傳送的大小,傳送時整路通暢無阻,缺點是負擔大,所以演變為DS以劃分等級權重的方式區分 total length:ip header+ip payload的長度,最長65535(2^16-1)還是會超過 identifer: 同個切割封包有相同id flag: 1是否切割封包 2是否有下一個片段封包 fragment offset: 得知切割玩的封包的偏移位置 ipv6把identifer、flag、fragment offset刪除了 不允許在傳輸途中切割,只能在傳送端切 ipv6在傳輸前會了解傳輸路徑最大的MTU(maximum transmission unit)得知路徑最大傳輸封包單位,這樣子效率提高,路由器不用處理切割封包 TTL:(time to live)在ipv6改名成hop count在傳輸途中最多幾跳,防止長期佔用網路問題 protocol: tcp 6,udp 17,icmp 1, ipv6 41,ESP安全性封包,ipv4的安全性由補丁補上去, AH確認 51 header checksum: 保護標頭內容 source ip addr destination ip addr OPT:選擇項 source route 選擇指定下一跳是什麼 Route record 紀錄路徑 Time stamp 記錄時間 security label 安全性 PAD:補丁 把32bit補齊 source addr+Des addr + Type(0800 ip,0806 ARP) 不同的網路MTU不同 ip 1500byte, ethernet 1500byte MSS maximum segmentsize(payload), MSS = 1460byte ethernet frame size 64~1518 對使用者來講最重要的是payload,payload越小transmission效率越差 原則上網路環境情況好,payload越大越好,但payload越好風險越大 網路品質好,可用較大的MTU,品質差用較小的MTU,提高成功率 IP protocol-ipv6 --- 傳輸分為 unicast,multicast,anycast broadcast被併為multicast ipv6也稱ipng,ipv5只存在於實驗室 ipv6有更好的安全性,效能,沒有選擇項,路由器只會讀取存儲大小不會切割 提供QOS unicast 1-to-1 multicast 1-to-many anycast 1-to-any broadcast用multicast取代,廣播在網路中有loop的情況下,會產生 broadcast storm把封包不斷的copy轉送 Anycast傳到附近,但不能事source端,通常用來找路徑 2000(16bit or 2byte):8C6E:00A1:0000:0000:0000:09E3 共128bit ->2000:8C6E:A1:0:0:0:9E3 -->2000:8C6E:A1: :9E3 0用冒號表示,只能用一次,才能識別 ipv6的網址要加上[]才能連接 ipv6 addr format ![image](https://hackmd.io/_uploads/HkHqKtaBke.png) prefix:指定一個網路範圍, 001(2開頭)可活於internet上 subnet id: 更加區分網路範圍 /8 以mask的方式顯示子網路format IID:介面識別碼 可以從48bit擴展成64bit ipv6特殊位置 0:0:0:0:0:0:0:0 -> 任意位置 0:0:0:0:0:0:0:1 -> 迴路位置 使ipv4能與ipv6 node相互通訊 ipv4 compatible address在ipv4後加上96bit的0 ipv4遷移到ipv6 遷移過程有ipv4跟ipv6的轉換 ex.tunning ipv6裝上ipv4的header穿透ipv4 ![image](https://hackmd.io/_uploads/HJ_ZjKprke.png) 建立一個ssh的tunnel到雲端,就可以穿越firewall 外面是一個ssh的封包,內部是真正的封包 ipv6的主標頭兔定8個+延伸標頭 40bytes ![image](https://hackmd.io/_uploads/S1PusKpSke.png) ver: 0110 QOS: Traffic class:服務的類型,來提供對應的type,如同於ipv4的TOS/DS Flow label:20bit Payload length:ipv6得標頭固定40bit,不用加上去,只考慮後面長度 Next header: 表protocol Hop limit: 表TTL source ipv6 addr destination ipv6 addr ipv6延伸標頭:處理ipv4的選擇項 50安全性加密header 51 authentication header ICMP(internet control message protocol):當hop limit=0丟棄了,透過icmp告訴source addr封包丟了 Transport layer protocol --- 負責點對點的連線品質 TCP provide realiable service,connection-oriented解決packet lost、duplicated packet、out of order UDP provide fast service,connectionless-oriented Port number最大65534,對於client的port number是隨機不固定的,server是固定的 HTTP 80 HTTPS 443 FTP 21 SSH 22有加密 telnet 23 無加密 dns 53 TCP connection setup: three way handshake ![image](https://hackmd.io/_uploads/SkSeg56S1l.png) TCP connection teardown: half-close ![image](https://hackmd.io/_uploads/HJPGl5THJe.png) Port number: 16bit由ICMA的IANA 1024以下為公認的port number,49152~65535式client端 dynamic port number FTP在剛開始只用21 port(控制),在傳輸資料用port 20 -out of band SSH用的是 in band UDP protocol:封包可能遺失,error,採用快速傳送,用於多媒體 ![image](https://hackmd.io/_uploads/rymlbcpr1g.png) 沒接收到ACK而重送,因為影像、音樂有即時性,重送的封包早已沒幫助 ![image](https://hackmd.io/_uploads/BJMDZc6rkl.png) 檢查後再加上pseudo header實際上不存在,+source ip addr+Dst ip addr+ protocol + UDP以16byte為單位 TCP protocol高可靠度的data transmission,比 UDP header複雜 sequence number:送出之前,把資料加上編號 1.避免out of order 2.解決packet lost ![image](https://hackmd.io/_uploads/rkSEMcTH1l.png) sliding window:流量控制使用,不超出網路流量 最基本的流量控制方法: stop-and-wait ![image](https://hackmd.io/_uploads/r1YdGc6Bkl.png) 送出就停止等ACK,太保守 之後採取送多個data,回傳一個ACK (Sliding window) ![image](https://hackmd.io/_uploads/ByMpM5arkx.png) seq num最早已封包數為單位,現在是已位元數為單位 ![image](https://hackmd.io/_uploads/Bkoem9Tr1x.png) ACK:與seqNum一起運作,回傳SeqNum+1,希望對方傳SeqNum+1,表示SeqNum+1以前皆已接收 ![image](https://hackmd.io/_uploads/Sy4Dd3CBJl.png) 傳送發生錯誤 1,傳送時遺失 2.回傳ACK遺失 用delay ACK:傳segment不會馬上回傳ACK,而是過一段時間才一次傳 Sliding window protocol: segment裡面有Window的欄位 ![image](https://hackmd.io/_uploads/BJwDsnAHyx.png) 透過access link不會有802.11Q的header ![image](https://hackmd.io/_uploads/r1ZCs3Cr1l.png) FLAG: F: finish S: syn R: reset 兩端如果發生問題,中斷連線,然後重新建立連線 P: push 收到push,馬上把buffer的data送到application layer A: ACK ex.![image](https://hackmd.io/_uploads/SkiLnnRrke.png) C: congestion window reduced 把傳輸速度降低,並通知 E: ECN echo 通知網路已壅塞(explicit congestion notification) U: urgent 有緊急data,設為1會立即處理 TCP的checksum是一定要做的,原來的資料+payload去算 發送TCP segment前,計算出checksum值,接收方也會計算checksum,結果一樣保留,不一樣丟棄 TCP本身沒有位址的訊息,可能造成錯誤,所以提供Pseudo-header虛擬標頭(僅提供checksum計算使用,不實際傳送) ARP,RARP,ICMP --- 0806 ARP header ARP(address resolution protocol)知道對方位置,但不知道對方MAC addr,用ARP拿對方ip去對MAC addr 1. 先廣播問Dst ip addr的MAC add是多少 (ARP request) layer2 broadcast: FF-FF-FF-FF-FF-FF 2. Dst回覆MAC addr (ARP reply) unicast RARP(reversed address resolution protocol) 拿自己MAC add去接自己ip ICMP:屬於layer3需在前加上ip header 查詢or錯誤回報 ![image](https://hackmd.io/_uploads/BJmgk60Bkl.png) 依附在ip Gratuitous ARP:在沒有ARP request的情況下發送ARP request,但有心人可能借由此設計擾亂LAN上的機台ip跟MAC的table 讓Router錯將要給PC1的資料包通過錯誤的MAC地址發給PC2,而PC1要發給Router的資料包也通過錯誤的MAC地址發給了PC2。所以PC2也就利用Gratuitous ARP成為了PC1與Router之間的 Man-in-the-Middle。 ![image](https://hackmd.io/_uploads/Sy1q1TCHkl.png) window的option項: abc...uvwabc...hi linux的option項: !!...012.... ![image](https://hackmd.io/_uploads/HyhXx6AHke.png) ![image](https://hackmd.io/_uploads/H1B4eTRHye.png) routing protocol --- static routing 手動設定manual setting方式,不需維護成本 dynamic routing 維護成本高,假如線路斷了,會在找一條 1. 距離向量法(distance vector) 訊息交換的方式 2. 連線狀態法(link stat) 了解網路架構的方式 3. 混合(hybrid) 兩種混合 4. RIP: v1,v2...,ipv6 OSPF: ipv4,ipv6 routing table: 用目的端ip跟network mask進行&運算,最後把符合最多1的為結果 ex. metwork mask 0.0.0.0 default router 192.168.10.254,如果沒有其他符合的就用default router distance vector:不是單純已距離作為考量 * Propagation delay, bandwidth, loading, reliability, hop count, Tic count, cost通常是越低越好 hop count->RIP指考慮距離,現在只用於小型網路,中大型可能用link state protocol 在window查routing table: ``print route`` 在linux查routing table: ``route -n`` or ``ip route show`` distance vector(RIP),link state(OSPF),hybrid(EIGRP) EIGRP <- CISCO proprietary 由CISCO提供的標準,只能用CISCO設備 1.distance vector:週期性的與相鄰router交換route information,路徑隨時更新,佔用較多的bandwith 2.link state:透過broadcast了解網路的topology,除了路徑更新,維護成本低 3.Hybrid:結合上述兩著優點 distance vector ![image](https://hackmd.io/_uploads/BkssX60S1x.png) link state透過flooding 傳旁邊有哪些網路 ![image](https://hackmd.io/_uploads/H1Rg46RHJg.png) hybrid: (distance)建立目的最佳路徑的路徑表,(link)路徑狀況改變時才更新 routing問題 迴圈問題 ![image](https://hackmd.io/_uploads/BkxnwETRBke.png) B不知E掛了,以為會有替代路徑 會一直loop,distance一直加1 solution: 1. 定義hop limit 2. split line分離界線 3. timer 4. tragger autonomous system --- 每個網路都有自治system編號 在自治system內部的網路用相同的通訊protocol :Interior routing protocol 在自治system外部的網路用routing protocol :Exterior routing protocol ![image](https://hackmd.io/_uploads/H1sPHpCBkg.png) security --- 對稱式encryption、decryption實作簡單,維護難,每有一個對象要有一把key 非對稱式:實作難 IDS:事後檢討 IPS:被攻擊時 都透過監督式學習 * 資安的目標:機密性、完整性、不可否認性 防火牆: 封包過濾式(packet filter) L3/L4 應用閘道器(application gateway) L7又稱Proxy 明文: 加密前的text 密文: 加密後的text 對稱式加密系統->祕密金鑰系統 非稱式加密系統->公開金鑰系統 ![image](https://hackmd.io/_uploads/Syu7DTRrke.png) secret key處理速度快 public key速度較慢 兩者可以混合 1. 一開始用pub_key建立secret tunnel,不是用來en/decryption,而是交換priv_key 2. sec_key來en/decryption secret key n個使用者需$C^n_2$ 演算法:DES,FEAL,IDEA,SKIP JACK ![image](https://hackmd.io/_uploads/BykHKT0BJl.png) public key: n個使用者需2n個key 演算法:RSA,DSA,SHA ![image](https://hackmd.io/_uploads/r1doFT0Hyl.png) 同樣的架構,變為電子簽章 密文變為你的簽章,密文還看得懂 Hash function: 演算法:MD4,MD5,SHA ![image](https://hackmd.io/_uploads/HJ32ca0rJx.png) authentication:達到傳輸的不可否認性 MFA(multi factor authentication) 1. key system 2. digital signature 3. digital certificate key system: ![image](https://hackmd.io/_uploads/H1QNsa0HJg.png) (a)確保傳輸的隱密性,但不知道是誰傳的 任何人都可以有B的公鑰 (b)無隱密性,但知道是誰的 ![image](https://hackmd.io/_uploads/SJhOo6Crkg.png) digital signature:使用hash+public key 把原本的data用hash->128byte 再用pri_key去加密 ![image](https://hackmd.io/_uploads/rJgTiTAryl.png) digital certificate確認網站的reclity like網路身分證 certification authority:需公正認證機構 ![image](https://hackmd.io/_uploads/S1f72TAH1e.png) virus 附加在檔案程式中 worm 自我複製的程式碼,不需附加在其他檔案中