# NETWORKING WALKTHROUGH --- ###### tags: `TryHackMe` `Walkthrough` ## Giới thiệu: - Bài biết này sẽ cung cấp bạn những thông tin cơ bản nhất về những nguyên tắc cơ bản của Mạng Máy Tính. Mạng Máy Tính là một chủ đề rất rộng, vì vậy đây chỉ là một bản tóm lược vắn tắt. Tuy nhiên mong rằng nó vẫn sẽ cho bạn đủ những kiến thức nền tảng của chủ đề này, từ đó có thể tự xây dựng được một mô hình mạng. - Những chủ đề ma bài viết này sẽ đề cập đến: + Mô hình OSI + Mô hình TCP/IP + Các mô hình mạng trong thực tế + Giới thiệu sơ lược về những công cụ trong Mạng Máy Tính ## Tổng Quan về mô hình OSI - Mô hình OSI (**O**pen **S**ystems **I**nterconnection) là mô hình được chuẩn hóa được dùng để biểu diễn lý thuyết đằng sau mạng máy tính. Thực sự rằng trong thực tế mô hình TCP/IP gọn nhẹ hơn, nhưng về nhiều mặt thì mô hình OSI ưu việt và dễ hiểu hơn khá nhiều - Mô hình OSI gồm 7 tầng khác nhau: | OSI | Tầng | Tên dữ liệu được sử dụng ở tầng đó | | -------- | -------- | -------- | |Application|Tầng Ứng dụng|Data| |Presentation|Tầng Trình Bày|Data| |Session|Tầng Phiên|Data| |Transport|Tầng Vận Chuyển|Datagram, Segment| |Network|Tầng Mạng|Packet| |Data link|Tầng Liên Kết|Frame| |Physical|Tầng Vật Lý|Bit| - Một số ví dụ trực quan về mô hình OSI: ![](https://i.imgur.com/ZHjaAMU.png) - Ta sẽ đi sâu vào từng tầng, với các chức năng chính của chúng: <details> <summary>Tầng 7, Application:</summary> - Về cơ bản thì chức năng chính là: cung cấp các tùy chọn kết nối mạng cho các chương trình chạy trên máy tính. - Nó cung cấp giao diện cho chúng sử dụng để truyền dữ liệu. Khi dữ liệu được cung cấp cho lớp ứng dụng, nó sẽ được chuyển xuống lớp trình bày. </details> <details> <summary>Tầng 6, Presentaion:</summary> + Tầng trình bày sẽ nhận dữ liệu từ tầng ứng dụng, sau đó dịch dữ liệu sang dạng chuẩn hóa, cũng như xử lý các dạng mã hóa, nén hay các biến đổi kiểu khác đối với dữ liệu. + Sau khi hoàn tất biến đổi, dữ liệu được gửi xuống tầng phiên </details> <details> <summary> Tầng 5, Session:</summary> + Sau khi đã nhận đúng dạng, tầng phiên sẽ xem xét liệu nó có thể kết nối với các máy khác thông qua mạng không, nếu không nó sẽ báo về lỗi và kết thúc chu trình. Nếu như một phiên được thiết lập thì nhiệm vụ của tầng phiên là duy trì nó, cũng như kết hợp với tầng phiên của các máy từ xa để đồng bộ hóa liên lạc. + Tầng phiên đặc biệt quan trọng vì phiên mà nó tạo ra là duy nhất cho giao tiếp được đề cập, đây là thứ cốt lõi giúp ta có thể gửi nhiều yêu cầu đến các điểm cuối khác nhau mà không làm xáo trộn dữ liệu(mở 2 tab cùng 1 lúc) + Nếu phiên được thiết lập thành công, nó được chuyển xuống tầng vận chuyển. </details> <details> <summary>Tầng 4, Transport:</summary> + Tầng vận chuyển là tầng vô cùng quan trọng, đây là nơi xử lý rất nhiều chức năng quan trọng. + Chức năng đầu tiên là quyết định xem sẽ vận chuyện file theo giao thức nào: Hai giao thức phổ biến nhất trong truyền file là **TCP** (Transsmission Control Protocol) và **UDP** (User Datagram Protocol) + Với TCP: truyền dữ liệu dựa trên kết nối, nghĩa là kết nối giữa các máy tính được thiết lập và duy trì trong suốt thời gian yêu cầu, vậy nên đây là phép truyền đáng tin, vì nó có thể đảm bảo rằng tất cả các gói đến đúng nơi, nếu dữ liệu bị mất sẽ được gửi lại + Với UDP: ngược lại với TCP, các gói dữ liệu về cơ bản được ném vào máy tính nhận - nếu nó không thể theo kịp thì đó là vấn đề của nó (đây là lý do tại sao truyền video qua thứ gì đó như Skype có thể bị pixel nếu kết nối kém) + Vậy nên, ta ưu tiên sử dụng TCP khi cần độ chính xác(truyền file hoặc tệp thông tin) và UDP khi cần tốc độ truyền(truyền phát video) + Tùy những giao thức vừa chọn, tầng giao vận sẽ chia các làn truyền thành những mảnh nhỏ (với TCP thì ta gọi là các *segments*, với UDP ta gọi là các *datagrams*) </details> <details> <summary> Tầng 3, Network:</summary> + Tầng mạng sẽ chịu trách nhiệm xác định điểm đến của yêu cầu, từ đó xác định địa chỉ IP đích, cũng như định tuyến(routing) để tìm được đường đi tốt nhất cho các gói tin. + Ở tầng này ta làm việc với địa chỉ logic(địa chỉ IP), mục đích ta sử dụng địa chỉ logic để phân thứ tự, phân loại, nhận biết và giúp ta có thể sắp xếp chúng. Loại địa chỉ logic được dùng phổ biến hiện nay là IPv4. Ví dụ như: 192.168.1.1 (địa chỉ router wifi nhà bạn) </details> <details> <summary>Tầng 2, Data Link:</summary> + Tầng liên kết này sẽ chú trọng đến địa chỉ vật lý(MAC) của quá trình truyền gói tin. Sau khi nhận được packet từ tầng mạng (bao gồm địa chỉ IP của máy từ xa), tầng liên kết sẽ thêm địa chỉ MAC vào cuối của điểm nhận. Trong mỗi máy tính được kết nối mạng đều có Card giao diện mạng (NIC), đi kèm là địa chỉ vật lý duy nhất (MAC) để nhận dạng nó. + Địa chỉ MAC là thứ không thể bị thay đổi và được ghi vào card theo nghĩa đen, chúng đã được nhà sản xuất cài đặt sẵn và có thể bị giả mạo. + Tầng liên kết cũng thực hiện việc kiểm tra xem để chắc chắn rằng gói tin sẽ không bị hư hại trong quá trình truyền, thứ mà có thể bị khi dữ liệu ở tầng 1 - tầng vật lý </details> <details> <summary>Tầng 1, Physical:</summary> + Tầng vật lý là nơi ngay bên dưới phần cứng, đây là nơi tín hiệu được gửi và nhận bằng các xung điện. Tầng vật lý sẽ chuyển đổi các bit nhị phân thành các tín hiệu và truyền chúng đi qua mạng máy tính, đồng nhận tín hiệu truyền đi và chuyển chúng về các bit nhị phân. </details> ## Đóng gói: - Dữ liệu truyền xuống từng tầng của mô hình sẽ được từng tầng thêm vào những thông tin được đề cập khi bắt đầu truyền. Ví dụ như ở tầng mạng, phần header củadữ liệu sẽ được thêm địa chỉ IP đích, hay ở tầng giao vận, phần header sẽ được thêm giao thức truyền dữ liệu. Đặc biệt tầng liên kết sẽ thêm vào một phần đuôi (trailer) dùng để xác minh rằng dữ liệu không bị mất khi truyền. Cả quá trình này được gọi là đóng gói(encapsulation), mô tả quá trình dữ liệu được gửi từ máy này sang máy khác. - Cụ thể như ảnh sau: ![](https://i.imgur.com/L0G5eKc.png) - Ở từng tầng, dữ liệu được đóng gói sẽ được gọi bằng những tên khác nhau. - Khi máy tính còn lại nhận được dữ liệu, nó sẽ đảo ngược lại quá trình đóng gói, bắt đầu từ tầng vật lý lên tầng ứng dụng và loại bỏ dần những thông tin mà nó thêm vào trong quá trình truyền(header, trailer), đây được gọi là quá trình giải mã(de-encapsulation). ## Mô hình TCP/IP: - Mô hình TCP/IP rất giống với mô hình OSI về nhiều mặt. TCP/IP ra đời sớm hơn vài năm và là cơ sở của mạng máy tính ngoài đời thực. TCP chỉ có 4 tầng: Application, Transport, Internet and Network Interface. Các tầng này bao gồm đầy đủ chức năng của các tầng đã giới thiệu ở mô hình OSI. - Mô hình TCP/IP trực quan: ![](https://i.imgur.com/gJzNZwi.png) - Cụ thể về sự tương đồng giữa 2 mô hình mạng máy tính OSI và TCP/IP: ![](https://i.imgur.com/faq4u9r.png) - Như hình trên, ta cũng có thể thấy, mô hình OSI là bản mở rộng và phân bố đều các chức năng của mô hình TCP/IP - Các quy trình đóng gói của mô hình TCP/IP cũng tương tự như mô hình OSI, từng tầng sẽ gắn header vào dữ liệu rồi sẽ được mã hóa khi nhận được dữ liệu. - Sở dĩ tên mô hình được gọi là TCP/IP vì nó thể hiện 2 giao thức quan trọng nhất được sử dụng trong mô hình: TCP(Transmission Control Protocol)điều khiển luồng dữ liệu giữa hai điểm cuối và IP(Internet Protocol) kiểm soát cách mà cách các gói được đánh địa chỉ và gửi đi. Bây giờ tôi sẽ nói về giao thức TCP. - Như ta đã biết, TCP là giao thức dựa trên kết nối(connection-based), nghĩa là trước khi gửi dữ liệu bằng TCP, bạn phải có kết nối ổn định giữa 2 máy tính, và quá trình thiết lập kết nối này được gọi là bắt tay ba bước(*three-way handshake*), cụ thể như sau: + Khi bạn muốn thiết lập 1 kết nối, máy tính sẽ gửi một request đặc biệt đến server từ xa chỉ định rằng tôi muốn khởi tạo kết nối. Request này chứa 1 thứ gọi là bit SYN(viết tắt cho synchronise - đồng bộ hóa), về cơ bản nó là yếu tố cần thiết đầu tiên cho quá trình kết nối + Sau đó server sẽ trả lời bằng một gói chứa SYN bit và một bit "acknowledgement - xác nhận", gọi là ACK + Cuối cùng, máy tính của bạn sẽ gửi một gói chứa bit ACK, xác nhận rằng kết nối đã được thiết lập thành công. - Hình ảnh cụ thể minh họa quá trình bắt tay 3 bước ![](https://i.imgur.com/B33kQQP.png) **->** Khi thiết lập một kết nối TCP, bắt buộc phải thông qua quá trình bắt tay 3 bước ## Công cụ mạng máy tính: Ping - Ping là một công cụ hữu hiệu trong việc kiểm tra xem liệu có thể kết nối được với nguồn tài nguyên từ xa không( thông thường sẽ là một website ở trên mạng). Nhưng cũng có thể là một máy tính trong mạng gia đình của bạn nếu bạn muốn kiểm tra xem nó có được cấu hình đúng hay không. - Ping hoạt động dựa trên giao thức ICMP. Giao thức này hoạt động ở tầng Network ở mô hình OSI và tầng Internet của mô hình TCP/IP - Cách sử dụng: `ping <target>` + Ví dụ: ![](https://i.imgur.com/YKlbC6J.png) + Lệnh ping trả về địa chỉ IP của máy chủ mà ta đã lập kết nối, không phải của URL -> xác định địa chỉ IP của máy chủ lưu trữ một trang web + Một số switch cho câu lệnh ping: ![](https://i.imgur.com/dTo4jml.png) ## Công cụ mạng máy tính: Traceroute - Tiếp theo ta sẽ đến với câu lệnh `traceroute`, câu lệnh dùng để định vị đợc đường đi request dùng để đến được máy tính của mục tiêu - Internet có rất nhiều server và end-point, nên request sẽ phải đi qua khá nhiều server để đến được đích, `traceroute` cho phép ta nhìn được những đường đi này - Với windows câu lệnh là: `tracert` sẽ mặc định sử dụng giao thức ICMP cho traceroute, tương đương với Linux sử dụng UDP. - Cách sử dụng: `traceroute <destination>` + Ví dụ: ![](https://i.imgur.com/bfCFR3r.png) ![](https://i.imgur.com/yGKaVaf.png) ## Công cụ máy tính: WHOIS - Tên miền - vị cứu tinh vô danh của internet. - Tên miền sẽ là thứ để chúng ta định danh 1 trang web mà không cần phải nhớ địa chỉ IP của nó. Ví dụ: Ta có thể nhập tryhackme.com thay vì địa chỉ IP TryHackMe - Về cơ bản, Whois cho phép bạn truy vấn ai đã đăng ký một tên miền. Ở châu Âu, các chi tiết cá nhân được biên tập lại; tuy nhiên, ở những nơi khác, bạn có thể có được rất nhiều thông tin từ tìm kiếm whois. - Lưu ý: Bạn có thể cần phải cài đặt whois trước khi sử dụng nó. Cách cài đặt ở trên hệ thống Debian: `sudo apt update && sudo apt-get install whois` - Cách sử dụng: `whois <domain>` ## Công cụ máy tính: Dig - Bây giờ chúng ta sẽ tìm hiểu về cách miền hoạt động, dựa vào một giao thức TCP/IP là DNS(Domain Name System), ta có thể chuyển đổi URL thành địa chỉ IP để máy tính có thể hiểu được. - Về cơ bản thì DNS cho phép ta yêu cầu một máy chủ đặc biệt cung cấp địa chỉ IP của trang web mà ta đang cố truy cập. Ví dụ: nếu ta đưa ra yêu cầu tới www.google.com, máy tính trước tiên sẽ gửi yêu cầu tới một máy chủ DNS đặc biệt (mà máy tính của bạn đã biết cách tìm). Sau đó, máy chủ sẽ tìm kiếm địa chỉ IP cho Google và gửi lại cho máy tính. Cuối cùng, máy tính sẽ gửi yêu cầu tới IP của máy chủ Google. - Để tôi giải thích cụ thể hơn 1 chút: + Bạn thực hiện một yêu cầu cho một trang web. Máy tính sẽ kiểm tra bộ đệm cục bộ để xem liệu nó đã có địa chỉ IP được lưu cho trang web hay chưa. Nếu có thì nó sẽ chuyển đến trang web, nếu không nó sẽ chuyển sang giai đoạn tiếp theo. + Máy tính của bạn sẽ gửi yêu cầu đến server DNS đệ quy. Server sẽ có một bộ đệm chứa kết quả của các tên miền phổ biến. Tuy nhiên, nếu trang web bạn yêu cầu không được lưu trữ trong bộ đệm, server đệ quy sẽ chuyển yêu cầu tới server root name. + Về cơ bản, các server root name theo dõi các server DNS ở cấp độ thấp hơn, chọn một server thích hợp để chuyển hướng yêu cầu của bạn đến. Các server cấp thấp hơn này được gọi là Top-Level Domain servers. - Khi bạn truy cập vào trang web bằng web browser thì tất cả điều này đều tự động diễn ra, nhưng chúng ta có thể làm thủ công bằng câu lệnh `dig`, giống như `ping` và `traceroute`, `dig` có sẵn trong thư viện câu lệnh của Linux - `Dig` cho phép ta truy vấn thủ công các server DNS đệ quy mà ta chọn để biết thông tin về các miền - Cách sử dụng: `dig <domain> @<dns-server-ip>` - `dig` là công cụ hữu dụng trong khắc phục sự cố mạng - Chú ý: đơn vị của TTL(Time To Live) là giây