CCNA – The OSI Reference Model – phần 2


Chúng ta tiếp tục một lớp cực kì quan trọng của mô hình OSI

The Transport Layer

Đây là lớp thứ tư trong mô hình OSI. Các dịch vụ trong lớp Transport gồm dữ liệu “segment” và “ressemble” từ lớp các ứng dụng trên và kết hợp nó vào cùng một luồng dữ liệu.
Cung cấp các dịch vụ truyền dẫn dữ liệu end-to-end và có thể thành lập một kết nối logic giữa các host gữi dữ liệu (sending host) và host nhận dữ liệu (destination host) trong một môi trường mạng.

Chúng ta rất quen thuộc với 2 giao thức cực kì nổi tiếng TCP UDP (chúng ta sẽ đi sâu 2 giao thức này sau). TCP là một giao thức đáng tin cậy, và UDP thì không, chúng ta sẽ biết lý do sau. Và lập trình viên sẽ chọn một trong 2 giao thức này khi làm việc với TCP/IP protocol.

Flow Control

Tính toàn vẹn của dữ liệu (data integrity) được đảm bảo tại lớp Transport bởi việc kiểm soát điều khiển luồng (flow control) và cho phép người dùng tùy chọn yêu cầu vận chuyển dữ liệu đáng tin cậy giữa các hệ thống.
Flow control chống lại việc host gửi dữ liệu gửi quá nhiểu dữ liệu khiến cho host nhận không kịp nhận và dẫn tới tràn bộ nhớ đệm (overflowing the buffers), và dẫn tới việc mất dữ liệu!
Việc truyền dữ liệu một cách tin cậy (giao thức TCP) sẽ luôn tuân theo các điều sau:

  • Những segment (đơn vị ở lớp transport) đã vận chuyển đi (tới host đích) thì sẽ có một gói tin ACK trả về để báo rằng đã gửi thành công.
  • Và khi host gửi không nhận được gói ACK thì nó sẽ gửi lại gói đó.
  • Các segment khi đến đích thì luôn được sắp xếp thứ tự đúng.
  • Những luồng dữ liệu có thể quản lý được được duy trì để tránh tắc nghẽn, mất dữ liệu, hay quá tải.

Connection-Oriented Communication

Trong trường hợp dữ liệu được vận chuyển đáng tin cậy (giao thức TCP), một thiết bị (thiết bị sender) sẽ thiết lập một phiên kết nối với hệ thống ngang hàng với nó (Ví dụ máy tính A muốn kết nối với máy tính B, thì máy tính B là máy tính ngang hàng với máy A).


Hình trên đây trình bày một cách cơ bản về một phiên thiết lập kết nối đáng tin cậy giữa 2 máy. Chúng ta sẽ học kĩ hơn về cách thức mà 2 host có thể thiết lập được một kết nối ở phần sau (tiến trình bắt tay 3 bước three-way handshake).

Trong khi thông tin dữ liệu được gửi đi giữa các host, 2 máy sẽ kiểm tra theo chu kì lẫn nhau, và việc giao tiếp này thông qua các protocol software để chắc chắn rằng dữ liệu được truyền đáng tin cậy.

Chúng ta sẽ tóm tay quá trình bắt tay 3 bước (three-way handshake) như sau:

  • Bước 1: Host A sẽ gửi một gói tin có cờ SYN (synchronization) (SEQ = 100 chúng ta có thể hiểu là gói có số 100) được bật. Để nói lên rằng Host A muốn kết nối với Host B.
  • Bước 2: Sau đó Host B sẽ gửi một gói tin có bật 2 cờ: SYNACK = 101SEQ = 300, nói lên rằng Host B đã nhận được gói 100, và mong chờ nhận tiếp gói 101 cũng như là đồng ý kết nối với cờ SYN.
  • Bước 3: Sau đó Host A sẽ gửi đi gói tin có SEQ = 101, bật ACK = 301 để yêu cầu nhận tiếp gói tin 301. Và tới đây quá trình bắt tay 3 bước đã thành công.

Trong quá trình này, việc tắc nghẽn (congestion) dễ xảy ra bởi vì máy tính khi tạo ra dữ liệu truyền thường có tốc độ cao hơn tốc độ mạng có thể truyền hay bởi vì có quá nhiều máy tính gửi dữ liệu cho cùng một máy tính hay một gateway. Trong rất nhiều trường hợp, có thể gây ra việc tắc nghẽn thông tin (tương tự như việc kẹt xe vậy) vì có hàng tỷ thiết bị kết nối qua mạng internet và liên lạc thông tin với nhau, điều này khó tránh khỏi.

Nhưng mô hình mạng này cung cấp cho chúng ta một khái niệm gọi là “buffer” hay còn gọi là bộ nhớ đệm. Khi một host (chúng ta gọi là host A) nào đó “được” nhận quá nhiều thông tin từ máy khác (các host nào đó liên tục gửi các gói tin tới) thì host A này không thể xử lý kịp thông tin được, và các gói tin sẽ được lưu trên bộ nhớ đệm buffer của nó. Và sẽ xử lý từ từ lượng thông tin này để đảm bảo thông tin không mất mát.

Tuy nhiên, khi thông tin (các gói tin) tới quá nhiều, đến mức buffer chứa không hết (vì bản thân buffer cũng là bộ nhớ) dẫn tới tràn bộ nhớ đệm và thông tin sẽ mất? Nếu không có lớp transport thì là đúng như thế.

Nhìn hình trên này mô tả quá trình hoạt động của flow control. Khi các gói tin đến một lúc quá nhiều, máy Receiver sẽ ra một tín hiệu “b” báo rằng đã “quá tải” và yêu cầu máy Sender ngừng gửi gói tin, và máy Sender sẽ ngừng gửi gói tin khi nhận được tín hiệu. Và khi máy Receiver đã xử lý xong và sẵn sàng nhận gói tin trở lại thì sẽ gửi một gói tin tới máy sender để báo là đã sẵn sàng. Và máy Sender sẽ gửi gói tin trở lại và quá trình cứ tiếp tục như thế. Vô cùng quan trọng, flow control đảm bảo rằng mọi thứ diễn ra đúng và không bị mất dữ liệu, điều tối quan trọng trong việc truyền thông tin.

Windowing

Data sẽ lưu thông rất chậm nếu máy sender phải chờ đợi gói một ACK sau mỗi lần gửi đi một segment. Và đương nhiên không phải như vậy, trong thời gian đợi gói ACK đó, máy sender sẽ liên tục gửi các gói tin (segment) khác cho máy receiver. Và số lượng gói tin (segment) mà máy sender cho phép gửi đi mà không cần đợi việc xác nhận bằng gói ACK người ta gọi là “window“. Chúng ta đọc tiếp để hiểu khái niệm này.

Chúng ta xem hình sau đây với kích thước window là 13. Khi kích thước window là 1, máy sender gửi một gói tin và chờ nhận một gói ACK, và sau đó gửi tiếp và chờ nhận tiếp gói ACK, và cứ tiếp tục như thế. Với kích thước window là 3, máy sender gửi một lần 3 gói (ví dụ trong hình là gói 1, 2, 3) và sau đó chờ máy receiver gửi lại gói ACK 4 (gói ACK 4 nghĩa là đã nhận được gói Send 3 và mong chờ nhận gói Send 4).

Acknowledgments

Chúng ta vẫn thường gọi là gói ACK, dùng để xác nhận thông tin và đảm bảo rằng thông tin không bị mất (lost) và lặp lại (duplicate). Chúng ta xem ví dụ sau.

Chúng ta có window size là 3, và cách thức hoạt động như sau:
Khi máy sender gửi xong 3 gói đầu tiên (Send 1, 2, 3) thì máy sender sẽ bật một timer để chờ đợi gói ACK 4, và khi time-out (nghĩa là không có gói ACK nào tới) thì máy sender sẽ gửi lại toàn bộ. Còn nếu trong thời gian timer mà máy Sender nhận được gói ACK 4 (Gói ACK 4 xác nhận cho việc đã nhận thành công 3 gói Send 1, 2, 3 và mong chờ nhận gói Send 5, 6, 7). Và sau đó máy sender gửi 3 gói tiếp theo 4, 5, 6. Nhưng không may thay vì một lý do nào đó, gói số 5 bị mất trên đường truyền, và máy receiver chỉ nhận được gói 4 và 6, nhận thấy thiếu mất gói số 5, máy receiver sẽ gửi gói ACK 5 để yêu cầu máy sender gửi lại gói Send 5. Và sau khi nhận được gói Send 5 thì máy receiver sẽ gửi gói ACK 7 để tiếp tục yêu cầu nhận gói Send 7. Và quá trình liên tục như thế, và đảm bảo dữ liệu sẽ không mất và không bị lặp lại. Một kĩ thuật tuyệt vời.

Bài tiếp theo chúng ta sẽ tìm hiểu về lớp Network.

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s