Một chút về tiêu chuẩn liên lạc không gian

Một chút về tiêu chuẩn liên lạc không gian
Vệ tinh sao băng M1
Nguồn: vladtime.ru

Giới thiệu

Không thể hoạt động của công nghệ vũ trụ nếu không có liên lạc vô tuyến và trong bài viết này, tôi sẽ cố gắng giải thích những ý tưởng chính hình thành nên cơ sở của các tiêu chuẩn do Ủy ban Tư vấn Quốc tế về Hệ thống Dữ liệu Vũ trụ (CCSDS. Chữ viết tắt này sẽ được sử dụng bên dưới) phát triển. .

Bài đăng này sẽ tập trung chủ yếu vào lớp liên kết dữ liệu, nhưng các khái niệm cơ bản cho các lớp khác cũng sẽ được giới thiệu. Bài viết này không có mục đích mô tả kỹ lưỡng và đầy đủ về các tiêu chuẩn. Bạn có thể xem nó tại website CCSDS. Tuy nhiên, chúng rất khó hiểu và chúng tôi đã dành rất nhiều thời gian để hiểu chúng, vì vậy ở đây tôi muốn cung cấp thông tin cơ bản, nhờ đó mọi thứ khác sẽ dễ hiểu hơn nhiều. Vì vậy, hãy bắt đầu.

Sứ mệnh cao cả của CCSDS

Có lẽ ai đó có câu hỏi: tại sao mọi người phải tuân thủ các tiêu chuẩn nếu bạn có thể phát triển ngăn xếp giao thức vô tuyến độc quyền của riêng mình (hoặc tiêu chuẩn của riêng bạn, với blackjack và các tính năng mới), từ đó tăng tính bảo mật của hệ thống?

Như thực tế cho thấy, việc tuân thủ các tiêu chuẩn CCSDS sẽ có lợi hơn vì một số lý do sau:

  1. Ủy ban chịu trách nhiệm xuất bản các tiêu chuẩn bao gồm đại diện từ mọi cơ quan hàng không vũ trụ lớn trên thế giới, mang lại kinh nghiệm vô giá thu được qua nhiều năm thiết kế và vận hành các sứ mệnh khác nhau. Sẽ rất vô lý nếu bỏ qua trải nghiệm này và dẫm lên cái cào của họ một lần nữa.
  2. Các tiêu chuẩn này được hỗ trợ bởi các thiết bị trạm mặt đất đã có trên thị trường.
  3. Khi khắc phục bất kỳ sự cố nào, bạn luôn có thể tìm kiếm sự trợ giúp từ đồng nghiệp từ các cơ quan khác để họ có thể tiến hành phiên liên lạc với thiết bị từ trạm mặt đất của họ. Như bạn có thể thấy, các tiêu chuẩn là một thứ cực kỳ hữu ích, vì vậy hãy xem xét những điểm chính của chúng.

kiến trúc

Các tiêu chuẩn là một bộ tài liệu phản ánh mô hình OSI (Kết nối hệ thống mở) phổ biến nhất, ngoại trừ ở cấp độ liên kết dữ liệu, tính phổ biến được giới hạn ở việc phân chia thành đo từ xa (đường xuống - không gian - Trái đất) và điều khiển viễn thông (đường lên).

Một chút về tiêu chuẩn liên lạc không gian

Chúng ta hãy xem xét một số cấp độ chi tiết hơn, bắt đầu từ thể chất và tiến lên. Để rõ ràng hơn, chúng ta sẽ xem xét kiến ​​trúc của bên nhận. Cái truyền là hình ảnh phản chiếu của nó.

Lớp vật lý

Ở mức này, tín hiệu vô tuyến đã điều chế được chuyển đổi thành luồng bit. Các tiêu chuẩn ở đây chủ yếu mang tính chất tư vấn, vì ở cấp độ này rất khó để trừu tượng hóa việc triển khai cụ thể của phần cứng. Ở đây, vai trò chính của CCSDS là xác định các điều chế có thể chấp nhận được (BPSK, QPSK, 8-QAM, v.v.) và đưa ra một số khuyến nghị về việc triển khai các cơ chế đồng bộ hóa ký hiệu, bù Doppler, v.v.

Mức độ đồng bộ hóa và mã hóa

Về mặt hình thức, nó là lớp con của lớp liên kết dữ liệu, nhưng thường được tách thành một lớp riêng biệt do tầm quan trọng của nó trong các tiêu chuẩn CCSDS. Lớp này chuyển đổi luồng bit thành cái gọi là khung (đo từ xa hoặc điều khiển từ xa), mà chúng ta sẽ nói đến sau. Không giống như đồng bộ hóa ký hiệu ở lớp vật lý, cho phép bạn có được luồng bit chính xác, đồng bộ hóa khung được thực hiện ở đây. Hãy xem xét đường dẫn mà dữ liệu đi ở cấp độ này (từ dưới lên trên):

Một chút về tiêu chuẩn liên lạc không gian

Tuy nhiên, trước đó, cần nói vài lời về mã hóa. Quy trình này là cần thiết để tìm và/hoặc sửa các lỗi bit chắc chắn xảy ra khi gửi dữ liệu qua kênh vô tuyến. Ở đây chúng ta sẽ không xem xét các thủ tục giải mã mà chỉ thu thập thông tin cần thiết để hiểu logic sâu hơn của cấp độ.

Mã có thể là khối hoặc liên tục. Các tiêu chuẩn không bắt buộc phải sử dụng một loại mã hóa cụ thể nhưng nó phải hiện diện như vậy. Mã liên tục bao gồm mã chập. Chúng được sử dụng để mã hóa dòng bit liên tục. Điều này trái ngược với mã khối, trong đó dữ liệu được chia thành các khối mã và chỉ có thể được giải mã trong các khối hoàn chỉnh. Khối mã đại diện cho dữ liệu được truyền và thông tin dư thừa kèm theo cần thiết để xác minh tính chính xác của dữ liệu nhận được và sửa các lỗi có thể xảy ra. Mã khối bao gồm mã Reed-Solomon nổi tiếng.

Nếu sử dụng mã hóa tích chập, dòng bit sẽ đi vào bộ giải mã ngay từ đầu. Kết quả công việc của nó (tất nhiên, tất cả điều này xảy ra liên tục) là các khối dữ liệu CADU (đơn vị dữ liệu truy cập kênh). Cấu trúc này cần thiết cho việc đồng bộ khung. Ở cuối mỗi CADU có một bộ tạo đồng bộ đính kèm (ASM). Đây là 4 byte được biết trước, nhờ đó bộ đồng bộ hóa tìm thấy phần đầu và phần cuối của CADU. Đây là cách đạt được sự đồng bộ hóa khung.

Giai đoạn tùy chọn tiếp theo của lớp đồng bộ hóa và mã hóa có liên quan đến đặc thù của lớp vật lý. Đây là sự mất ngẫu nhiên. Thực tế là để đạt được sự đồng bộ hóa ký hiệu, việc chuyển đổi thường xuyên giữa các ký hiệu là cần thiết. Vì vậy, nếu chúng ta truyền một kilobyte dữ liệu bao gồm toàn những dữ liệu đó, thì quá trình đồng bộ hóa sẽ bị mất. Do đó, trong quá trình truyền, dữ liệu đầu vào được trộn với chuỗi giả ngẫu nhiên định kỳ sao cho mật độ số XNUMX và số XNUMX là đồng nhất.

Tiếp theo, các mã khối được giải mã và phần còn lại là sản phẩm cuối cùng của mức độ đồng bộ hóa và mã hóa - một khung.

Lớp liên kết dữ liệu

Một mặt, bộ xử lý lớp liên kết nhận các khung và mặt khác nó phát ra các gói. Vì kích thước của các gói không bị giới hạn về mặt hình thức nên để truyền tải đáng tin cậy, cần phải chia chúng thành các cấu trúc - khung nhỏ hơn. Ở đây chúng ta sẽ xem xét hai phần phụ: riêng cho đo từ xa (TM) và điều khiển từ xa (TC).

Từ xa

Nói một cách đơn giản, đây là dữ liệu mà trạm mặt đất nhận được từ tàu vũ trụ. Tất cả thông tin được truyền đi được chia thành các đoạn nhỏ có độ dài cố định - các khung chứa dữ liệu được truyền và các trường dịch vụ. Chúng ta hãy xem xét kỹ hơn về cấu trúc khung:

Một chút về tiêu chuẩn liên lạc không gian

Và hãy bắt đầu xem xét với tiêu đề chính của khung đo từ xa. Hơn nữa, tôi sẽ cho phép mình dịch các tiêu chuẩn ở một số chỗ một cách đơn giản, đồng thời đưa ra một số giải thích rõ ràng.

Một chút về tiêu chuẩn liên lạc không gian

Trường ID kênh chính phải chứa số phiên bản khung và mã định danh thiết bị.

Mỗi tàu vũ trụ, theo tiêu chuẩn CCSDS, phải có mã định danh duy nhất riêng, qua đó, khi có khung, người ta có thể xác định nó thuộc về thiết bị nào. Về mặt chính thức, cần phải gửi đơn đăng ký thiết bị và tên của thiết bị cùng với số nhận dạng của thiết bị sẽ được xuất bản dưới dạng nguồn mở. Tuy nhiên, các nhà sản xuất Nga thường bỏ qua quy trình này, gán mã định danh tùy ý cho thiết bị. Số phiên bản khung giúp xác định phiên bản tiêu chuẩn nào được sử dụng để đọc khung chính xác. Ở đây chúng tôi sẽ chỉ xem xét tiêu chuẩn bảo thủ nhất với phiên bản “0”.

Trường ID kênh ảo phải chứa VCID của kênh mà gói tin đến. Không có hạn chế nào trong việc lựa chọn VCID, đặc biệt, các kênh ảo không nhất thiết phải được đánh số tuần tự.

Rất thường xuyên có nhu cầu ghép dữ liệu được truyền. Với mục đích này, có một cơ chế của các kênh ảo. Ví dụ: vệ tinh Meteor-M2 truyền hình ảnh màu trong phạm vi nhìn thấy được, chia nó thành ba màu đen và trắng - mỗi màu được truyền trong kênh ảo riêng của nó trong một gói riêng biệt, mặc dù có một số sai lệch so với tiêu chuẩn trong cấu trúc khung của nó.

Trường cờ Kiểm soát Vận hành sẽ là chỉ báo về sự hiện diện hay vắng mặt của trường Kiểm soát Vận hành trong khung đo từ xa. 4 byte ở cuối khung này dùng để cung cấp phản hồi khi kiểm soát việc phân phối các khung điều khiển từ xa. Chúng ta sẽ nói về họ một lát sau.

Bộ đếm khung kênh chính và kênh ảo là các trường được tăng lên một đơn vị mỗi lần khung được gửi. Phục vụ như một chỉ báo rằng không một khung hình nào bị mất.

Trạng thái dữ liệu của khung đo từ xa là hai byte cờ và dữ liệu nữa, trong đó chúng ta sẽ chỉ xem xét một số byte.

Một chút về tiêu chuẩn liên lạc không gian

Trường cờ Tiêu đề phụ phải là chỉ báo về sự hiện diện hay vắng mặt của Tiêu đề phụ trong khung đo từ xa.

Nếu muốn, bạn có thể thêm tiêu đề bổ sung vào mỗi khung và đặt bất kỳ dữ liệu nào vào đó theo ý của bạn.

Trường Con trỏ tiêu đề đầu tiên, khi cờ đồng bộ hóa được đặt thành "1", sẽ chứa biểu diễn nhị phân về vị trí của octet đầu tiên của Gói đầu tiên trong Trường dữ liệu của khung đo từ xa. Vị trí được tính từ 0 theo thứ tự tăng dần tính từ đầu trường dữ liệu. Nếu không có điểm bắt đầu của gói trong trường dữ liệu của khung đo từ xa thì con trỏ tới trường tiêu đề đầu tiên phải có giá trị ở dạng biểu diễn nhị phân "11111111111" (điều này có thể xảy ra nếu một gói dài được trải rộng trên nhiều khung ).

Nếu trường dữ liệu chứa một gói trống (Dữ liệu nhàn rỗi), thì con trỏ tới tiêu đề đầu tiên phải có giá trị ở dạng biểu diễn nhị phân “11111111110”. Sử dụng trường này, người nhận phải đồng bộ hóa luồng. Trường này đảm bảo rằng việc đồng bộ hóa được khôi phục ngay cả khi khung bị hủy.

Nghĩa là, một gói có thể bắt đầu ở giữa khung thứ 4 và kết thúc ở đầu khung thứ 20. Trường này được sử dụng để tìm sự khởi đầu của nó. Các gói cũng có một tiêu đề xác định độ dài của nó, vì vậy khi tìm thấy một con trỏ tới tiêu đề đầu tiên, bộ xử lý lớp liên kết phải đọc nó, từ đó xác định xem gói sẽ kết thúc ở đâu.
Nếu có trường kiểm soát lỗi thì trường đó phải được chứa trong mọi khung đo từ xa cho một kênh vật lý cụ thể trong suốt nhiệm vụ.

Trường này được tính toán bằng phương pháp CRC. Quy trình phải lấy n-16 bit của khung đo từ xa và chèn kết quả tính toán vào 16 bit cuối cùng.

đội truyền hình

Khung lệnh TV có một số khác biệt đáng kể. Trong số đó:

  1. Cấu trúc tiêu đề khác nhau
  2. Độ dài động. Điều này có nghĩa là độ dài khung không được thiết lập một cách cố định như được thực hiện trong phép đo từ xa mà có thể thay đổi tùy theo gói được truyền.
  3. Cơ chế đảm bảo chuyển giao gói tin. Nghĩa là, sau khi nhận được, tàu vũ trụ phải xác nhận tính chính xác của việc nhận khung hoặc yêu cầu chuyển tiếp từ một khung có thể đã nhận được với một lỗi không thể sửa được.

Một chút về tiêu chuẩn liên lạc không gian

Một chút về tiêu chuẩn liên lạc không gian

Nhiều trường đã quen thuộc với chúng ta từ tiêu đề khung đo từ xa. Chúng có cùng mục đích nên ở đây chúng ta sẽ chỉ xem xét các lĩnh vực mới.

Một bit của cờ bỏ qua phải được sử dụng để điều khiển việc kiểm tra khung ở máy thu. Giá trị "0" cho cờ này sẽ chỉ ra rằng khung là khung Loại A và phải được xác minh theo FARM. Giá trị "1" cho cờ này sẽ cho người nhận biết rằng khung này là khung Loại B và phải bỏ qua việc kiểm tra FARM.

Cờ này thông báo cho người nhận xem có nên sử dụng cơ chế xác nhận phân phối khung được gọi là FARM - Cơ chế báo cáo và chấp nhận khung hay không.

Cờ lệnh điều khiển phải được sử dụng để hiểu liệu trường dữ liệu có truyền lệnh hay dữ liệu hay không. Nếu cờ là "0" thì trường dữ liệu phải chứa dữ liệu. Nếu cờ là "1" thì trường dữ liệu phải chứa thông tin điều khiển cho FARM.
FARM là một máy trạng thái hữu hạn có các tham số có thể được cấu hình.

Trả lời. SPARE - bit dành riêng.

Có vẻ như CCSDS đã có kế hoạch cho chúng trong tương lai và để tương thích ngược với các phiên bản giao thức, họ đã dành sẵn những bit này trong các phiên bản hiện tại của tiêu chuẩn.

Trường độ dài khung phải chứa một số trong biểu diễn bit bằng với độ dài khung tính bằng octet trừ đi một.

Trường dữ liệu khung phải theo sau tiêu đề không có khoảng trắng và chứa số nguyên octet, có thể có độ dài tối đa là 1019 octet. Trường này phải chứa khối dữ liệu khung hoặc thông tin lệnh điều khiển. Khối dữ liệu khung phải chứa:

  • số nguyên octet dữ liệu người dùng
  • tiêu đề phân đoạn theo sau là một số nguyên octet dữ liệu người dùng

Nếu có tiêu đề thì khối dữ liệu phải chứa Gói, một tập hợp các Gói hoặc một phần của Gói. Khối dữ liệu không có tiêu đề không thể chứa các phần của Gói nhưng có thể chứa các khối dữ liệu định dạng riêng tư. Từ đó, cần có tiêu đề khi khối dữ liệu được truyền không vừa với một khung. Khối dữ liệu có tiêu đề được gọi là phân đoạn

Một chút về tiêu chuẩn liên lạc không gian

Trường cờ hai bit phải chứa:

  • "01" - nếu phần đầu tiên của dữ liệu nằm trong khối dữ liệu
  • “00” - nếu phần giữa của dữ liệu nằm trong khối dữ liệu
  • "10" - nếu phần dữ liệu cuối cùng nằm trong khối dữ liệu
  • “11” - nếu không có sự phân chia và một hoặc nhiều gói hoàn toàn nằm gọn trong khối dữ liệu.

Trường ID MAP phải chứa số XNUMX nếu kênh MAP không được sử dụng.
Đôi khi 6 bit được phân bổ cho các kênh ảo là không đủ. Và nếu cần ghép dữ liệu lên số lượng kênh lớn hơn, 6 bit khác từ tiêu đề phân đoạn sẽ được sử dụng.

NÔNG TRẠI

Chúng ta hãy xem xét kỹ hơn cơ chế hoạt động của hệ thống kiểm soát phân phối nhân sự. Hệ thống này chỉ cung cấp khả năng làm việc với các khung của các thiết bị viễn thông do tầm quan trọng của chúng (luôn có thể yêu cầu đo từ xa một lần nữa và tàu vũ trụ phải nghe rõ trạm mặt đất và luôn tuân theo mệnh lệnh của nó). Vì vậy, giả sử chúng ta quyết định khởi động lại vệ tinh của mình và gửi một tệp nhị phân có kích thước 10 kilobyte tới nó. Ở cấp độ liên kết, tệp được chia thành 10 khung (0, 1, ..., 9), lần lượt được gửi lên trên. Khi quá trình truyền hoàn tất, vệ tinh phải xác nhận tính chính xác của việc nhận gói hoặc báo cáo lỗi đã xảy ra ở khung nào. Thông tin này được gửi đến trường điều khiển vận hành trong khung đo từ xa gần nhất (Hoặc tàu vũ trụ có thể bắt đầu truyền khung nhàn rỗi nếu không có gì để nói). Dựa trên dữ liệu đo từ xa nhận được, chúng tôi đảm bảo rằng mọi thứ đều ổn hoặc chúng tôi tiến hành gửi lại tin nhắn. Giả sử vệ tinh không nghe thấy khung số 7. Điều này có nghĩa là chúng tôi gửi cho anh ấy các khung 7, 8, 9. Nếu không có phản hồi, toàn bộ gói sẽ được gửi lại (và cứ như vậy nhiều lần cho đến khi chúng tôi nhận ra rằng những nỗ lực đó đều vô ích).

Dưới đây là cấu trúc của trường kiểm soát hoạt động kèm theo mô tả một số trường. Dữ liệu chứa trong trường này được gọi là CLCW - Từ điều khiển liên kết truyền thông.

Một chút về tiêu chuẩn liên lạc không gian

Vì bạn có thể dễ dàng đoán được từ hình ảnh mục đích của các trường chính và những trường khác nhìn vào thì nhàm chán nên tôi ẩn mô tả chi tiết dưới phần tiết lộ

Giải thích về các trường CLCWLoại từ điều khiển:
Đối với loại này, từ điều khiển phải chứa 0

Phiên bản Word điều khiển (Số phiên bản CLCW):
Đối với loại này, từ điều khiển phải bằng "00" trong cách biểu diễn bit.

Trường trạng thái:
Việc sử dụng trường này được xác định riêng cho từng nhiệm vụ. Có thể được sử dụng để cải thiện địa phương bởi các cơ quan không gian khác nhau.

Nhận dạng kênh ảo:
Phải chứa mã định danh của kênh ảo mà từ điều khiển này được liên kết.

Cờ truy cập kênh vật lý:
Cờ phải cung cấp thông tin về mức độ sẵn sàng của lớp vật lý của máy thu. Nếu lớp vật lý của máy thu chưa sẵn sàng nhận khung thì trường phải chứa “1”, nếu không thì là “0”.

Cờ lỗi đồng bộ hóa:
Cờ có thể chỉ ra rằng lớp vật lý đang hoạt động ở mức tín hiệu kém và số lượng khung bị từ chối quá cao. Việc sử dụng trường này là tùy chọn; nếu được sử dụng, nó phải chứa “0” nếu có sẵn đồng bộ hóa và “1” nếu không có đồng bộ hóa.

Cờ chặn:
Bit này sẽ chứa trạng thái khóa FARM cho mỗi kênh ảo. Giá trị "1" trong trường này sẽ chỉ ra rằng FARM bị vô hiệu hóa và các khung sẽ bị loại bỏ đối với mỗi lớp ảo, nếu không thì "0".

Cờ chờ:
Bit này sẽ được sử dụng để chỉ ra rằng máy thu không thể xử lý dữ liệu trên kênh ảo đã chỉ định. Giá trị "1" cho biết tất cả khung hình sẽ bị loại bỏ trên kênh ảo này, nếu không thì "0".

Cờ tiến:
Cờ này sẽ chứa "1" nếu một hoặc nhiều khung loại A bị loại bỏ hoặc tìm thấy các khoảng trống, do đó việc gửi lại là cần thiết. Cờ "0" cho biết không có khung hình nào bị bỏ hoặc bỏ qua.

Giá trị phản hồi:
Số khung chưa được nhận. Được xác định bởi bộ đếm trong tiêu đề khung lệnh viễn thông

lớp mạng

Hãy chạm vào cấp độ này một chút. Có hai tùy chọn ở đây: sử dụng giao thức gói không gian hoặc đóng gói bất kỳ giao thức nào khác trong gói CCSDS.

Tổng quan về giao thức gói không gian là một chủ đề dành cho một bài viết riêng. Nó được thiết kế để cho phép các ứng dụng được gọi là trao đổi dữ liệu một cách liền mạch. Mỗi ứng dụng có địa chỉ riêng và chức năng cơ bản để trao đổi dữ liệu với các ứng dụng khác. Ngoài ra còn có các dịch vụ định tuyến lưu lượng, kiểm soát việc phân phối, v.v.

Với tính năng đóng gói, mọi thứ trở nên đơn giản và rõ ràng hơn. Các tiêu chuẩn này cho phép đóng gói bất kỳ giao thức nào vào các gói CCSDS bằng cách thêm một tiêu đề bổ sung.

Một chút về tiêu chuẩn liên lạc không gian

Trường hợp tiêu đề có ý nghĩa khác nhau tùy thuộc vào độ dài của giao thức được đóng gói:

Một chút về tiêu chuẩn liên lạc không gian

Ở đây trường chính là chiều dài của chiều dài. Nó có thể thay đổi từ 0 đến 4 byte. Cũng trong tiêu đề này, bạn phải chỉ ra loại giao thức được đóng gói bằng bảng do đó.

Đóng gói IP sử dụng một tiện ích bổ sung khác để xác định loại gói.
Bạn cần thêm một tiêu đề nữa, dài một octet:

Một chút về tiêu chuẩn liên lạc không gian

Trong đó PID là một mã định danh giao thức khác được sử dụng do đó

Kết luận

Thoạt nhìn, có vẻ như các tiêu đề CCSDS cực kỳ dư thừa và một số trường có thể bị loại bỏ. Thật vậy, hiệu suất của kênh kết quả (tính đến cấp độ mạng) là khoảng 40%. Tuy nhiên, ngay khi có nhu cầu thực hiện các tiêu chuẩn này, người ta thấy rõ rằng mỗi lĩnh vực, mỗi đề mục đều có nhiệm vụ quan trọng riêng mà bỏ qua dẫn đến một số mơ hồ.

Nếu cộng đồng habrasociety tỏ ra quan tâm đến chủ đề này, tôi sẽ vui mừng xuất bản một loạt bài viết về lý thuyết và thực tiễn về truyền thông không gian. Cám ơn vì sự quan tâm của bạn!

nguồn

CCSDS 130.0-G-3 — Tổng quan về các giao thức liên lạc trong không gian
CCSDS 131.0-B-2 – Đồng bộ hóa TM và mã hóa kênh
CCSDS 132.0-B-2 - Giao thức liên kết dữ liệu không gian TM
CCSDS 133.0-B-1 - Giao thức gói không gian
CCSDS 133.1-B-2 - Dịch vụ đóng gói
CCSDS 231.0-B-3 - Đồng bộ hóa TC và mã hóa kênh
CCSDS 232.1-B-2 Quy trình vận hành liên lạc-1
Hệ thống điều chế và tần số vô tuyến CCSDS 401.0-B-28 - Phần 1 (Trạm mặt đất và tàu vũ trụ)
CCSDS 702.1-B-1 - IP qua các liên kết không gian CCSDS

PS
Đừng đánh quá mạnh nếu bạn tìm thấy bất kỳ điểm không chính xác. Báo cáo chúng và chúng sẽ được sửa :)

Nguồn: www.habr.com

Thêm một lời nhận xét