Hành trình cơ bản của một gói dữ liệu trên mạng

Mục đích của bài viết này là mang lại một cái nhìn cơ bản về hành trình của các gói dữ liệu trao đổi trên Internet từ việc tạo các gói được tạo đến các Switch, Router, NAT và cách thức truyền tải dữ liệu trên Internet. Chủ đề này sẽ rất hay đối với những người mới nghiên cứu về lĩnh vực mạng và ...

Mục đích của bài viết này là mang lại một cái nhìn cơ bản về hành trình của các gói dữ liệu trao đổi trên Internet từ việc tạo các gói được tạo đến các Switch, Router, NAT và cách thức truyền tải dữ liệu trên Internet. Chủ đề này sẽ rất hay đối với những người mới nghiên cứu về lĩnh vực mạng và bảo mật và những người có ít kiến thức cơ bản về quá trình xử lý dữ liệu trên Internet.

Giới thiệu


Có lẽ trong một vài bài báo, chúng ta cũng đã thấy được sự quan trọng của hai lĩnh vực về bảo mật máy tính đối với người mới sử dụng đó là: programming và networking. Trong khi chúng là hai phần khác nhau thì cả hai cần phải được xem có tầm quan trọng như nhau. Nếu không có việc lập trình các giao thức mạng thì sẽ không có mạng. Điều cần hỏi ở đây là: có bắt buộc cần phải có một lập trình viên để nắm được một cách đầy đủ các khái niệm về mạng và lý thuyết mạng ở mức thấp hay không? Trong nhiều trường hợp là không cần như vậy. Mặc dù vậy, một sự ham hiểu của các độc giả sẽ là tốt và có thể hướng anh ta vào việc lập trình tại một vài điểm để có thêm các thử nghiệm với các giao thức khác và lý thuyết mạng.

Với những người mới với lĩnh vực này, ấn tượng đầu tiên với một máy tính là cái gì đó khó có thể quên. Khi một ai đó khám phá ra Internet, sự giàu có của thông tin tạo cho họ một cảm giác kinh sợ và tạo nên cho họ một hứng khởi là các kỹ thuật bên trong của nó làm việc như thế nào. Bất kỳ ai dường như cũng bị rơi vào một thế giới hoàn toàn mới khi sử dụng một máy tính để kết nối với các hệ thống khác bên phía bờ kia của thế giới. Họ sẽ tò mò về các máy tính và mạng làm các công việc này như thế nào? Và thông tin truyền từ máy tính này đến máy tính kia đi qua tất cả các thiết bị khác nhau để đến được đích của nó như thế nào?

Các hành trình

Khi một ứng dụng Internet được gọi thì một loạt các sự kiện sẽ xảy ra. Trong bài viết này chúng tôi chỉ giới thiệu một cách đơn giản một gói được tạo ra như thế nào và các thiết bị sẽ đưa nó đi theo nhiều con đường để đến đích của nó ra sao. Việc hiểu biết về việc gì xảy ra giữa điểm A và điểm Z có thể khá hữu ích trong việc tiếp cận đến lĩnh vực này.

Bây giờ chúng ta nên mô tả những gì xảy ra từ thời điểm một ứng dụng được gọi đến lúc các gói được tạo ra bằng các ứng dụng tới được đích của nó. Giả sử rằng bạn sử dụng Firefox để kiểm tra xem một tin tức trên trang web yêu thích của bạn. Một loạt các sự kiện đã được thiết lập nên trong sự chuyển động này là hoàn toàn trong suốt đối với bạn. Sau khi bắt tay TCP/IP ban đầu, trình duyệt web của bạn sẽ gửi một yêu cầu đến máy chủ web server mà trang chủ của bạn đang hỏi cho trang chủ của nó. Thông tin yêu cầu HTTP GET bây giờ cần phải gửi đến web server. Những gì xảy ra với Firefox khi kích ứng dụng của bạn là làm một yêu cầu đến hệ thống. Quá trình này sẽ đưa dữ liệu mà Firefox muốn gửi được copy từ các không gian nhớ của các ứng dụng đến bộ đệm bên trong không gian trung tâm.

Phụ thuộc vào giao thức truyền tải nào mà ứng dụng sử dụng, lớp socket sẽ gọi cả UDP và TCP. Chúng ta cần phải nhớ rằng có rất nhiều ứng dụng không sử dụng TCP như một giao thức truyền tải. DNS sử dụng cả hai UDP và TCP, trong khi các ứng dụng khác như là TFTP chỉ sử dụng UDP. Lớp socket gọi giao thức truyền tải thích hợp, khi đó dữ liệu sẽ được copy xuống vào bộ đệm socket.

Sự chia nhỏ dữ liệu

Khi copy dữ liệu từ yêu cầu GET được thực hiện đến một bộ đệm socket, TCP sẽ chia nhỏ dữ liệu này nếu cần thiết. Mặc dù một yêu cầu GET là tương ứng với một gói và sẽ đi bên trong MTU của Ethernet không có vấn đề gì, nhưng việc gì sẽ xảy ra nếu các yêu cầu của trình duyệt vượt quá MTU? Khi đó TCP sẽ chia nhỏ dữ liệu để bảo đảm kích thước phù hợp với giới hạn 1500bytes của Ethernet MTU. Một điểm chính đáng nhớ ở đây là sự chia nhỏ này sẽ xảy ra tại lớp TCP nếu ứng dụng yêu cầu sử dụng TCP như là giao thức truyền tải dữ liệu của chúng.

Việc truyền tải dữ liệu trong môi trường mạng.

Dữ liệu được tạo hợp với chức năng lớp truyền tải riêng của nó, hãy xem xét lớp IP. Tại đây, header IP được xây dựng và tất cả các địa chỉ IP quan trọng được gán vào. Sau đó, dự liệu sẽ theo các đường liên kết dữ liệu, nơi mà cả hai lớp điều khiển liên kết logic và điều khiển truy cập thực hiện phần việc này. Cuối cùng, dữ liệu được sẵn sàng để truyền bằng các lớp vật lý được tích hợp trong hệ thống bằng các NIC card. Với hầu hết các người dùng tại nhà, một router SoHo đã được kết hợp của cả chuyển mạch (switch) và router đơn giản. Với người dùng trong công ty, switch là một phần cứng tách biệt với router của nó. Nếu trong môi trường công ty các máy tính có thể nối với các switch qua đường cáp. Nếu switch không có bảng hard-coded CAM thì swtich cần chú ý đến địa chỉ MAC của máy tính (duy nhất cho mỗi Ethernet card). Khi gói dữ liệu đến từ quá trình truyền tải của nó mang theo dữ liệu của website như được yêu cầu trong GET request chuyển mạch theo hướng ngược của trình khách nó sẽ hiểu nơi để gửi các gói đó trở lại.

Trình khách hiểu các gateway mặc định của nó như thế nào? Dù nó là mạng công ty hay tại nhà thì hệ thống sẽ luôn thực hiện một gói DHCP một lần để nó khởi động và lấy thông tin chính từ server DHCP. Do không phải tất cả các hệ thống đều sử dụng DHCP, vì thế không có địa chỉ IP hay gateway được định trước. Thông tin trong đó như là tên server DNS nào được sử dụng, địa chỉ IP của nó và địa chỉ IP gateway mặc định. Nếu DHCP bị tắt, người quản trị hệ thống sẽ phải vào tất cả các thông tin này bằng tay. Cực kỳ không hiệu quả chút nào, nên nó giải thích tại sao DHCP được bật trong hầu hết các mạng.

Với gateway mặc định ở gần, máy tính hiểu đích đi đến để truy cập Internet và lấy dữ liệu trang web khi được yêu cầu bởi Firefox. Sau khi các gói đi qua switch nó hình thành đường để dễ dàng đi qua firewall đến router. Các packet nên được cho qua một firewall, khi đó firewall sẽ làm một vài công việc chính. Một firewall với đầy đủ tính năng sẽ ghi địa chỉ IP và port nguồn, cộng địa chỉ IP và port đích. Firewall sẽ giữ thông tin này trong bảng trạng thái của bộ nhớ, bằng cách này nó sẽ quy định sự truy cập vào mạng bên trong như thế nào. Nếu một gói không được ghi thì nó sẽ không được truy cập vào trong mạng. Trong một dịp khác chúng tôi sẽ giới thiệu với các bạn về vai trò của firewall đối với việc bảo vệ máy tính của bạn như thế nào.

Các router và NAT

Bây giờ, khi các gói đã đi qua firewall, nếu hiện tại nó đang đi đến router. Địa chỉ IP cá nhân mà các gói có (giả định nó là một địa chỉ cơ bản 192.168/16) sẽ được biến đổi thành một địa chỉ IP chung có thể định tuyến, cái mà được cho bởi ISP của bạn. Nó cũng được gán cho router của bạn. Các gói bây giờ bắt đầu cuộc hành trình của nó trên Internet và qua vô số các router trong chuyến đi của nó. Mỗi thời điểm đó, các gói hướng đến một router khác. Vậy cái gì xảy ra với chính các gói.

Hãy bắt đầu bằng việc nhìn vào router. Nó sẽ định tuyến các gói dựa vào thông tin trong bảng định tuyến của chính nó. Đến khi router tiếp theo nhận được các gói này nó sẽ tính toán theo bảng định tuyến của nó để tìm ra con đường ngắn nhất cho việc truyền tải gói tin này. Một trong vài phần nó sẽ thay đổi đó là TTL “time to live”. Bây giờ phần header IP của nó được thay đổi, do đó các router cần phải tính toán một giá trị tổng mới cho các gói. Cứ tương tự như vậy cho tới khi các gói đến được địa chỉ đích mong muốn của nó.

Lớp vật lý sẽ thực hiện một IRQ đến CPU đã chỉ rõ rằng có dữ liệu đã được xử lý. Sau đó, dữ liệu sẽ đi lên lớp data link, đây chính là nơi mà webserver sẽ nhận ra MAC và tiếp tục đi lên lớp IP, sau đó là lớp transport (nơi dữ liệu được đưa vào bộ đệm). Tại lớp này các thông tin của ứng dụng mà dữ liệu mang theo cho nó được xử lý ở đây. Kết quả cuối cùng là thông tin được yêu cầu cho yêu cầu GET đã được gửi trở lại. Tương tự như thế với một gói mới thì quá trình cũng xảy một loạt các sự kiện như vậy.

Kết luận

Nhìn chung bài báo này đã cố gắng để trình bày cho các bạn có một kiến thức cơ bản về mạng và các khái niệm chung của routing, switching và NAT. Mong các bạn có thể tiếp tục thực hiện những nghiên cứu thêm để nắm sâu hơn về nó và chúc các bạn thành công.

Phạm Văn Linh
Email:

0