發表文章

商用資料通訊Ch9筆記_TCP/IP Internetworking II_part2

Network Address Translation (NAT)是一種將私有IP地址轉換為公共IP地址的技術。當私有網路中的主機需要訪問Internet時,NAT會將它們的IP地址轉換為公共IP地址,以便它們可以與Internet上的其他主機進行通信。這樣做可以 保護私有網路中的主機免受來自Internet的攻擊,因為攻擊者無法直接訪問私有IP地址 。此外,NAT還可以 幫助解決IPv4地址耗盡的問題,因為它允許多個主機共享單個公共IP地址 。但是,使用NAT也可能會導致某些應用程序無法正常運行,因為它們需要直接訪問Internet上的其他主機而不是通過NAT轉換後的公共IP地址。 What is NAT? (Do not just spell it out.) 用來簡化及保留 IP 位址,讓原本無法上網,而且無法使用內部 IP 位址(虛擬 IP 位址) 的主機可以成功的連接 Internet,將要傳送出去的封包進行 IP轉換的動作,可以大大減少 IP 位址的需求,整個內部網路都可憑藉 NAT 上的一個外部 IP (對外合法 IP 位址) 來連接 Internet。 Describe NAT operation. 1. 當私有網路中的主機需要訪問Internet時,它們會向NAT設備發送請求。 2. NAT設備會檢查請求中的源IP地址,如果它是私有IP地址,則NAT會將其轉換為公共IP地址。 3. NAT設備會將轉換後的請求發送到Internet上的目標主機。 4. 當目標主機回復時,回復消息會發送到NAT設備。 5. NAT設備會檢查回復消息中的目標IP地址,如果它是公共IP地址,則NAT會將其轉換為相應的私有IP地址。 6. NAT設備將轉換後的回復消息發送到原始請求方主機。 What are the two benefits of NAT? 1. 擴展IP地址:由於IPv4地址的數量有限,NAT可以幫助擴展私有網路中可用的IP地址數量。通過將私有IP地址轉換為公共IP地址,NAT可以讓多個主機共享單個公共IP地址。 2. 增強安全性:NAT可以幫助保護私有網路中的主機免受來自Internet的攻擊。通過 將私有IP地址轉換為公共IP地址,攻擊者無法直接訪問私有網路中的主機。 How does NAT enhance security? NAT還 可以隱藏私有...

商用資料通訊Ch9筆記_TCP/IP Internetworking II_part1

IP Subnet Planning IP子網路規劃是指將一個較大的網路分割成更小的子網路,以提高網路效率和可管理性的過程。通常,這是通過使用IP地址中的主機位的一部分來創建子網路掩碼來完成的,該掩碼定義了每個子網路的邊界。通過這樣做,網絡管理員可以更輕鬆地管理流量和分配資源。 N=2ᵇ-2 Rule : 如果一部分長度為b位元,它可以表示( 2ᵇ-2 ) 個網路、子網路或主機。 對於一個有b位元的系統,可以表示2的b次方個可能性。因此,對於8位元,可以表示256個可能性。這表明最多可以有256個子網路,每個子網路 最多有256台主機 。但是, 網路、子網路或主機部分不能全部是0或全部是1 。因此,最多只能有254(256-2)個子網路,每個子網路最多只能有254台主機。 如果一個地址部分全部是1,這表示為廣播所用。當電腦不知道自己的地址時,所有0的部分都會被使用。大多數Client PC從DHCP服務器獲取其IP地址。全零地址只能用於從主機發送到DHCP服務器的DHCP消息的源地址中。 Balancing Subnet and Host Part Sizes(平衡子網路和主機部分的大小) 指在進行子網路劃分時,需要考慮子網路部分和主機部分的大小之間的平衡。如果子網路部分越大,則會有更多的子網路,但主機部分就會變小,這意味著每個子網路上的主機數量就會減少。因此,在進行劃分時需要權衡考慮,增加子網路數量會減少每個子網路上的主機數量,而增加主機數量則會減少可用的子網路數量。 Why is IP subnet planning important? IP子網路規劃之所以重要,是因為它可以 幫助組織更有效地管理其IP地址空間 ,並確保網路的正常運作。通過將一個大的IP地址空間分成多個子網路,可以 更好地控制流量和提高安全性 。 假設一家公司有1000台電腦需要連接到同一個網絡上。如果使用單一的IP地址空間來管理這些電腦,可能會導致流量擁堵、安全問題和其他問題。但是,如果將這個大的IP地址空間分成多個子網路,每個子網路只包含100台電腦,就可以更好地控制流量和提高安全性。 If a subnet part is X bits long, how many subnets can you have? 如果子網路部分長度為X位,可以有2的X次方個子網路。例如,如果子網路部...

商用資料通訊Ch8筆記_TCP/IP Internetworking I_part4

How do the version number fields in IPv4 and IPv6 differ? IPv4和IPv6的版本號字段有所不同。在IPv4中,版本號字段是一個4位元的二進制數字,其值為0100(即十進制數字4)。而在IPv6中,版本號字段是一個4位元的二進制數字,其值0110((即十進制數字6)。 What is the general purpose of the diffserv subfield?(differentiated services) Diffserv子欄位的一般目的是指定特定數據包應該獲得何種類型的服務。這個子欄位是IPv6數據包中的一部分,它 由6個二進制位組成 ,可以指定該數據包是否應該獲得常規的最佳努力服務、高優先級低延遲服務或其他類型的服務。Diffserv子欄位還可以用於 指示數據包是否需要特殊處理,例如在網絡拥塞時通知發送方降低傳輸速率。 What is the general purpose of the flow label field? IPv6中的流標籤字段用於標識一個特定的數據流,路由器可以根據這個字段來對數據流進行管理和處理。 In IPv6, how can the receiver tell the length of packet? 接收方可以通過查看數據包的 有效載荷長度字段 來確定 數據包的長度 。IPv6數據包的有效載荷是指除了40個字節的IPv6主標頭之外的所有內容。IPv6數據包中的有效載荷長度字段是16位長,因此它可以表示最大長度為65,536(2^16)個字節的數據包。 Does the payload length field include the lengths of any extension headers in the packet? 有效載荷長度字段只包括數據包的有效載荷部分的長度,不包括任何擴展標頭的長度。如果接收方需要確定整個數據包的總長度,則需要將有效載荷長度字段與其他所有部分(如IPv6主標頭和所有的擴展標頭)的長度相加。 How is the hop limit field used? 用於限制數據包在網絡中傳輸的跳數。每當一個路由器轉發一個IPv6數據包時,它會將該數據包的跳限制值減1。如果跳限制值減為0,則該路由器會丟棄該數據包。這種方式可以防止數...

商用資料通訊Ch8筆記_TCP/IP Internetworking I_part3_Steps in a Routing Decision

路由決策的步驟(Steps in a Routing Decision)-IP封包的傳送與路徑選擇 Step1. 找到所有匹配目標IP地址的行。(Finding All Row Matches) 當路由器收到一個數據包時,它會檢查數據包的目標IP地址,並在路由表中查找與該地址匹配的行,會逐筆都搜直到最後一筆(因為可能會不只一個match)。 路由器會對每一行進行以下操作以確定是否匹配: 1. 將該行的mask應用到數據包的目標IP地址上。 2. 比較結果與該行的目標值進行比較。 3. 如果兩者匹配,則該行是一個匹配。 假設有一個數據包到達路由器,其目標IP地址為60.43.7.8。 路由表某row的目標值128.171.0.0待比較,此時路由底層會 將目標IP地址為60.43.7.8和掩碼255.255.0.0進行bitwise-and操作 00111100.00101011.00000111.00001000 11111111.11111111.00000000.00000000 00111100.00101011.00000000.00000000 -> 得到60.43.0.0 (以獲得網絡ID) 將60.43.0.0與該行的目標值128.171.0.0進行比較。由於兩者不同,因此該行不是一個匹配。 假設有一個數據包到達路由器,其目標IP地址為128.171.17.13。 路由表某row的目標值128.171.0.0待比較,此時路由底層會 將目標IP地址為128.171.17.13和掩碼255.255.0.0進行bitwise-and操作 10000000.10101011.00010001.00001101 11111111.11111111.00000000.00000000 10000000.10101011.00000000.00000000-> 得到128.171.0.0(以獲得網絡ID) 將128.171.0.0與該行的目標值128.171.0.0進行比較。由於兩者相同,因此該行是一個匹配。 Step2. 確定最佳匹配行。(Find the Best-Match Row) 如果有多個匹配行,則路由器 將選擇前綴長度最長的行 , 即 掩碼中初始1的位數最多 的行。 例如,假設路由表中有三行如下: Row1:目標為128.171.0.0,掩碼...

商用資料通訊Ch8筆記_TCP/IP Internetworking I_part2

ARP緩存的優點跟缺點 優點是可以提高數據包轉發的速度和效率,因為它可以避免在每個數據包中進行ARP查找。此外還可以減少網絡流量。 缺點: 1.如果目標主機或下一跳路由器的MAC地址發生變化,則ARP緩存中的信息可能會變得不正確。這可能會導致數據包被發送到錯誤的位置。 2.ARP緩存可能會被攻擊者利用來進行ARP欺騙攻擊。攻擊者可以發送偽造的ARP消息來修改ARP緩存中的信息,從而將數據包發送到錯誤的位置或監聽通信。 A client PC has two simultaneous connections to the same webserver application program on a webserver. (Yes, this is possible, and in fact, it is rather common.)  What will be different between the TCP segments  that the client sends on the two connections? (Hint: Consider all the fields in a TCP segment.) 如果客戶端PC對Web服務器上的同一Web服務器應用程序進行了兩個同時連接,那麼客戶端發送到兩個連接的TCP段之間的區別在於 源端口 和 序列號字段 。源端口是用於識別來自不同應用程序的數據包,而序列號則是用於確保數據包按正確順序到達目的地。 因此, 即使來自同一客戶端PC的兩個TCP段 都指向同一Web服務器應用程序,它們仍然需要使用不同的源端口和序列號字段以區分它們。其他TCP段字段(例如目標IP地址、目標端口、窗口大小等)在這兩個TCP段之間是相同的。 IP Version 4 (IPv4) standard Packet Syntax The First Row 1.版本號(4bit):指定IP協議的版本,IPv4的版本號為4。會用0100二進制表示。 2.頭部長度(4bit):以32位字組為單位表示。IPv4首部長度最小為20Byte,最大為60Byte。 3.DSCP(Differentiated Services Control Point,6bit): 一種用於指定IP數據包的服務質量(QoS)要求的6b...

商用資料通訊Ch8筆記_TCP/IP Internetworking I_part1

ARP(Address Resolution Protocol) 用 對方的IP Address 問 對方的Mac Address 若只知道 IP address 時,下層的資料連結層無法傳送封包,因此必須查出目的 IP address 主機的實體位址 (MAC address)。 如果接收端與發送端在同一個子網路 主機或路由器傳送 ARP 詢問封包,此封包涵蓋傳送者的實體位址和 IP 位址,以及接收者的 IP 位址。由於傳送者不知道接收者的實體位址,詢問廣播到整個網路上的每一台主機和路由器接收並處理ARP 詢問封包,但只有預期的接收者認識它的 IP 位址,於是送回 ARP 回應封包。回應封包包括接收者的 IP 和實體位址,並且利用詢問封包中的實體位址直接以單播的方式回覆傳 送者。 如果接收端與發送端屬於不同的子網路 將會由路由器代替遠處的接收端,回答路由器的MAC 位址,以便將來傳送封包時,由路由器代為轉送。 ARP cache 為了將廣播數量最小化,ARP 會維護 IP 位址到媒體存取控制位址 (MAC Address) 對應的快取,以供未來使用。ARP 快取可以包含動態及靜態資料項目。每隔一段時間將自動新增及移除動態資料項目。靜態資料項目一直保留在快取中,直到重新啟動電腦。每個動態 ARP 快取項目有10 分鐘的潛在存留時間。新增到快取中的新項目會加上時間戳記。如果項目在新增後的2 分鐘之內未重新使用,那麼將過期,並從 ARP 快取中移除。如果項目已使用,那麼存留時間將 再加上兩分鐘。如果持續使用某項目,那麼會得到額外的2 分鐘存留時間,存留時間最長可達10 分鐘。 What are the three parts of an IP address? How long is each part? 分別是網路部分、子網路部分和主機部分。每個部分的長度取決於IP地址的類型。 IPv4地址,網路部分通常是8位元、16位元或24位元長度,子網路部分和主機部分的長度則取決於網路的需求。IPv6地址則由128位元組成,其中前64位元是網路前綴,後64位元是主機識別符。 What is the total length of an IP address?   -> IPv4 : 32bits , IPv6:128bits In the IP addr...

LeetCode184. Department Highest Salary

Table:  Employee +--------------+---------+ | Column Name | Type | +--------------+---------+ | id | int | | name | varchar | | salary | int | | departmentId | int | +--------------+---------+ id is the primary key column for this table. departmentId is a foreign key of the ID from the Department table. Each row of this table indicates the ID, name, and salary of an employee. It also contains the ID of their department.  Table:  Department +-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | name | varchar | +-------------+---------+ id is the primary key column for this table. It is guaranteed that department name is not NULL. Each row of this table indicates the ID of a department and its name.  Write an SQL query to find employees who have the highest salary in each of the departments. Return the result table in  any order . The query result format is in the f...

LeetCode177.Nth Highest Salary

Table:  Employee +-------------+------+ | Column Name | Type | +-------------+------+ | id | int | | salary | int | +-------------+------+ id is the primary key column for this table. Each row of this table contains information about the salary of an employee.  Write an SQL query to report the  n th  highest salary from the  Employee  table. If there is no  n th  highest salary, the query should report  null . The query result format is in the following example. Input: Employee table: +----+--------+ | id | salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+ n = 2 Output: +------------------------+ | getNthHighestSalary(2) | +------------------------+ | 200 | +------------------------+ CREATE FUNCTION getNthHighestSalary(N IN NUMBER) RETURN NUMBER IS result NUMBER; BEGIN     /* Write your PL/SQL query statement below */     WITH  real_query...

LeetCode180. Consecutive Numbers

Table:  Logs +-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | num | varchar | +-------------+---------+ id is the primary key for this table. id is an autoincrement column.  Write an SQL query to find all numbers that appear at least three times consecutively. Return the result table in  any order . The query result format is in the following example. Input: Logs table: +----+-----+ | id | num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+ Output: +-----------------+ | ConsecutiveNums | +-----------------+ | 1 | +-----------------+ Explanation: 1 is the only number that appears consecutively for at least three times.  SELECT DISTINCT num as ConsecutiveNums FROM (      SELECT id, num,      LAG(num) OVER(ORDER BY id) as prev_num,     LEAD(num) OVER(ORDER BY id) as next_num ...

LeetCode178. Rank Scores

Table:  Scores +-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | score | decimal | +-------------+---------+ id is the primary key for this table. Each row of this table contains the score of a game. Score is a floating point value with two decimal places. Write an SQL query to rank the scores. The ranking should be calculated according to the following rules: The scores should be ranked from the highest to the lowest. If there is a tie between two scores, both should have the same ranking. After a tie, the next ranking number should be the next consecutive integer value. In other words, there should be no holes between ranks. Return the result table ordered by  score  in descending order. The query result format is in the following example. Input: Scores table: +----+-------+ | id | score | +----+-------+ | 1 | 3.50 | | 2 | 3.65 | | 3 | 4.00 | | 4 | 3.85 | | 5 | 4.00 | | 6 | 3.65 | +----+-------+...