TCP dùng một định dạng cho tất cả các thông điệp, bao gồm các thông điệp có chứa dữ liệu, ack và thông điệp bắt tay 3bên để khởi tạo hoặc kết thúc một kết nối. TCP dùng thuật ngữ phân đoạn (segment) để chỉ một thông điệp: Hình 20.6 minh hoạ định dạng của phân đoạn đó.
Hình 31. định dạng một phân đoận TCP. Mỗi thông điệp gửi từ TCP trên một máy đến TCP trên máy khác dùng định dạng này bao gồm cả dữ liệu và acknowledgement
Để hiểu định dạng của phân đoạn, cần nhớ lại rằng kết nối TCP có chứa hai luồng dữ liệu theo hai hướng ngược nhau. Nếu ứng dụng tại mỗi bên cùng truyền dữ liệu đồng thời, TCP có thể gửi một phân đoạn có chứa acknowledgement cho dữ liệu đến, một thông báo cửa sổ chỉ ra lượng cùgn đệm còn trống cho dữ liệu đến và dữ liệu đi. Do vậy, một vài trường trong phân đoạn để chỉ luồng dữ liệu truyền một hướng, trong khi các trường khác chỉ luồng dữ liệu truyền theo chiều ngược lại.
Khi một máy tính gửi đi một phân đoạn, trường ACKNOWLEDGEMENT NUMBER và trường WINDOW chỉ dữ liệu truyền đến: trường ACK NUMBER chỉ ra số thứ tự của dữ liệu nhận được và trường WINDOW chỉ ra vùng trống còn lại của vùng đệm. Trường SEQUENCE NUMBER chỉ dữ liệu đi. Nó chứa số thứ tự của dữ liệu được truyền đi trong phân đoạn. Máy nhận dùng số thứ tự đó để sắp xếp lại các phân đoạn mà đến sai thứ tự và để tính số ack. Trường DESTINATION PORT xác định chương trình ứng dụng nào trên máy nhận sẽ nhận dữ liệu này, ngược lại trường SOURCE PORT xác nhận ứng dụng nào gửi dữ liệu đi. Cuối cùng trường CHECKSUM có chứa giá trị checksum của toàn bộ phân đoạn TCP gồm phần header và dữ liệu.
44 trang |
Chia sẻ: oanh_nt | Lượt xem: 1337 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài Một số vấn đề khái quát về giao thức TCP/IP, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
header có chứa các thông tin điều khiển nơi gửi và cách gửi đi IP Datagram.
Khối lượng dữ liệu có trong một datagram là không cố định. Máy gửi tin chọn lựa lượng dữ liệu thích hợp cho từng mục đích cụ thể. Ví dụ, một ứng dụng truyền đi sự bấm phím qua mạng có thể đặt mỗi sự gõ phím trong một datagram, trong khi một ứng dụng truyền một file lớn có thể gửi đi một datagram lớn. Điều quan trọng là:
Kích thước của một datagram được quyết định bởi ứng dụng mà gửi dữ liệu đi. Việc cho phép kích thước của các datagram thay đổi làm cho IP có thể thích nghi với các ứng dụng khác nhau.
Trong phiên bản hiện tại của IP, một datagram có thể chứa ít là 1 byte dữ liệu hoặc nhiều nhất là 64Kb dữ liệu gồm cả phần header. Trong hầu hết các datagram, phần header nhỏ hơn nhiều so với phần dữ liệu. Để hiểu tại sao chúng ta cần thiết xem xét đến chi phí cho việc truyền dữ liệu. Giống như frame header dùng trong mạng vật lý, một datagram header biểu diễn toàn bộ – trong khi nó chiếm các byte header truyền tin, một mạng không thể truyền đi một dữ liệu của người sử dụng. Bởi vì kích thước của datagram header là cố định, nên gửi đi các datagram lớn kết quả là nhiều byte dữ liệu hơn được truyền đi trên một đơn vị thời gian (thông lượng lớn hơn).
Tương tự như một frame header, một datagram header có chứa các thông tin để định tuyến datagram truyền qua liên mạng. Ví dụ, header có chứa địa chỉ của máy tính gửi datagram cũng như là địa chỉ của máy tính mà datagram gửi đến. Các địa chỉ trong trong datagram header khác với các địa chỉ sử dụng trong frame header – một datagram có chứa các địa chỉ IP, trong khi một frame có chứa địa chỉ phần cứng.
Tóm lại: một gói tin gửi qua mạng TCP/IP gọi là IP Datagram. Mỗi datagram gồm có hai phần là header và phần dữ liệu. Địa chỉ nguồn và đích trong datagram là các địa chỉ IP.
II. Truyền tiếp một IP Datagram
Chúng ta đã nói rằng các datagram truyền đi qua liên mạng theo một đường dẫn bắt đầu từ máy nguồn qua các router và đến máy đích. Mỗi router dọc theo đường đi nhận được datagram đó, lấy ra địa chỉ đích từ header, và sử dụng địa chỉ đích để quyết định máy tiếp nào để gửi datagram đó đến. Router sau đó sẽ chuyển tiếp datagram đến máy tiếp đó, có thể là máy tính đích hoặc router khác.
Để tạo ra việc lựa chọn máy tiếp một cách hiệu quả và dễ dàng cho con người hiểu được sự tính toán, mỗi router IP lưu giữ thông tin trong một bảng định tuyến. Một bảng định tuyến phải được khởi tạo khi router khởi động, và phải được cập nhật nếu như cấu hình mạng thay đổi hoặc phần cứng bị trục trặc.
Bảng định tuyến có các dòng và mỗi dòng gồm có đích và máy tiếp dùng để đến được đích. Hình 14 chỉ ra nội dung của bảng định tuyến của một trong 3 router được sử dụng để liên kết 4 mạng trong một liên mạng nhỏ.
R1
R2
R3
Net 4
Net 3
Net 2
Net 1
(a)
Đích
Máy tiếp
Net 1
R1
Net 2
Truyền trực tiếp
Net 3
Truyền trực tiếp
Net 4
R3
(b)
Hình 14(a) ví dụ liên mạng có 3 router nối kết 4 mạng vật lý, (b) bảng định tuyến của router R2. Mỗi dòng của bảng liệt kê mạng đích và máy tiếp theo một đường dẫn để đến mạng đó.
Như trên hình vẽ ta thấy, router r2 nối kết trực tiếp với các mạng Net 2 và Net 3. Do đó, R2 có thể truyền một datagram đến bất kỳ máy tính đích này nối với hai mạng đó. Khi một datagram muốn truyền đến mạng 4, R2 phải truyền datagram đó đến router R3.
Mỗi đích liệt kê trong bảng định tuyến là một mạng, không phải là một máy trạm. Sự phân biệt này là quang trọng bởi vì một liên mạng có thể có nhiều gấp 1000 lần máy trạm có trong các mạng này. Do vậy, sử dụng các mạng là các đích trong bảng định tuyến góup cho kích thước của chúng nhỏ hơn.
Tóm lại: Bởi vì mỗi đích trong bảng định tuyến tương ứng với 1 mạng, số dòng trong bảng tỷ lệ với số mạng trong một liên mạng.
III. Địa chỉ IP và các dòng bảng định tuyến
Trong thực tế, một bảng định tuyến IP thường phức tạp. Thứ nhất, trường đích trong mỗi dòng có chứa phần đầu mạng của mạng đích. Thứ hai, một trường thêm vào trong mỗi dòng có chứa mặt nạ địa chỉ (address mask) để chỉ ra số bit của đích tương ứng với phần đầu mạng. Thứ ba, một địa chỉ Ip sử dụng trong trường máy tiếp để biểu diễn mỗi router. Hình sau minh hoạ một bảng định tuyến.
128.1.0.9
40.0.0.8
30.0.0.7
128.1.0.0
40.0.0.0
192.4.10.0
30.0.0.0
192.4.10.9
128.1.0.8
40.0.0.7
(a)
Đích
Mặt nạ
Máy tiếp
30.0.0.0
255.0.0.0
40.0.0.7
40.0.0.0
255.0.0.0
Truyền trực tiếp
128.1.0.0
255.255.0.0
Truyền trực tiếp
192.4.10.0
255.255.255.0
128.1.0.9
(b)
Hình 15(a) liên mạng có 4 mạng và 3 router và có các địa chỉ IP thiết lập cho các nối ghép router,15 (b) bảng định tuyến của router trung tâm. Mỗi dòng trong bảng liệt kê các đích, mặt nạ, và máy tiếp sử dụng để tới đích.
Hai mạng dâu tiên trong hình vẽ có địa chỉ phần đầu thuộc lớp A, mạng thứ 3 thuộc lớp B và mạng thứ 4 thuộc lớp C. Mỗi router được thiết lập hai đại chỉ IP , mỗi địa chỉ thuộc một nối ghép. Ví dụ, router mà kết nối mạng 30.0.0.0 với mạng 40.0.0.0 có hai địa chỉ là 30.0.0.7 và 40.0.0.7. Mặc dù địa chỉ phần sau là giống nhau cho cả hai nối ghép của router, nhưng IP cũng không đòi hỏi phải cần thiết như vậy – quảng trị mạng có thể tự do thiết lập giá trị địa chỉ khác nhau cho mỗi nối ghép.
IV. Trường mặt nạ và truyền tiếp datagram
Quá trình sử dụng bảng định tuyến để chọn lựa máy tiếp cho mỗi datagram được gọi là sự định tuyến (routing) hoặc sự truyền tiếp (forwding). Trường mặt nạ (Mask) trong mỗi dòng bảng định tuyến sử dụng để lấy ra địa chỉ phần mạng trong quá trình tìm kiếm. Để hiểu mặt nạ được sử dụng như thế nào, tưởng tượng rằng khi phần mềm định tuyến được đưa đến một datagram để truyền tiếp. Cũng giả sử rằng datagram đó cũng có địa chỉ IP đích là D. Phần mềm định tuyến phải tìm một dòng trong bảng để tìm ra máy tiếp cho D. Để làm điều này, phần mềm xem xét mỗi dòng trong bảng bằng việc sử dụng mặt nạ trong mỗi dòng để tìm ra phần đầu địa chỉ D và so sánh kết quả với trường đích trong mỗi dòng. Nếu hai kết quả bằng nhau, datagram sẽ được truyền tiếp đến máy tiếp trong dòng đó.
Mặt nạ bit giúp cho việc lấy ra phần đầu địa chỉ dễ dàng – phần mềm sẽ thực hiện phép logic and giữa địa chỉ đích D của datagram và giá trị mặt nạ. Do vậy sự tính toán để xem xét dòng thứ IP Datagram trong bảng có thể được diễn tả như sau:
If ((Mask[i] & D) == Destination[i]) forward to NextHop[i];
Trong ví dụ trên, giả sử rằng datagram cần chuyển đến địa chỉ 192.4.10.3 và nó đang ở router có bảng định tuyến trong hình 16.3. Hơn nữa giả sử phần mềm tìm kiếm trong bảng tuần tự. Dòng đầu không thoả mãn bởi 255.0.0.0 & 192.4.10.3 không bằng 30.0.0.0. Sau khi kiểm tra không thoả mãn dòng 2 và 3, cuối cùng phần mềm định tuyến sẽ chọn được máy tiếp là 128.1.0.9 bởi vì 255.255.255 & 192.4.10.3 == 192.4.10.0.
V. Các địa chỉ của đích và của máy tiếp
Có mối liên hệ gì giữa địa chỉ đích trong header của datagram và địa chỉ của máy tiếp mà datagram được chuyển tới? Trường DESTINATION IP ADDRESS trong datagram có chứa địa chỉ của đích cuối cùng. Khi một router nhận một datagram, router lấy ra địa chỉ đích D và dùng nó để tính toán địa chỉ của router tiếp theo mà datagram cần được gửi đến là N. Mặc dù datagram được gửi trực tiếp đến N, header trong datagram vẫn chứa địa chỉ đích D. Nói cách khác:
Địa chỉ đích trong datagram header luôn là địa chỉ đích cuối cùng. Khi một router truyền tiếp một datagram đến router khác, địa chỉ của máy tiếp không xuất hiện trong header của datagram.
Mặc dù tất cả các định tuyến đều được tính toán sử dụng địa chỉ IP. Saukhi tính địa chỉ của máy tiếp N, phần mềm IP sử dụng địa chỉ gắn kết đã nói trong phần trước để chuyển đổi N sang địa chỉ phần cứng tương ứng để truyền đi. Trong tiếp theo, chúng ta sẽ học về cách datagram được truyền qua mạng vật lý.
VI. Truyền đi với nỗ lực hết mình (Best-effort Delivery)
Cùng với việc đưa ra định dạng của một datagram cho liên mạng, giao thức liên mạng cũng đưa ra ngữ nghĩa của sự truyền thông, và dùng thuật ngữ nỗ lực hết sức (best-effort) để chỉ một dịch vụ mà nó đưa ra. Một cách trực quan các chuẩn chỉ ra mặc dù IP nỗ lực hết sức để truyền đi mõi datagram, Ip không đảm bảo rằng nó sẽ quản lý được hết các sự cố như là:
Sự trùng lặp datagram
Sự truyền bị trễ hoặc sai thứ tự
Sự sai lệch dữ liệu
Sự mất các datagram
Cần có các lớp phần mềm giao thức khác để quản lý các sự cố này.
Dường như có vẻ hơi lạ khi cho rằng Ip có thể bị xảy ra những lỗi này. Tuy nhiên, có mộtl ý do quan trọng: mỗi lớp của phần mềm giao thức có trách nhiệm trong một khía cạnh truyền thông nhất định., và IP không thể quản lý hết các lỗi này. Hơn nữa, bởi vì các mạng vật lý có thể gây ra các lỗi như vậy, nên phần mềm mà dùng IP phải có trách nhiệm giải quyết các sự cố đó.
VII . Định dạng header của IP datagram
Hình sau minh hoạ các trường của một IP datagram header, bao gồm trường SOURCE IP ADDRESS chứa địa chỉ Internet của máy gửi, và DESTINATION IP ADDRESS chứa địa chỉ internet của máy nhận, và trường TYPE chỉ ra kiểu dữ liệu.
Hình 16. Cấu trúc gói IP
VERS H.LEN SERVICE TYPE
TOTAL LENGTH
FLAGS FRAGMENT OFFSET
TIME TO LIVE TYPE HEADER CHECKSUM
DESTINATION IP ADDRESS
IP OPTIONS (may br omitted) PADDING
SOURCE IP ADDRESS
BEGIN NING OF DATA
Các trường của Ip datagram header. Cả địa chỉ nguồn và đích là địa chỉ internet.
Mỗi trường của IP datagram header có kích thước cố định. Datagram có 4 bit đầu tiên là phiên bản của giao thức (phiên bản hiện tại là 4) và 4 bit chiều dài của header để chỉ ra số 32 bit trong phần header. Trường SERVICE TYPE có chứa giá trị để chỉ ra datagram truyền qua mạng với độ trễ nhỏ nhất hay là với thông lượng lớn nhất; một router biết nhiều định tuyến để đến đích và dùng giá trị này để chọn lựa các định tuyến. Trường TOTAL LENGTH là giá trị nguyên 16 bit để chỉ ra tổng số byte của datagram gồm cả phần data và header
Trường TIME TO LIVE để ngăn không cho datagram truyền vô tận trong mạng khi nó rơi vào đường vòng lặp; các đường dẫn đó có thể xuất hiện khi phần mềm bị hoạt động sai hoặc khi việc cấu hình nhầm định tuyến. Máy gửi khởi tạo giá trị TIME TO LIVE là một giá trị số nguyên từ 1 đến 255. Mỗi router nhận được datagram sẽ giảm giá trị của trường này đi 1. Nếu bộ đếm tới 0, datagram sẽ bị huỷ bỏ và thông báo lỗi sẽ được gửi đến máy nguồn.
Trường HEADER CHECKSUM kiểm tra các bit của header có bị thay đổi khi truyền. Máy gửi tính toán tổng số 1 trong tất cả các giá trị 16 bit trong header bao gồm cả trường checksum, và sau đó lưu nó vào trong trường này. Máy nhận cũng thực hiện tính toán tương tự và thực hiện so sánh với giá trị trong trường này.
Để cho kích thước của datagram nhỏ, IP đưa ra một lựa chọn có thể có. Khi datagram IP không có lựa chọn, trường H. LEN có giá trị là 5 và header kết thúc sau trường DESTINATION ADDRESS. Bởi vì chiều dài của header được xác định bằng bội số của 32 bit, nếu chọn lựa không kết thúc đúng giá trị là 32 bit, PADDING chứa các bit 0 thêm vào header để đảm bảo là bội của 32 bit.
Phần V
Sự đóng gói IP, phân đoạn và hợp lại.
I. Sự truyền đi các datagram và các frame
Khi một máy trạm hoặc router xử lý một datagram, phần mềm IP trước tiên lựa chọn máy tiếp mà datagram phải truyền tới N và sau đó truyền datagram đó qua mạng vật lý đến N. Nhưng không may là phần cứng mạng không hiểu được định dạng của các datagram và địa chỉ Internet. Do vậy, mỗi công nghệ phần cứng đưa ra một định dạng frame và một cơ chế địa chỉ riêng; phần cứng chỉ chấp nhận và truyền đi cac gói tin mà gắn liền với định dạng frame cụ thể và sử dụng cơ chế địa chỉ phần cứng tương ứng. Hơn nữa,bởi vì một liên mạng gồm có nhiều mạng vật lý không đồng bộ nên định dạng của khung tin truyền qua mạng này khác so với định dạng của frame truyền qua mạng trước đó.
II. Sự đóng gói
Một datagram có thể được truyền qua một mạng vật lý như thế nào mặc dù nó không hiểu được định dạng của datagram đó? Câu trả lời nằm ở kỹ thuật gọi là đóng gói (encapsulation). Khi một IP Datagram được đóng gói trong một frame, toàn bộ datagram đó được đặt trong phần dữ liệu của frame. Phần cứng mạng coi các frame mà có chứa datagram giống hệt như các frame khác. Thực tế, phần cứng không kiểm tra hoặc thay đổi gì nội dùng của phần dữ liệu của frame. Hình sau minh hoạ khái niệm.
IP header
IP Data Area
FRAME DATA
FRAME HEADER
Hình 17
Hình 17.minh hoạ một IP Datagram được đóng gói trong một frame phần cứng. Toàn bộ datagram nằm trong phần dữ liệu của frame.
Làm thế nào để máy nhận biết được liệu vùng dữ liệu của frame đến là một IP Datagram hay là dữ liệu khác? Máy nhận và máy gửi phải thống nhất một giá trị dùng trong trường kiểu frame. Khi nó đặt một datagram trong một frame, máy gửi thiết lập trường kiểu của frame một giá trị đặc biệt dành riêng cho IP. Khi một frame đến mà có giá trị đặc biệt trong trường kiểu, máy nhận biết rằng vùng dữ liệu có chứa một IP Datagram.
Một frame mà mang một IP Datagram phải có địa chỉ đích như bình thường. Do đó, cùng với việc đặt một datagram vào trong cùng dữ liệu của frame, sự đóng gói cũng đòi hỏi máy gửi phải cung cấp địa chỉ vật lý của máy tiếp mà datagram cần gửi tới. Để tính ra địa chỉ thích hợp, phần mềm trong máy tính gửi phải thực hiện gắn kết địa chỉ . Sự gắn kết này để chuyển đổi địa chỉ IP của máu tiếp thành địa chỉ vật lý tương ứng mà sau đó dùng chúng làm địa chỉ đích trong frame header.
Tóm lại: một datagram được đóng gói trong một frame để truyền đi qua một mạng vật lý. Địa chỉ đích trong frame đó là địa chỉ của máy tiếp mà datagram cần gửi tới; địa chỉ đó nhận được bằng cách chuyển đổi địa chỉ IP của máy tiếp thành địa chỉ vật lý tương ứng.
III. Sự truyền tin qua liên mạng
Sự đóng gói áp dụng cho việc truyền tin tại một thời điểm. Sua khi máy gửi chọn được máy tiếp, máy gửi đóng gói datagram trong một frame và truyền nó đến máy tiếp qua mạng. Khi frame đến máy tiếp, phần mềm nhận chuyển lại IP Datagram và huỷ bỏ frame. Nếu datagram cần phải truyền tiếp đến mạng khác, một frame mới lại được tạo ra. Hình sau minh hoạ cách mà một datagram được đóng gói mà mở gói khi được truyền từ nguồn đến đích qua 3 mạng và 2 router.
Mỗi mạng có thể có một công nghệ phần cứng khác nhau do vậy mà định dạng frame cũng khác nhau.
Máy nguồn
Datagram
Header 1
Datagram
Net 1
Router 1
Datagram
Header 2
Datagram
Net 2
Router 2
Datagram
Net 3
Header 3
Datagram
Máy đích
Datagram
Hình 18
Một IP Datagram xuất hiện từng bước trong quá trình được truyền qua liên mạng. Mỗi khi nó truyền qua mạng vật lý nó được đóng gói vào một frame thích hợp của mạng đó.
Như trên hình vẽ, máy trạm và router lưu trữ một datagram trong bộ nhớ mà không có phần header thêm vào. Khi datagram truyền qua mạng vật lý, datagram được đóng gói trong một frame thích hợp với mạng đó. Kích thước của frame header xuất hiện trước datagram phụ thuộc vào công nghệ của mạng. Ví dụ, nếu mạng 1 là Ethernet, header của frame 1 là Ethernet header. Tương tự, nếu mạng 2 là mạng vòng FDDI, header của frame 2 là FDDI header.
Một quan sát quan trọng đó là các header frame không bị chồng lên nhau trong quá trình truyền một datagram. Trước khi một datagram được truyền qua mạng nhất định, datagram đó được đóng gói, thường là việc gắn thêm header vào đầu. Khi frame đến máy tiếp, datagram được lấy ra khỏi frame trước khi nó được định tuyến và đóng gói vào frame chuyển đi. Do vậy, khi datagram đến đích cuối cùng, frame mang datagram bị huỷ bỏ và datagram lại xuất hiện trở lại đúng với kích thước của nó khi được gửi đi.
Tóm lại: khi một datagram nằm trong một frame mạng đến, máy nhận lấy ra datagram đó từ phần dữ liệu của frame và huỷ bỏ frame header.
IV. Sự hợp lại
Quá trình tạo lại datagram gốc từ các phân đoạn gọi là sự tái hợp. Bởi vì mỗi phân đoạn bắt đầu với phần header giống với của datagram gốc, nên tất cả các phân đoạn có dùng một địa chỉ đích. Hơn nữa, phân đoạn mà chứa phần dữ liệu cuối cùng sẽ có một bit thêm vào được thiết lập trong header. Do vậy, máy nhận thực hiện việc tái hợp lại có thể biết được liệu các phân đoạn được truyền đến thành công hay không.
Một điều thú vị là giao thức liên mạng xác định rằng địa chỉ cuối cùng của máy trạm trong mọi phân đoạn đều giống nhau. Ví dụ, xem xét liên mạng trong hình 21 minh hoạ.
R1
Net 2 (MTU =1000)
Net 1 (MTU =1500)
H1
R2
H2
Net 3 (MTU =1500)
Hình 21. Một ví dụ của liên mạng trong đó các máy trạm có thể tạo ra các datagram mà đòi hỏi sự phân mảnh. Mỗi khi một datagram được phân mảnh, các phân mảnh đó đều được truyền tiếp đến đích cuối cùng, và tái hợp chúng lại.
Trong hình vẽ, máy trạm H1 gửi đi một datagram 1500 byte đến máy trạm H2, router R1 sẽ chia datagram thanh hai phân đoạn, mỗi cái sẽ được truyền tiếp đến R2. Router R2 không tái hợp csac phân đoạn mà nó sẽ dùng địa chỉ đích của mỗi phân đoạn để truyền tiếp chúng. Máy trạm cuối cùng, H2 tập hợp các phân đoạn và tái hợp chúng lại để tạo ra datagram gốc.
Việc yêu cầu địa chỉ đích cuối để tái hợp các phân đoạn có hai ưu điểm chính. Thứ nhất, nó giảm được lượng tin trạng thái trong mỗi router. Khi truyền tiếp một datagram, một router không cần biết liệu datagram đó là một phân mảnh hay không. Thứ hai, nó cho phép định tuyến thay đổi linh hoạt. Nếu một router ngay lập tức tái hợp các phân đoạn thì tất cả các phân đoạn phải đến router đó. Nhờ việc không tái hợp khi đến tận đích cuối cùng, giao thức liên mạng IP cho phép tự do truyền đi các phân đoạn của một datagram theo các định tuyến khác nhau.
V. Nhận dạng một datagram
Nhớ lại rằng IP không đảm bảo việc truyền đi. Do vậy, các phân đoạn có thể bị mất hoặc đến sai thứ tự. Hơn nữa, nếu một nguồn gửi đi nhiều datagram đến cùng một đích, các phân đoạn của các datagram có thể đến theo thứ tự khác nhau.
Vậy làm thế nào mà giao thức IP có thể tái hợp được các phân đoạn đến sai thứ tự? Mỗi máy gửi đều thiết lập một giá trị số nhận dạng duy nhất trong trường IDENTIFICATION của mỗi datagram đi. Khi một router thực hiện phân đoạn một datagram, router sẽ sao chép số nhận dạng trong mỗi phân đoạn. Máy nhận dùng số nhận dạng và địa chỉ Ip nguồn trong phân đoạn đến để xác định phân đoạn nào thuộc datagram nào. Hơn nữa, trường FRAGMENT OFFSET cũng cho máy nhận biết thứ tự các phân đoạn trong một datagram.
VI. Sự mất phân đoạn
Giao thức IP không đảm bảo sự truyền đi – nếu phân cứng gây ra mất các gói tin, một datagram hoặc phân đoạn được đóng gói trong đó sẽ bị mất. Khi tất cả các phân đoạn của một datagram đến, datagram sẽ được tái hợp lại. Tuy nhiên, khi có sự cố xảy ra với một hoặc nhiều phân đoạn của datagram đó, và phân đoạn đó có thể đến trễ hoặc bị mất. Mặc dù datagram đó không thể tái hợp lại nhưng máy nhận vẫn phải lưu các phân đoạn lại đề phòng trường hợp các phân đoạn chỉ do bị trễ.
Máy nhận không thể giữ các phân đoạn lâu bởi vì các phân đoạn sẽ chiếm dung lượng bộ nhớ của máy. Để tránh bị hết bộ nhớ, giao thức IP giới hạn thời gian lớn nhất có thể lưu trữ các phân đoạn. Khi một phân đoạn đầu tiên của một datagram đến, máy nhận bắt đầu tính giờ. Nếu tất cả các phân đoạn của datagram đến trước khi thời gian hết thời gian cho phép, máy nhận sẽ huỷ bỏ thời gian và tiến hành tái hợp datagram. Tuy nhiên, nếu hết thời gian trước khi tất các phân đoạn đến kịp, máy nhận sẽ huỷ bỏ toàn bộ phân đoạn đã nhận được.
Kết quả của đo thời gian để tái hợp của IP là tất cả hoặc không có gì: hoặc tất cả các phân đoạn đến và sự tái hợp thành datagram thành công, hoặc IP sẽ huỷ bỏ toàn bộ các phân đoạn nhận được. Đặc biệt không có cơ chế nào để cho máy nhận báo cho máy gửi biết là phân đoạn nào đã đến thành công. Sự thiết kế này là hoàn toàn nhạy cảm bởi máy gửi không biết được về sự phân đoạn. Hơn nữa, nếu máy gửi tiến hành truyền lại datagram đó, việc định tuyến cũng có thể khác điều đó có nghĩa là sự truyền lại không cần thiết phải truyền qua đúng định tuyến trước. Do vậy, không có điều gì đảm bảo rằng sự truyền lại datagram sẽ phân mảnh giống như cách nó đã làm trước đó.
Phần VI
Giao thức IP tương lai (IPv6)
Trong phần này chúng ta sẽ tập trung xem xét đến phiên bản mới của giao thức IP trong tương lai. Phần này bắt đầu bằng việc xem xét những thế mạnh và hạn chế của phiên bản giao thức IP hiện tại, sau đó chúng ta sẽ xem xét đến một cách tổng thể phiên bản IP mới mà IEIF đã để xuất ra nhằm thay thế phiên bản hiện thời. Phần này giải thích các đặc điểm của phiên bản hiện tại, và đưa ra các cách khắc phục các hạn chế của phiên bản hiện thời.
Sự thành công của giao thức IP
Phiên bản IP hiện thời đã đạt được những thành công không thể phủ nhận. Ip đã giúp cho liên mạng có thể hoạt động tốt trong việc điều khiển các mạng không đồng nhất, những sự thay đổi trong công nghệ phần cứng và sự tăng lên đáng kể về khoảng cách. Để khắc phục sự không đông nhất, IP đưa ra định dạng của gói tin đồng bộ (các IP Datagram) và cơ chế truyền các gói tin.
Phiên bản hiện tại của Ip cũng thích hợp với những thay đổi về công nghệ phần cứng. Mặc dù dữ liệu đó đã được đưa ra trước khi công nghệ mạng cục bộ trở nên phổ biến nhưng sự thiết kế chính lại được tiếp tục thực hiện tốt qua một vài thế hệ của công nghệ phần cứng. Ip bây giờ cũng được dùng trong các mạng mà đòi hỏi việc thực hiện một số công việc lớn nhanh hơn so với các mạng mà được dùng khi IP được thiết kế cho nó. Hơn nữa, một vài mạng hiện địa đưa ra kích thước của frame lớn hơn nhiều kích thước frame do Ip đưa ra. Quan trọng hơn, IP làm việc hiệu quả trên các mạng bởi vì nó ưu điểm là tăng được kích thước của frame.
I. Các đặc điểm của giao thức IPv6
Ipv6 giữa lại rất nhiều các đặc tính thiết kế mà đã thành công trong Ipv4. Giống như Ipv4, Ipv6 là không liên kết – mỗi datagram có chứa địa chỉ đích, và mỗi datagram được định tuyến một cách độc lập. Giống như Ipv4, header của datagram có chứ số lượng lớn nhất các máy tiếp mà datagram có thể qua trước khi bị huỷ bỏ. Hơn nữa, Ipv6 giữa lại hầu hết các đặc tính linh hoạt chung đã có trong chọn lựa của Ipv4.
Mặc dù giữ lại khá nhiều đặc tính cơ bản của phiên bản cũ, Ipv6 có những thay đổi chi tiết. Ví dụ, Ipv6 sử dụng địa chỉ lớn hơn và có toàn bộ phần định dạng header mới. Cuối cùng, Ipv6 dùng một dãy các header có chiều dài cố định để thực hiện các thông tin chọn lựa thay vì một header với trường tuỳ chọn chiều dài thay đổi của phiên bản trước.
Các đặc tính mới của Ipv6 có thể được nhóm lại thành 5 loại chính:
Kích thước địa chỉ: thay vì dùng địa chỉ 32 bit, mỗi địa chỉ của Ipv6 có chiều dài là 128 bit. Do vậy mà khoảng không gian địa chỉ đủ lớn để thích hợp với việc tiếp tục phát triển mạng Internet toàn cầu trong nhiều năm tới.
Định dạng của header: phần header của Ipv6 Datagram hoàn toàn khác so với header của Ipv4. Hỗu hết mọi trường trong header đều thay đổi; một vài cái được thay thế.
Các header mở rộng. Không giống như Ipv4 mà sử dụng một định dạng header với tất cả các datagram, Ipv6 mã hoá thông tin trong từng header riêng biệt. Một datagram bao gồm một header cơ sở, tiếp đến là không hoặc nhiều header mở rộng và cuối cùng là phần dữ liệu.
Hỗ trợ cho âm thanh và hình ảnh. Ipv6 gồm có cơ chế cho phép máy gửi và nhận thiết lập một đường truyền chất lượng cao thông qua phần cứng cơ sở và để kết hợp các datagram với được truyền đó. Mặc dù cơ chế đó chỉ dự định dùng cho các ứng dụng âm thanh và hình ảnh mà đòi hỏi hiệu suất cao, nhưng nó cũng có thể sử dụng để kết hợp các datagram với đường truyền chi phí thấp.
Giao thức có thể co dãn. không giống như Ipv4, Ipv6 không chỉ ra tất cả các đặc tính có thể của giao thức. Thay vào đó người thiết kế phải cung cấp một cơ chế cho phép máy gửi thêm các thông tin cần thiết vào một datagram. Cơ chế mở rộng này làm cho Ipv6 linh hoạt hơn so với Ipv4, và điều này có nghĩa là các đặc tính mới có thể được thêm vào thiết kế khi cần.
II. Định dạng Datagram của Ipv6
Như trên hình 22 minh hoạ, một Ipv6 Datagram bắt đầu với phần header cơ sở tiếp đến có thể không hoặc có nhiều các header mở rộng, và cuối cùng là phần dữ liệu.
Tuỳ chọn
Vùng dữ liệu
Header mở rộng N
...
Header mở rộng 1
Header cơ sở
Hình 22. mẫu chung một Ipv6 Datagram. Các header mở rộng là tuỳ chọn – datagram nhỏ nhất có header cơ sở tiếp đến là vùng dữ liệu.
Mặc dù đã minh hoạ cấu trúc chung của một datagram, nhưng các trường trong hình vẽ vẫn chưa được vẽ chi tiết. Đặc biệt, một vài header mở rộng có kích thước lớn hơn header cơ sở trong khi một vài header khác có thể nhỏ hơn. Hơn nữa, trong nhiều datagram, kích thước của vùng dữ liệu nhỏ hơn kích thước của các header.
Định dạng header cơ sở của Ipv6
Mặc dù header cơ sở của Ipv6 lớn gấp hai lần header của Ipv4 nhưng nó lại chứa ít thông tin hơn. Hình 23 minh hoạ định dạng đó. Như trên hình vẽ chỉ ra, hầu hết không gian của header dành cho hai trường nhận dạng máy gửi và máy nhận. Như trong Ipv4, trường SOURCE ADDRESS nhận dạng máy gửi và trường DESTINATION ADDRESS nhận dạng máy nhận. Mỗi địa chỉ chiếm 16 byte gấp 4 lần địa chỉ của Ipv4.
0 4 16 24 31
VERS
FLOW LABEL
NEXT HEADER
PAYLOAD LENGTH
HOP LIMIT
SOURCE ADDRESS
DESTINATION ADDRESS
Hình 23. định dạng của một header cơ sở Ipv6.
Cùng với các trường địa chỉ đích và nguồn, header cơ sở còn chứa 5 trường nữa. Trường VERS xác nhận dữ liệu đó là phiên bản 6. Trường PAYLOAD LENGTH tương tự như trường chiều dài của datagram của Ipv4. Không giống như Ipv4, trường PATLOAD LENGTH không chỉ chỉ ra kích thước của vùng dữ liệu kích thước đó bao gồm cả phần header. Trường HOP LIMIT tương tự như trường TIME-TO-LIVE của Ipv4. Ipv6 đặt là HOP LIMIT chính xác hơn – datagram sẽ bị huỷ bỏ nếu HOP LIMIT đếm đến giá trị 0 trước khi datagram đó đến được đích.
Các trường còn lại trong phần header cần có những giải thích chi tiết hơn. Trường FLOW LABEL dự định để sử dụng cho các ứng dụng mới mà đòi hỏi hiệu suất cao. Nhãn này có thể dùng để gắn kết một datagram với một đường dẫn riêng. Nhãn này được chia thành 2 phần – một phần dùng để chỉ ra lớp truyền tải, và phần còn lại dùng để định nghĩa đường dẫn cụ thể. Lớp truyền tải chỉ ra các đặc điểm chung mà các datagram cần. Ví dụ, để gửi đi một sự tương tác (ví dụ như phím bấm hoặc chuyển động chuột), có thể dùng lớp truyền tải chung cho độ trễ thấp. để gửi đi âm thanh với thời gian thực qua một liên mạng, máy gửi có thể đòi hỏi phần cứng cơ sở thiết lập đường truyền có độ trễ nhỏ hơn 100 mili giây. Khi đường truyền được thiết lập, hệ thống mạng trả về một thẻ nhận dạng mà máy gửi đặt nó trong mỗi datagram để gửi đi theo đường truyền đó. Các router dùng giá tị trong trường FLOW LABEL để định tuyến datagram đó dọc theo đường truyền đã định trước.
Trường NEXT HEADER dùng để chỉ ra kiểu thông tin theo sau phần header hiện tại. Ví dụ, nếu datagram gồm một header mở rộng, trường NEXT HEADER sẽ chỉ ra kiểu của header mở rộng. Nếu không có phần header mở rộng, trường NEXT HEADER sẽ chỉ ra kiểu dữ liệu chứa trong phần dữ liệu của datagram. Hình 24 minh hoạ khái niệm.
TCP Data
Base Header NEXT=TCP
(a)
TCP Data
Route header NEXT=TCP
Base Header NEXT=ROUTE
(b)
Hình 24. hai Ipv6 Datagram trong đó hình (a) gồm có phần header cơ sở và phần dữ liệu và hình (b) gồm có header cơ sở, header định tuyến, và dữ liệu. Trường NEXT HEADER trong mỗi header chỉ ra kiểu của phần tiếp theo.
II. Ipv6 làm việc với nhiều header như thế nào
Bởi vì chuẩn giao thức chỉ đưa ra một giá trị duy nhất cho mỗi kiểu header có thể, nên không bao giờ có sự nhập nhằng trong sự nhận dạng của trường NEXT HEADER. Máy nhận dùng trường NEXT HEADER trong mỗi header để xác định phần theo sau là gì. Nếu giá trị trong trường tường ứng bới kiểu của dữ liệu, máy nhận truyền datagram đó đến cho mođun phần mềm thực hiện xử lý dữ liệu. Nếu giá trị trong trường NEXT HEADER tương ứng với một header khác, phần mềm IP phân tích header và dịch nội dung của nó. Ngay khi nó kết thúc với một header, IP dùng trường NEXT HEADER để xác định phần sau header đó là dữ liệu hay là một header khác.
Làm thế nào để phần mềm Ipv6 biết đâu là kết thúc của một header và bắt đầu một phần mới? Mỗi vài kiểu header có kích thước cố định. Ví dụ, header cơ sở có kích thước cố định chính xác là 40 byte. Để chuyển đến phần sau header cơ sở, phần mềm Ipv6 chỉ cần cộng thêm 40 vào địa chỉ của phần header cơ sở.
Một vài header mở rộng không có kích thước cố định. Trong trường hợp đó, header phải có đủ thông tin để Ipv6 có thể xác định được đâu là kết thúc của header. Ví dụ, hình 25 minh hoạ dạng chung của của một header tuỳ chọn Ipv6 có chứa thông tin giống như phần tuỳ chọn trong datagram Ipv4.
Phần header tuỳ chọn mở rộng minh hoạ một cách Ipv6 quản lý các header mà có kích thước không cố định. Khi biên soạn một datagram, máy gửi lưu trữ chiều dài của phần header tuỳ chọn trong trường HEADER LEN. Khi máy nhận bắt gặp một header tuỳ chọn mở rộng, nó dùng trường HEADER LEN để xác định vị trí tiếp theo của mục tiếp, và trường NEXT HEADER để xác định kiểu.
0 8 16 31
HEADER LEN
NEXT HEADER
Một hoặc nhiều tuỳ chọn
Hình 25 phần header tuỳ chọn mở rộng Ipv6. Bởi vì kích thước của phần header tuỳ chọn có thể biến đổi trong mỗi datagram, trường HEADER LEN sẽ xác định chính xác chiều dài của nó.
III. Sự phân đoạn
Không giống như Ipv4 gồm có các trường cho sự phân mảnh trong mỗi header của datagram, Ipv6 để các thông tin về sự phân mảnh trong một header riêng. Hơn nữa, khi sự phân mảnh cần thiết, toàn bộ datagram gốc (gồm cả phần header gốc) sẽ được chia thành các phần nhỏ và đặt trong phần payload của các phân đoạn. một header cơ sở mới được tạo ra cho mỗi phân đoạn, và header mở rộng phân đoạn được chèn thêm vào để xác nhận đó là một phân đoạn. Hình 26 minh hoạ sự phân đoạn của Ipv6.
P3
P2
P1
Base header
Data
(a)
P1
Frag. 1 header
New Base header
(b)
Frag. 2 header
New Base header
P2
Frag. 3 header
New Base header
P3
(c)
(d)
Hình 26. minh hoạ sự phân đoạn trong Ipv6. Datagram gốc gồm có header trong hình (a), được chia thành các phần nhỏ đặt trong phần payload của các phân đoạn hình b, c, d.
Như trên hình vẽ, mỗi phân đoạn đều có kích thước nhỏ hơn datagram gốc. Với Ipv4, kích thước của phân đoạn được chọn là giá trị của đơn vị truyền cực đại (MTU) của mạng cơ sở mà phân đoạn đó cần truyền qua. Do vậy, phân đoạn cuối cùng có thể nhoe hơn các phân đoạn khác bởi vì nó chứa phần dữ liệu còn lại sau khi đã chia thành các phần có kích thước bằng giá trị MTU từ datagram gốc.
Sự phân mảnh trong Ipv6 khác hẳn so với sự phân mảnh trong Ipv4. Nhớ lại rằng trong Ipv4, một router thcự hiện sự phân mảnh khi router đó nhận được một datagram qua lớn so với khả năng của mạng có thể truyền được nó. Trong Ipv6, máy trạm gửi có trách nhiệm cho sự phân mảnh. Do vậy, các máy trạm cần thiết chọn lựa một kích thước cho datagram mà không phải phân mảnh; các router dọc theo đường truyền nhận được một datagram lớn sẽ không thực hiện phân mảnh datagram đó.
IV. Cơ chế địa chỉ của Ipv6
Giống nhưa Ipv4, Ipv6 thiết lập một địa chỉ duy nhất cho mỗi kết nối giữa một máy tính với mạng vật lý. Do vậy, nếu một máy tính (có thể là router) kết nối với 3 mạng vật lý, máy tính đó sẽ được thiết lập 3 địa chỉ. Cũng giống như Ipv4, Ipv6 chia địa chỉ thành 2 phần là phần đầu để xác nhận thuộc mạng nào và phần cuối để xác định máy tính cụ thể trên mạng đó.
Mặc dù cũng có cùng cách tiếp cận về việc thiết lập địa chỉ cho máy tính, địa chỉ Ipv6 khác với Ipv4 trong một số cách. Thứ nhất, tất cả các chi tiết của địa chỉ là hoàn toàn khác. thứ hai, Ipv6 đưa ra một tập các địa chỉ đặc biệt khác hẳn so với các địa chỉ đặc biệt của Ipv4. Đặc biệt, Ipv6 không có địa chỉ đặc biệt cho việc truyền quảng bá trong một mạng cụ thể. Thay vào đó, mỗi địa chỉ Ipv6 thuộc một trong 3 kiểu cơ bản sau:
Unicast: địa chỉ tương ứng của một máy tính đơn. Một datagram gửi đến địa chỉ này sẽ được truyền đi theo đường truyền ngắn nhất đến đích.
Multicast: địa chỉ tương ứng với một tập các máy tính, có thể ở nhiều vị trí khác nhau; các thành viên thuộc tập hợp có thể thay đổi bất kỳ lúc nào. Khi một datagram được gửi đến địa chỉ này, Ipv6 sẽ chuyển một bản sao của datagram đó đến mọi thành viên thuộc tập hợp
Cluster: địa chỉ tương ứng với một tập các máy tính mà có cùng phần đầu địa chỉ (ví dụ tất cả các máy cùng thuộc một phòng). Một datagram gửi đến địa chỉ này sẽ được định tuyến theo đường đi ngắn nhất và sau đó được truyền đến chính xác một trong tất cả các máy tính đó (ví dụ là máy tính gần máy gửi nhất).
Nguyên nhân đưa ra địa chỉ cluster xuất phát từ việc muốn cho phép làm một bản sao của các dịch vụ. Ví dụ, một công ty đưa ra một dịch vụ trên một mạng có thiết lập địa chỉ cluster cho một vài máy tính mà tất cả đều cung cấp dịch vụ đó. Khi một người sử dụng gửi một datagram đến địa chỉ cluster, Ipv6 sẽ gửi datagram đó đến một trong các máy tính thuộc cluster đó. Nếu người sử dụng từ một vị trí khác gửi một datagram đến địa chỉ cluster, Ipv6 có thể chọn lựa để định tuyến datagram đến các thành viên khác nhau thuộc cluster cho phép cả hai máy tính có thể xử lý các yêu cầu đồng thời.
Phân cách địa chỉ hệ 16 của Ipv6
Mặc dù một địa chỉ chiếm 128 bit có thể thích hợp với sự phát triên của Internet, nhưng việc viết chúng quả thật rất cồng kềnh. Ví dụ, một địa chỉ 128 bit viết dưới dạng chấm cách thập phân:
105.220.136.100.255.255.255.255.0.0.18.128.140.10.255.255
để giảm số ký tự dùng để viết một địa chỉ, người thiết kế Ipv6 đã đưa ra một dạng cú pháp biểu diễn gọn hơn gọi là phân cách thập lục phân bằng dấu hai chấm (colon hexadecimal notation) trong đó mỗi nhóm 16 bit được viết trong hệ 16 và phân cách bằng dấu hai châm. Ví dụ, khi biểu diễn địa chỉ trên trong dạng này sẽ là:
69DC:8864:FFFF:FFFF:0:1280:8C0A:FFFF
Như trong ví dụ ta thấy, phân cách thập lục phân bằng dấu hai chấm cần ít ký tự để biểu diễn một địa chỉ hơn. Cùng với việc tối ưu hoá gọi là nén số 0 (zero compression) còn có thể làm giảm được kích thước nữa. Sự nén số 0 là việc thay thể một dãy các số 0 bằng hai dấu hai chấm. Ví dụ, địa chỉ là:
FF0C:0:0:0:0:0:0:B1
có thể viết lại là:
FB0C::B1
Không gian của địa chỉ Ipv6 lớn và cơ chế đánh địa chỉ dùng nén số 0 đặc biệt quan trong bởi người thiết kế cho rằng có nhiều địa chỉ Ipv6 có chứa một dãy các số 0. Đặc biệt, để giúp cho việc dễ dàng chuyển đổi sang giao thức mới, người thiết kế thực hiện việc ánh xạ địa chỉ Ipv4 hiện tại thành địa chỉ Ipv6. Bất kỳ địa chỉ Ipv6 nào mà bắt đầu với 98 bit 0 là có chứa địa chỉ Ipv4 ở 32 bit cuối.
Phần VII
Tcp_dịch vụ truyền tin cậy
Lời giới thiệu
Trong phần trước đã nói đến dịch vụ truyền gói tin không liên kết dùng IP và các giao thức đi kèm dùng để thông báo lỗi. Trong phần này chúng ta sẽ xem xét đến TCP, giao thức truyền thông chính trong bộ giao thức TCP/IP, và giải thích làm thế nào mà giao thức đó đem lại sự truyền tin đáng tin cậy.
TCP đạt được một nhiệm vụ mà dường như không thể làm được đó là nó sử dụng dịch vụ datagram không tin cậy đưa ra bởi IP khi truyền dữ liệu đến máy tính khác, nhưng cung cấp một dịch vụ truyền dữ liệu đáng tin cậy đến các chương trình ứng dụng. TCP phải khắc phục các sự mất hay độ trễ trong liên mạng để tạo ra khả năng truyền tin hiệu quả và nó phải thực hiện làm sao để không làm quá tải mạng và các router. Sau khi xem xét các dịch vụ mà TCP đem lại cho các ứng dụng, trong phần này sẽ xem xét đến các kỹ thuật TCP sử dụng để đạt được độ tin cậy.
I. Sự cần thiết truyền tin đáng tin cậy
Những người lập trình luôn phải nghĩ rằng độ tin cậy là yếu tố cơ bản trong một hệ thống máy tính. Ví dụ, một người lập trình có thể được yêu cầu để xây dựng một chương trình ứng dụng để truyền dữ liệu đến thiết bị vào ra như là máy in. Chương trình ứng dụng chỉ cần viết dữ liệu vào thiết bị nhưng không cần kiểm tra dữ liệu đó có đến đầy đủ hay không. Thay vào đó, chương trình ứng dụng dựa vào hệ thông máy tính bên dưới để đảm bảo độ tin cậy khi truyền, hệ thống đảm bảo rằng dữ liệu sẽ không bị mất, trùng lặp hoặc truyền sai thứ tự.
Phần mềm TCP cần thiết ở mỗi đầu cuối của kết nối ảo, nhưng không có trên các router kết nối. Từ góc độ của TCP, toàn bộ liên mạng là một hệ thống truyền thông thực hiện chấp nhận và chuyển giao các thông điệp mà không thay đổi hoặc tác động đến nội dung.
Giao thức truyền thông như là TCP phải được thiết kế một cách cẩn thận để có thể đạt được độ tin cậy. Vấn đề chính là ở chỗ: sự chuyển giao không tin cậy là do hệ thống truyền thông bên dưới và máy tính bị khởi động lại. Để hiểu phạm vị của sự vấn đề, hãy xem xét một tình huống có hai chương trình ứng dụng hình thành kết nối TCP, giao tiếp với nhau, đóng kết nối và sau đó lại hình thành kết nối mới. Bởi vì bất kỳ thông điệp nào cũng có thể bị mất, trùng lặp, trễ hoặc truyền sai thứ tự, các thông điệp từ lần kết nối thứ nhất có thể bị trùng lặp và bị trễ khá lâu đến khi lần kết nối thứ hai được thiết lập. Các thông điệp phải rõ ràng, hoặc giao thức phải chấp nhận thông điệp trùng lặp từ lần kết nối cũ và cho phép chúng can thiệp vào kết nối mới.
Hệ thống máy tính bị khởi động lại là một trong những thách thức lớn khác với những người thiết kế giao thức TCP. Tưởng tượng một tình huống trong đó hai chương trình ứng dụng thiết lập một kết nối và sau đó một trong hai máy tính bị khởi động lại. Mặc dù phần mềm giao thức trên máy tính bị khởi động lại không biết về sự kết nối nữa, nhưng phần mềm giao thức trên máy tính mà không bị khởi động lại vẫn cho rằng kết nối vẫn tồn tại. Hơn nữa, gói tin trùng lặp mà bị trễ gây ra một sự thách thức khó khăn đặc biệt bởi vì giao thức phải có khả năng loại bỏ các gói tin đó.
II. Sự truyền lại và mất các gói tin
Làm thế nào TCP đạt được độ tin cậy? Câu trả lời khá phức tạp bởi vì TCP sử dụng các kỹ thuật khá đa dạng để thực hiện các phần khác nhau của sự cố. Một trong những kỹ thuật quan trọng nhất đó là kỹ thuật truyền lại. Khi TCP truyền dữ liệu, máy gửi khắc phục các gói tin bị mất bằng việc thực hiện truyền lại. Cả hai bên giao tiếp phải tham gia thực hiện. Khi TCP nhận dữ liệu, nó gửi một thông báo nhận được (acknowledgement) trở lại cho máy gửi. Mỗi khi nó gửi đi dữ liệu, TCP bắt đầu khởi tạo một đồng hồ. Nếu thời gian hết trước khi một acknowledgement đến, máy gửi sẽ truyền lại dữ liệu. Hình dưới đây minh hoạ sự truyền lại.
Sự kiện tại máy trạm 1
Sự kiện tại máy trạm 2
Gửi thông điệp 1
Nhận thông điệp 1
Gửi ack 1
Nhận ack 1
Gửi thông điệp 2
Nhận thông điệp 2
Gửi ack 2
Nhận ack 2
Gửi thông điệp 3
Mất gói tin
Thời gian truyền lại hết
Gửi lại thông điệp 3
Nhận thông điệp 3
Gửi ack 3
Nhận ack 3
Hình 28. ví dụ về sự truyền lại. Các mục bên trái tương ứng với sự kiện trong một máy tính truyền dữ liệu, mục bên phải tương ứng với các sự kiện trong máy tính nhận dữ liệu, và thời gian đi xuống. Máy gửi truyền lại dữ liệu bị mất.
Cơ chế truyền lại của TCP là chìa khoá cho sự thành công của nó bởi vì nó thực hiện được các giao tiếp qua mạng bất kỳ và cho phép nhiều chương trình ứng dụng có thể giao tiếp đồng thời. Ví dụ, một ứng dụng có thể gửi dữ liệu qua kênh vệ tinh đến một máy tính ở nước khác, trong khi một ứng dụng khác truyền dữ liệu qua mạng cục bộ đến một máy tính trong phòng cạnh đó. TPC phải sẵn sàng để truyền lại bất kỳ thông điệp nào bị mất trên cả hai kết nối đó. Câu hỏi đặt ra là: TCP nên chờ bao lâu trước khi truyền lại? Các acknowledgement từ một máy tính trong mạng cục bộ thì đến trong vòng vài phần nghìn giây. Nếu chờ qua lâu sẽ làm cho mạng được rỗi và không đạt được thông lượng cực đại. Do vậy, trong mạng cục bộ, TCP không nên chờ một thời gian dài trước khi truyền lại. Tuy nhiên, việc truyền lại trong một vài phần nghìn giây sẽ không tốt với mạng khoảng cách lớn kết nối bằng vệ tinh bởi vì sự truyền đi không cần thiết sẽ tiêu tốn dải tần và thông lượng của mạng bị giảm đi.
TCP đối mặt với một thách thức khó khăn đó là phải phân biệt giữa truyền một đích khoảng cách xa và trong cục bộ: quá nhiều datagram có thể gây ra tắc nghẽn mạng. thực tế, tổng thời gian yêu cầu để truyền đi một thông điệp và nhận một acknowledgement có thể tăng hoặc giảm phụ thuộc vào độ lớn của cường độ trong một vài mili giây.
Tóm lại: Độ trễ cho dữ liệu truyền đến đích và một acknowledgement gửi trở lại phụ thuộc vào cường độ trong mạng cũng như là khoảng cách đến đích. Bởi vì TCP cho phép nhiều chương trinh ứng dụng giao tiếp với nhiều đích đồng thời và bởi vì các điều kiện về cường độ trên mạng ảnh hưởng đễn độ trễ, nên TCP phải thực hiện các độ trễ khác nhau mà có thể thay đổi nhanh chóng.
III. Sự truyền lại thích hợp
Trước khi TCP được phát minh, giao thức truyền thông dùng giá trị độ trễ cố định để truyền lại – người thiết kế giao thức hoặc quản lý mạng chọn lựa một giá trị đủ lớn cho độ trễ mong chờ. Những người thiết kế làm việc trên TCP nhận ra rằng thời gian hết cố định sẽ làm việc không tốt với các liên mạng. Do vậy, họ chọn lựa việc tạo ra sự truyền lại của TCP có khả năng thích nghi. Đó là TCP điều khiển độ trễ của kết nối hiện thời, và có những thay đổi thích hợp thời gian truyền lại để thích nghi với những điều kiện thay đổi.
Làm thế nào để TCP có thể điều khiển được độ trễ? Thực tế TCp không thể biết chính xác độ trễ của từng phần thuộc liên mạng tại mọi thời điểm. Thay vào đó TCP ước tính độ trễ khứ hồi (round-trip delay) cho mỗi kết nối tích cực bằng cách đo thời gian cần thiết để nhận được sự đáp lại. Mỗi khi nó gửi đi một thông điệp, TCP ghi nhận thời điểm mà thông điệp đó gửi đi. Khi một sự trả lời đến, TCP trừ thời gian thông điệp được gửi với thời gian hiện tại để nhận được giá trị ước tính cho độ trễ khứ hồi đối với kết nối đó. Khi nó gửi đi các gói tin dữ liệu và nhận được các acknowledgement, TCP tạo ra một dãy các giá trị ước tính độ trễ khứ hồi và dùng hàm thống kê để tính ra giá trị trung bình. Cùng với giá trị trung bình, TCP lưu giữa một ước lượng của biến thể, và dùng sự kết hợp tuyến tính của giá trị trung bình ước tính và biến thể để làm giá trị cho sự truyền lại.
Kinh nghiệm đã cho thấy rằng sự truyền lại thích nghi TCP làm việc rất tốt. Dùng biến thể giúp cho TCP phản ứng nhanh chóng khi độ trễ tăng bởi số lượng lớn các gói tin. Dùng giá trị trung bình giúp cho TCP khởi tạo lại giá trị thời gian truyền lại nếu độ trễ trả về một giá trị thấp hơn sau khi có sự quá tải tạm thời. Khi độ trễ duy trì không đổi, TCP điều chỉnh thời gian truyền lại đến một giá trị lớn hơn độ trễ khứ hồi một chút. Khi độ trễ bắt đầu biến đổi, TCP điều chỉnh thời gian truyền lại đến giá trị lớn hơn nhiều giá trị trung bình để có thể chịu được khả năng cực đại.
Để hiểu mà sự truyền lại thích nghi giúp cho TCP đạt được thông lượng cực đại trên mỗi kết nối, hãy xem xét một trường hợp bị mất gói tin trong hai kết nối mà có độ trễ khứ hồi khác nhau. Ví dụ, hình trên minh hoạ sự truyền tin trên hai kết nối đó.
IV. So sánh giữa thời gian truyền lại
Est 1
Est 1
Est 2
Est 2
Time out
Packet lost
Packet lost
Time out
Hình 29. Hết thời gian và sự truyền lại trên hai kết nối mà có độ trễ khứ hồi khác nhau. TCP tối ưu thông lượng bằng việc dùng một ước tính khứ hồi để tính thời gian truyền lại.
Như trên hình vẽ, TCP thiết lập thời gian hết truyền lại lớn hớn độ trễ khứ hồi. Nếu độ trễ là lớn TCP dùng thơì gian không tính truyền lại lớn hơn; nếu độ trễ nhỏ, TCP dùng thời gian không tính nhỏ. Mục đích là để chờ đủ lớn để xác định một gói tin có bị mất mà không bị chờ lâu hơn cần thiết.
V. Bộ đệm, điều khiển luồng và cửa sổ
TCP dùng cơ chế cửa sổ (window) để điều khiển luồng dữ liệu. Khi một kết nối được thiết lập, mỗi đầu kết nối cấp phát một vùng đệm để lưu giữ các dữ liệu đến, và gửi đi kích thước của vùng đệm đến đầu kia. Khi dữ liệu đến, máy nhận gửi đi các acknowledgement và chúng cũng chỉ ra kích thước vùng đệm còn lại. Khối lượng buffer sẵn có tại bất kỳ thời điểm gọi là cửa sổ, và một sự thông báo về kích thước của nó gọi là một thông báo cửa sổ (window advertisement). Một máy nhận gửi đi một thông báo cửa sổ trong mỗi acknowledgement.
Nếu ứng dụng nhận có thể đọc dữ liệu ngay khi đến, máy nhận sẽ gửi một thông báo giá trị cửa sổ dương theo mỗi acknowledgement. Tuy nhiên, nếu bên gửi thực hiện nhanh hơn bên nhận (có thể do tốc độ CPU nhanh hơn), dữ liệu sẽ đầy vùng đệm của máy nhận làm cho máy nhận có cửa sổ là 0. Máy gửi khi nhận được thông báo giá trị cửa sổ là 0 sẽ phải dừng gửi đến khi máy nhận gửi trở lại một thông báo giá trị cửa sổ dương.
Trong hình vẽ, máy gửi dùng một phân đoạn kích thước cực đại là 1000 byte. Sự truyền đi bắt đầu khi máy nhận thông báo một kích thước cửa sổ ban đầu là 2500 byte. Máy gửi ngay lập tức truyền đi 3 đoạn, hai đoạn 1000 byte và một đoạn 500 byte. Khi các đoạn đó đến, máy nhận tạo ra một acknowledgement với kích thước cửa sổ giảm xuống bằng lượng dữ liệu đến.
Trong ví dụ này, 3 đoạn đầu tiên điền vào vùng đệm của máy nhận nhanh hơn tốc độ ứng dụng có thể tiêu thụ dữ liệu. Do vậy, cửa sổ thông báo sẽ tiến tới 0, và máy gửi không thể truyền thêm dữ liệu nữa. Sau khi ứng dụng nhận tiêu thụ dữ liệu 2000 byte, máy nhận gửi đi một acknowledgement để thông báo kích thước cửa sổ là 2000 byte. Kích thước của cửa sổ luôn được thông báo lớn hơn dữ liệu được chấp nhận, do vậy, máy nhận đang thông báo rằng nó chấp nhận 2000 byte vượt quá 2500 byte nó đã nhận. Máy gửi đáp lại bằng việc truyền thêm hai đoạn nữa. Khi mỗi đoạn đến, máy nhận gửi một acknowledgement với kích thước cửa sổ giảm đi 1000 byte.
Lặp lại lần nữa, kích thước cửa sổ giảm tới 0, làm cho máy gửi dừng việc truyền tin. Cuối cùng, ứng dụng máy nhận thu thập được dữ liệu, và TCP nhận truyền đi một ack với kích thước cửa sổ dương. Nếu máy gửi có dữ liệu chờ để gửi, máy gửi có thể tiếp tục quá trình truyền một đoạn khác.
VI. Sự thống nhất 3 bên
Để đảm bảo rằng các kết nối được thiết lập hoặc kết thúc một cách an toàn, TCP dùng một cách bắt tay 3 bên trong đó 3 thông điệp sẽ được trao đổi. Các nhà khoa học đã chứng minh rằng sự trao đổi 3 bên là cần thiết và đủ để đảm bảo rằng sự thống nhất này là rõ ràng bất chấp sự mất gói tin, trùng lặp và độ trễ.
TCP dùng thuật ngữ đoạn đồng bộ (synchronization segment) để miêu tả các thông điệp trong bắt tay 3 bên dùng để tạo ra kết nối, và thuật ngữ FIN segment (finish) để miểu tả các thông điệp trong bắt tay 3 bên khi đóng kết nối. Hình dưới minh hoạ bắt tay 3 bên dùng để đóng một kết nối.
Sự kiện ở máy trạm 1
Sự kiện ở máy trạm 2
Gửi đi FIN+ACK
Nhận FIN+ACK
Gửi đi FIN+ACK
Nhận FIN+ACK
Gửi ACK
Nhận ACK
Hình 30. bắt tay 3 bên dùng để đóng kết nối. Các ack gửi đi theo mỗi hướng để đảm bảo rằng tất cả các dữ liệu đã đến trước khi kết nối đó kết thúc.
Giống như các thông điệp khác, TCP tủyền lại các đoạn SYN hoặc FIN bị mất. Hơn nữa, sự bắt tay đảm bảo TCP không mở hoặc đóng một kết nối chỉ khi cả hai bên đều tương tác với nhau.
Một phần để tạo ra bắt tay 3 bên dùng để tạo ra một kết nối đòi hỏi mỗi đầu tạo ra một số 32 bit ngẫu nhiên. Nếu một ứng dụng cố gắng thiết lập một kết nối TCP mới sau khi một máy tính khởi động lại, TCP chọn một số ngẫu nhiên mới. Bởi vì mỗi kết nối mới nhận một dãy giá trị ngẫu nhiên mới nên một cặp ứng dụng có thể dùng TCP để giao tiếp, đóng kết nối và sau đó thiết lập một kết nối mới mà không bị các gói tin trùng lặp hoặc trễ.
VII. Điều khiển tắc nghẽn
Một trong những lĩnh vực thú vị nhất của TCP đó là cơ chế điều khiển tắc nghẽn. Trong hầu hết liên mạng hiện đại, mất gói tin (hoặc trễ trong thời gian dài) có thể bị gây ra bởi tắc nghẽn nhiều hơn là do phần cứng trục trặc. Thú vị là các giao thức truyền thông thực hiện sự truyền lại có thể còn làm nghiêm trọng sự tắc nghẽn bởi việc tống thêm nhiều bản sao của một thông điệp vào mạng. Nếu tắc nghẽn gây ra bị truyền lại qua nhiều, toàn bộ hệ thống có thể tới một tình trạng sụp đổ tắc nghẽn (congestion collapse), tương tự như tắc nghẽn giao thông trên đường cao tốc. Để tránh sự cố này, TCP luôn luôn dùng gói tin bị mất để đo độ tắc nghẽn của mạng, và đáp lại bằng việc giảm tốc độ truyền lại dữ liệu.
Mỗi khi một thông điệp bị mất, TCP bắt đầu điều khiển tắc nghẽn. Thay vì truyền lại dữ liệu đủ để điền đầy vùng đệm của máy nhận, TCP bắt đầu bằng việc gửi đi một thông điệp đơn có chứa dữ liệu. Nếu ack đến mà không có thông tin bị mất, TCP sẽ gấp đôi lượng dữ liệu gửi đi, và gửi đi 2 thông điệp nữa. Nếu có ack trả lời cho 2 thông điệp đó, TCP sẽ gấp 4 lần lượng dữ liệu và cứ như vậy. Sự tăng theo hàm mũ đến khi TCP gửi được một nửa kích thước của cửa sổ máy nhận và nó sẽ giảm dần tốc độ tăng để truyền.
Cơ chế điều khiển tắc nghẽn của TCP đáp ứng rất tốt sự tăng nhanh của liên mạng. Bằng cách giảm nhanh chóng, TCp có thể tránh được sự tắc nghẽn. Hơn nữa, bởi vì nó tránh thêm vào sự truyền lại với tắc nghẽn của liên mạng, cơ chế điều khiển tắc nghẽn của TCP ngăn ngừa được sự sụp đổ do tắc nghẽn.
VIII. Định dạng một đoạn TCP
TCP dùng một định dạng cho tất cả các thông điệp, bao gồm các thông điệp có chứa dữ liệu, ack và thông điệp bắt tay 3bên để khởi tạo hoặc kết thúc một kết nối. TCP dùng thuật ngữ phân đoạn (segment) để chỉ một thông điệp: Hình 20.6 minh hoạ định dạng của phân đoạn đó.
DESTINATION PORT
SOURCE PORT
SEQUENCE NUMBER
0 4 10 16 24 31
ACKNOWLEDGEMENT NUMBER
HLEN NOT USED CODE BITS WINDOW
URGENT POINTER
CHECK SUM
BEGIN NING OF DATA
Hình 31. định dạng một phân đoận TCP. Mỗi thông điệp gửi từ TCP trên một máy đến TCP trên máy khác dùng định dạng này bao gồm cả dữ liệu và acknowledgement
Để hiểu định dạng của phân đoạn, cần nhớ lại rằng kết nối TCP có chứa hai luồng dữ liệu theo hai hướng ngược nhau. Nếu ứng dụng tại mỗi bên cùng truyền dữ liệu đồng thời, TCP có thể gửi một phân đoạn có chứa acknowledgement cho dữ liệu đến, một thông báo cửa sổ chỉ ra lượng cùgn đệm còn trống cho dữ liệu đến và dữ liệu đi. Do vậy, một vài trường trong phân đoạn để chỉ luồng dữ liệu truyền một hướng, trong khi các trường khác chỉ luồng dữ liệu truyền theo chiều ngược lại.
Khi một máy tính gửi đi một phân đoạn, trường ACKNOWLEDGEMENT NUMBER và trường WINDOW chỉ dữ liệu truyền đến: trường ACK NUMBER chỉ ra số thứ tự của dữ liệu nhận được và trường WINDOW chỉ ra vùng trống còn lại của vùng đệm. Trường SEQUENCE NUMBER chỉ dữ liệu đi. Nó chứa số thứ tự của dữ liệu được truyền đi trong phân đoạn. Máy nhận dùng số thứ tự đó để sắp xếp lại các phân đoạn mà đến sai thứ tự và để tính số ack. Trường DESTINATION PORT xác định chương trình ứng dụng nào trên máy nhận sẽ nhận dữ liệu này, ngược lại trường SOURCE PORT xác nhận ứng dụng nào gửi dữ liệu đi. Cuối cùng trường CHECKSUM có chứa giá trị checksum của toàn bộ phân đoạn TCP gồm phần header và dữ liệu.
Mục lục
Các file đính kèm theo tài liệu này:
- P0113.doc