:Quá trình thiết lập kết nối

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu cải thiện giao thức SCTP trong mạng MANET luận văn ths công nghệ thông tin 60 08 15 (Trang 35 - 47)

Khi một ứng dụng tại lớp trên của host A có yêu cầu truyền tải dữ liệu nó sẽ gọi lời gọi hàm kết nối ASSOCIATE. Host A sẽ thu thập các dữ liệu cần thiết để tạo Chunk INIT. Bản tin INIT sẽ đƣợc chuyển tới host B (nhờ địa chỉ IP và địa chỉ Port). Đồng hồ đếm thời gian sẽ đƣợc khởi động để đếm thời gian truyền chunk INIT và kết thúc khi nhận đƣợc bản tin đáp ứng chunk INIT ACK. Nếu sau một khoảng thời gian nhất định không nhận đƣợc lời đáp ứng, hệ thống sẽ thông báo lỗi không thiết lập đƣợc kết nối.

Host B nhận đƣợc chunk INIT thì sẽ xem xét các dữ liệu trong chunk, thu thập các tham số cần thiết của mình phục vụ thiết lập kết nối, băm các giá trị này và tạo khóa bí mật nhờ một thuật toán mã hóa nhƣ MD5 hoặc SHA-1, đƣa các giá trị này vào COOKIE, cùng với mã xác nhận lập MAC trong chunk INIT để tạo ra chunk INIT-ACK gửi về host A.

Host A nhận đƣợc INIT ACK từ phía host B sẽ dừng đồng hồ định thời, tích hợp vào chunk COOKIE –ECHO cùng với COOKIE nhận đƣợc trong INIT-ACK và gửi tới host B, đồng thời khởi động đồng hộ định thời đếm thời gian cho đến khi nhận đƣợc chunk COOKIE-ACK.

Host B sau khi nhận đƣợc chunk COOKIE-ECHO chứa các tham số COOKIE, sử dụng MAC để xác nhận lại đúng là COOKIE do nó gửi. Nếu đúng các tham số trong

COOKIE sẽ đƣợc dùng để thiết lập kết nối. Nó sẽ gửi chunk COOKIE-ACK cho host A, chuyển sang trạng thái sẵn sàng nhận và gửi dữ liệu.

Host A sau khi nhận đƣợc COOKIE-ACK từ máy B thì chuyển sang trạng thái kết nối, bắt đầu truyền hoặc nhận dữ liệu.

Giao thức SCTP sử dụng phƣơng pháp bắt tay bốn bƣớc chặt chẽ về thủ tục hơn so với TCP chỉ thiết lập kết nối bằng phƣơng pháp bắt tay ba bƣớc. Lý do sử dụng phƣơng pháp bắt tay 4 bƣớc và vì TCP sau một thời gian sử dụng đã để lộ rõ điểm yếu trong quá trình thiết lập kết nối và bị tấn công trong bƣớc này. Việc sử dụng chunk Cookie Echo là một trong những cải tiến quan trọng của SCTP so với TCP trong việc chống lại các hình thức tấn công D-DOS, cụ thể chúng ta sẽ đi sâu phân tích ở mục 2.3.6.

2.3.4.2 Quá trình ngắt kết nối:

Quá trình ngắt kết nối của 2 điểm đầu cuối đang sử dụng giao thức SCTP có thể bắt đầu bất cứ khi nào theo một trong 2 cách sau:

Cách 1: Không làm mất dữ liệu đang truyền.

Khi nhận đƣợc lời gọi SHUTDOWN từ các ứng dụng tầng trên, bên yêu cầu sẽ dừng việc nhận dữ liệu, gửi chunk SHUTDOWN sau khi đã báo nhận đủ các gói dữ liệu và sau một thời gian nhất định lại gửi lại để đảm bảo SHUTDOWN không bị mất.

Bên gửi sau khi nhận đƣợc báo nhận đủ các gói tin từ bên yêu cầu và SHUTDOWN thì gửi lại SHUTDOWN-ACK cho bên yêu cầu.

Bên nhận sau khi nhận đƣợc SHUTDOWN-ACK từ bên gửi thì loại bỏ các dữ liệu trong quá trình kết nối, gửi SHUTDOWN COMPLETE và chuyển sang trạng thái CLOSE.

Bên gửi nhận đƣợc SHUTDOWN COMPLETE thì loại bỏ các tham số kết nối và chuyển sang trạng thái CLOSE, kết thúc kết nối.

Cách 2: Làm mất mát dữ liệu

Thực thể SCTP đầu cuối yêu cầu đóng kết nối có thể đóng bất cứ khi nào mà không cần quan tâm tới dữ liệu đang truyền và chỉ gửi chunk ABORT tới bên kia.

Bên nhận đƣợc chunk ABORT thì sẽ kết thúc kết nối mà không cần trả lời. Trong trƣờng hợp không nhận đƣợc ABORT bên gửi cũng sẽ kết thúc luôn kết nối sau khi gửi một số lần thông tin mà không nhận đƣợc hồi đáp từ phía bên kia.

Trong cả 2 cách ngắt kết nối trên, cách ngắt kết nối thứ nhất là cách ngắt kết nối chính thức đƣợc sử dụng trong hầu hết các trƣờng hợp. Cách ngắt kết nối thứ 2 khi bản thân thiết bị đầu cuối của kết nối bị lỗi hoặc kết thúc theo cách thứ nhất nhƣng bị lỗi.

2.3.4.3 Truyền dữ liệu

Quá trình truyền dữ liệu sẽ diễn ra khi kết nối đã đƣợc thiết lập và kết thúc khi một trong các bên có yêu cầu kết thúc hay tự động kết thúc mà không cần thông báo trƣớc. Cụ thể, quá trình truyền dữ liệu chỉ xảy ra khi thực thể SCTP truyền ở trong các trạng thái ESTABLISHED, SHUTDOWN-PENDING và SHUTDOWN-RECEICED. Tƣơng tự, quá trình nhận dữ liệu của thực thể SCTP cũng chỉ xẩy ra khi thực thể này ở trong trạng thái ESTABLISHED, SHUTDOWN-PENDING và SHUTDOWN-SENT.

Mỗi một gói tin SCTP sẽ có kích thƣớc tối thiểu là 1500 byte vì vậy thực thể SCTP phải có khả năng nhận đƣợc tối thiểu gói tin với kích cỡ nhƣ trên và cửa số ban đầu rwnd cũng phải đƣợc thiết lập tối thiểu là 1500 byte.

Để truyền có hiệu quả, thực thể SCTP có khả năng nhóm nhiều thông điệp của ngƣời dùng thành một gói tin đồng thời có thể phân mảnh một thông điệp quá lớn thành một số gói tin để có thể gửi trên đƣờng truyền.

Nhiều chunk DATA và chunk điều khiển có thể hợp thành một gói tin SCTP để truyền, nếu gói tin đó không lớn hơn MTU của đƣờng truyền. Bên nhận sẽ tách gói tin thành các chunk ban đầu. Trong một gói tin có cả chunk điều khiển và chunk DATA thì chunk điều khiển sẽ đƣợc đặt trƣớc chunk DATA.

Quá trình truyền (gửi) dữ liệu sẽ tuân theo các luật sau:

- Bên gửi không đƣợc truyền dữ liệu đến bên nhận nếu bộ đệm bên nhận đã đầy (rwnd =0).

- Bên gửi không đƣợc truyền thêm dữ liệu mới đến bộ đệm truyền nếu đã đạt ngƣỡng cwnd.

- Khi có thể gửi dữ liệu, trƣớc khi bắt đầu gửi một gói dữ liệu mới, các gói dữ liệu cũ đƣợc đánh dấu gửi lại phải đƣợc gửi trƣớc.

Quá trình nhận dữ liệu cũng phải tuân thủ các luật sau:

- Thực thể nhận phải báo nhận mỗi khi nhận đƣợc một chunk dữ liệu và không đƣợc tạo ra quá một SACK (chunk báo nhận) cho mỗi một gói tin nhận đƣợc.

- Báo nhận phải đƣợc gửi bởi chunk SACK, trừ yêu cầu đóng kết nối, khi đó báo nhận đƣợc gửi bằng chunk SHUTDOWN.

2.3.4.4 Truyền tải dữ liệu đúng tuần tự và không tuần tự

Ngoài khả năng truyền tải dữ liệu đúng tuần tự, SCTP cho phép truyền tải dữ liệu không đúng tuần tự. Cờ U trong chunk có giá trị 0 là các chunk đƣợc truyền tải đúng tuần tự, nghĩa là khi một chunk DATA bị truyền sai, thực thể nhận SCTP buộc phải lƣu giữ các chunk này cho đến khi nhận đủ các chunk khác và đúng tuần tự để gửi lên ứng dụng tầng trên. Khi cờ U có giá trị là 1, thực thể đầu cuối SCTP sẽ chuyển thẳng chunk DATA này lên ứng dụng tầng trên mà không cần quan tâm đến giá trị tuần tự của chunk. Do vậy SCTP có khả năng truyền tải toàn bộ dữ liệu không tuần tự bằng cách thiết lập giá trị cờ U là 1 trong toàn bộ các chunk. Đây là một trong các tính năng mà SCTP thừa kế từ giao thức UDP mà TCP không có. Với tính năng này, SCTP có thể dễ dàng đáp ứng các ứng dụng hiện nay sử dụng giao thức UDP nhƣ truy vấn DNS, các ứng dụng thời gian thực, phát quảng bá (multicast) với yêu cầu độ tin cậy thấp…đồng thời vẫn có khả năng phát dữ liệu với độ tin cậy cao nhƣ TCP.

3.3.5 Điều khiển tắc nghẽn và kiểm soát lỗi

2.3.5.1 Điều khiển tắc nghẽn

Là giao thức truyền tin cậy nên điều khiển tắc nghẽn là một trong những chức năng quan trọng của SCTP. Giống nhƣ TCP, SCTP cũng sử dụng cơ chế slow start và

Congestion avoidance để kiểm soát quá trình vận chuyển thông tin trên mạng. SCTP sử dụng 3 tham số sau để kiểm soát và điều phối các quá trình trên:

- Kích cỡ cửa sổ bên nhận (rwnd - receiver advertised window size) là không gian bộ đệm để nhận các gói tin, tính bằng byte.

- Cửa sổ điều khiển tắc nghẽn (cwnd- congestion control window) đƣợc điều chỉnh bởi bên gửi dựa trên t.nh trạng mạng, tính bằng byte.

- Ngƣỡng bắt đầu chậm (ssthresh - slow start threshold).

- Ngoài ra, SCTP sử dụng thêm tham số partial_bytes_acked để sử dụng trong quá trình tránh tắc nghẽn

Bắt đầu chậm (slow start): Thuật toán slow-start và tránh tắc nghẽn là bắt buộc đối với một thiết bị đầu cuối để kiểm soát lƣợng dữ liệu đƣợc truyền vào mạng. Giống nhƣ trong TCP, một thiết bị đầu cuối SCTP cũng sử dụng ba biến kiểm soát sau để cân đối tốc truyền tin của nó[1]:

- Rwnd: đƣợc bên nhận đặt dựa trên số khoảng trống trong bộ đệm dùng để nhận gói tin của nó.

- Cwnd: cửa sổ tắc nghẽn đƣợc bên gửi điều chỉnh dựa trên hiện trạng của mạng. - Ssthresh: Ngƣỡng cửa sổ tắc nghẽn dùng để phân biệt việc sử dụng slow-start hay

tránh tắc nghẽn.

Khi kết nối SCTP đƣợc thiết lập, cửa sổ điều khiển tắc nghẽn cwnd lúc bắt đầu và sau một thời gian truyền tải ổn định đƣợc thiết lập giá trị phải nhỏ hơn hoặc bằng 2*MTU; sau mỗi lần truyền tải bị lỗi (thời gian timeout) thì giá trị này đƣợc thiết lập phải nhỏ hơn hoặc bằng 1*MTU. Ngƣỡng bắt đầu chậm ssthresh ban đầu đƣợc thiết lập bằng giá trị kích cỡ cửa sổ bên nhận rwnd.

Khi cửa sổ phát cwnd còn nhỏ hơn ngƣỡng bắt đầu chậm, cwnd sẽ đƣợc tăng lên với giá trị đƣợc chọn bằng một trong hai giá trị sau (tuỳ thuộc vào giá trị nào nhỏ hơn) là tổng kích cỡ các chunk Data đã đƣợc biên nhận hoặc MTU của đƣờng truyền bên nhận. Khi cwnd vƣợt qua ngƣỡng ssthresh, nó chuyển sang pha tránh tắc nghẽn.

- Mỗi khi nhận đƣợc báo nhận SACK, partial_bytes_acked đƣợc tăng thêm bằng tổng kích cỡ các chunk đã đƣợc biên nhận.

Tránh tắc nghẽn (Congestion Avoidance)

Để tránh xảy ra tắc nghẽn, cwnd đƣợc tăng lên 1 MTU cho một lần truyền thành công (RTT- round trip time). Điều này đƣợc thực hiện nhƣ sau:

- partial_bytes_acked đƣợc khởi tạo bằng 0

- Khi partial_bytes_acked lớn hơn hoặc bằng cwnd, cwnd đƣợc tăng bằng 1*MTU và partial_bytes_acked đƣợc thiết lập lại giá trị bằng cwnd hoặc partial_bytes_acked.

- Khi toàn bộ dữ liệu đƣợc báo nhận, partial_bytes_acked đƣợc thiết lập giá trị bằng 0.

Trong trƣờng hợp thực thể gửi không gửi dữ liệu (trong cả hai giai đoạn bắt đầu chậm và tránh tắc nghẽn) th. cwnd điều chỉnh bằng Max(cwnd/2, 2*MTU) cho một RTO. Điều này điều chỉnh cwnd để phù hợp với đƣờng truyền.

Kiểm soát tắc nghẽn: Trong quá trình truyền dữ liệu , khi phát hiện ra các gói tin bị mất trên đƣờng tryền (không có SACK biên nhận) thực thể SCTP sẽ điều chỉnh cwnd giảm đi một nửa, chờ đợi gói tin biên nhận. Khi thời gian biên nhận kết thúc (thông qua đồng hồ kiềm soát quá trình phát t3-rtx) các tham số sẽ đƣợc thiết lập lại.

Ssthresh = max(cwnd/2, 2*MTU) Cwnd=1*MTU

Lúc này thực thể phát SCTP sẽ bắt đầu quá trình ―bắt đầu chậm‖ và không gửi quá 1 gói tin cho đến khi nhận đƣợc biên nhận.

2.3.5.2 Kiểm soát lỗi

a. Phát hiện lỗi tại điểm cuối

Mỗi thực thể phát SCTP luôn lƣu giữ một bộ đếm đếm số lần phát lại liên tiếp một gói tin đến một thực thể nhận. Khi số lần này vƣợt một ngƣỡng nhất định mà không nhận đƣợc báo nhận thì thực thể phát sẽ báo lỗi lên tầng ứng dụng, huỷ các gói tin trong hàng đợi phát và chuyển sang trạng thái đóng. Mỗi khi nhận đƣơc báo nhận, bộ đếm này sẽ đƣợc thiết lập về trạng thái ban đầu.

Nếu thực thể SCTP là đa điểm (multi-homing) thì mỗi điểm sẽ lƣu giữ các bộ đếm lỗi cho mỗi địa chỉ thực thể nhận khác nhau và khi các bộ đếm lỗi này vƣợt quá giới hạn cho phép thì nó sẽ chỉ báo lỗi địa chỉ thực thể mà điểm đó đang kết nối đến. Khi đƣờn truyền của một điểm bị lỗi, thực thể SCTP sẽ tự động chuyể sang đƣờng khác. Nếu tồn tại nhiều hơn một đƣờng truyền thì chỉ một đƣờng truyền đƣợc sử dụng.

Các thực thể SCTP sẽ kiểm soát đƣờng truyền bằng cách định kì gửi đi các bản tin HEARTBEAT tới các thực thể nhận và sau khi nhận đƣợc bản tin HEARTBEAT thì thực thể nhận sẽ gửi lại chunk HEARTBEAT ACK để biên nhận. Bên gửi nhận đƣợc chunk này sẽ thiết lập lại bộ đếm lỗi.

3.3.6 Vấn đề an toàn dữ liệu

Với mục tiêu ban đầu khi thiết kế giao thức SCTP để khắc phục những khó khăn mà các giao thức hiện tại đang gặp phải đồng thời phải kế thừa đƣợc những đặc tính cốt lõi của các giao thức truyền thống nền tảng. SCTP đƣợc thiết kế để vận chuyển tin cậy các dữ liệu nhạy cảm với độ trễ của ngƣời sử dụng giữa 2 điểm đầu cuối. Do vậy, SCTP cần phải có các khả năng sau:

- Sẵn sàng cung cấp các dịch vụ truyền dữ liệu tin cậy và kịp thời

- Đảm bảo tính toàn vẹn thông tin của ngƣời sử dụng giữa các điểm đầu cuối.

Trong luận văn này tôi xin tập trung vào trình bày một phƣơng pháp tấn công chủ yếu và dễ dàng nhất mà giao thức truyền thống TCP đang gặp phải và chƣa có phƣơng án khắc phục triệt để đó là tấn công từ chối dịch vụ - DoS (Deny of Service).

Các phƣơng pháp tấn công DoS xảy ra khi những kẻ tấn công không thể can thiệp, thay đổi hay xem nội dung dữ liệu SCTP. Các tấn công này bao gồm "làm lụt mạng"(flooding), "giả trang" (Masquerate)… Để bảo vệ mạng trƣớc các cuộc tấn công loại này, SCTP sử dụng cơ chế bắt tay 4 bƣớc trong quá trình khới tạo kết nối. Kiến trúc cookie đã đƣợc kết hợp để tránh tấn công DoS (Denial of Service). Một SCTP client sẽ gửi một bản tin int với SCTP server. Phía server sẽ phản hồi với một bản tin khởi tạo int ack mà nó bao gồm một cookie (một TCB (Transmission Control Block), một thời gian hiệu lực (validity period), và một chữ kí chứng thực (signature for authentication)). Bản

tin int ack đƣợc đánh địa chỉ IP nguồn là địa chỉ bản tin int gửi đến, một kẻ tấn công không thể lấy đƣợc cookie này. Phía Client không phải giả mạo sẽ lấy cookie và gửi trả lại cho phía server một thông điệp cookie echo. Khi bản tin này đƣợc phía server nhận, server sẽ bắt đầu cấp pháp tài nguyên cho client. Quá trình này kết thúc với một cookie ack message. Chi tiết nhƣ sau:

A) Trong quá trình khởi tạo kết nối bên gửi A sẽ gửi bản tin INIT trong đó bao gồm một giá trị Verification Tag (Tag_A) nằm trong trƣờng Verification Tag của bản tin khởi tạo. Tag_A là một giá trị ngẫu nhiên trong khoảng từ 1 tới 4294967295. Sau khi gửi bản tin INIT, bên gửi ―A‖ sẽ khởi tạo một biến timer T1-init và ở trạng thái COOKIE-WAIT.

B) Bên nhận ―Z‖ sẽ phản hồi ngay lập tức với một INT ACK chunk. Địa chỉ IP đích của bản tin này là địa chỉ nguồn của bản tin INIT mà nó nhận đƣợc. Trong quá trình phản hồi, bên cạnh việc phải cung cấp các tham số khác nhau, bên nhận ―Z‖ sẽ đặt giá trị trƣờng Verification Tag tới Tag_A và cung cung cấp giá trị trƣờng Verification Tag của chính nó trong trƣờng tag khởi tạo. Ngoài ra ―Z‖ còn phải tạo và gửi kèm theo bản tin INIT ACK một Cookie. Một điều đang chú ý là sau khi gửi đi bản tin INIT ACK thì phía nhận ―Z‖ sẽ không cấp phát bất kì một tài nguyên nào hoặc lƣu giữ bất kì một trạng thái nào cho kết nối mới do vậy sẽ tránh đƣợc việc tấn công vào tài nguyên của hệ thống.

C) Sau khi nhận đƣợc bản tin INIT ACK từ ―Z‖, ―A‖ sẽ dừng biến timer T1 và sẽ chuyển trạng thái COOKIE-WAIT hiện tại. ―A‖ sau đó sẽ gửi COOKIE nhận đƣợc trong bản tin INIT ACK chunk là một COOKIE ECHO chunk sau đó sẽ khởi tạo T1- cookie timer và chuyển sang trạng thái COOKIE-ECHOED.

D) Sau khi nhận đƣợc bản tin COOKIE ECHO chunk, bên nhận ―Z‖ sẽ phản hồi lại một COOKIE ACK chunk sau khi kết hợp một TCB và chuyển sang trạng thái ESTABLISHED.

E) Sau khi nhận COOKIE ACK, bên nhận ―A‖ sẽ chuyển từ trạn thái COOKIE – ECHOED sang trạng thái ESTABLISED và dừng biến T1-cookie timer.

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu cải thiện giao thức SCTP trong mạng MANET luận văn ths công nghệ thông tin 60 08 15 (Trang 35 - 47)

Tải bản đầy đủ (PDF)

(65 trang)