Thứ Năm, 23 tháng 9, 2010

ĐỊA CHỈ IP


Sep 23, 2010 7:26 PMPublicPageviews 1 0
Địa chỉ IP là gì?

IP là chữ viết tắt của Internet Protocol (giao thức Internet). Mỗi gói tin IP sẽ bao gồm một địa chỉ IP nguồn và một địa chỉ IP đích. Tất nhiên, hệ thống "số nhà" trên Internet phức tạp và thú vị hơn nhiều so với nhà cửa trong thực tế.

IP tĩnh và động

Mỗi thiết bị trong một mạng IP được chỉ định bằng một địa chỉ vĩnh viễn (IP tĩnh) bởi nhà quản trị mạng hoặc một địa chỉ tạm thời, có thể thay đổi (IP động) thông qua công cụ DHCP (giao thức cấu hình host động sẽ tự động xác định địa chỉ IP tạm thời) ngay trên Windows Server.

Các router (bộ định tuyến), firewall (tường lửa) và máy chủ proxy dùng địa chỉ IP tĩnh còn máy khách có thể dùng IP tĩnh hoặc động.

Thường thì các nhà cung cấp Internet DSL hay cáp sẽ chỉ định loại IP động cho bạn. Trong các router và hệ điều hành, cấu hình mặc định cho các máy khách cũng là IP động. Loại địa chỉ này hay được dùng cho máy tính xách tay kết nối Wi-Fi, PC truy cập bằng Dial-up hay mạng riêng.

Phân phối địa chỉ IP


Trên thế giới có hàng chục triệu máy chủ và hàng trăm nghìn mạng khác nhau. Do đó, để quản lý sao cho địa chỉ IP không trùng nhau, một tổ chức mang tên Network Information Center (NIC) ra đời với nhiệm vụ phân phối Net ID (địa chỉ mạng) cho các quốc gia. Ở mỗi nước lại có một trung tâm quản lý Internet làm công việc phân phối Host ID (địa chỉ máy chủ). Tại Việt Nam, nếu muốn thiết lập một hệ thống máy chủ, khách hàng có thể tới VNNIC để đăng ký IP tĩnh với mức phí từ 1 đến 285 triệu đồng, tùy theo quy mô sử dụng. (Xem chi tiết tại đây)

Cấu trúc và phân lớp địa chỉ IP

Các địa chỉ này được viết dưới dạng một tập hợp bộ số (octet) ngăn cách nhau bằng dấu chấm (.). Nếu biết địa chỉ IP của một website, bạn có thể nhập vào trình duyệt để mở mà không cần viết tên miền. Hiện nay có 2 phiên bản là IPv4 và IPv6, trong đó IPv4 là chuẩn đang dùng rộng rãi với độ dài 32 bit. Nhưng trong tương lai, khi quy mô của mạng mở rộng, người ta có thể phải dùng đến IPv6 là chuẩn 128 bit.

Xét trong phiên bản IPv4, địa chỉ 32 bit này được chia làm 4 bộ, mỗi bộ 8 bit (viết theo dạng nhị phân gồm các số 0 và 1) được đếm thứ tự từ trái sang phải. Bạn đọc có thể dùng
trang web này để chuyển đổi giữa hai hệ đếm.Nếu viết theo dạng thập phân (thường dùng để dễ nhận biết), địa chỉ IP có công thức là xxx.xxx.xxx.xxx, trong đó x là số thập phân từ 0 đến 9. Tuy vậy, khi 0 đứng đầu mỗi bộ số, bạn có thể bỏ đi, ví dụ 123.043.010.002 được viết thành 123.43.10.2.

Cấu trúc trên thể hiện 3 thành phần chính là

Class bitNet IDHost IDPhần 1 là bit nhận dạng lớp, dùng để xác định địa chỉ đang ở lớp nào.

Địa chỉ IP được phân thành 5 lớp A, B, C, D, E, trong đó lớp D, E chưa dùng tới. Ta xét 3 lớp đầu với hệ đếm nhị phân.
Lớp A: Như vậy, bit nhận dạng thứ nhất của lớp A bằng 0, 7 bit còn lại dành cho địa chỉ mạng Net ID, phần tiếp theo dành cho địa chỉ máy chủ Host ID. Vùng số của mạng được gọi là tiền tố mạng (network prefix). Lớp A áp dụng khi địa chỉ network ít và địa chỉ máy chủ nhiều. Tính ra, ta được tối đa 126 mạng và mỗi mạng có thể hỗ trợ tối đa 167.777.214 máy chủ. Vùng địa chỉ lý thuyết tính theo hệ đếm thập phân từ 0.0.0.0 đến 127.0.0.0 (thực tế ta không dùng các địa chỉ đều có giá trị bit bằng 0 hay 1).
Lớp B:Bit nhận dạng của lớp B là 10, 14 bit còn lại dành cho Net ID. Lớp này áp dụng khi địa chỉ mạng và địa chỉ máy chủ ở mức vừa. Tính ra, ta được tối đa 16.382 mạng, mỗi mạng phục vụ tối đa 65.534 máy chủ. Vùng địa chỉ lý thuyết từ 128.0.0.0 đến 191.255.0.0.Lớp C:
Bit nhận dạng của lớp C là 110, 21 bit còn lại dành cho Net ID. Lớp này áp dụng khi địa chỉ mạng nhiều và địa chỉ máy chủ ít. Tính ra, ta được tối đa 2.097.150 mạng, mỗi mạng phục vụ tối đa 254 máy chủ. Vùng địa chỉ lý thuyết từ 192.0.0.0 đến 223.255.255.0.
Địa chỉ IP cho mạng riêng
Trên thực tế, khi phạm vi hoạt động mạng mở rộng, nếu công ty phải đi xin thêm địa chỉ thì sẽ tốn kém. Hơn nữa, có khi một mạng nhỏ chỉ gồm vài chục máy chủ và điều này gây lãng phí rất nhiều địa chỉ còn lại. Do đó, người ta nghĩ đến mạng riêng (private network) để tận dụng nguồn tài nguyên. Các thiết bị trong một mạng nội bộ sẽ dùng địa chỉ IP riêng mà không kết nối trực tiếp với Internet.

Các mạng riêng này trở nên phổ biến với thiết kế LAN vì nhiều tổ chức thấy rằng họ không cần địa chỉ IP cố định trên toàn cầu cho mỗi máy tính, máy in, máy fax... Các router trên Internet thường được định cấu hình để từ chối kết nối dùng địa chỉ IP riêng. Chính sự "cách ly" này đã khiến mạng riêng trở thành hình thức bảo mật cơ bản vì người ngoài không kết nối trực tiếp được với máy trong network đó. Cũng vậy, do các mạng riêng này không thể kết nối trực tiếp với nhau nên chúng có thể dùng một vùng địa chỉ IP con giống nhau mà không gây xung đột gì.

Cách phân chia địa chỉ mạng con như sau:

Về bản chất, ta sẽ tận dùng các bộ số không dùng đến của địa chỉ máy chủ để mở rộng quy mô cho mạng. Subnet Mask (giá trị trần của từng mạng con) cho phép bạn chuyển đổi một mạng lớp A, B hay C thành nhiều mạng nhỏ, tùy theo nhu cầu sử dụng. Với mỗi giá trị trần này, bạn có thể tạo ra một tiền tố mạng mở rộng để thêm bit từ số máy chủ vào tiền tố mạng. Việc phân chia này sẽ dễ hiểu hơn khi bạn dùng hệ đếm nhị phân.

- Các bit được đánh số 1 nếu bit tương ứng trong địa chỉ IP là một phần của tiền tố mạng mở rộng.

- Các bit được đánh số 0 nếu bit là một phần của số máy chủ.

Ví dụ tiền tố mạng lớp B luôn bao gồm 2 bộ số đầu của địa chỉ IP, nhưng tiền tố mạng mở rộng của lớp B lại dùng cả bộ số thứ 3.

Ví dụ 1: Nếu có địa chỉ IP lớp B là 129.10.0.0 và bạn muốn dùng cả bộ số thứ 3 làm một phần của tiền tố mạng mở rộng thay cho số máy chủ, bạn phải xác định một giá trị trần của mạng con là: 11111111.11111111.11111111.00000000 (255.255.255.0). Như vậy, giá trị trần này chuyển địa chỉ của lớp B sang địa chỉ lớp C, nơi số máy chủ chỉ gồm bộ số thứ 4. Ký hiệu /24 thể hiện bạn đã dùng 24 bit đầu để làm tiền tố mạng mở rộng.

Ví dụ 2: Nếu bạn chỉ muốn dùng một phần của bộ số thứ 3 cho tiền tố mạng mở rộng, hãy xác định giá trị trần của địa chỉ mạng con là 11111111.11111111.11111000.00000000 (255.255.248.0), trong đó chỉ có 5 bit của bộ số thứ 3 được đưa vào tiền tố mạng mở rộng. Lúc này ta có ký hiệu /21.

Xác định địa chỉ để sử dụng với giá trị trần của mạng con

Địa chỉ cho lớp C

Đối với một mạng có từ 2 đến 254 máy chủ, bộ số thứ 4 sẽ được dùng đến, bắt đầu từ 0. Ví dụ, mạng con 8 máy chủ (/29) sẽ có vùng địa chỉ như sau:

Mạng con /29 (255.255.255.248)Vùng địa chỉ192.168.0.0192.168.0.0 - 192.168.0.7192.168.0.8192.168.0.8 - 192.168.0.15192.168.0.16192.168.0.16 - 192.168.0.31......192.168.0.248192.168.0.248 -192.168.0.255Chú ý: địa chỉ đầu tiên và cuối cùng của mạng con được giữ lại. Bạn không dùng được 192.168.0.0 hay 192.168.0.7.

Nói tóm lại, các vùng địa chỉ sau được chỉ định cho mạng riêng:
  • 10.0.0.0 - 10.255.255.255 (lớp A)
  • 172.16.0.0 - 172.31.255.255 (lớp B)
  • 192.168.0.0 - 192.168.255.255 (lớp C)
Thiết lập và xem địa chỉ IP trên máy tính
Khi xây dựng một mạng nội bộ gồm máy chủ và máy khách, bạn sẽ phải vào hệ thống để lập địa chỉ IP. Nhấn chuột phải vào biểu tượng My network places, chọn Properties. Tiếp tục nhấp chuột phải vào biểu tượng Local Area Connection > Properties > chọn Internet Protocol (TCP/IP) > Properties.
Bạn có thể thiết lập IP tự động hoặc bằng tay. Ảnh chụp màn hìnhMuốn xem địa chỉ này, bạn vào menu Start > All Programs > Accessories > Command Prompt. Khi màn hình Dos hiện ra, gõ ngay vào vị trí con trỏ chữ "ipconfig". Cách khác: Start > Run > gõ ipconfig > OK.

Khi một thiết bị nào đó trên network riêng cần liên hệ với các mạng khác, người dùng phải đảm bảo mạng ngoài có dùng địa chỉ IP thực để các router chấp nhận kết nối. Thường thì "cánh cổng" router này chính là thiết bị dịch địa chỉ mạng (NAT - network address translation) hoặc công đoạn đó được thực hiện nhờ một máy chủ
proxy.

Thứ Sáu, 17 tháng 9, 2010

Mã Hamming

Tìm hiểu về mã tự sửa sai HAMMING

Sep 17, 2010 7:56 AMPublicPageviews 2 1
Giao thức TCP/IP có tính năng thực hiện việc phát hiện sai và tự sửa sai các bit truyền đi trong một gói tin (Error detection & correction). Một trong các biện pháp thực hiện tính năng đó là sử dụng các mã phát hiện sai hay tự sửa sai.
VTS sưu tầm giúp các bạn tự tìm hiểu về mã Hamming, một mã tự sửa sai cho đến nay rất phổ biến và được xem là hiệu quả nhất.

Mã Hamming

Trong viễn thông (telecommunication), mã Hamming là một mã sửa lỗi tuyến tính (linear error-correcting code), được đặt tên theo tên của người phát minh ra nó, Richard Hamming. Mã Hamming có thể phát hiện một bit hoặc hai bit bị lỗi (single and double-bit errors). Mã Hamming còn có thể sửa các lỗi do một bit bị sai gây ra. Ngược lại với mã của ông, mã chẵn lẻ (parity code) đơn giản vừa không có khả năng phát hiện các lỗi khi 2 bit cùng một lúc bị hoán vị (0 thành 1 và ngược lại), vừa không thể giúp để sửa được các lỗi mà nó phát hiện thấy.

 Lịch sử

Trong những năm của thập niên kỷ 1940, Hamming làm việc tại Bell Labs trên máy tính Bell Model V, một máy điện cơ (electromechanical) dùng rơ-le (relay-based), với tốc độ rất chậm, mấy giây đồng hồ một chu kỳ máy. Nhập liệu được cho vào máy bằng những cái  thẻ đục lỗ (punch cards), và hầu như máy luôn luôn gây lỗi trong khi đọc. Trong những ngày làm việctrong tuần, những mã đặc biệt được dùng để tìm ra lỗi và mỗi khi tìm được, nó nhấp nháy đèn báo hiệu, báo cho người điều khiển biết để họ sửa, điều chỉnh máy lại. Trong thời gian ngoài giờ làm việc hoặc trong những ngày cuối tuần, khi người điều khiển máy không có mặt, mỗi khi có lỗi xảy ra, máy tính tự động bỏ qua chương trình đương chạy và chuyển sang công việc khác.
Hamming thường làm việc trong những ngày cuối tuần và ông càng ngày càng trở nên bực tức mỗi khi ông phải khởi động lại các chương trình ứng dụng từ đầu, do chất lượng kém, không đáng tin cậy (unreliability) của bộ máy đọc các thẻ đục lỗ. Mấy năm tiếp theo đó, ông dồn tâm lực vào việc xây dựng hằng loạt các thuật toán có hiệu quả cao để giải quyết vấn đề sửa lỗi. Năm 1950, ông đã công bố một phương pháp mà hiện nay được biết là Mã Hamming. Một số chương trình ứng dụng hiện thời vẫn còn sử dụng mã này của ông.

Các mã trước thời kỳ của Hamming

Nhiều mã phát hiện lỗi đơn giản đã được sử dụng trước khi có mã Hamming, nhưng không có mã nào hiệu quả bằng mã Hamming với một tổng phí tương đương.

Mã chẵn lẻ

Mã chẵn lẻ dùng biện pháp thêm một bit vào trong dữ liệu gốc, và bit cho thêm này cho biết số lượng bit có giá trị 1 của đoạn dữ liệu nằm trước là một số chẵn hay một số lẻ. Nếu một bit bị thay đổi trong quá trình truyền dữ liệu, giá trị chẵn lẻ trong thông điệp sẽ thay đổi và do đó có thể phát hiện được lỗi (Chú ý rằng bit bị thay đổi có thể lại chính là bit kiểm tra). Theo quy ước chung, bit kiểm tra có giá trị bằng 1 nếu số lượng bit có giá trị 1 trong dữ liệu là một số lẻ, và giá trị của bit kiểm tra bằng 0 nếu số lượng bit có giá trị 1 trong dữ liệu là một số chẵn. Nói cách khác, nếu đoạn dữ liệu và bit kiểm tra được gộp lại cùng với nhau, số lượng bit có giá trị bằng 1 luôn luôn là một số chẵn.
Việc kiểm tra dùng mã chẵn lẻ là một việc không được chắc chắn cho lắm, vì nếu số bit bị thay đổi là một số chẵn (2, 4, 6 - cả hai, bốn hoặc sáu bit đều bị hoán vị) thì mã này không phát hiện được lỗi. Hơn nữa, mã chẵn lẻ không biết được bit nào là bit bị lỗi, kể cả khi nó phát hiện là có lỗi xảy ra. Toàn bộ dữ liệu đã nhận được phải bỏ đi, và phải truyền lại từ đầu. Trên một kênh truyền bị nhiễu, việc truyền nhận thành công có thể mất rất nhiều thời gian, nhiều khi còn không truyền được nữa. Mặc dù việc kiểm tra bằng mã chẵn lẻ không được tốt cho lắm, song vì nó chỉ dùng 1 bit để kiểm tra cho nên nó có số tổng phí (overhead) thấp nhất, đồng thời, nó cho phép phục hồi bit bị thất lạc nếu người ta biết được vị trí của bit bị thất lạc nằm ở đâu.

Mã hai-trong-năm

Trong những năm của thập niên kỷ 1940, Bell có sử dụng một mã hiệu phức tạp hơn một chút, gọi là mã hai-trong-năm (two-out-of-five code). Mã này đảm bảo mỗi một khối 5 bit (còn được gọi là khối-5) có chính xác hai bit có giá trị bằng 1. Máy tính có thể nhận ra là dữ liệu nhập vào có lỗi nếu trong một khối 5 bit không 2 bit có giá trị bằng 1. Tuy thế, mã hai-trong-năm cũng chỉ có thể phát hiện được một đơn vị bit mà thôi; nếu trong cùng một khối, một bit bị lộn ngược thành giá trị 1, và một bit khác bị lộn ngược thành giá trị 0, quy luật hai-trong-năm vẫn cho một giá trị đúng (remained true), và do đó nó không phát hiện là có lỗi xảy ra.

Tái diễn dữ liệu

Một mã nữa được dùng trong thời gian này là mã hoạt động bằng cách nhắc đi nhắc lại bit dữ liệu vài lần (tái diễn bit được truyền - giống như thông thường, khi nói một từ quan trọng nào đó, sợ người nghe chưa rõ thì ta nhắc đi nhắc lại một số lần!) để đảm bảo bit dữ liệu được truyền đến nơi nhận trọn vẹn, không sai lạc. Chẳng hạn, nếu bit dữ liệu cần được truyền có giá trị bằng 1, một mã tái diễn n=3 sẽ cho truyền gửi giá trị "111". Nếu ba bit nhận được không giống nhau, thì hiện trạng này báo cho ta biết rằng, lỗi trong truyền thông đã xảy ra. Nếu kênh truyền không bị nhiễu, tương đối đảm bảo, thì với hầu hết các lần truyền, trong nhóm ba bit được gửi, chỉ có một bit là bị thay đổi. Do đó các nhóm 001, 010, và 100 đều tương đương cho một bit có giá trị 0, và các nhóm 110, 101, và 011 đều tương đương cho một bit có giá trị 1 - lưu ý số lượng bit có giá trị 0 trong các nhóm được coi là có giá trị 0, là đa số so với tổng số bit trong nhóm, hay 2 trong 3 bit, tương đương như vậy, các nhóm được coi là giá trị 1 có số lượng bit bằng 1 nhiều hơn là các bit có giá trị 0 trong nhóm - chẳng khác gì việc các nhóm bit được đối xử như là "các phiếu bầu" cho bit dữ liệu gốc vậy. Một mã có khả năng tái dựng lại thông điệp gốc trong một môi trường nhiễu lỗi được gọi là mã "sửa lỗi" (error-correcting code).
Tuy nhiên, những mã này không thể sửa tất cả các lỗi một cách đúng đắn hoàn toàn. Chẳng hạn chúng ta có một ví dụ sau: nếu một kênh truyền đảo ngược hai bit và do đó máy nhận thu được giá trị "001", hệ thống máy sẽ phát hiện là có lỗi xảy ra, song lại kết luận rằng bit dữ liệu gốc là bit có giá trị bằng 0. Đây là một kết luận sai lầm. Nếu chúng ta tăng số lần các bit được nhắc lại lên 4 lần, chúng ta có thể phát hiện tất cả các trường hợp khi 2 bit bị lỗi, song chúng ta không thể sửa chữa chúng được (số phiếu bầu "hòa"); với số lần nhắc lại là 5 lần, chúng ta có thể sửa chữa tất cả các trường hợp 2 bit bị lỗi, song không thể phát hiện ra các trường hợp 3 bit bị lỗi.
Nói chung, mã tái diễn là một mã hết sức không hiệu quả, giảm công suất xuống 3 lần so với trường hợp đầu tiên trong ví dụ trên của chúng ta, và công suất làm việc giảm xuống một cách nhanh chóng nếu chúng ta tăng số lần các bit được nhắc lại với mục đích để sửa nhiều lỗi hơn.

Mã Hamming

Mô hình của một mã 7-bit, bao gồm 4 bit dữ liệu (3,5,6,7) và 3 bit chẵn lẻ (1,2,4). Sự liên quan của các bit dữ liệu với bit chẵn lẻ được biểu hiện bằng các phần của hình tròn gối lên nhau. Bit thứ 1 kiểm tra bit thứ (3, 5, 7), trong khi bit 2 kiểm tra bit (3, 6, 7). Lưu ý, các vị trị (1,2,4 v.v.) thực ra là vị trí 20, 21, 22 v.v.
Các bit dữ liệu và bit chẵn lẻ trong mối quan hệ chồng gối với nhau. Các bit chẵn lẻ được tính dùng quy luật "số chẵn". Giá trị của nhóm dữ liệu là 1100110 - các bit chẵn lẻ được in đậm, và đọc từ phải sang trái.
Càng nhiều bit sửa lỗi thêm vào trong thông điệp, và các bit ấy được bố trí theo một cách là mỗi bỗ trí của nhóm các bit bị lỗi tạo nên một hình thái lỗi riêng biệt, thì chúng ta có thể xác định được những bit bị sai. Trong một thông điệp dài 7-bit, chúng ta có 7 khả năng một bit có thể bị lỗi, như vậy, chỉ cần 3 bit kiểm tra (23 = 8) là chúng ta có thể, không những chỉ xác định được là lỗi trong truyền thông có xảy ra hay không, mà còn có thể xác định được bit nào là bit bị lỗi.
Hamming nghiên cứu các kế hoạch mã hóa hiện có, bao gồm cả mã hai-trong-năm, rồi tổng quát hóa khái niệm của chúng. Khởi đầu, ông xây dựng một danh mục (nomenclature) để diễn tả hệ thống máy, bao gồm cả số lượng bit dùng cho dữ liệu và các bit sửa lỗi trong một khối. Chẳng hạn, bit chẵn lẻ phải thêm 1 bit vào trong mỗi từ dữ liệu (data word). Hamming diễn tả phương pháp này là mã (8,7). Nó có nghĩa là một từ dữ liệu có tổng số bit là 8 bit, trong đó chỉ có 7 bit là các bit của dữ liệu mà thôi. Theo phương pháp suy nghĩ này, mã tái diễn (nhắc lại) ở trên phải được gọi là mã (3,1). Tỷ lệ thông tin là tỷ lệ được tính bằng việc lấy con số thứ hai chia cho con số thứ nhất. Như vậy với mã tái diễn (3,1) ở trên, tỷ lệ thông tin của nó là
\begin{matrix} \frac{1}{3} \end{matrix}
.
Hamming còn phát hiện ra nan đề với việc đảo giá trị của hai hoặc hơn hai bit nữa, và miêu tả nó là "khoảng cách" (distance) (hiện nay nó được gọi là khoảng cách Hamming (Hamming distance) - theo cái tên của ông). Mã chẵn lẻ có khoảng cách bằng 2, vì nếu có 2 bit bị đảo ngược thì lỗi trong truyền thông trở nên vô hình, không phát hiện được. Mã tái diễn (3,1) có khoảng cách là 3, vì 3 bit, trong cùng một bộ ba, phải bị đổi ngược trước khi chúng ta được một từ mã khác. Mã tái diễn (4,1) (mỗi bit được nhắc lại 4 lần) có khoảng cách bằng 4, nên nếu 2 bit trong cùng một nhóm bị đảo ngược thì lỗi đảo ngược này sẽ đi thoát mà không bị phát hiện.
Cùng một lúc, Hamming quan tâm đến hai vấn đề; tăng khoảng cách và đồng thời tăng tỷ lệ thông tin lên, càng nhiều càng tốt. Trong những năm thuộc niên kỷ 1940, ông đã xây dựng môt số kế hoạch mã hóa. Những kế hoạch này đều dựa trên những mã hiện tồn tại song được nâng cấp và tiến bộ một cách sâu sắc. Bí quyết chìa khóa cho tất cả các hệ thống của ông là việc cho các bit chẵn lẻ gối lên nhau (overlap), sao cho chúng có khả năng tự kiểm tra lẫn nhau trong khi cùng kiểm tra được dữ liệu nữa.
Thuật toán cho việc sử dụng bit chẵn lẻ trong 'mã Hamming' thông thường cũng tương đối đơn giản:
  1. Tất cả các bit ở vị trí là các số mũ của 2 (powers of two) được dùng làm bit chẵn lẻ. (các vị trí như 1, 2, 4, 8, 16, 32, 64 v.v. hay nói cách khác 20, 21, 22, 23, 24, 25, 26 v.v.)
  2. Tất cả các vị trí bit khác được dùng cho dữ liệu sẽ được mã hóa. (các vị trí 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, etc.)
  3. Mỗi bit chẵn lẻ tính giá trị chẵn lẻ cho một số bit trong từ mã (code word). Vị trí của bit chẵn lẻ quyết định chuỗi các bit mà nó luân phiên kiểm tra và bỏ qua (skips).
    • Vị trí 1 (n=1): bỏ qua 0 bit(n-1), kiểm 1 bit(n), bỏ qua 1 bit(n), kiểm 1 bit(n), bỏ qua 1 bit(n), v.v.
    • Vị trí 2(n=2): bỏ qua 1 bit(n-1), kiểm 2 bit(n), bỏ qua 2 bit(n), kiểm 2 bit(n), bỏ qua 2 bit(n), v.v.
    • Vị trí 4(n=4): bỏ qua 3 bit(n-1), kiểm 4 bit(n), bỏ qua 4 bit(n), kiểm 4 bit(n), bỏ qua 4 bit(n), v.v.
    • Vị trí 8(n=8): bỏ qua 7 bit(n-1), kiểm 8 bit(n), bỏ qua 8 bit(n), kiểm 8 bit(n), bỏ qua 8 bit(n), v.v.
    • Vị trí 16(n=16): bỏ qua 15 bit(n-1), kiểm 16 bit(n), bỏ qua 16 bit(n), kiểm 16 bit(n), bỏ qua 16 bit(n), v.v.
    • Vị trí 32(n=32): bỏ qua 31 bit(n-1), kiểm 32 bit(n), bỏ qua 32 bit(n), kiểm 32 bit(n), bỏ qua 32 bit(n), v.v.
    • và tiếp tục như trên.
Nói cách khác, bit chẵn lẻ tại vị trí 2k kiểm các bit ở các bit ở vị trí t có giá trị logic của phép toán AND giữa k và t là khác 0

Ví dụ dùng (11,7) mã Hamming

Lấy ví dụ chúng ta có một từ dữ liệu dài 7 bit với giá trị là "0110101". Để chứng minh phương pháp các mã Hamming được tính toán và được sử dụng để kiểm tra lỗi, xin xem bảng liệt kê dưới đây. Chữ d (data) được dùng để biểu thị các bit dữ liệu và chữ p (parity) để biểu thị các bit chẵn lẻ (parity bits).
Đầu tiên, các bit của dữ liệu được đặt vào vị trí tương thích của chúng, sau đó các bit chẵn lẻ cho mỗi trường hợp được tính toán dùng quy luật bit chẵn lẻ số chẵn[1].
Cách tính các bit chẵn lẻ trong mã Hamming (từ trái sang phải) Thứ tự bit 1 2 3 4 5 6 7 8 9 10 11Vị trí bit chẵn lẻ và các bit dữ liệu p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7Nhóm dữ liệu (không có bit chẵn lẻ): 0 1 1 0 1 0 1p1 p2 p3 p4 Nhóm dữ liệu (với bit chẵn lẻ):
101011
001001
0110
0101
10001100101
Nhóm dữ liệu mới (new data word) - bao gồm các bit chẵn lẻ - bây giờ là "10001100101". Nếu chúng ta thử cho rằng bit cuối cùng bị thoái hóa (gets corrupted) và bị lộn ngược từ 1 sang 0. Nhóm dữ liệu mới sẽ là "10001100100"; Dưới đây, chúng ta sẽ phân tích quy luật kiến tạo mã Hamming bằng cách cho bit chẵn lẻ giá trị 1 khi kết quả kiểm tra dùng quy luật số chẵn bị sai.
Kiểm tra các bit chẵn lẻ (bit bị đảo lộn có nền thẫm) Thứ tự bit 1 2 3 4 5 6 7 8 9 10 11Vị trí bit chẵn lẻ và các bit dữ liệu p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Kiểm chẵn lẻ Bit chẵn lẻNhóm dữ liệu nhận được: 1 0 0 0 1 1 0 0 1 0 0 1 p1 p2 p3 p4
101010Sai1
001000Sai1
0110Đúng0
0100Sai1
Bước cuối cùng là định giá trị của các bit chẵn lẻ (nên nhớ bit nằm dưới cùng được viết về bên phải - viết ngược lại từ dưới lên trên). Giá trị số nguyên của các bit chẵn lẻ là 11(10), và như vậy có nghĩa là bit thứ 11 trong nhóm dữ liệu (data word) - bao gồm cả các bit chẵn lẻ - là bit có giá trị không đúng, và bit này cần phải đổi ngược lại.
p4 p3 p2 p1 Nhị phân Thập phân 8 2 1 Σ = 11
1011
Khi hai bit dữ liệu (3,7) có cùng bit chẵn lẻ kiểm tra tại vi trí 2k - ví dụ (1,2) - biến đổi giá trị (lỗi trong truyền thông) thì giá trị của bit chẵn lẻ vẫn đúng như giá trị gốc (0,1)
Việc đổi ngược giá trị của bit thứ 11 làm cho nhóm
10001100100
trở lại thành
10001100101.
Bằng việc bỏ đi phần mã Hamming, chúng ta lấy được phần dữ liệu gốc với giá trị là
0110101.
Lưu ý, các bit chẵn lẻ không kiểm tra được lẫn nhau, nếu chỉ một bit chẵn lẻ bị sai thôi, trong khi tất cả các bit khác là đúng, thì chỉ có bit chẵn lẻ nói đến là sai mà thôi và không phải là các bit nó kiểm tra (not any bit it checks).
Cuối cùng, giả sử có hai bit biến đổi, tại vị trí xy. Nếu xy có cùng một bit tại vị trí 2k trong đại diện nhị phân của chúng, thì bit chẵn lẻ tương ứng với vị trí đấy kiểm tra cả hai bit, và do đó sẽ giữ nguyên giá trị, không thay đổi. Song một số bit chẵn lẻ nào đấy nhất định phải bị thay đổi, vì xy, và do đó hai bit tương ứng nào đó có giá trị x và y khác nhau. Do vậy, mã Hamming phát hiện tất cả các lỗi do hai bit bị thay đổi — song nó không phân biệt được chúng với các lỗi do 1 bit bị thay đổi.

Mã Hamming (7,4)

Hiện thời, khi nói đến mã Hamming chúng ta thực ra là muốn nói đến mã (7,4) mà Hamming công bố năm 1950. Với mỗi nhóm 4 bit dữ liệu, mã Hamming thêm 3 bit kiểm tra. Thuật toán (7,4) của Hamming có thể sửa chữa bất cứ một bit lỗi nào, và phát hiện tất cả lỗi của 1 bit, và các lỗi của 2 bit gây ra. Điều này có nghĩa là đối với tất cả các phương tiện truyền thông không có chùm lỗi đột phát (burst errors) xảy ra, mã (7,4) của Hamming rất có hiệu quả (trừ phi phương tiện truyền thông có độ nhiễu rất cao thì nó mới có thể gây cho 2 bit trong số 7 bit truyền bị đảo lộn).

Ví dụ về cách dùng các ma trận thông qua GF(2)

Nguyên lý của mã Hamming bắt nguồn từ việc khai triển và mở rộng quan điểm chẵn lẻ. Việc khai triển này bắt đầu bằng việc nhân các ma trận, được gọi là Ma trận Hamming (Hamming matrices), với nhau. Đối với mã Hamming (7,4), chúng ta sử dụng hai mã trận có liên quan gần gũi, và đặt tên cho chúng là:
H_e := \begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1 \\
0 & 1 & 1 & 1 \\
1 & 0 & 1 & 1 \\
1 & 1 & 0 & 1 \\
\end{pmatrix}

H_d := \begin{pmatrix}
0 & 0 & 0 & 1 & 1 & 1 & 1 \\
0 & 1 & 1 & 0 & 0 & 1 & 1 \\
1 & 0 & 1 & 0 & 1 & 0 & 1 \\
\end{pmatrix}
Các cột vectơ trong He là nên tảng hạch của Hd và phần trên của He (4 hàng đầu) là một ma trận đơn vị (identity matrix). Ma trận đơn vị cho phép vectơ dữ liệu đi qua trong khi làm tính nhân, và như vậy, các bit dữ liệu sẽ nằm ở 4 vị trí trên cùng (sau khi nhân). Sau khi phép nhân hoàn thành, khác với cách giải thích ở phần trước (các bit chẵn lẻ nằm ở vị trí 2k), trật tự của các bit trong từ mã (codewords) ở đây khác với cách bố trí đã nói (các bit dữ liệu nằm ở trên, các bit kiểm chẵn lẻ nằm ở dưới).
Chúng ta dùng một nhóm 4 bit dữ liệu (số 4 trong cái tên của mã là vì vậy) chủ chốt, và cộng thêm vào đó 3 bit dữ liệu thừa (vì 4+3=7 nên mới có số 7 trong cái tên của mã). Để truyền gửi dữ liệu, chúng ta hãy nhóm các bit dữ liệu mà mình muốn gửi thành một vectơ. Lấy ví dụ, nếu dữ liệu là "1011" thì vectơ của nó là:
\mathbf{p}=\begin{pmatrix} 1 \\ 0 \\ 1 \\ 1 \end{pmatrix}
Giả sử, chúng ta muốn truyền gửi dữ liệu trên. Chúng ta tìm tích của Hep, với các giá trị môđulô 2 :
H_e\mathbf{p} = \begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1 \\
0 & 1 & 1 & 1 \\
1 & 0 & 1 & 1 \\
1 & 1 & 0 & 1 \\
\end{pmatrix}\begin{pmatrix} 1 \\ 0 \\ 1 \\ 1 \end{pmatrix}=
\begin{pmatrix} 1 \\ 0 \\ 1 \\ 1 \\ 0 \\ 1 \\ 0 \end{pmatrix}=\mathbf{r}
Máy thu sẽ nhân Hd với r, để kiểm tra xem có lỗi xảy ra hay không. Thi hành tính nhân này, máy thu được (một lần nữa, các giá trị đồng dư môđulô 2):
H_d\mathbf{r} = \begin{pmatrix}
0 & 0 & 0 & 1 & 1 & 1 & 1 \\
0 & 1 & 1 & 0 & 0 & 1 & 1 \\
1 & 0 & 1 & 0 & 1 & 0 & 1 \\
\end{pmatrix}\begin{pmatrix} 1 \\ 0 \\ 1 \\ 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \\ 0 \end{pmatrix}
Vì chúng ta được một vectơ toàn số không cho nên máy thu có thể kết luận là không có lỗi xảy ra
Sở dĩ một vectơ toàn số không có nghĩa là không có lỗi, bởi vì khi He được nhân với vectơ dữ liệu, một sự thay đổi trong nền tảng xảy ra đối với không gian bên trong vectơ (vector subspace), tức là hạch của Hd. Nếu không có vấn đề gì xảy ra trong khi truyền thông, r sẽ nằm nguyên trong hạch của Hd và phép nhân sẽ cho kết quả một vectơ toàn số không.
Trong một trường hợp khác, nếu chúng ta giả sử là lỗi một bit đã xảy ra. Trong toán học, chúng ta có thể viết:
\mathbf{r}+\mathbf{e}_i
môđulô 2, trong đó eivectơ đơn vị đứng thứ i (ith unit vector), có nghĩa là, một vectơ số 0 có một giá trị 1 trong vị trí i (tính từ 1 tính đi). Biểu thức trên nói cho chúng ta biết rằng có một bit bị lỗi tại vị trí i.
Nếu bây giờ chúng ta nhân Hd với cả hai vectơ này:
H_d(\mathbf{r}+\mathbf{e}_i) = H_d\mathbf{r} + H_d\mathbf{e}_i
r là dữ liệu thu nhận được không có lỗi, cho nên tích của Hdr bằng 0. Do đó
 H_d\mathbf{r} + H_d\mathbf{e}_i = \mathbf{0} + H_d\mathbf{e}_i = H_d\mathbf{e}_i
Vậy, tích của Hd với vectơ nền chuẩn tại cột thứ i (the ith standard basis vector) làm lộ ra cột ở trong Hd, vì thế mà chúng ta biết rằng lỗi đã xảy ra tại vị trí cột này trong Hd. Vì chúng ta đã kiến tạo Hd dưới một hình thức nhất định, cho nên chúng ta có thể hiểu giá trị của cột này như một số nhị phân - ví dụ, (1,0,1) là một cột trong Hd, tương đồng giá trị với cột thứ 5, do đó chúng ta biết lỗi xảy ra ở đâu và có thể sửa được nó.
Lấy ví dụ, giả sử chúng ta có:
\mathbf{s} = \mathbf{r}+\mathbf{e}_2 = \begin{pmatrix} 1 \\ 1 \\ 1 \\ 1 \\ 0 \\ 1 \\ 0 \end{pmatrix}
Nếu thực hiện phép nhân:
H_d\mathbf{s} = \begin{pmatrix}
0 & 0 & 0 & 1 & 1 & 1 & 1 \\
0 & 1 & 1 & 0 & 0 & 1 & 1 \\
1 & 0 & 1 & 0 & 1 & 0 & 1 \\
\end{pmatrix}\begin{pmatrix} 1 \\ 1 \\ 1 \\ 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = \begin{pmatrix} 0 \\ 1 \\ 0 \end{pmatrix}
Tích của phép nhân cho chúng ta một kết quả tương đương với cột thứ 2 ("010" tương đương với giá trị 2 trong số thập phân), và do đó, chúng ta biết rằng lỗi đã xảy ra ở vị trí thứ 2 trong hàng dữ liệu, và vì vậy có thể sửa được lỗi.
Chúng ta có thể dễ dàng thấy rằng, việc sửa lỗi do 1 bit bị đảo lộn gây ra, dùng phương pháp trên là một việc thực hiện được. Bên cạnh đó, mã Hamming còn có thể phát hiện lỗi do 1 bit hoặc 2 bit bị đảo lộn gây ra, dùng tích của Hd khi tích này không cho một vectơ số không. Tuy thế, song mã Hamming không thể hoàn thành cả hai việc.

Mã Hamming và bit chẵn lẻ bổ sung

Nếu chúng ta bổ sung thêm một bit vào mã Hamming, thì mã này có thể dùng để phát hiện những lỗi gây ra do 2 bit bị lỗi, và đồng thời nó không cản trở việc sửa các lỗi do một bit gây ra. Nếu không bổ sung một bit vào thêm, thì mã này có thể phát hiện các lỗi do một bit, hai bit, ba bit gây ra, song nó sẽ cản trở việc sửa các lỗi do một bit bị đảo lộn. Bit bổ sung là bit được áp dụng cho tất cả các bit sau khi tất cả các bit kiểm của mã Hamming đã được thêm vào.
Khi sử dụng tính sửa lỗi của mã, nếu lỗi ở một bit chẵn lẻ bị phát hiện và mã Hamming báo hiệu là có lỗi xảy ra thì chúng ta có thể sửa lỗi này, song nếu chúng ta không phát hiện được lỗi trong bit chẵn lẻ, nhưng mã Hamming báo hiệu là có lỗi xảy ra, thì chúng ta có thể cho rằng lỗi này là do 2 bit bị đổi cùng một lúc. Tuy chúng ta phát hiện được nó, nhưng không thể sửa lỗi được.

Ghi chú

  1. * 
    7 bit dữ liệubyte có bit chẵn lẻ
    Quy luật số chẵnQuy luật số lẻ
    00000000000000000000001
    10100011010001110100010
    11010011101001011010011
    11111111111111111111110
    Cách tính bit chẵn lẻ trong nhóm các bit dữ liệu, dùng quy luật số chẵn như sau: nếu số lượng bit có giá trị bằng 1 (the bit is set) là một số lẻ, thì bit chẵn lẻ bằng 1(2) (và do việc cộng thêm một bit có giá trị 1(2) này vào dữ liệu, tổng số bit có giá trị 1(2) sẽ là một số chẵn - bao gồm cả bit chẵn lẻ, còn không thì bit chẵn lẻ sẽ có giá trị 0(2). Ngược lại, bit chẵn lẻ dùng quy luật số lẻ sẽ có giá trị 1(2) nếu số lượng các bit có giá trị bằng 1(2) là một số chẵn - do việc thêm bit chẵn lẻ có giá trị bằng 1(2) vào nhóm dữ liểu, tổng số bit có giá trị 1(2) là một số lẻ - và bằng 0 nếu ngược lại.
  2. * GF (Galois field - hay gọi finite field),  "Trường hữu hạn".
  3. * Môđulô (Modulo) là phép tính số dư trong tính chia. Ví dụ 100/3 = 1 (được 33 dư 1). Trong toán học, nếu có hai số nguyên a và b, cùng một số dư n nào đó, thì biểu thức ab (mod n) - nói là a và b có đồng dư môđunlô n - có nghĩa là a và b có cùng số dư khi được chia cho n, hay nói một cách tương tự, a-b là một bội số (multiple) của n.

Chủ Nhật, 12 tháng 9, 2010

Đề phòng lừa đảo trong thanh toán trực tuyến!


Những người bán có dấu hiệu lừa đảo thường làm những gì?

 
* Yêu cầu bạn chuyển tiền vào một tài khoản quốc tế. Người bán có thể yêu cầu bạn gởi tiền ra nước ngoài và chỉ chấp nhận Western Union hoặc một dịch vụ chuyển tiền khác (e-Gold).
* Lập một địa chỉ khác với địa chỉ ở trang mô tả chi tiết món hàng của họ.
* Đề nghị một dịch vụ escrow hoặc một dịch vụ thanh toán xa lạ.
*Không trung thực về độ tin cậy của món hàng để bán.
* Sẽ không cung cấp cho bạn một số điện thoại có thể xác minh được.
* Cố thuyết phục bạn không sử dụng những dịch vụ thanh toán có sự bảo vệ (những dịch vụ được chấp nhận như là Escrow.com và Paypal).
* Sẽ liên tục không trả lời điện thoại hoặc email.
* Liên tục đưa ra lời bào chữa cho chuyện tại sao bạn chưa nhận được món hàng
* Bán những bản sao đáng ngờ của phần mềm, nhạc, hoặc phim
* Từ chối đưa cho bạn một mã số biên nhận giao hàng còn hoạt động.
* Bán một món hàng được ưa thích đắt giá với một giá thấp đáng ngờ.
Theo jaovat.com