banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận bảo mật Hỏi về cách phân tích của Ethereal ?  XML
  [Question]   Hỏi về cách phân tích của Ethereal ? 17/08/2006 13:27:54 (+0700) | #1 | 15575
vietwow
Member

[Minus]    0    [Plus]
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
[Profile] [PM]
Khi mình dùng ethereal phân tích các stream của giao thức HTTP thì có 1 thắc mắc, khi webserver gửi packet ACK kèm data về cho client thì các packet đó ở 2 dạng (theo ethereal mô tả) :

+ 1 là packet có cột info là "Continuation or non-HTTP Traffic", ở dạng nảy ethereal hiểu packet này là HTTP protocol, phần data chính là HTTP data

+ 2 là packet có cột info là "[TCP Segment of a reassembled PDU]", ở dạng này, ethereal chỉ hiểu packet là TCP packet nhưng phần TCP data segment cũng chính là HTTP data như dạng thứ nhất

Vậy 2 dạng này giống và khác nhau như thế nào ? Và tại sao ethereal lại có sự phân biệt như thế ? Ai bít xin giải thích rõ giúp mình với

Thanx :wink:
[Up] [Print Copy]
  [Question]   Hỏi về cách phân tích của Ethereal ? 17/08/2006 19:09:35 (+0700) | #2 | 15590
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

vietwow wrote:
Khi mình dùng ethereal phân tích các stream của giao thức HTTP thì có 1 thắc mắc, khi webserver gửi packet ACK kèm data về cho client thì các packet đó ở 2 dạng (theo ethereal mô tả) :

+ 1 là packet có cột info là "Continuation or non-HTTP Traffic", ở dạng nảy ethereal hiểu packet này là HTTP protocol, phần data chính là HTTP data

+ 2 là packet có cột info là "[TCP Segment of a reassembled PDU]", ở dạng này, ethereal chỉ hiểu packet là TCP packet nhưng phần TCP data segment cũng chính là HTTP data như dạng thứ nhất

Vậy 2 dạng này giống và khác nhau như thế nào ? Và tại sao ethereal lại có sự phân biệt như thế ? Ai bít xin giải thích rõ giúp mình với

Thanx :wink:  


1. là các gói tin tiếp tục đi vào vì mỗi MTU chỉ có giới hạn bao nhiêu byte đó thôi. Cái này bình thường.

2. là gói tin bị fragmented nhưng các segment của gói tin bị mất, bị error, hay sự cố gì đó mà nó không gộp lại các mảnh để tạo thành 1 gói hoàn chỉnh nên phải nhận lại và "reassemble" lại.

Thân mến.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Hỏi về cách phân tích của Ethereal ? 18/08/2006 00:07:18 (+0700) | #3 | 15658
vietwow
Member

[Minus]    0    [Plus]
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
[Profile] [PM]

conmale wrote:

vietwow wrote:
Khi mình dùng ethereal phân tích các stream của giao thức HTTP thì có 1 thắc mắc, khi webserver gửi packet ACK kèm data về cho client thì các packet đó ở 2 dạng (theo ethereal mô tả) :

+ 1 là packet có cột info là "Continuation or non-HTTP Traffic", ở dạng nảy ethereal hiểu packet này là HTTP protocol, phần data chính là HTTP data

+ 2 là packet có cột info là "[TCP Segment of a reassembled PDU]", ở dạng này, ethereal chỉ hiểu packet là TCP packet nhưng phần TCP data segment cũng chính là HTTP data như dạng thứ nhất

Vậy 2 dạng này giống và khác nhau như thế nào ? Và tại sao ethereal lại có sự phân biệt như thế ? Ai bít xin giải thích rõ giúp mình với

Thanx :wink:  


1. là các gói tin tiếp tục đi vào vì mỗi MTU chỉ có giới hạn bao nhiêu byte đó thôi. Cái này bình thường.

2. là gói tin bị fragmented nhưng các segment của gói tin bị mất, bị error, hay sự cố gì đó mà nó không gộp lại các mảnh để tạo thành 1 gói hoàn chỉnh nên phải nhận lại và "reassemble" lại.

Thân mến. 


Cám ơn anh đã giải thích nhưng cái thứ 2 anh giải thích em nhưng hiểu lắm vì theo em bít module TCP kiểm soát cơ chế truyền packet rất chặt chẽ dựa vào thông tin "thoả thuận" trong 3 bước bắt tay ban đầu với nhau như MSS, Windows Size nên chuyện gói tín TCP bị phân mảnh là rất hiếm xảy ra, mà gói tin "[TCP Segment of a reassembled PDU]" thì em lại thấy thườn xuyên khi sniff các gói tin của HTTP stream.
Thứ 2 là anh nói "các segment của gói tin bị mất, bị error, hay sự cố gì đó mà nó không gộp lại các mảnh để tạo thành 1 gói hoàn chỉnh". Theo em biết thì bất cứ 1 gói tin nào bị phân mảnh thì khi đến đích nó sẽ được "reassemble" thôi chứ chức năng "reasseamble" đâu phải để ráp các gói tin bị lỗi đâu anh ? Với lại khi 1 gói tin bị mất thì module TCP phát hiện sự "mất mát" packet dựa vào số ACK và thực hiện cơ chế retransmission. Chứ nếu nó đã mất thì làm sao "reassemble" lại được :?smilie
[Up] [Print Copy]
  [Question]   Hỏi về cách phân tích của Ethereal ? 18/08/2006 00:26:29 (+0700) | #4 | 15671
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

vietwow wrote:


Cám ơn anh đã giải thích nhưng cái thứ 2 anh giải thích em nhưng hiểu lắm vì theo em bít module TCP kiểm soát cơ chế truyền packet rất chặt chẽ dựa vào thông tin "thoả thuận" trong 3 bước bắt tay ban đầu với nhau như MSS, Windows Size nên chuyện gói tín TCP bị phân mảnh là rất hiếm xảy ra, mà gói tin "[TCP Segment of a reassembled PDU]" thì em lại thấy thườn xuyên khi sniff các gói tin của HTTP stream.
Thứ 2 là anh nói "các segment của gói tin bị mất, bị error, hay sự cố gì đó mà nó không gộp lại các mảnh để tạo thành 1 gói hoàn chỉnh". Theo em biết thì bất cứ 1 gói tin nào bị phân mảnh thì khi đến đích nó sẽ được "reassemble" thôi chứ chức năng "reasseamble" đâu phải để ráp các gói tin bị lỗi đâu anh ? Với lại khi 1 gói tin bị mất thì module TCP phát hiện sự "mất mát" packet dựa vào số ACK và thực hiện cơ chế retransmission. Chứ nếu nó đã mất thì làm sao "reassemble" lại được :?smilie  


- sau 3 bước "bắt tay", việc gói tin được gởi / nhận hoàn toàn có khả năng bị lỗi hoặc lạc mất bởi vì không có gì bảo đảm gói tin hoặc 1 segment được gởi đi sẽ đến đích mọi lúc (vì đường truyền, vì collision, vì đủ thứ lý do khác nhau...). Việc thoả thuận MSS ngay lúc đầu cũng không có gì bảo đảm gói tin sẽ không thay đổi kích thước khác cả. Việc một http stream có nhiều segment được reassemble là vì một stream có thể có rất nhiều segments và có thể segment trước lại đến sau và segment sau lại đến trước. Chúng được reassemble để hoàn thành các packet hoàn chỉnh.

- anh không hề nói chức năng reassemble chỉ dùng để ráp các gói tin bị lỗi. Bất cứ một chuỗi gói tin được gởi vào, dù có bị lỗi hay không nhưng không hoàn tất, đi đến không đúng thứ tự (vì lý do bị lỗi, do congestion, do bị lạc mất...) đều phải được reassemble để trở nên hoàn tất.

- việc phát hiện gói tin bị mất là bước xảy ra trước khi bước reassemble. Nếu gói tin bị mất, 2 đầu sẽ biết qua cơ chế ack và đầu gởi sẽ gởi lại, đầu nhận khi nhận đầy đủ sẽ thực hiện reassemble. Anh không hề nói là packet đã mất và dùng reassemble để "gắn" nó lại bao giờ. Có lẽ em đọc không kỹ hoặc anh trình bày không rõ ràng.

Thân mến.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: Hỏi về cách phân tích của Ethereal ? 18/08/2006 00:43:58 (+0700) | #5 | 15680
vietwow
Member

[Minus]    0    [Plus]
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
[Profile] [PM]
Ok, vậy ý anh có phải là trường hợp "[TCP Segment of a reassembled PDU]" xảy ra khi các gói tin đến ko đúng thứ tự và máy đích phải reassemble ? Vì trong các TH khác, nếu gói tin bị mất thì TCP truyền lại dựa vào ACK, nếu gói tin bị lỗi (mất byte hoặc các byte bị thay đổi) => checksum sai => drop rồi còn đâu smilie
[Up] [Print Copy]
  [Question]   Re: Hỏi về cách phân tích của Ethereal ? 18/08/2006 00:56:45 (+0700) | #6 | 15685
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

vietwow wrote:
Ok, vậy ý anh có phải là trường hợp "[TCP Segment of a reassembled PDU]" xảy ra khi các gói tin đến ko đúng thứ tự và máy đích phải reassemble ? Vì trong các TH khác, nếu gói tin bị mất thì TCP truyền lại dựa vào ACK, nếu gói tin bị lỗi (mất byte hoặc các byte bị thay đổi) => checksum sai => drop rồi còn đâu smilie  


Hì hì, em cứ bị lẫn lộn giữa phân đoạn phát hiện sự cố và phân đoạn ráp nối gói tin mãi vậy. Nếu 1 gói tin có checksum sai --> bị drop, vậy là cả chuỗi bị drop? hay là gói tin đó bị drop và 1 gói khác được gởi đến? Vậy thì chuyện ráp nối xảy ra khi nào? và chuyện drop xảy ra khi nào? cái nào trước, cái nào sau?
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: Hỏi về cách phân tích của Ethereal ? 18/08/2006 01:09:40 (+0700) | #7 | 15689
vietwow
Member

[Minus]    0    [Plus]
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
[Profile] [PM]
Theo em nghĩ như thế này, các segment bị phân mảnh được gửi từ A -> B, nếu bên B chưa nhận đủ các segment (thiếu 1 gói nào đó) thì nó sẽ chờ 1 khoảng thởi gian time-out, hết time-out nó coi như gói tin bị "thất lạc" và nó yêu cầu bên A gửi lại hoặc trường hợp 1 gói tin đến nhưng bên B tính sai checksum sai => drop và cũng yêu cầu bên B gửi lại, cứ như vậy cho đến khi nào bên B nhận đủ các segment đầy đủ thì nó reassemble lại. Ko bít em hiểu như vậy có chính xác ko nhỉ smilie)

À mà, nếu anh nói trường hợp "[TCP Segment of a reassembled PDU]" xảy ra khi các gói tin bị lỗi hoặc bi mất thì khi em vừa lập tức khảo sát 1 TH thực tế thấy hơi kỳ, anh down thử file .cap này nha : http://203.171.31.150/~vietwow/tcpsegment.cap

Em sniff 1 stream http, và gần như quá trính truyền nhận chỉ có các gói ACK , GET và TCP Segment of a reassembled PDU. Chẳng lẽ nguyên quá trình truyền nhận, gói nào cũng bị lỗi hết hả anh ? :?smilie

Cám ơn anh đã tận tình chỉ bảo :wink:
[Up] [Print Copy]
  [Question]   Re: Hỏi về cách phân tích của Ethereal ? 18/08/2006 01:33:55 (+0700) | #8 | 15699
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

vietwow wrote:
Theo em nghĩ như thế này, các segment bị phân mảnh được gửi từ A -> B, nếu bên B chưa nhận đủ các segment (thiếu 1 gói nào đó) thì nó sẽ chờ 1 khoảng thởi gian time-out, hết time-out nó coi như gói tin bị "thất lạc" và nó yêu cầu bên A gửi lại hoặc trường hợp 1 gói tin đến nhưng bên B tính sai checksum sai => drop và cũng yêu cầu bên B gửi lại, cứ như vậy cho đến khi nào bên B nhận đủ các segment đầy đủ thì nó reassemble lại. Ko bít em hiểu như vậy có chính xác ko nhỉ smilie)

À mà, nếu anh nói trường hợp "[TCP Segment of a reassembled PDU]" xảy ra khi các gói tin bị lỗi hoặc bi mất thì khi em vừa lập tức khảo sát 1 TH thực tế thấy hơi kỳ, anh down thử file .cap này nha : http://203.171.31.150/~vietwow/tcpsegment.cap
 

Khì... nếu em thử "follow TCP Stream" của đoạn sniff trên thì sẽ thấy hầu như mỗi cú GET (PSH,ACK) và ACK đi theo đều dính "check sum incorrect" cả. Đó là lý do em thấy hàng loạt "[TCP Segment of a reassembled PDU]" đi theo sau. Từ máy em đi đến website đó chắc chắn có vấn đề đường truyền.

Thực tế đoạn sniff trên chứng minh hết sức rõ những điều anh em mình đã bàn nãy giờ.

vietwow wrote:

Em sniff 1 stream http, và gần như quá trính truyền nhận chỉ có các gói ACK , GET và TCP Segment of a reassembled PDU. Chẳng lẽ nguyên quá trình truyền nhận, gói nào cũng bị lỗi hết hả anh ? :?smilie

Cám ơn anh đã tận tình chỉ bảo :wink:
 

Em cần "follow the TCP stream" để quan sát cho chính xác 1 stream nào đó thay vì nhìn chung chung thì thiếu chính xác.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: Hỏi về cách phân tích của Ethereal ? 18/08/2006 01:44:33 (+0700) | #9 | 15706
vietwow
Member

[Minus]    0    [Plus]
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
[Profile] [PM]
Hix, anh nói em mới để ý, em xem lại các stream lúc trước em phân tích cũng vậy, tất cả gói tin đi từ máy em đều có checksum incorrect, sao lại kỳ thế nhỉ, do ethereal hay do máy em nhỉ :?)

À mà cái em hiểu hồi nãy có đúng ko anh ? có phải khi bên nhận tính checksum lại thấy incorrect thì nó drop gói tin và yêu cầu gởi lại gói đó đúng ko anh ?
[Up] [Print Copy]
  [Question]   Re: Hỏi về cách phân tích của Ethereal ? 18/08/2006 04:14:27 (+0700) | #10 | 15762
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

vietwow wrote:
Hix, anh nói em mới để ý, em xem lại các stream lúc trước em phân tích cũng vậy, tất cả gói tin đi từ máy em đều có checksum incorrect, sao lại kỳ thế nhỉ, do ethereal hay do máy em nhỉ :?)
 

Mắc gì Ethereal? Ethereal thấy sao nó ghi vậy thôi. Do máy em cũng không hẳn, có thể có nhiều lý do đi từ máy em đến firewall / proxy, đến gateway của mạng riêng của em, ra routers khác, đến firewall khác... có vấn đề.

vietwow wrote:

À mà cái em hiểu hồi nãy có đúng ko anh ? có phải khi bên nhận tính checksum lại thấy incorrect thì nó drop gói tin và yêu cầu gởi lại gói đó đúng ko anh ? 

Ừa.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: Hỏi về cách phân tích của Ethereal ? 18/08/2006 05:34:09 (+0700) | #11 | 15793
vietwow
Member

[Minus]    0    [Plus]
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
[Profile] [PM]
Em nghĩ chỉ có thể do máy em thôi, vì mô hình nhà mạng chi là máy tính --> router ADSL --> ISP. Ko hề có firewall nào cả, mà cho dù có qua thiết bị nào cũng vậy. Vì đây ethereal hoạt động dựa vào winpcap mà cái này là module đặt ngay dưới lớp cuối cùng (data link), đây lại là gói tin phun từ máy em ra, do đó gói packet từ máy em vừa qua interface là đã bị nó "chộp" lên rồi => đâu có bị tác động của các thiết bị khác đâu anh smilie Nếu là gói tin trả về thì nó mới bị tác động
[Up] [Print Copy]
  [Question]   Re: Hỏi về cách phân tích của Ethereal ? 18/08/2006 05:41:28 (+0700) | #12 | 15796
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

vietwow wrote:
Em nghĩ chỉ có thể do máy em thôi, vì mô hình nhà mạng chi là máy tính --> router ADSL --> ISP. Ko hề có firewall nào cả, mà cho dù có qua thiết bị nào cũng vậy. Vì đây ethereal hoạt động dựa vào winpcap mà cái này là module đặt ngay dưới lớp cuối cùng (data link), đây lại là gói tin phun từ máy em ra, do đó gói packet từ máy em vừa qua interface là đã bị nó "chộp" lên rồi => đâu có bị tác động của các thiết bị khác đâu anh smilie Nếu là gói tin trả về thì nó mới bị tác động 


Thế còn gói tin trả về máy em từ trang web thì sao?
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: Hỏi về cách phân tích của Ethereal ? 18/08/2006 12:20:56 (+0700) | #13 | 15894
vietwow
Member

[Minus]    0    [Plus]
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
[Profile] [PM]
Hì hì, em hiểu rồi, thanx anh đã tận tình giúp đỡ :wink:
[Up] [Print Copy]
  [Question]   Re: Hỏi về cách phân tích của Ethereal ? 13/03/2008 14:06:29 (+0700) | #14 | 119205
[Avatar]
manhlan99
Member

[Minus]    0    [Plus]
Joined: 26/06/2006 23:45:53
Messages: 35
Offline
[Profile] [PM]

conmale wrote:

vietwow wrote:
Em nghĩ chỉ có thể do máy em thôi, vì mô hình nhà mạng chi là máy tính --> router ADSL --> ISP. Ko hề có firewall nào cả, mà cho dù có qua thiết bị nào cũng vậy. Vì đây ethereal hoạt động dựa vào winpcap mà cái này là module đặt ngay dưới lớp cuối cùng (data link), đây lại là gói tin phun từ máy em ra, do đó gói packet từ máy em vừa qua interface là đã bị nó "chộp" lên rồi => đâu có bị tác động của các thiết bị khác đâu anh smilie Nếu là gói tin trả về thì nó mới bị tác động 


Thế còn gói tin trả về máy em từ trang web thì sao? 

Máy của em các gói tin gửi đi thì không sao,nhưng các gói tin trả về từ webserver lại dính "TCP segment of a reassembled PDU" dù checksum corect.


Mong các bác giải thích giùm?
[Up] [Print Copy]
  [Question]   Hỏi về cách phân tích của Ethereal ? 03/06/2009 01:19:36 (+0700) | #15 | 182645
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

vietwow wrote:
Khi mình dùng ethereal phân tích các stream của giao thức HTTP thì có 1 thắc mắc, khi webserver gửi packet ACK kèm data về cho client thì các packet đó ở 2 dạng (theo ethereal mô tả) :

+ 1 là packet có cột info là "Continuation or non-HTTP Traffic", ở dạng nảy ethereal hiểu packet này là HTTP protocol, phần data chính là HTTP data

+ 2 là packet có cột info là "[TCP Segment of a reassembled PDU]", ở dạng này, ethereal chỉ hiểu packet là TCP packet nhưng phần TCP data segment cũng chính là HTTP data như dạng thứ nhất

Vậy 2 dạng này giống và khác nhau như thế nào ? Và tại sao ethereal lại có sự phân biệt như thế ? Ai bít xin giải thích rõ giúp mình với

Thanx :wink:  

vietwow cho mình hỏi: 2 dạng này cùng xuất hiện trong một lần capture của bạn à?

Hiện tại mình gặp trường hợp thế này:

- Nếu http://wiki.wireshark.org/TCP_checksum_offload được enable thì khi sniff sẽ xuất hiện hàng loạt packets ở dạng 1 (và chỉ dạng này mà thôi). Thêm vào đó, checksum bị incorrect với thông báo:
Code:
Checksum: 0xffb9 [incorrect, should be 0x2f09 (maybe caused by "TCP checksum offload"?)]
        [Good Checksum: False]
        [Bad Checksum: True]


- Nếu disable TCP checksum offload đi, thì lúc này hàng loạt packets lại chuyển sang dạng 2 "[TCP segment of a reassembled PDU]" (và cũng chỉ dạng này mà thôi), checksum lại correct như thường.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Hỏi về cách phân tích của Ethereal ? 03/06/2009 11:26:59 (+0700) | #16 | 182687
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]
@quanta: digging expert smilie
OK. Khi bạn enable offload checksum, wireshark sẽ chỉ thấy TCP packet với incorrect checksum (vì chúng chưa được calculated). Như vậy wireshark sẽ không cố gắng intepret payload đằng sau TCP header nữa mà coi payload đó đơn giản là một data stream. Thêm vào đó, vì một trong các port là 80 (HTTP), nên status của packet trở thành "Continuation or non-HTTP Traffic".

Khi bạn disable offload checksum, wireshark sẽ thấy TCP packet với correct checksum (vì chúng đã được calculated bởi OS). Câu hỏi là tại sao wireshark có thể phân biệt giữa một TCP segment và một fragment của segment khi mà checksum của cả hai đều correct.

Câu trả lời nằm ở chỗ OS handle TCP segment như thế nào trước khi nó được gửi đi:

- ở tầng transport, data stream được đóng gói vào TCP segment, cũng giống như chúng ta đóng đồ vào thùng hàng trước khi gửi đi.
- Thường thì chúng ta đợi đóng đầy thùng rồi mới gửi đi (cho tiết kiệm). OS cũng vậy, nó thường đợi data stream đến khi một TCP segment được filled đầy rồi mới gửi đi.
- Vậy nếu data stream chỉ có đến vậy mà không fill đầy một segment thì chẳng lẽ OS cứ đợi mãi? Không, cứ mỗi khi application thực hiện một send (write) syscall, thì syscall này sẽ làm nhiệm vụ fill segment, và đến khi nó không còn data nữa thì nó sẽ bắt OS đóng gói TCP và gửi đi.
- Nếu data stream nhiều hơn một TCP segment, thì một segment sẽ bị filled đầy trước khi data stream kết thúc, dẫn đến việc OS tiến hành đóng gói và gửi segment đó đi mà không cần application phải nhắc nhở. Việc nhắc nhở chỉ xuất hiện sau khi toàn bộ data stream đã kết thúc.
- Để thể hiện sự nhắc nhở này, OS set PUSH flag trong TCP option của segment cuối trong data stream. Còn các segments trước đó của cùng một data stream thì có PUSH flag unset.

Như vậy, wireshark nhận biết sự khác nhau giữa một TCP segment hoàn chỉnh và một fragmented segment qua PUSH flag.

Trust that helps.
Mind your thought.
[Up] [Print Copy]
  [Question]   Hỏi về cách phân tích của Ethereal ? 03/06/2009 11:59:16 (+0700) | #17 | 182688
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

StarGhost wrote:
@quanta: digging expert smilie
OK. Khi bạn enable offload checksum, wireshark sẽ chỉ thấy TCP packet với incorrect checksum (vì chúng chưa được calculated). Như vậy wireshark sẽ không cố gắng intepret payload đằng sau TCP header nữa mà coi payload đó đơn giản là một data stream. Thêm vào đó, vì một trong các port là 80 (HTTP), nên status của packet trở thành "Continuation or non-HTTP Traffic".

Khi bạn disable offload checksum, wireshark sẽ thấy TCP packet với correct checksum (vì chúng đã được calculated bởi OS). Câu hỏi là tại sao wireshark có thể phân biệt giữa một TCP segment và một fragment của segment khi mà checksum của cả hai đều correct.

Câu trả lời nằm ở chỗ OS handle TCP segment như thế nào trước khi nó được gửi đi:

- ở tầng transport, data stream được đóng gói vào TCP segment, cũng giống như chúng ta đóng đồ vào thùng hàng trước khi gửi đi.
- Thường thì chúng ta đợi đóng đầy thùng rồi mới gửi đi (cho tiết kiệm). OS cũng vậy, nó thường đợi data stream đến khi một TCP segment được filled đầy rồi mới gửi đi.
- Vậy nếu data stream chỉ có đến vậy mà không fill đầy một segment thì chẳng lẽ OS cứ đợi mãi? Không, cứ mỗi khi application thực hiện một send (write) syscall, thì syscall này sẽ làm nhiệm vụ fill segment, và đến khi nó không còn data nữa thì nó sẽ bắt OS đóng gói TCP và gửi đi.
- Nếu data stream nhiều hơn một TCP segment, thì một segment sẽ bị filled đầy trước khi data stream kết thúc, dẫn đến việc OS tiến hành đóng gói và gửi segment đó đi mà không cần application phải nhắc nhở. Việc nhắc nhở chỉ xuất hiện sau khi toàn bộ data stream đã kết thúc.
- Để thể hiện sự nhắc nhở này, OS set PUSH flag trong TCP option của segment cuối trong data stream. Còn các segments trước đó của cùng một data stream thì có PUSH flag unset.

Như vậy, wireshark nhận biết sự khác nhau giữa một TCP segment hoàn chỉnh và một fragmented segment qua PUSH flag.

Trust that helps. 

---> Như vậy một fragmented segment cuối cùng trong data stream và một segment hoàn chỉnh đều được set PUSH flag.
---> Vậy để phân biệt fragmented segment cuối cùng trong data stream và segment hoàn chỉnh thì phải dựa vào các trường khác?
[Up] [Print Copy]
  [Question]   Hỏi về cách phân tích của Ethereal ? 03/06/2009 12:13:07 (+0700) | #18 | 182690
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]
@zerozeroone: một câu hỏi hay. Tuy nhiên, theo hiểu biết của mình thì không có sự khác nhau nào để có thể phân biệt nếu mang 2 packets của 2 dạng đó ra so sánh với nhau.
Mind your thought.
[Up] [Print Copy]
  [Question]   Hỏi về cách phân tích của Ethereal ? 03/06/2009 23:12:37 (+0700) | #19 | 182705
Mr.Khoai
Moderator

Joined: 27/06/2006 01:55:07
Messages: 954
Offline
[Profile] [PM]
Anh quanta chuyên lục các bài cũ nhé.

Trả lời anh quanta, TCP checksum offload là một feature của NIC (hardware) để tiến hành tính checksum cho TCP ngay khi TCP segment được copy từ memory vào NIC buffer để chuyển đi. Tính bằng hardware bao giờ cũng nhanh hơn software.

Anh chú ý wireshark chỉ nhận ra TCP checksum offload cho các gói tin từ localhost gửi đi ra. Và, mình cũng phải xác nhận được Wireshark, hay các sniffer nói chung sniff ở tầng nào: Code:
[ app    ]
[ net    ]
[ trans  ]   <  sniffers      >
[ d-link ]-- [ BPF  (promisc. ]
[ phis.  ]


Theo em biết, sau khi physical layer nhận được thông tin nào đó, nó sẽ kiểm tra xem nó có đang ở trong promiscuous mode hay không. Nếu không có, nó sẽ tiến hành logic: check dst. MAC addr, và FCS. Nếu có, nó bỏ qua các bước logic trên và chuyển dữ liệu qua data link layer. Chính data link sẽ tiến hành kiểm tra xem có application nào open một Berkeley Packet Filter hay không. Mỗi BPF sẽ nhận được một bản copy của gói tin. Tương tự, chính data link layer sẽ cho application một bản copy cho các gói tin đi ra ngoài.

Wireshark sử dụng BPF, thông qua libpcap trên linux (?) nên đương nhiên không thể thấy checksum chính xác được tính ở tầng physical.

Nếu checksum có lỗi, wireshark không cần kiểm tra xem TCP segment đó là cái gì. Nếu check sum không có lỗi, wireshark mới tiến hành mò xem TCP segment đó thuộc về cái gì.


StartGhost,

TCP có segmentation không nhỉ. Cứ nghĩ chỉ có IP là có fragmentation. Nếu vậy, hai field để xách định fragmentation sẽ là: MF (more fragment bit) và Fragmentation offset.

1. Nếu MF == 0, Frag. offset == 0: Đây là một gói IP hoàn chỉnh (hoặc là một TCP segment nằm trong một gói IP hoàn chỉnh)
2. Nếu MF == 1, Frag. offset == 0: Đây là segment đầu tiên của một IP packet.
3. Nếu MF == 0, Frag. offset != 0: Đây là segment cuối cùng của một IP packet.
4. Nếu MF == 1, Frag. offset != 0: Đây là một segment nào đó ở khoản giữa của một IP packet (đã bị segment).

Mỗi gói IP có một TCP segment nằm bên trong, nên mới có vụ "TCP Segment of a reassembled PDU".

Còn thông tin về phần Continuation or Non-HTTP traffic thì wireshark chỉ hiển thị khi HTTP traffic (trên port 80) ở dạng binary thay vì toàn là text (hình ảnh, phim, applet, flast vân vân). Mình thử chạy HTTPS trên port 80 thì hình như cũng có thông báo tương tự.

khoai
[Up] [Print Copy]
  [Question]   Hỏi về cách phân tích của Ethereal ? 04/06/2009 10:53:44 (+0700) | #20 | 182749
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]

Mr.Khoai wrote:
TCP có segmentation không nhỉ. Cứ nghĩ chỉ có IP là có fragmentation. Nếu vậy, hai field để xách định fragmentation sẽ là: MF (more fragment bit) và Fragmentation offset.

1. Nếu MF == 0, Frag. offset == 0: Đây là một gói IP hoàn chỉnh (hoặc là một TCP segment nằm trong một gói IP hoàn chỉnh)
2. Nếu MF == 1, Frag. offset == 0: Đây là segment đầu tiên của một IP packet.
3. Nếu MF == 0, Frag. offset != 0: Đây là segment cuối cùng của một IP packet.
4. Nếu MF == 1, Frag. offset != 0: Đây là một segment nào đó ở khoản giữa của một IP packet (đã bị segment).

Mỗi gói IP có một TCP segment nằm bên trong, nên mới có vụ "TCP Segment of a reassembled PDU".
 

MF và Fragementation offset chỉ dùng cho IP fragmentation thôi, thế nên chúng không thể dùng để phân biệt giữa một TCP segment nằm độc lập và một TCP segment cuối cùng.

Tại sao? Bởi vì trong TCP cũng không có khái niệm segment fragmentation. Trong cái câu "TCP segment of a reassembled PDU", thì cái từ PDU này không phải chỉ IP packet, cũng không phải chỉ TCP segment, mà chính là để chỉ một data unit của application layer protocol, ví dụ như một HTTP POST request, hoặc một HTTP reply.

Một PDU của HTTP có thể lớn, và nó phải bao gồm nhiều TCP segments. Chính vì vậy, cái bị fragmented không phải là TCP segment, mà chính là HTTP request/reply, rồi bị chia ra nhiều TCP segments. Trong số segments đó, cái cuối cùng có PUSH flag set để đảm bảo 2 mục đích đã đề cập ở trên.

Mr.Khoai wrote:

Còn thông tin về phần Continuation or Non-HTTP traffic thì wireshark chỉ hiển thị khi HTTP traffic (trên port 80) ở dạng binary thay vì toàn là text (hình ảnh, phim, applet, flast vân vân). Mình thử chạy HTTPS trên port 80 thì hình như cũng có thông báo tương tự. 

Như đã nói ở trên, "Continuation or Non-HTTP traffic" xảy ra trong các trường hợp sau:
- Một trong 2 ports là 80 (HTTP), và TCP checksum bị sai.
- Một trong 2 ports là 80 (HTTP), và wireshark không thể interpret nổi cấu trúc của HTTP message, ví dụ như khi không có HTTP header, như trong trường hợp Mr.Khoai sử dụng HTTPS trên port 80.
Mind your thought.
[Up] [Print Copy]
  [Question]   Hỏi về cách phân tích của Ethereal ? 05/06/2009 13:05:14 (+0700) | #21 | 182827
Mr.Khoai
Moderator

Joined: 27/06/2006 01:55:07
Messages: 954
Offline
[Profile] [PM]
StartGhost,

Đúng rồi, khoai đã không xem thật kỹ. Cái TCP segment mà wireshark thông báo không liên quan đến IP segment, mà là liên quan đến TCP stream thuộc về một application nào đó.

khoai
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|