[Question] Thắc mác về giao thức HTTP |
28/08/2006 07:57:51 (+0700) | #1 | 18583 |
vietwow
Member
|
0 |
|
|
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
|
|
Khi tìm hiểu về giao thức HTTP và đọc bài ký sự DDOS của anh conmale, mình có 1 thắc mắc là tại sao khi client truy cập đến webserver thì cần nhiều connection (trong bài viết của anh conmale thì tính ra trung bình là 4 connection). Theo như trong bài viết anh conmale nói thì :
một HTTP POST có payload đến trên 2 ngàn bytes thì nó phải đòi mở thêm connection để "đẩy" dữ kiện đến HVA server càng nhanh càng tốt
Và theo việc phân tích ethereal 1 session HTTP thì đúng là vậy nhưng mình vẫn ko hiểu vì theo mình bít HTTP dùng giao thức TCP để vận chuyển nên dù có gửi 1 (hoặc nhiều) packet lớn đến đâu thì nó cũng biết cách phân chia thành nhiều packet ra mà truyền & đồng thời cũng kiểm soát chúng 1 cách chặt chẽ. Vì thế theo mình nghĩ 1 người truy cập đến 1 trang web tại 1 thời điểm thì chỉ cần 1 connection là đủ, trừ khi anh ta tắt trang web đi (gửi RST) và vào lại lần nữa (gửi SYN mới) thì mới cần tạo 1 connection mới. Và nếu 1 HTTP session cần nhiều connection như vậy thì có giá trị nào trong module TCP/IP để giới hạn số lượng connection trong 1 HTTP session hay ko ? hay là 1 session HTTP muốn tạo bao nhiêu connection cũng được ?
Ai hiểu rõ xin giải thích giúp mình với
Thanx :wink: |
|
|
|
|
[Question] Thắc mác về giao thức HTTP |
28/08/2006 09:17:27 (+0700) | #2 | 18597 |
|
sup3rmm
Member
|
0 |
|
|
Joined: 17/08/2006 22:14:28
Messages: 21
Offline
|
|
Ở đây không chỉ có client truyền packet cho server mà nó còn nhận packet đáp trả nữa.Giao thức HTTP cho phép client mở nhiều kết nối đến server cùng 1 lúc nhằm tận dụng băng thông hiện có giúp việc load web site nhanh hơn.VD: khi truy cập đến http://hvaforum.net thì trên trang index có rất nhiều đối tượng khác được nhúng vào trong như các image,flash ... .Để tối ưu tốc độ client mở nhiều connection , GET cùng lúc các đối tượng nhúng trong trang web. |
|
|
|
|
[Question] Re: Thắc mác về giao thức HTTP |
28/08/2006 09:23:12 (+0700) | #3 | 18599 |
|
dabu
Elite Member
|
0 |
|
|
Joined: 03/03/2003 03:31:20
Messages: 226
Offline
|
|
16-Tôi dùng thuật ngữ "connection" ở đây là để chỉ chung cho các giai đoạn: SYN từ client, SYN-ACK từ HVA server, ACK-ACK từ hai đầu client và HVA server và sau đó là ACK-PSH hay bất cứ gì khác từ client cho đến khi "ESTABLISHED" trở thành "TIME_WAIT". Giới hạn connection ở đây thật sự là giới hạn SYN. ESTABLISHED chỉ dùng để biểu thị connection đã hình thành một cách hợp lệ và đúng quy định mà thôi. Nếu truy cập từ cùng một IP mà quá giới hạn 8 "connections", có nghĩa là SYN vẫn được gởi nhưng nếu hiện đã có 8 ESTABLISHED connections thì SYN đứng đó chờ hoặc SYN bị huỷ. ESTABLISHED dùng để đo lường số connection hiệu hữu và SYN dùng để cản (hoặc cho phép) các truy cập tiếp theo dựa trên số connection đã hiện hữu
theo conmale |
|
It's time to build a new network. |
|
|
|
[Question] Thắc mác về giao thức HTTP |
28/08/2006 09:46:07 (+0700) | #4 | 18603 |
|
sup3rmm
Member
|
0 |
|
|
Joined: 17/08/2006 22:14:28
Messages: 21
Offline
|
|
Hì hì vietwow đặt câu hỏi về phía client |
|
|
|
|
[Question] Thắc mác về giao thức HTTP |
28/08/2006 22:34:06 (+0700) | #5 | 18704 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
vietwow wrote:
Khi tìm hiểu về giao thức HTTP và đọc bài ký sự DDOS của anh conmale, mình có 1 thắc mắc là tại sao khi client truy cập đến webserver thì cần nhiều connection (trong bài viết của anh conmale thì tính ra trung bình là 4 connection). Theo như trong bài viết anh conmale nói thì :
một HTTP POST có payload đến trên 2 ngàn bytes thì nó phải đòi mở thêm connection để "đẩy" dữ kiện đến HVA server càng nhanh càng tố
Và theo việc phân tích ethereal 1 session HTTP thì đúng là vậy nhưng mình vẫn ko hiểu vì theo mình bít HTTP dùng giao thức TCP để vận chuyển nên dù có gửi 1 (hoặc nhiều) packet lớn đến đâu thì nó cũng biết cách phân chia thành nhiều packet ra mà truyền & đồng thời cũng kiểm soát chúng 1 cách chặt chẽ. Vì thế theo mình nghĩ 1 người truy cập đến 1 trang web tại 1 thời điểm thì chỉ cần 1 connection là đủ, trừ khi anh ta tắt trang web đi (gửi RST) và vào lại lần nữa (gửi SYN mới) thì mới cần tạo 1 connection mới. Và nếu 1 HTTP session cần nhiều connection như vậy thì có giá trị nào trong module TCP/IP để giới hạn số lượng connection trong 1 HTTP session hay ko ? hay là 1 session HTTP muốn tạo bao nhiêu connection cũng được ?
Ai hiểu rõ xin giải thích giúp mình với
Thanx :wink:
Trước tiên em nên xác định rõ HTTP user session và socket connections có những điểm tách rời thế nào không thì bị lẫn lộn.
Đối với application, mỗi user session (được quản lý bởi cookie, url-rewrite hay bất cứ thứ gì) là thuộc application. Một user session có thể có nhiều ETABLISHED sockets (connections).
Đối với TCP/IP, mỗi socket tương được tạo ra và do application quyết định (nếu như socket đó hợp lệ).
Nếu application server quyết định không được dùng persistent connections (biểu thị qua KeepAlive) thì mỗi request / response chỉ dùng 1 connection và chấm dứt khi response đã hoàn tất.
Nếu application sever quyết định dùng persistent connections thì có thể trên cùng 1 socket đã được mở ra, nhiều request / response đi về.
Đây là nói về phía server side.
Đối với client side, tuỳ ứng dụng của trình duyệt mà số lượng socket connections được hình thành để đáp ứng một user session.
Nếu phía server side cho phép dùng persistent connections, thông thường các requests / responses giữa client và server sẽ xảy ra trên 1 ESTABLISHED connection. Tuy nhiên, nếu server cung cấp tài nguyên ở dạng absolute URL (ví dụ: http://www.vnhacker.org/hvaonline/a/b/c thay vì relative như /hvaonline/a/b/c) thì mỗi request cho absolute URL cần 1 connection riêng biệt. Tình huống này xảy ra khi web application code mà không tính kỹ hoặc web application dùng một server khác cho hình ảnh (nên có URL tách rời) chẳng hạn.
Các trang web chơi trò "chôm hình" từ nơi khác (không dùng hình trên chính web space của mình mà chôm từ site khác xuyên qua absolute URL cũng sẽ khiến cho trình duyệt phải request để mở hàng loạt socket connections.
Cũng có trường hợp trọn bộ URL trên 1 trang web dùng relative URL nhưng vẫn có multiple connections được hình thành bởi vì chính client (trình duyệt) được ứng dụng để tạo thêm sockets cho mục đích hiệu năng.
Một user session có thể có nhiều connections nhưng quyết định cung cấp nhiều hay nhiều bao nhiêu là do server. Trình duyệt có thể gởi hàng loạt "request for connection" nhưng server cung cấp hay không là do quy định của từng server.
Hy vọng giải thích được thắc mắc của em.
Thân. |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] Re: Thắc mác về giao thức HTTP |
29/08/2006 02:52:16 (+0700) | #6 | 18764 |
vietwow
Member
|
0 |
|
|
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
|
|
Cám ơn mọi người và anh conmale đã giúp đỡ
To anh conmale : đây là 1 session HTTP mà em capture được :
http://203.171.31.150/~vietwow/http.cap
Em dùng chức "Follow TCP Stream" thì trong header có phần "Connection: Keep-Alive" => theo như anh nói ở trên thì ở trường hợp này server dùng persistent connections => các request / response đi về trong cùng 1 socket nhưng trong phiên này thì lại có nhiều socket được mở (1999, 2000, 2001 ....) :?
1 lần nữa cám ơn mọi người đã giúp đỡ vì qua bài viết này mình đã thu thập được khá nhiều kiến thức :wink: |
|
|
|
|
[Question] Re: Thắc mác về giao thức HTTP |
29/08/2006 07:02:38 (+0700) | #7 | 18836 |
0-day
Member
|
0 |
|
|
Joined: 28/08/2006 19:58:51
Messages: 26
Offline
|
|
Chủ đề này có vẻ hấp dẫn đây, mà bác conmale có thể giải thích kỹ cho em persistent connections là gì ko nhỉ ? em có đọc trong 1 số ebook bề nó nhưng vẫn ko hiểu lắm ) |
|
|
|
|
[Question] Re: Thắc mác về giao thức HTTP |
29/08/2006 09:43:07 (+0700) | #8 | 18877 |
|
Z0rr0
Q+WRtaW5pc3RyYXRvc+g
|
Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
|
|
0-day wrote:
Chủ đề này có vẻ hấp dẫn đây, mà bác conmale có thể giải thích kỹ cho em persistent connections là gì ko nhỉ ? em có đọc trong 1 số ebook bề nó nhưng vẫn ko hiểu lắm )
Đọc phần đầu tài liệu này em sẽ hiểu thế nào là persistent connection http://java.sun.com/j2se/1.5.0/docs/guide/net/http-keepalive.html
Ngoài ra, em hãy tham khảo thêm tại đây: http://www.w3.org/Protocols/HTTP/Issues/http-persist.html |
|
Hibernating |
|
|
|
[Question] Re: Thắc mác về giao thức HTTP |
29/08/2006 10:26:36 (+0700) | #9 | 18887 |
0-day
Member
|
0 |
|
|
Joined: 28/08/2006 19:58:51
Messages: 26
Offline
|
|
Về khái niệm persistent connection (HTTP Keep-Alive) & pipelining thì em hiểu rồi anh Z0rr0 ạ (em đọc trong quyển HTTP Essential) nhưng cái em thắc mắc là ý nghĩa của giá trị timeout và giá trị max trong HTTP Keep-Alive (em để ý trong 1 stream HTTP, giữa các GET request thì giá trị timeout giữ nguyên còn giá trị max thì giảm dần) ) |
|
|
|
|
[Question] Re: Thắc mác về giao thức HTTP |
29/08/2006 22:39:07 (+0700) | #10 | 18974 |
|
Z0rr0
Q+WRtaW5pc3RyYXRvc+g
|
Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
|
|
0-day wrote:
Về khái niệm persistent connection (HTTP Keep-Alive) & pipelining thì em hiểu rồi anh Z0rr0 ạ (em đọc trong quyển HTTP Essential) nhưng cái em thắc mắc là ý nghĩa của giá trị timeout và giá trị max trong HTTP Keep-Alive (em để ý trong 1 stream HTTP, giữa các GET request thì giá trị timeout giữ nguyên còn giá trị max thì giảm dần) )
Người ta đưa ra tính năng persistent connection nhằm tối ưu việc sử dụng TCP connection cho các trao đổi giữa HTTP client và server, như việc giảm chi phí do có quá nhiều TCP connection, giảm memory và CPU usage ở server; mỗi connection khi open có thể pipeline sẽ cho phép giữa client và server có thể trao đổi đồng thời nhiều request/response mà không phải chờ lẫn nhau, ...
Như vậy để hỗ trợ những tính năng này sẽ cần các thông số timeout và max của Keep-Alive (nằm trong HTTP Header). Trong đó timeout giúp server quyết định đóng connection khi không có request sau 1 khoảng thời gian nhất định. Việc này cũng giúp tránh việc có 1 client nào đó giữ 1 connection mà bị treo thì server sẽ quyết định ngắt connection khi timeout. Giá trị này là hằng số không thay đổi ở mỗi connection. Giá trị max chỉ số lượng request tối đa trên mổi connection. Do đó nó có thể thay đổi chứ không phải chỉ "giảm dần"
Em xem thêm:
http://www.ietf.org/rfc/rfc2068.txt
http://www.ietf.org/rfc/rfc2616.txt
http://httpd.apache.org/docs/1.3/mod/core.html#keepalive |
|
Hibernating |
|
|
|
[Question] Re: Thắc mác về giao thức HTTP |
30/08/2006 06:58:27 (+0700) | #11 | 19108 |
vietwow
Member
|
0 |
|
|
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
|
|
Anh comanle đâu rùi nhỉ, anh đã coi qua file capture của em chưa >_< |
|
|
|
|
[Question] Re: Thắc mác về giao thức HTTP |
30/08/2006 17:46:56 (+0700) | #12 | 19222 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
vietwow wrote:
Cám ơn mọi người và anh conmale đã giúp đỡ
To anh conmale : đây là 1 session HTTP mà em capture được :
http://203.171.31.150/~vietwow/http.cap
Em dùng chức "Follow TCP Stream" thì trong header có phần "Connection: Keep-Alive" => theo như anh nói ở trên thì ở trường hợp này server dùng persistent connections => các request / response đi về trong cùng 1 socket nhưng trong phiên này thì lại có nhiều socket được mở (1999, 2000, 2001 ....) :?
1 lần nữa cám ơn mọi người đã giúp đỡ vì qua bài viết này mình đã thu thập được khá nhiều kiến thức :wink:
Trường hợp này của em không điển hình bởi vì gói tin gởi nhận em capture được có quá nhiều errors / retrans. Hơn nữa, ddth.com có thể dùng absolute URL cho một số link nào đó thì chuyện 1999, 2000, 2001... là chuyện bình thường. Một điểm quan trọng nữa là trong số các requests em captured được có những request đi ra ngoài biên giới ddth.com, cho nên các sockets mới được tạo ra là điều hiển nhiên.
Thân mến. |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] Thắc mác về giao thức HTTP |
07/09/2006 21:02:36 (+0700) | #13 | 21380 |
0day
Member
|
0 |
|
|
Joined: 30/12/2005 11:41:38
Messages: 2
Offline
|
|
WTF, chú vietwow là ai mà lại có file capture của ddth.com ???
chắc là file capture của khoảng cuối 2004 đầu 2005.
F--K. |
|
|
|
|
[Question] Thắc mác về giao thức HTTP |
07/09/2006 21:39:17 (+0700) | #14 | 21394 |
|
Z0rr0
Q+WRtaW5pc3RyYXRvc+g
|
Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
|
|
0day wrote:
WTF, chú vietwow là ai mà lại có file capture của ddth.com ???
chắc là file capture của khoảng cuối 2004 đầu 2005.
F--K.
Xem trong các gói tin sẽ thấy được capture vào ngày Mon, 28 Aug 2006.
Đây chỉ là những packet được capture phía client browser khi duyệt đến ddth.com |
|
Hibernating |
|
|
|
[Question] Thắc mác về giao thức HTTP |
07/09/2006 23:27:45 (+0700) | #15 | 21429 |
0day
Member
|
0 |
|
|
Joined: 30/12/2005 11:41:38
Messages: 2
Offline
|
|
Z0rr0 wrote:
0day wrote:
WTF, chú vietwow là ai mà lại có file capture của ddth.com ???
chắc là file capture của khoảng cuối 2004 đầu 2005.
F--K.
Xem trong các gói tin sẽ thấy được capture vào ngày Mon, 28 Aug 2006.
Đây chỉ là những packet được capture phía client browser khi duyệt đến ddth.com
: xin lỗi, tôi chưa xem cái file đó vì
http://203.171.31.150/~vietwow/http.cap --> HTTP 404 not found ! |
|
|
|
|
[Question] Thắc mác về giao thức HTTP |
06/06/2007 21:25:53 (+0700) | #16 | 63428 |
|
enn3exlibs
Elite Member
|
0 |
|
|
Joined: 10/12/2006 16:54:02
Messages: 243
Location: bluesun
Offline
|
|
conmale wrote:
Cũng có trường hợp trọn bộ URL trên 1 trang web dùng relative URL nhưng vẫn có multiple connections được hình thành bởi vì chính client (trình duyệt) được ứng dụng để tạo thêm sockets cho mục đích hiệu năng.
- làm sao biết được số connections đã được tạo cho mỗi request từ phía client( em xem trong phần header nhưng không rõ)?
- giả sử, server cho phép tạo nhiều connections từ phía client với mỗi request, giả sử mình muốn tạo 4 connections với mỗi request gởi đi thì chỉnh như thế nào?
- số connections yêu cầu mở từ trình duyệt được tính như thế nào để đạt hiệu năng cao nhất?
|
|
|
|
|
[Question] Thắc mác về giao thức HTTP |
06/06/2007 23:54:17 (+0700) | #17 | 63442 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
nghienruou01 wrote:
conmale wrote:
Cũng có trường hợp trọn bộ URL trên 1 trang web dùng relative URL nhưng vẫn có multiple connections được hình thành bởi vì chính client (trình duyệt) được ứng dụng để tạo thêm sockets cho mục đích hiệu năng.
- làm sao biết được số connections đã được tạo cho mỗi request từ phía client( em xem trong phần header nhưng không rõ)?
Header ở đây là HTTP header? Nếu đúng vậy thì ở tầng này em không còn thấy bất cứ thông tin nào thuộc về connection nữa hết. Cách đơn giản và tương đối chấp nhận được là dùng netstat trên máy con để xác định có bao nhiêu socket đang mở ra giữa client (trình duyệt) và server. Ngoài ra, nếu muốn chính xác hơn, em phải sniff trọn bộ packet từ tầng IP trở lên và dùng một tool như Ethereal để "follow streams" và đếm xem có bao nhiêu connection.
nghienruou01 wrote:
- giả sử, server cho phép tạo nhiều connections từ phía client với mỗi request, giả sử mình muốn tạo 4 connections với mỗi request gởi đi thì chỉnh như thế nào?
Tùy trình duyệt. Có những trình duyệt không cho táy máy đến phần này. FF cho phép (xem trong about:config).
nghienruou01 wrote:
- số connections yêu cầu mở từ trình duyệt được tính như thế nào để đạt hiệu năng cao nhất?
Nếu dùng HTTP/1.1 thì không cần phải lo đến chuyện connection nữa. Đặc biệt là server có chế độ "Keep-Alive", hỗ trợ HTTP/1.1 và ứng dụng web dùng relative URL.
Hiệu năng phù thuộc vào nhiều yếu tố chớ không chỉ dừng lại ở số connections. Bởi thế, client (trình duyệt) thường nằm ở vị trí thụ động (cho dù có chỉnh thế nào đi chăng nữa, nó vẫn phụ thuộc vào băng thông, phụ thuộc vào chế đô điều tác và cung cấp của server).
Thân mến. |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] Thắc mác về giao thức HTTP |
07/06/2007 21:06:25 (+0700) | #18 | 63553 |
|
enn3exlibs
Elite Member
|
0 |
|
|
Joined: 10/12/2006 16:54:02
Messages: 243
Location: bluesun
Offline
|
|
câu trả lời của anh thật rõ ràng
em có thắc mắc thêm là: em chạy chương trình capture username và password, em đăng nhập vào 2 website( một cái của hva) thì chỉ có trang kia là bắt được pass, còn trang hva thì không? có phải request POST đến hva sử dụng giao thức HTTPS đã được xử lý ở security layer? và làm sao request được gởi đi với giao thức HTTPS chứ không phải là HTTP?
|
|
|
|