Hôm nay, trời ở trong SG đúng là khác với ở ĐN, mưa đến bất ngờ và cũng tạnh bất ngờ. Hòa mình với những cơn mưa thế này, sở thích hằng ngày của chíp tôi lại đến, tôi mở tài liệu của mình đọc một số giải pháp hạn chế DDOS. Tôi đọc đi đọc lại, bỗng nhiên một cơn gió đã thổi tôi đến 1 trang tài liệu mà trước giờ đọc nhiều mà tôi ko để ý, đó là TCP/IP Stack(nếu các bạn muốn biết nó là cái gì, thì đợi lượt bài sau tôi sẽ giải thích cũng như mục đích và sự ảnh hưởng của nó như thế nào, không thì các bạn có thể search trên google để biết thêm thông tin). Cho nên chíp tôi mạn phép được viết một bài về TCP state transition diagram(biểu đồ trạng thái của TCP), với mục đích giúp các bạn định hướng được việc mình học TCP/IP không phải là một môn lý thuyết “chay” không có tác dụng gì, qua đó cũng mong muốn mở rộng và nâng cao kiến thức TCP/IP cũng như ý thức được tầm quan trọng của việc điều chỉnh các thông số trong TCP/IP Stack. Trong phạm vi bài viết này tôi dùng Linux để mô tả với lý do đơn giản, windows rất hạn chế chúng ta đụng đến các thông số trong TCP/IP Stack. Như chúng ta đã biết, đặc trưng các giao thức trong tầng Transport là hai giao thức UDP, TCP. UDP là một giao thức không hướng kết nối, TCP là một giao thức có hướng kết nối. Với UDP chúng ta không có khái niệm kết nối, chỉ có 1 bên gửi và 1 bên nhận các UDP datagram. Với TCP, trước khi bên gửi muốn truyền dữ liệu cho bên nhân hoặc ngược lại, đầu tiên cả hai bên phải thực hiện việc bắt tay 3 bước, mục địch của việc này là thực hiện 1 kết nối trước khi truyền dữ liệu. Thế trạng thái cũng như sự chuyển đổi giữa các trạng thái của các quá trình thiết lập và chấm dứt một kết nối TCP sẽ như thế nào, mời các bạn đọc tiếp: Khi client muốn thực hiện một phiên kết nối đến Server, client sẽ gửi một TCP segment với cờ(flag) SYN được thiết lập(bật). Trạng thái kết nối lúc này sẽ là SYN_SENT. Server sau khi nhận TCP segment của client, nó tiến hành đáp lời cho client một gói TCP segment với cờ SYN và ACK được thiết lập. Trạng thái kết nối lúc này sẽ là SYN_RCVD. Client sau khi nhận TCP segment của Server, nó tiến hành trả lời cho Server một TCP segment với cờ ACK được thiết lập. Điều này cho biết quá trình thực hiện bắt tay 3 bước đã hoàn tất. Trạng thái kết nối lúc này là [FONT="]ESTABLISHED.[/FONT] [FONT="]“Có thương thì có ghét”, tuy nhiện việc thực hiện chấm dứt kết nối TCP là 4 bước thay vì 3 bước thiết lập TCP. Đóng một kết nối được thực hiện bởi 1 bên gửi TCP segment với cờ FIN được thiết lập, trong ví dụ này tôi giả sử bên client sẽ yêu cầu đóng kết nối trước.[/FONT] [FONT="]Quá trình đóng kết nối được bắt đầu bằng việc client gửi 1 TCP Segment với cờ FIN được thiết lập. Trạng thái server lúc này sẽ là CLOSE_WAIT, trạng thái client lúc này sẽ là [/FONT]FIN_WAIT_1. Sau khi server nhận được TCP segment của client, server đáp lời cho client một gói TCP segment với cờ ACK được bật lên. Tại thời điểm này client đi vào trạng thái FIN_WAIT_2 . Đến đây xem như client đã đóng kết nối, tiếp theo đến server đóng kết nối, tương tự giống như client, server gửi 1 TCP segment với cờ Fin được thiết lập đến client. Trạng thái server lúc này là LAST_ACK, trong khi đó client đi vào trạng thái là TIME_WAIT. Cuối cùng client thừ nhận TCP segment mà server gửi bằng việc nó gủi lại cho server một TCP Segment với cờ ACK được thiết lập, trạng thái kết nối lúc này là [FONT="]CLOSED. [/FONT] [FONT="]Trên là quá trình chuyển đổi trạng thái của các quá trình kết nối và chấm dứt kết nối. Câu hỏi được đặt ra, tại sao tôi lại tạo ra một bài viết như thế nào? Vâng, trước khi đi vào giải thích, tôi mời các bạn xem qua thời gian time out của các trạng thái này.[/FONT] [FONT="]Trường hợp các request đến server là các request hợp lệ và cường độ các request này là bình thường thì không có gì để nhắc đến tiêu đề topic này. Tuy nhiên trường hợp các request đến từ những nguồn không hợp lệ(dos/ddos, Botnet,..), có cường độ giữa các request đến server là rất lớn thì việc cấu hình thời gian time out cho các trạng thái này đóng vai trò rất quan trọng trong việc hạn chế các dạng tấn công trên. Ví dụ một web server đang bị SYN Flood(1 dạng tấn công ddos) trung bình có 1000 request đến từ các nguồn không hợp lệ. Thì các request phải trải qua các trạng thái của bắt tay 3 bước. Việc đi sâu vào kỹ thuật tấn công này tôi xin thảo luận ở một bài viết khác, ở đây các bạn chỉ hiểu thế này. Các client gửi gói TCP với cờ SYN bật lên(trạng thái kết nối của client lúc này sẽ là SYN_SEND), server nhận gói TCP này liền trả lại gói TCP với cờ SYN/ACK được bật lên và trạng thái kết nối của server lúc này là SYN_RECV. Theo nguyên tắc bắt tay 3 bước của TCP thì client phải gửi 1 gói TCP với cờ ACK được bật lên để hoàn thành thủ tục bắt tay 3 bước này, nhưng trong kỹ thuật tấn công này(SYN Flood), client ko gửi mà gửi các SYN khác để lặp lại quá trình trên. Trong lúc này Server đang trong trạng thái chờ đợi ACK(SYN_RECV) với time out cho trạng thái này 60s. Giả thiết đưa ra là 1000 request * 60s =>server sẽ bị treo trong tích tắt. Đây chỉ là một ví dụ đơn giản, trên thực tế có nhưng luồng request hợp lệ đến mức có quá trình kết nối và quá trình chấm dứt kết nối một cách đầy đủ. [/FONT]Chíp gà con!
-->vội vã nên không chọn cái ảnh nào cho nó to, mọi người thông cảm, để kiếm cái nào đó to hơn, sẽ update siwms. Cảm ơn đã góp ý!