TỔNG QUAN VỀ MPLS 1.1 Giới thiệu Internet ra đời mở màn cho kỷ nguyên tiến bộ vượt bậc của nhân loại, nó không ngừng phát triển về phạm vi cũng như chất lượng. Do đó để đáp ứng với những nhu cầu ngày càng cao của con người đặc biệt là về chất lượng dịch vụ và về vấn đề bảo mật thì MPLS đã ra đời. Như chúng ta đã biết, nền tảng của internet dựa trên mô hình TCP/IP sử dụng kỹ thuật chuyển mạch gói IP truyền thống với không ít nhược điểm. Những nhược điểm chính có thể nói đến như sau: - Tốc độ và độ trễ: chuyển mạch IP truyền thống thì còn chậm do phải định tuyến và chuyển tiếp gói IP dựa trên phần tiêu đề với địa chỉ đích làm nồng cốt. Tuy đã có một số phương pháp cải tiến như sử dụng bảng định tuyến nhanh cho các gói tin quan trọng nhưng số gói tin đến nốt mạng vẫn lớn hơn so với khả năng xử lý của nốt mạng đó nên dẫn đến tình trạng mất gói, mất kết nối - Khả năng mở rộng mạng: do nhu cầu ngày càng cao nên vấn đề mở rộng là tất yếu, mà nếu sử dụng mạng IP truyền thống thì việc mở rộng mạng lõi là hết sức khó khăn. - Việc tích hợp các kỹ thuật ở các lớp trong mô hình OSI hay nói cách khác là làm trong suốt giữa các lớp là hết sức khó khăn. MPLS được xem là giải pháp cho những vấn đề này. Với khả năng chuyển tiếp nhanh, đơn giản, định tuyến linh hoạt, tận dụng tài nguyên, và đặc biệt cung cấp dịch vụ VPN bảo mật cao sẽ giúp cho MPLS có nhiều đất dụng võ ở hiện tại cũng như trong tương lai. 1.2 MPLS là gì ? MPLS (Multi Protocol Label Switching) là phương pháp cải tiến cho việc chuyển tiếp các gói tin IP trên mạng bằng cách thêm vào nhãn (label). Nhãn được chèn vào giữa tiêu đề lớp 2 (layer 2) và lớp 3 (layer 3) trong trường hợp các kỹ thuật lớp 2 dưa trên khung (frame) như Ethernet, frame relay Đối với các kỹ thuật lớp 2 dưa trên tế bào (cell) như ATM thì nhãn được xem là các VPI , VCI. MPLS kết hợp các ưu điểm của kỹ thuật chuyển mạch (switching) của lớp 2 và kỹ thuật định tuyến (routing) lớp 3. Do sử dụng nhãn để quyết định chặng tiếp theo trong mạng nên router ít làm việc hơn và hoạt động gần giống như switch. Nhãn có thể được dùng để thiết lập chính sách cho quá trình xử lý lưu lượng trong mạng – yếu tố quan trọng để đảm bảo chất lượng dịch vụ. 1.3 Các khái niệm chính trong MPLS 1.3.1 Nhãn (Label) Nhãn là một khung nhận dạng ngắn, chiều dài cố định và không có cấu trúc. Nhãn không tực tiếp mã hóa thông tin của header như địa chỉ lớp mạng. Nhãn được gói vào một gói tin cụ thể sẽ đại diện cho một FEC mà gói tin đó đã được ấn định. 1.3.2 Chồng nhãn (Stack Label) Một tập hợp có thứ tự các nhãn gắn theo các gói tin để chuyển tải thông tin về nhiều FEC và về các LSP tương ứng mà gói sẽ đi qua. Ngăn xếp nhãn cho phép MPLS hỗ trợ định tuyến phân cấp (Một nhãn cho EGP và một nhãn cho IGP) và tổ chức đa LSP trong một trung kế LSP. 1.3.3 Lớp chuyển tiếp tương đương FEC (Forward Equivalence Class) FEC mô tả sư kết hợp các gói tin có cùng địa chỉ đích của người nhận cuối thành các lớp để có những chính sách xử lý tương ứng. Giá trị FEC trong gói tin có thể thiết lập mức độ ưu tiên cho việc điều khiển gói nhằm hỗ trợ hiệu quả hoạt động của QoS (Quality of Service). Đối với các dịch vụ khác nhau thì các FEC khác nhau với các thông số ánh xạ khác nhau. Việc ánh xạ một gói vào một FEC có thể đạt được nhờ vào một số thông số sau: - Địa chỉ IP nguồn, đích - Cổng nguồn, đích - Nhận dạng giao thức (PID) - Luồng - … FEC được ấn định ngay từ đầu vào của mạng MPLS và phụ thuộc vào hoạt động của LSR ngõ vào, ra. Do đó thường thì các LSR ngõ vào và ra là các router có khả năng xử lý mạnh. 1.3.4 Đường chuyển mạch nhãn LSP (Label Swtiching Path) Đường chuyển mạch nhãn được thiết lập từ ingress LSR (ingress Label Switching Router – dữ liệu đầu vào là gói IP truyền thống, ingress LSR sẽ ấn định nhãn cho gói thông tin này) đến egress LSR (egress Label Switching Router – gỡ bỏ nhãn cho gói dữ liệu khi ra khỏi mạng lõi MPLS). LSP được xây dựng bằng các giao thức như LDP (Label Distributed Protocol), RSVP (Resource Reservation Protocol),… Một LSP nối từ đầu cuối đến đầu cuối gọi là đường hầm LSP (LSP tunnel) – liên kết các đoạn LSP giữa các node. 1.3.5 Cơ sở thông tin nhãn LIB (Label Information Base) Mỗi LSR phải xây dựng một bảng thông tin (information table) sử dụng cho việc đinh tuyến và chuyển tiếp các gói tin trong mạng. Trong bảng sẽ chứa những thông tin liên quan đến nhãn, địa chỉ, trạm kế,… để xác định rõ ràng cách thức chuyển tiếp của gói dữ liệu như thế nào. Bảng này gồm những trường sau [Hình 3]: 1.3.6 LSR (Label Switching Router) v LER (Label Edge Router) - LSR là router chuyển mạch nhãn nằm trong mạng lõi MPLS (không phải là các router biên) có nhiệm vụ là nhận gói tin chuyển đổi nhãn (label swapping), rồi sau đó chuyển tiếp (forwarding) gói tin này đến trạm kế tiếp. - LER là các router biên trong miền MPLS (MPLS domain). Nếu gói nhận vào là gói tin IP truyền thống thì LER sẽ gán nhãn vào gói tin và chuyển tiếp vào mạng lõi MPLS. Nếu gói nhận có nhãn thì LER sẽ gỡ nhãn ra và đưa gói tin vào mạng IP truyền thống. 1.4 Sự phát triển của MPLS Mục đích ban đầu của chuyển mạch nhãn là muốn đưa tốc độ của chuyển mạch lớp 2 vào lớp 3. Lý lẽ ban đầu cho các kỹ thuật như MPLS không lâu sau đã được nhận thấy là có ưu điểm, bởi vì các chuyển mạch lớp 3 mới được sử dụng công nghệ ASIC ( Application- specific integrated circuit), kỹ thuật nền tảng có thể thi hành chức năng tìm kiếm với tốc độ vừa đủ để hỗ trợ cho hầu hết các loại giao tiếp (interface). Chuẩn của chuyển mạch nhãn được nhóm nghiên cứu của IETF về MPLS đề xuất năm 1997 và được nghiên cứu rộng rãi. MPLS được phát triển từ nhiều kỹ thuật chính, bao gồm các phiên bản độc quyền về chuyển mạch nhãn như chuyển mạch nhãn của Cisco (Cisco’s Tag Switching), Chuyển mạch IP dựa trên nền định tuyến tổng hợp của IBM (IBM’s Aggregate Route-Based IP Switching – ARIS), Bộ định tuyến chuyển mạch tế bào của Toshiba (Toshiba’s Cell-Switched Router – CSR), Chuyển mạch IP của Ipsilon (Ipsilon’s IP Switching) và bộ định vị IP của Lucent (Lucent’s IP Navigator). Chuyển mạch thẻ (Tag Switching), được phát minh bởi Cisco, và đưa đến người dùng lần đầu tiên vào năm 1998. Từ khi bắt đầu triển khai chuyển mạch thẻ, Cisco đã làm việc chung với IETF để phát triển và thông qua các chuẩn của MPLS, hợp nhất các đặc tính và ưu điểm của Chuyển mạch thẻ. 1.5 Ưu và nhược điểm của MPLS - Tốc độ và độ trễ: Chuyển mạch nhãn được cung cấp để giải quyết vấn đề về tốc độ và độ trễ một cách hiệu quả. Chuyển mạch nhãn nhanh hơn nhiều chuyển mạch IP cổ điền bởi vì giá trị nhãn được thiết kế đơn giản, được sử dụng để quản lý bảng định tuyến theo cách nhãn sẽ được sử dụng là chỉ mục trong bảng. Việc tìm kiếm này yêu cầu chỉ một lần là tìm ra, ngược lại định tuyến cổ điển có thể phải tìm trong bảng đó vài nghìn lần. Kết quả, trên luồng vận chuyển, các gói được gửi thông qua mạng nhanh hơn thông thường, giảm thời gian trễ, và đáp ứng thời gian cho người dùng. - Khả năng mở rộng: Dĩ nhiên tốc độ là một mặt quan trọng của chuyển mạch nhãn, nhưng dịch vụ nhanh không phải là tất cả mà chuyển mạch nhãn có thể cung cấp. Nó cũng có thể cung cấp khả năng mở rộng, tức là điều tiết một số lượng lớn và ngày càng tăng nhanh chóng các user trên mạng Internet. Chuyển mạch nhãn đề nghị một cách giải quyết cho vấn đề phát triển mạng một cách nhanh chóng như vậy bằng cách cho phép một số lượng lớn các địa chỉ IP được liên kết với nhau trên một hay một vài nhãn. Cách tiếp cận này sẽ cắt giảm bớt bảng định tuyến và cho phép một router phục vụ nhiều người dùng hơn tại một thời điểm và cũng không cần đòi hỏi khả năng xử lý cao của các router. - Đơn giản: Một ưu điểm nữa của chuyển mạch nhãn là về cơ bản nó chỉ là tập hợp của các giao thức định tuyến. Nó rất đơn giản, chuyển tiếp một gói dựa trên nhãn của gói đó. Làm thế nào một nhãn đến một đường dẫn của người dùng mà không cần quan tâm đến việc chuyển tiếp thực sự của đường dẫn đó. Tất cả cơ chế điều khiển trên có thể phức tạp, nhưng chúng không làm ảnh hưởng đến hiệu quả của đường dẫn. Tức là sẽ có rất nhiều các phương pháp khác nhau để phân phối các nhãn cho đường truyền, tuy nhiên sau khi các nhãn đã được phân phối xong, họat động chuyển mạch nhãn sẽ được thực hiện một cách rất nhanh chóng. Chuyển mạch nhãn có thể được thực hiện trong một phần mềm, trong các mạch điện tử tích hợp hay trong một vi xử lý đặc biệt. - Mức độ sử dụng tài nguyên: Cơ chế điều khiển để thiết lập một nhãn phải không làm tiêu tốn nhiều tài nguyên. Nó không được làm mất nhiều tài nguyên và chuyển mạch nhãn thì hoàn toàn không làm tiêu tốn nhiều tài nguyên để thực thi việc thành lập một con đường chuyển mạch nhãn cho đường dẫn. 1.6 MPLS và kiến trúc internet Từ khi ARPNET được triển khai, thời đại của Internet bắt đầu, kiến trúc của Internet cũng được thay đổi. Nó mở ra các đáp ứng về sự tiến bộ của kỹ thuật, phát triển và hỗ trợ cho nhiều dịch vụ mới. Hầu hết các sự thay đổi gần đây của kiến trúc Internet là do sự thêm vào của MPLS. Nhưng cần chú ý rằng kỹ thuật chuyển tiếp của Internet là dựa vào việc định tuyến địa chỉ đích, và nó không hề thay đổi từ khi ARPANET xuất hiện. Sự thay đổi chính đó là sự thay thế của giao thức định tuyến cổng biên giới phiên bản 4 (Border Gateway Protocol Version 4 – BGP4) từ giao thức định tuyến cổng bên ngoài (Exterior Gateway Protocol – EGP), sự bổ sung của định tuyến miền trong không phân lớp (Classless Interdomain Routing – CIDR), các nâng cấp cố định của băng thông và các thiết bị đầu cuối như có thêm nhiều các bộ định tuyến mạnh. MPLS đã tác động đến cả kỹ thuật chuyển tiếp gói tin IP và việc xác định đường đi (đường đi của các gói tin được chuyển tiếp trên mạng Internet). Và kết quả là sự ra đời các cấu trúc mạng của Internet. MPLS có thể hỗ trợ cho IP phiên bản 6 (IP version 6) bởi vì thuật toán chuyển tiếp của MPLS cho IP phiên bản 4 cũng có thể áp dụng cho IP phiên bản 6 với việc sử dụng các giao thức định tuyến hỗ trợ cho địa chỉ IP phiên bản 6. MPLS được triển khai bởi vì nó có ưu điểm gần gũi và trực tiếp đến Internet. Hầu hết ưu điểm gần gũi của MPLS với các chi tiết cụ thể cho mạng đường trục của nhà cung cấp dịch vụ Internet là khả năng triển khai kỹ thuật lưu lượng (Traffic Engineering). Kỹ thuật lưu lượng cho phép các nhà cung cấp dịch vụ loại bỏ tải của các tuyến (link) bị tắc nghẽn và điều khiển các tải chia xẻ sang các tuyến khác chưa được sử dụng đúng mức. Kết quả của công việc trên là độ tận dụng tài nguyên sẽ ở cấp độ cao hơn và cũng có nghĩa là sẽ hiệu quả và chi phí sẽ được tiết kiệm hơn. 1.7 Tính chất bảo mật của MPLS Để có cái nhìn toàn cảnh về các vấn đề bảo mật của MPLS, thì chúng ta sẽ điểm qua bộ khung (framework) của MPLS. Bộ khung có 2 mặt phẳng chính đó là mặt phẳng điều khiển (control plane) và mặt phẳng dữ liệu (data plane). [Hình 4] Ứng với 2 mặt phẳng này thì có các kiểu tấn công sau nhắm vào mạng MPLS – làm cho nhà cung cấp cũng như người sử dụng mạng MPLS phải quan tâm. Những cách thức tấn công vào mạng MPLS được thể hiện qua bảng 1 Những kiểu tấn công trên nhằm vào những điểm yếu của MPLS. Qua đó, các tổ chức nghiên cứu về MPLS đã đưa ra kiến trúc bảo mật cho MPLS. Chương 2 sẽ tập trung phân tích kiến trúc bảo mật của MPLS với dịch cụ thể là mạng riêng ảo VPN (Virtual Private Network). Nhiều doanh nghiệp đang thay thế dần những công nghệ VPN truyền thống như ATM hay Frame Relay (FR) bằng những dịch vụ dựa trên MPLS. MPLS là công nghệ đang ngày càng trở nên phổ biến với việc cung cấp dịch vụ VPN hiệu quả và an toàn. Bảo mật kiến trúc MPLS thì đang được sự quan tâm ngày càng nhiều của nhà cung cấp dịch vụ cũng như khách hàng sử dụng MPLS. Bài nghiên cứu này cho ta một cái nhìn tổng quan về bảo mật kiến trúc và so sánh nó với các công nghệ lớp 2 truyền thống từ viễn cảnh bảo mật. Bài này khuyến nghị cách để làm an toàn hạ tầng MPLS. Tập trung cụ thể vào kiến trúc MPLS VPN. Mặt phẳng chuyển tiếp (Forwarding plane): - Mặt phẳng chuyển tiếp sử dụng một cơ sở thông tin chuyển tiếp nhãn (LFIB - Label Forwarding Information Base) để chuyển tiếp các gói. Mỗi nút MPLS có hai bảng liên quan đến việc chuyển tiếp là: cơ sở thông tin nhãn (LIB - Label Information Base) và LFIB. LIB chứa tất cả các nhãn được nút MPLS cục bộ đánh dấu và ánh xạ của các nhãn này đến các nhãn được nhận từ láng giềng (MPLS neighbor) của nó. LFIB sử dụng một tập con các nhãn chứa trong LIB để thực hiện chuyển tiếp gói. Mặt phẳng điều khiển (Control Plane) - Mặt phẳng điều khiển MPLS chịu trách nhiệm tạo ra và lưu trữ LFIB. Tất cả các nút MPLS phải chạy một giao thức định tuyến IP để trao đổi thông tin định tuyến đến các nút MPLS khác trong mạng. Các nút MPLS enable ATM sẽ dùng một bộ điều khiển nhãn (LSC – Label Switch Controller) như router 7200, 7500 hoặc dùng một mô đun xử lý tuyến (RMP – Route Processor Module) để tham gia xử lý định tuyến IP. - Các giao thức định tuyến Link-state như OSPF và IS-IS là các giao thức được chọn vì chúng cung cấp cho mỗi nút MPLS thông tin của toàn mạng. Trong các bộ định tuyến thông thường, bản định tuyến IP dùng để xây dựng bộ lưu trữ chuyển mạch nhanh (Fast switching cache) hoặc FIB (dùng bởi CEF - Cisco Express Forwarding). Tuy nhiên với MPLS, bản định tuyến IP cung cấp thông tin của mạng đích và subnet prefix. Các giao thức định tuyến link-state gửi thông tin định tuyến (flood) giữa một tập các router nối trực tiếp (adjacent), thông tin liên kết nhãn chỉ được phân phối giữa các router nối trực tiếp với nhau bằng cách dùng giao thức phân phối (LDP – Label Distribution Protocol) hoặc TDP (Cisco ‘s proproetary Tag Distribution protocol). - Các nhãn được trao đổi giữa các nút MPLS kế cận để xây dựng nên LFIB. MPLS dùng một mẫu chuyển tiếp dựa trên sự hoán đổi nhãn để kết nối với các mô đun điều khiển khác nhau. Mỗi mô đun điều khiển chịu trách nhiệm đánh dấu và phân phối một tập các nhãn cũng như lưu trữ các thông tin điều khiển có liên quan khác. Các giao thức cổng nội (IGP – Interior Gateway Potocols) được dùng để xác nhận khả năng đến được, sự liên kết, và ánh xạ giữa FEC và địa chỉ trạm kế (next-hop address). Các mô đun điều khiển MPLS gồm: • Định tuyến Unicast (Unicast Routing) • Định tuyến Multicast (Multicast Routing) • Kỹ thuật lưu lượng (Traffic engineering) • Mạng riêng ảo (VPN – Virtual private Network) • Chất lượng dịch vụ (QoS – Quality of service) Các thành phần mặt phẳng dữ liệu và mặt phẳng điều khiển của MPLS - Cisco Express Forwarding (CEF) là nền tảng cho MPLS và hoạt động trên các router của Cisco. Do đó, CEF là điều kiện tiên quyết trong thực thi MPLS trên mọi thiết bị của Cisco ngoại trừ các ATM switch chỉ hỗ trợ chức năng của mặt phẳng chuyển tiếp dữ liệu. CEF là một cơ chế chuyển mạch thuộc sở hữu của Cisco nhằm làm tăng tính đơn giản và khả năng chuyển tiếp gói IP. CEF tránh việc viết lại overhead của cache trong môi trường lõi IP bằng cách sử dụng một cơ sở thông tin chuyển tiếp (FIB – Forwarding Information Base) để quyết định chuyển mạch. Nó phản ánh toàn bộ nội dung của bảng định tuyến IP (IP routing table), ánh xạ 1-1 giữa FIB và bảng định tuyến. Khi router sử dụng CEF, nó duy trì tối thiểu 1 FIB, chứa một ánh xạ các mạng đích trong bảng định tuyến với các trạm kế tiếp (next-hop adjacencies) tương ứng. FIB ở trong mặt phẳng dữ liệu, nơi router thực hiện cơ chế chuyển tiếp và xử lý các gói tin. Trên router còn duy trì hai cấu trúc khác là cơ sở thông tin nhãn (LIB – Label Information Base) và cơ sở thông tin chuyển tiếp nhãn (LFIB – Label Forwarding Information Base). Giao thức phân phối sử dụng giữa các láng giềng MPLS có nhiệm vụ tạo ra các chỉ mục (entry) trong hai bảng này. LIB thuộc mặt phẳng điều khiển và được giao thức phân phối nhãn sử dụng khi địa chỉ mạng đích trong bảng định tuyến được ánh xạ với nhãn nhận được từ router xuôi dòng. LFIB thuộc mặt phẳng dữ liệu và chứa nhãn cục bộ (local label) đến nhãn trạm kế ánh xạ với giao tiếp ngõ ra (outgoing interface), được dùng để chuyển tiếp các gói được gán nhãn. Như vậy, thông tin về các mạng đến được do các giao thức định tuyến cung cấp dùng để xây dựng bảng định tuyến (RIB - Routing Information Base). RIB cung cấp thông tin cho FIB. LIB được tạo nên dựa vào giao thức phân phối nhãn và từ LIB kết hợp với FIB tạo ra LFIB. Nhãn (Label) trong MPLS Kiểu khung (Frame mode): - Kiểu khung là thuật ngữ khi chuyển tiếp một gói với nhãn gắn trước tiêu đề lớp ba. Một nhãn được mã hoá với 20bit, nghĩa là có thể có 220 giá trị khác nhau. Một gói có nhiều nhãn, gọi là chồng nhãn (label stack). Ở mỗi chặng trong mạng chỉ có một nhãn bên ngoài được xem xét. Hình 2 mô tả định dạng tiêu đề của MPLS - Trong đó: - EXP=Experimental (3 bit): dành cho thực nghiệm. Cisco IOS sử dụng các bit này để giữ các thông báo cho QoS; khi các gói MPLS xếp hàng có thể dùng các bit EXP tương tự như các bit IP ưu tiên (IP Precedence). - S=Bottom of stack (1 bit): là bít cuối chồng. Nhãn cuối chồng bit này được thiết lập lên 1, các nhãn khác có bít này là 0. - TTL=Time To Live (8 bit): thời gian sống là bản sao của IP TTL. Giá trị của nó được giảm tại mỗi chặng để tránh lặp (giống như trong IP). Thường dùng khi người điều hành mạng muốn che dấu cấu hình mạng bên dưới khi tìm đường từ mạng bên ngoài. Kiểu tế bào (Cell mode): - Thuật ngữ này dùng khi có một mạng gồm các ATM LSR dùng MPLS trong mặt phẳng điều khiển để trao đổi thông tin VPI/VCI thay vì dùng báo hiệu ATM. Trong kiểu tế bào, nhãn là trường VPI/VCI của tế bào. Sau khi trao đổi nhãn trong mặt phẳng điều khiển, ở mặt phẳng chuyển tiếp, router ngõ vào (ingress router) phân tách gói thành các tế bào ATM, dùng giá trị VCI/CPI tương ứng đã trao đổi trong mặt phẳng điều khiển và truyền tế bào đi. Các ATM LSR ở phía trong hoạt động như chuyển mạch ATM – chúng chuyển tiếp một tế bào dựa trên VPI/VCI vào và thông tin cổng ra tương ứng. Cuối cùng, router ngõ ra (egress router) sắp xếp lại các tế bào thành một gói. - Trong đó: • GFC (Generic Flow Control): Điều khiển luồng chung • VPI (Virtual Path Identifier): nhận dạng đường ảo • VCI (Virtual Channel Identifier): nhận dạng kênh ảo • PT (Payload Type): Chỉ thị kiểu trường tin • CLP (Cell Loss Priority): Chức năng chỉ thị ưu tiên huỷ bỏ tế bào • HEC (Header error check): Kiểm tra lỗi tiêu đề. Cấu trúc nút của MPLS: - Một nút của MPLS có hai mặt phẳng: mặt phẳng chuyển tiếp MPLS và mặt phẳng điều khiển MPLS. Nút MPLS có thể thực hiện định tuyến lớp ba hoặc chuyển mạch lớp hai. Kiến trúc cơ bản của một nút MPLS như sau: . TỔNG QUAN VỀ MPLS 1.1 Giới thiệu Internet ra đời mở màn cho kỷ nguyên tiến bộ vượt bậc của nhân loại, nó không ngừng phát triển về phạm vi cũng như chất lượng nhằm vào những điểm yếu của MPLS. Qua đó, các tổ chức nghiên cứu về MPLS đã đưa ra kiến trúc bảo mật cho MPLS. Chương 2 sẽ tập trung phân tích kiến trúc bảo mật của MPLS với dịch cụ thể là mạng. check): Kiểm tra lỗi tiêu đề. Cấu trúc nút của MPLS: - Một nút của MPLS có hai mặt phẳng: mặt phẳng chuyển tiếp MPLS và mặt phẳng điều khiển MPLS. Nút MPLS có thể thực hiện định tuyến lớp ba hoặc