STDIO
Tìm kiếm gần đây

    Nội dung

    Hành Trình Của Một Gói Tin

    Phi Phạm

    15/04/2015
    05/04/2017
    Hành Trình Của Một Gói Tin
    Cách một gói tin được tạo ra và truyền đi trên mạng Internet, tìm hiểu cách thức hoạt động của một số giao thức thông dụng. Bài viết là những kiến thức, kinh nghiệm mà tôi đã tiếp thu sau quá trình tìm hiểu và học tập.

    Giới thiệu

    Cách một gói tin được tạo ra và truyền đi trên mạng Internet, tìm hiểu cách thức hoạt động của một số giao thức thông dụng. Bài viết cung cấp kiến thức cơ bản hướng đến những người bắt đầu làm quen với mạng máy tính.

    Tại máy tính

    Tại lớp Application

    Lớp Application là lớp gần nhất với người dùng, từ đây, dữ liệu, yêu cầu từ người dùng sẽ được sử dụng để tạo thành một khối Data lớn theo khuôn dạng nhất định.

    Ví dụ khi nhập địa chỉ một trang web vào trình duyệt, thì một yêu cầu HTTP GET sẽ được tạo ra, dựa trên những thông tin mà người dùng nhập.

    Tại lớp Transport

    Tại lớp Transport, dữ liệu sẽ được chia nhỏ thành các khối dữ liệu có kích thước phù hợp, sau đó được đóng gói lại, một Header được thêm vào nhằm theo dõi luồng dữ liệu và tập hợp dữ liệu tại máy đích. Những gói tin nhỏ này gọi là các Segment.

    Có rất nhiều ứng dụng, dịch vụ chạy trên mỗi host, nên để chuyển chính xác dữ liệu cho các ứng dụng dịch vụ, lớp Transport gán cho mỗi application một định danh gọi là port number. Mọi ứng dụng muốn truy cập mạng đều được gán port number, port number này là độc nhất trên host đó. Ví dụ một số port number thông dụng:

    • HTTP: 80
    • FTP: 21
    • DNS: 53
    • SMTP:  25

    Tùy theo ứng dụng khác nhau, yêu cầu độ tin cậy khác nhau, lớp Transport sử dụng giao thức TCP hay UDP cho phù hợp:

    • TCP: là giao thức tin cậy, đảm bảo cho tất vả dữ liệu đều được chuyển tới đích đúng và đủ.
    • UDP: là giao thức đơn giản, không cung cấp bất kỳ sự tin cậy nào.

    Tại lớp Network

    Tại đây, các Segment sẽ được gắn thêm một header gọi là IP Header, bao gồm hai thông tin chính là địa chỉ Source IP và Destination IP. Các gói tin bây giờ được gọi là Datagram.

    Source IP là địa chỉ IP của máy gửi, địa chỉ này có thể được đặt bởi người dùng hay cấp phát động qua giao thức DHCP. Giao thức DHCP nói một cách đơn giản là khi một máy tính được kết nối vào một mạng mà địa chỉ IP của nó chưa được đặt, DHCP Server (Cài đặt trên Router) sẽ lấy một địa chỉ IP sẵn có trong “bồn” địa chỉ IP dùng để cấp phát cho các client, cấp phát cho DHCP client (máy tính cần cấp phát địa chỉ IP). DHCP là giao thức của lớp Application.

     Địa chỉ IP máy đích có thể nhập trực tiếp hay được xác định qua giao thức DNS. Nhập trực tiếp ví dụ như thay vì nhập http://google.com ta có thể nhập trực tiệp địa chỉ http://118.69.249.158/ vào trình duyệt, kết quả đều dẫn tới website tìm kiếm này. Vậy nếu ta không biết chính xác địa chỉ IP cần gửi tới, thì đầu tiên, máy tính sẽ dò tìm trong DNS cache, nơi lưu những thông tin về những địa chỉ đã truy cập, ta có thể xem thông tin DNS Cache bằng câu lệnh ipconfig /displaydns trong Command Prompt:

    ss_1

    Nếu không tìm thấy IP tương ứng với tên miền cần tìm, một DNS Request sẽ được gửi tới DNS server để xử lý. DNS server sẽ phản hồi những thông tin cần thiết để máy tính sử dụng, những thông tin sẽ được lưu ngược lại vào DNS cache để sử dụng vào lần sau.

    Tại lớp Data link và Physical

    Để một gói tin có thể gửi tới đích, chúng ta cần thêm một loại địa chỉ nữa đó là địa chỉ MAC hay địa chỉ vật lý. Địa chỉ này là độc nhất cho mọi thiết bị. Một header lại được thêm vào Datagram, hai thông tin chính là Source MAC và Destination MAC. Các gói tin bây giờ được gọi là Frame.

    Source MAC chính là địa chỉ MAC của máy gửi, ta có thể kiểm tra địa chỉ MAC của máy tính bằng câu lệnh getmac trong Command Prompt.

    ss_2

    Để xác định địa chỉ Destination MAC dựa vào Destination IP, máy tính sẽ từ động tìm kiếm trong ARP cache. Ta có thể xem thông tin ARP cache bằng cách sử dụng câu lệnh arp –a trong Command Prompt.

    ss_3

    Nếu không tìm thấy Destination MAC tương ứng với Destination IP, máy tính sẽ sử dụng giao thức ARP. Một gói tin gọi là ARP Request đính kèm Destination IP sẽ được gửi Broadcast tới tất cả các máy trong mạng chứa máy nguồn, một số trường hợp xảy ra như sau:

    • Nếu Destination IP là địa chỉ IP cục bộ của mạng đó, máy tính mang địa chỉ IP này sẽ trả lời với địa chỉ MAC của nó về cho máy gửi ARP Request. Vậy Destination MAC ở đây chính là địa chỉ MAC của máy tính cùng mạng với máy gửi.
    • Nếu Destination IP là địa chỉ IP của mạng khác, Router chứa mạng này sẽ phát hiện ra điều đó và trả lời với địa chỉ MAC của router nên Destination MAC ở đây sẽ là địa chỉ MAC của router.
    • Nếu Destination IP là địa chỉ IP của mạng khác và địa chỉ Default Gateway cũng như Subnetmask đã được đặt, máy tính sẽ sử dụng thông tin này để xác định được Gateway và gửi gói tin đến đây. Destination MAC ở đây sẽ là địa chỉ của Gateway, thường sẽ là một router.

    Destination MAC sau khi được xác định sẽ lưu lại vào ARP Cache cho lần sử dụng tiếp theo.

    Sau khi xác định đầy đủ địa chỉ Source MAC và Destination MAC, các Frame bây giờ sẽ được đưa xuống lớp Physical, được mã hóa và chuyển đổi thành các tín hiệu vật lý thích hợp, để đưa lên đường truyền.

    Khi ra khỏi máy tính

    Tại Switch

    Các máy tính trong cùng một mạng thường sẽ được tập hợp lại thông qua Switch. Vậy nên điểm đến tiếp theo của frame sẽ là một port Switch, tại đây, frame được đặt trong một hàng đợi, mỗi frame có mức ưu tiên khác nhau và switch dựa vào điều này để xử lý các frame quan trọng trước.

    Tại đây, Switch sẽ mở gói tin ra và đọc địa chỉ Source MAC, lưu vào MAC Address table, tại đây lưu số port và địa chỉ MAC kết nối trực tiếp với port này, tiếp theo đọc Destination MAC của gói tin so sánh với bảng MAC Address table của switch và có những hành động tương ứng:

    • Nếu Destination MAC là địa chỉ tồn tại trong MAC address table, switch sẽ gửi gói tin qua port tương ứng.
    • Nếu Destination MAC là địa chỉ không tồn tại trong MAC Address table hoặc là địa chỉ Broadcast, switch sẽ gửi gói tin ra tất cả các port trừ cổng nhận vào.
    • Nếu Destination MAC trùng với Source MAC, frame sẽ bị drop – không gửi ra bất kỳ port nào.

    ss_4

    Ví dụ: Bảng MAC Address Table của một Switch (Nguồn: http://www.authsecu.com)

    Như vậy, nếu máy nhận nằm trong cùng một mạng với máy gửi, thì chỉ cần thông qua switch, frame đã có thể được chuyển tới đích. Trường hợp máy nhận nằm khác mạng với máy gửi. Frame sẽ được chuyển tiếp tới Router để xử lý.

    Tại Router

    Đầu tiên, Router sẽ gỡ bỏ header của lớp Data Link (bao gồm Source MAC và Destination MAC). Tiếp theo, Router đọc thông tin lớp Network (Bao gồm Source IP và Destination IP).

    Router sử dụng Destination IP, so sánh với Routing Table. Routing Table chứa danh sách các đường đi được sử dụng để chuyển gói tin và interface đầu ra tương ứng. Các đường đi này có thể được gán tĩnh bởi người quản trị Router đấy, hoặc có thể được thêm vào qua các giao thức định tuyến như OSPF, EIGRP, RIP, IS-IS….. Các giao thức này nhằm tìm ra đường đi ngắn nhất đến mạng đích và lưu vào Routing Table.

    ss_5

    Ví dụ bảng Routing Table của Router (Nguồn: http://www.carbonwind.net)

    Nếu không tìm được đường đi nào tương ứng với địa chỉ mạng của Destination IP, hoặc trường TTL trong IP Header (sẽ giảm dần qua mỗi router, dùng để tránh trường hợp gói tin bị loop vô tận) bằng 0, gói tin sẽ bị drop và Router gửi thông báo “Destination host unreachable” ngược lại cho máy gửi.

    Nếu tìm được đường đi tương ứng với địa chỉ mạng của Destination IP, Router thêm lại header chứa Source MAC – chính là địa chỉ MAC của interface tương ứng với đường đi tìm được và Destination MAC – là địa chỉ của MAC của interface Router tiếp theo. Như vậy, trong suốt quá trình gửi đi, Source IP và Destination IP luôn được giữ nguyên (trừ trường hợp sử dụng NAT, VPN) còn Source MAC và Destination MAC sẽ thay đổi mỗi khi qua Router.

    Quá trình trên sẽ được lặp lại cho đến khi Router phát hiện ra Destination IP nằm chung mạng với một Interface của Router. Khi đó Router cũng sẽ sử dụng giao thức ARP để xác định địa chỉ MAC của máy đích, và dùng nó để làm Destination MAC và gửi gói tin đến máy đích.

    Tham khảo

    Thảo luận

    Đăng nhập

    Bài viết liên quan

    Lập Trình Multithreading Trong Ngôn Ngữ Lập Trình Java

    Lập Trình Multithreading Trong Ngôn Ngữ Lập Trình Java

    Trong chương trình của chúng ta đôi khi ta cần thực thi nhiều tác vụ cùng một lúc như thao tác với network, đọc ghi file... Theo cách lập trình thông thường thì ta chỉ ...

    Nguyễn Nghĩa

    19/11/2015

    Lập Trình Win32 API - Phần 2: Tạo Cửa Sổ Cơ Bản

    Lập Trình Win32 API - Phần 2: Tạo Cửa Sổ Cơ Bản

    Trong Hệ điều hành Windows, hệ thống cung cấp cho ta một công cụ lớn đó là Cửa Sổ Window. Bài viết sau đây cung cấp cho các bạn cách khởi tạo một Window đơn giản và rỗng ...

    Nguyên Phan

    12/09/2015

    Đo Khoảng Cách Trong Không Gian Với Cảm Biến SRF05 Và Arduino

    Đo Khoảng Cách Trong Không Gian Với Cảm Biến SRF05 Và Arduino

    Đối với robot, khi ở chế độ tự động, nó phải lấy thông tin của môi trường xung quanh như: khoảng cách, nhiệt độ, độ ẩm, ánh sáng ... Và tiến hành phân tích các dữ liệu ...

    Điện Tử Ứng DụngArduino

    29/09/2014

    Chương Trình Máy Tính Là Gì?

    Chương Trình Máy Tính Là Gì?

    Chương trình máy tính là một chuỗi các lệnh, được viết để thực hiện một nhiệm vụ nhất định trên máy tính. Ngay cả những hệ điều hành mà các bạn thường làm việc hay giải ...

    STDIO Warehouse

    25/08/2015

    Giới Thiệu Skype4COM - Lập Trình Tương Tác Với Skype Trên Windows - C#.NET

    Giới Thiệu Skype4COM - Lập Trình Tương Tác Với Skype Trên Windows - C#.NET

    Thao tác với Skype bằng giao diện đồ họa mặc dù khá dễ dùng, nhưng đôi lúc cần xử lý một số tác vụ tự động và liên quan đến nhiều users hơn như gửi cùng một tin cho nhiều ...

    La Kiến Vinh

    13/09/2014

    Khái Niệm Về File - Ý Nghĩa Các Định Dạng

    Khái Niệm Về File - Ý Nghĩa Các Định Dạng

    Kiến thức về file (tập tin) sẽ là thành phần kiến thức không thể thiếu trên con đường lập trình của các lập trình viên. Bài viết này xin được giới thiệu về file, ...

    Lê Minh Trung

    06/05/2015

    Tổng Quan Về Ngôn Ngữ Lập Trình Java

    Tổng Quan Về Ngôn Ngữ Lập Trình Java

    Java là một trong những ngôn ngữ lập trình mạnh và được sử dụng đông đảo trong phát triển phần mềm, các trang web, game hay ứng dụng trên các thiết bị di động, ngôn ngữ ...

    Lê Minh Trung

    20/05/2015

    BigData - Xu Thế Hay Điều Tất Yếu Đang Xảy Ra

    BigData - Xu Thế Hay Điều Tất Yếu Đang Xảy Ra

    BigData là một khái niệm, để miêu tả về một khối lượng dữ liệu lớn, khổng lồ. Lớn đến mức dữ liệu không thể lưu trữ trong các hệ thống cơ sở dữ liệu quan hệ truyền thống. ...

    Lê Minh Trung

    26/05/2015

    Design Pattern: Adapter Pattern

    Design Pattern: Adapter Pattern

    Trong lập trình hướng đối tượng, một khái niệm cực kì quan trọng đó là “giao diện của lớp” . Trong bài viết này sẽ đề cập đến một design pattern được sử dụng rất phổ biến ...

    Software ArchitectureDesign Patterns

    28/11/2014

    Sprite Animation Trong DirectX 9

    Sprite Animation Trong DirectX 9

    Thao tác Sprite animation là một trong những kỹ thuật cần thiết trong lập trình game. Bài viết sẽ hướng dẫn tạo tập tin lưu tọa độ các tile từ một sprite sheet có sẵn và ...

    Huỳnh Minh Tân

    02/11/2017

    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    [email protected]

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020