<![CDATA[Latest posts for the topic "Hỏi về quá trình phân mảnh gói tin trong mô hình TCP/IP"]]> /hvaonline/posts/list/31.html JForum - http://www.jforum.net Hỏi về quá trình phân mảnh gói tin trong mô hình TCP/IP /hvaonline/posts/list/43936.html#271741 /hvaonline/posts/list/43936.html#271741 GMT Hỏi về quá trình phân mảnh gói tin trong mô hình TCP/IP

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?]]>
/hvaonline/posts/list/43936.html#275124 /hvaonline/posts/list/43936.html#275124 GMT
Hỏi về quá trình phân mảnh gói tin trong mô hình TCP/IP /hvaonline/posts/list/43936.html#275128 /hvaonline/posts/list/43936.html#275128 GMT Hỏi về quá trình phân mảnh gói tin trong mô hình TCP/IP 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. ]]>
/hvaonline/posts/list/43936.html#275143 /hvaonline/posts/list/43936.html#275143 GMT