[Question] Hỏi về quá trình phân mảnh gói tin trong mô hình TCP/IP |
11/12/2012 18:24:35 (+0700) | #1 | 271741 |
|
quangteospk
Member
|
0 |
|
|
Joined: 20/10/2009 04:05:30
Messages: 123
Offline
|
|
Thân chào mọi người.
Em đã đọc và tìm hiểu kỹ về mô hình TCP/IP nhưng có vài điểm sau đây em vẫn chưa hiểu rõ được. Mong nhận đc giúp đỡ từ mọi người.
1. Em đọc trong một tài liệu tiếng Việt có gì. Tầng Transport đảm nhiệm chức năng chia các gói tin lớn thành các gói tin nhỏ trước khi truyền đi, đánh số và đảm bảo truyền đúng thứ tự (kiểm soát lỗi).
Nghĩa là:
[application data ] -> [header + tcp segment 1], [header + tcp segment 2], [header + tcp segment 3]
Em tạm gói quá trình này là Segmentation. Vấn đề em chưa rõ là kích thước tối đã của mỗi TCP Segment này là bao nhiêu. Có phải gía trị đó là MSS (TCP Maximum Segment Size) không ạ.
Nếu vậy chỗ này em tạm hiểu kích thước tối đa là 1460 bytes (RFC1323 0) hoặc 1448 bytes (RFC1323 1).
2. Tiếp xuống tầng Internet, có tiếp một quá trình phân mảnh nữa. Đó là Ip Fragmention.
Quá trình này là do gói dữ liệu ở tầng Internet có kích thước tối đa là 65.535 bytes trong khi khung Ethernet có kích thước tối đa là MTU 1500 bytes.
Vấn đề của em là:
1. Tại sao kích thước tối đa ở tầng Transport là MSS là 1460 bytes mà dưới mô tả ở tầng Internet lại nói kích thước tối đa lại lên tới 65.535 bytes ạ.
Theo em thì gắn thêm 20 bytes TCP Header + 20 bytes IP Header thì kích thước cũng không tới mức đó, vậy tại sao lại có quá trình phân mảnh đầu tiên này và kích thước tối đa thực sự của TCP Segment là bao nhiêu?
2. Quá trình IP Fragmentation được hiện trước hay sau khi gắn IP Header? Theo em hiểu thì quá trình này thực thi sau khi gắn IP Header, kiểm tra nếu > MTU thì phân mảnh.Nhưng lại vướng một vấn đề đó là nếu fragmention sau, thì tất cả các "mảnh" đều có phần IP Header.
3. Hai quá trình này khác nhau như thế nào và tại sao lại phải có 2 quá trình cùng phân mảnh một gói tin lớn -> nhỏ như vậy?
Mong giải đáp từ phía các anh chị.
|
|
Jazz |
|
|
|
[Question] Hỏi về quá trình phân mảnh gói tin trong mô hình TCP/IP |
21/04/2013 22:55:25 (+0700) | #2 | 275124 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
Chủ đề hay nhưng không thấy ai tham gia nên mình đành kéo lên vậy.
quangteospk wrote:
1. Em đọc trong một tài liệu tiếng Việt có gì. Tầng Transport đảm nhiệm chức năng chia các gói tin lớn thành các gói tin nhỏ trước khi truyền đi, đánh số và đảm bảo truyền đúng thứ tự (kiểm soát lỗi).
Nghĩa là:
[application data ] -> [header + tcp segment 1], [header + tcp segment 2], [header + tcp segment 3]
Em tạm gói quá trình này là Segmentation. Vấn đề em chưa rõ là kích thước tối đã của mỗi TCP Segment này là bao nhiêu. Có phải gía trị đó là MSS (TCP Maximum Segment Size) không ạ.
TCP segment nói chung thì bao gồm cả header, nên mình nghĩ dùng từ payload thì chính xác hơn.
quangteospk wrote:
Nếu vậy chỗ này em tạm hiểu kích thước tối đa là 1460 bytes (RFC1323 0) hoặc 1448 bytes (RFC1323 1).
Đấy là của Ethernet. Còn các protocols khác (FDDI, Token Ring, PPP, ...) ở tầng Data Link thì sao?
quangteospk wrote:
2. Tiếp xuống tầng Internet, có tiếp một quá trình phân mảnh nữa. Đó là Ip Fragmention.
Quá trình này là do gói dữ liệu ở tầng Internet có kích thước tối đa là 65.535 bytes trong khi khung Ethernet có kích thước tối đa là MTU 1500 bytes.
Vấn đề của em là:
1. Tại sao kích thước tối đa ở tầng Transport là MSS là 1460 bytes mà dưới mô tả ở tầng Internet lại nói kích thước tối đa lại lên tới 65.535 bytes ạ.
Theo em thì gắn thêm 20 bytes TCP Header + 20 bytes IP Header thì kích thước cũng không tới mức đó, vậy tại sao lại có quá trình phân mảnh đầu tiên này?
Bởi vì dữ liệu từ tầng trên gửi xuống quá to, tầng TCP không thể nhét hết vào 1 segment để gửi xuống tầng dưới được.
quangteospk wrote:
và kích thước tối đa thực sự của TCP Segment là bao nhiêu?
2^16 - 1 = 65535
Với IPv4, thì maximum payload = 65535 - 20 - 20 = 65495 bytes
quangteospk wrote:
2. Quá trình IP Fragmentation được thực hiện trước hay sau khi gắn IP Header? Theo em hiểu thì quá trình này thực thi sau khi gắn IP Header, kiểm tra nếu > MTU thì phân mảnh.
Đúng rồi.
quangteospk wrote:
Nhưng lại vướng một vấn đề đó là nếu fragmention sau, thì tất cả các "mảnh" đều có phần IP Header.
Chính xác. Thế nên ở đây mới có một số lượng bytes dôi ra bằng:
(number of fragments - 1) * 20 bytes
(IP header của fragment đầu tiên được copied từ original IP header rồi)
Bạn có thể test bằng cách:
- chạy tcpdump
Code:
tcpdump -vv -s0 -i wlan0 ip host 192.168.0.1 -w icmpipfrag.pcap
- rồi ping đến gateway với packet size > 2 lần MTU xem:
Code:
ping -c 4 -s 3500 192.168.0.1
quangteospk wrote:
3. Hai quá trình này khác nhau như thế nào và tại sao lại phải có 2 quá trình cùng phân mảnh một gói tin lớn -> nhỏ như vậy?
IP fragmentaion có vấn đề gì không? Có phải lúc nào nó cũng xảy ra không? Làm cách nào để tránh? |
|
Let's build on a great foundation! |
|
|
|
[Question] Hỏi về quá trình phân mảnh gói tin trong mô hình TCP/IP |
22/04/2013 09:43:40 (+0700) | #3 | 275128 |
nangchieucali
Member
|
0 |
|
|
Joined: 16/12/2012 21:38:11
Messages: 7
Offline
|
|
Theo mình nghĩ kích thước của các TCP segment phụ thuộc vào các chuẩn: Ethernet, IEEE 802.2/802.3, FDDI, Hyperchannel... ở tầng Datalink ? (và giá trị này thay đổi tuỳ theo payload của mỗi gói tin)
MTU là Maximum Transmission Unit, giá trị quy định tối đa có bao nhiêu bytes được chứa trong một gói tin bao gồm header, thông tin trải từ link layer trở lên. Nếu gói tin quá giới hạn MTU thì nó phải được bẻ nhỏ ra thành nhiều mảng (fragmentation). Ethernet có MTU là 1500 bytes tối đa cho mỗi mảng, IEEE 802.2/802.3 có MTU là 1492 tối đa cho mỗi mảng, FDDI (optic fibre) có MTU là 4352 và tối đa MTU có thể đạt được là 65535 cho Hyperchannel
ví dụ: Giả sử Ethernet có MTU là 1500 và gói tin có độ dài là 1550 chẳng hạn, nó phải được "tách" ra để tiếp tục gởi phần còn lại trên gói tin kế tiếp. |
|
|
|
|
[Question] Hỏi về quá trình phân mảnh gói tin trong mô hình TCP/IP |
22/04/2013 19:25:41 (+0700) | #4 | 275143 |
bino1810
Member
|
0 |
|
|
Joined: 10/02/2012 10:38:28
Messages: 61
Location: /home/cuonglm
Offline
|
|
Bởi vì dữ liệu từ tầng trên gửi xuống quá to, tầng TCP không thể nhét hết vào 1 segment để gửi xuống tầng dưới được
Em thấy cái này chưa đúng lắm. MSS sẽ được quyết định trong quá trình bắt tay 3 bước, hay còn gọi là "MSS negotiation". Nếu nói dữ liệu tầng trên gửi xuống quá to thì cần chỉ rõ là quá to so với MSS của computer hay communications device.
@quangteospk:
- MSS và Fragmentation khác nhau nhiều về bản chất. Có thể hiểu đơn giản rằng MSS thì host có thể tự quyết định được ( tự set ) được, còn Fragmentation thì không ( chỉ set được bit - có hay không - còn phân mảnh thành bao nhiêu bytes 1 gói tin thì không). Ví dụ:
Code:
A ---- Router ---- Router ---- B
A gửi cho B gói tin có kích thước 1200 bytes. Đầu tiên, quá trình bắt tay 3 bước. A "bảo" B rằng tao có thể nhận gói tin có MSS là 600 bytes, B "bảo" rằng tao chỉ nhận được 400 --> MSS sẽ là 400 bytes.
+ Giả sử MTU của cả 3 mạng đều là 1500 bytes. Vậy trường hợp này không có Fragmentation, A gửi đến B cần 3 gói tin.
+ Giả sử mạng nối router với router chỉ có MTU là 300. Lúc này MSS vẫn là 400 bytes, nhưng quá trình gửi gói tin vẫn bị phân mảnh, vì MTU của mạng ở giữa chỉ là 300 bytes. A gửi đến B cần 6 gói tin.
- VÌ vậy nên một kỹ thuật khác ra đời là "Path MTU Discover". Bạn đọc thêm về "Path MTU Discover" để hiểu rõ hơn.
|
|
There is more than one way to do it! |
|
|
|
|
|
|
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|
|
|