Tại sao TCP đóng kết nối bằng 4 bước

Giao thức Tcp: đóng mở kết nối, truyền dữ liệu

Đăng bởi
Mai Chi
-
23/01/2019
0
Facebook
Twitter
Pinterest
Linkedin
ReddIt
Hướng dẫn tự học lập trình socket (mạng) với C# Giao thức Tcp: đóng mở kết nối, truyền dữ liệu

Trong bài học này chúng ta sẽ xem xét chi tiết hơn về giao thức Tcp để có thể hiểu rõ về cách thức lập trình với Tcp socket, bao gồm cấu trúc gói tin, thiết lập & hủy liên kết, cách truyền dữ liệu.

Ở phần thực hành chúng ta đã thực hiện một chương trình client/server cơ bản sử dụng Tcp socket. Do Tcp là một giao thức rất phức tạp, trước khi đi vào phân tích chi tiết kỹ thuật lập trình Tcp socket, chúng ta sẽ xem xét các vấn đề chính của giao thức Tcp.

Mục lục

  • 1 Hoạt động của giao thức
    • 1.1 Thiết lập kết nối
    • 1.2 Truyền dữ liệu
      • 1.2.1 Kích thước cửa sổ TCP
      • 1.2.2 Dãn kích thước cửa sổ
    • 1.3 Kết thúc kết nối
  • 2 Các cổng TCP
  • 3 Sự phát triển của TCP
  • 4 TCP trên mạng không dây
  • 5 Gỡ rối trong TCP
  • 6 Các lựa chọn khác ngoài TCP
  • 7 Cấu trúc gói tin
    • 7.1 Header
    • 7.2 Dữ liệu
  • 8 Xem thêm
  • 9 Tham khảo
  • 10 Liên kết ngoài

Hoạt động của giao thứcSửa đổi

Sơ đồ trạng thái của TCP - phiên bản đơn giản hóa

Không như giao thức UDP - giao thức có thể lập tức gửi gói tin mà không cần thiết lập kết nối, TCP đòi hỏi thiết lập kết nối trước khi bắt đầu gửi dữ liệu và kết thúc kết nối khi việc gửi dữ liệu hoàn tất. Cụ thể, các kết nối TCP có ba pha:

  1. Thiết lập kết nối
  2. Truyền dữ liệu
  3. Kết thúc kết nối

Trước khi miêu tả các pha này, ta cần lưu ý các trạng thái khác nhau của một socket:

  1. LISTEN
  2. SYN-SENT
  3. SYN-RECEIVED
  4. ESTABLISHED
  5. FIN-WAIT
  6. CLOSE-WAIT
  7. CLOSING
  8. LAST-ACK
  9. TIME-WAIT
  10. CLOSER
LISTEN đang đợi yêu cầu kết nối từ một TCP và cổng bất kỳ ở xa (trạng thái này thường do các TCP server đặt) SYN-SENT đang đợi TCP ở xa gửi một gói tin TCP với các cờ SYN và ACK được bật (trạng thái này thường do các TCP client đặt) SYN-RECEIVED đang đợi TCP ở xa gửi lại một tin báo nhận sau khi đã gửi cho TCP ở xa đó một tin báo nhận kết nối (connection acknowledgment) (thường do TCP server đặt) ESTABLISHED cổng đã sẵn sàng nhận/gửi dữ liệu với TCP ở xa (đặt bởi TCP client và server) TIME-WAIT đang đợi qua đủ thời gian để chắc chắn là TCP ở xa đã nhận được tin báo nhận về yêu cầu kết thúc kết nối của nó. Theo RFC 793, một kết nối có thể ở tại trạng thái TIME-WAIT trong vòng tối đa 4 phút.

Thiết lập kết nốiSửa đổi

Để thiết lập một kết nối, TCP sử dụng một quy trình bắt tay 3 bước (3-way handshake) Trước khi client thử kết nối với một server, server phải đăng ký một cổng và mở cổng đó cho các kết nối: đây được gọi là mở bị động. Một khi mở bị động đã được thiết lập thì một client có thể bắt đầu mở chủ động. Để thiết lập một kết nối, quy trình bắt tay 3 bước xảy ra như sau:

  1. Client yêu cầu mở cổng dịch vụ bằng cách gửi gói tin SYN (gói tin TCP) tới server, trong gói tin này, tham số sequence number được gán cho một giá trị ngẫu nhiên X.
  2. Server hồi đáp bằng cách gửi lại phía client bản tin SYN-ACK, trong gói tin này, tham số acknowledgment number được gán giá trị bằng X + 1, tham số sequence number được gán ngẫu nhiên một giá trị Y
  3. Để hoàn tất quá trình bắt tay ba bước, client tiếp tục gửi tới server bản tin ACK, trong bản tin này, tham số sequence number được gán cho giá trị bằng X + 1 còn tham số acknowledgment number được gán giá trị bằng Y + 1

Tại thời điểm này, cả client và server đều được xác nhận rằng, một kết nối đã được thiết lập.

Truyền dữ liệuSửa đổi

Một số đặc điểm cơ bản của TCP để phân biệt với UDP:

  • Truyền dữ liệu không lỗi (do có cơ chế sửa lỗi/truyền lại)
  • Truyền các gói dữ liệu theo đúng thứ tự
  • Truyền lại các gói dữ liệu mất trên đường truyền
  • Loại bỏ các gói dữ liệu trùng lặp
  • Cơ chế hạn chế tắc nghẽn đường truyền

Ở hai bước đầu tiên trong ba bước bắt tay, hai máy tính trao đổi một số thứ tự gói ban đầu (Initial Sequence Number -ISN). Số này có thể chọn một cách ngẫu nhiên. Số thứ tự này được dùng để đánh dấu các khối dữ liệu gửi từ mỗi máy tính. Sau mỗi byte được truyền đi, số này lại được tăng lên. Nhờ vậy ta có thể sắp xếp lại chúng khi tới máy tính kia bất kể các gói tới nơi theo thứ tự thế nào.

Trên lý thuyết, mỗi byte gửi đi đều có một số thứ tự và khi nhận được thì máy tính nhận gửi lại tin báo nhận (ACK). Trong thực tế thì chỉ có byte dữ liệu đầu tiên được gán số thứ tự trong trường số thứ tự của gói tin và bên nhận sẽ gửi tin báo nhận bằng cách gửi số thứ tự của byte đang chờ.

Ví dụ: Máy tính A gửi 4 byte với số thứ tự ban đầu là 100 (theo lý thuyết thì 4 byte sẽ có thứ tự là 100, 101, 102, 103) thì bên nhận sẽ gửi tin báo nhận có nội dung là 104 vì đó là thứ tự của byte tiếp theo nó cần. Bằng cách gửi tin báo nhận là 104, bên nhận đã ngầm thông báo rằng nó đã nhận được các byte 100, 101, 102 và 103. Trong trường hợp 2 byte cuối bị lỗi thì bên nhận sẽ gửi tin báo nhận với nội dung là 102 vì 2 byte 100 và 101 đã được nhận thành công.

Giả sử ta có 10.000 byte được gửi đi trong 10 gói tin 1.000 byte và có 1 gói tin bị mất trên đường truyền. Nếu gói bị mất là gói đầu tiên thì bên gửi sẽ phải gửi lại toàn bộ 10 gói vì không có cách nào để bên nhận thông báo nó đã nhận được 9 gói kia. Vấn đề này được giải quyết trong giao thức SCTP (Stream Control Transmission Protocol - "Giao thức điều khiển truyền vận dòng") với việc bổ sung báo nhận chọn lọc.

Số thứ tự và tin báo nhận giải quyết được các vấn đề về lặp gói tin, truyền lại những gói bị hỏng/mất và các gói tin đến sai thứ tự. Để phục vụ mục đích kiểm tra, các gói tin có trường giá trị tổng kiểm (checksum - Xem thêm phần #Cấu trúc gói).

Với trình độ hiện tại, kỹ thuật kiểm tra tổng trong TCP không đủ mạnh. Các tầng liên kết dữ liệu với xác suất lỗi bit cao có thể cần được bổ sung các khả năng phát hiện lỗi tốt hơn. Nếu như TCP được thiết kế vào thời điểm hiện tại, nhiều khả năng nó sẽ bao gồm trường kiểm tra độ dư tuần hoàn (cyclic redundancy check - CRC) với độ dài 32 bit. Điểm yếu này một phần được bù đắp bằng CRC hay những kỹ thuật khác tại tầng thứ 2 (trong mô hình 7 lớp OSI) ở bên dưới cả TCP và IP như trong các giao thức điểm-điểm (PPP) hoặc Ethernet. Tuy nhiên điều này cũng không có nghĩa là trường kiểm tra tổng của TCP là không cần thiết: thống kê cho thấy các sai sót do cả phần cứng và phần mềm gây ra giữa các điểm áp dụng kỹ thuật kiểm tra CRC là khá phổ biến và kỹ thuật kiểm tra tổng có khả năng phát hiện phần lớn các lỗi (đơn giản) này.

Điểm cuối cùng là khả năng hạn chế tắc nghẽn.

Tin báo nhận (hoặc không có tin báo nhận) là tín hiệu về tình trạng đường truyền giữa 2 máy tính. Từ đó, hai bên có thể thay đổi tốc độ truyền nhận dữ liệu phù hợp với điều kiện. Vấn đề này thường được đề cập là điều khiển lưu lượng, kiểm soát tắc nghẽn. TCP sử dụng một số cơ chế nhằm đạt được hiệu suất cao và ngăn ngừa khả năng nghẽn mạng. Các cơ chế này bao gồm: cửa sổ trượt (sliding window), thuật toán slow-start, thuật toán tránh nghẽn mạng (congestion avoidance), thuật toán truyền lại và phục hồi nhanh,... Hiện nay, vấn đề cải tiến TCP trong môi truyền truyền dẫn tốc độ cao đang là một hướng nghiên cứu được quan tâm.

Kích thước cửa sổ TCPSửa đổi

Chuỗi số thứ tự gói và cửa sổ trong TCP hoạt động giống như một cái đồng hồ. Kích thước của cửa sổ (đo bằng byte) được thiết lập bởi khả năng tiếp nhận của máy tính nhận. Cửa sổ này được dịch đi mỗi khi máy tính nhận nhận được dữ liệu và gửi tin báo nhận. Khi chuỗi thứ tự tăng đến tối đa thì lại quay lại về 0.

Kích thước của cửa sổ là chiều dài (byte) của khối dữ liệu có thể lưu trong bộ đệm của bên nhận. Bên gửi chỉ có thể gửi tối đa lượng thông tin chứa trong cửa sổ này trước khi nhận được tin báo nhận.

Dãn kích thước cửa sổSửa đổi

Để tận dụng khả năng truyền dẫn của mạng thì cửa sổ dùng trong TCP cần được tăng lên. Trường điều khiển kích thước cửa sổ của gói TCP có độ dài là 2 byte và do đó kích thước tối đa của cửa sổ là 65.535 byte.

Do trường điều khiển không thể thay đổi nên người ta sử dụng một hệ số dãn nào đó. Hệ số này được định nghĩa trong tài liệu RFC 1323 có thể sử dụng để tăng kích thước tối đa của cửa sổ từ 65.535 byte lên tới 1 gigabyte. Tăng kích thước cửa sổ lớn hơn nữa cũng cần thiết trong TCP Tuning.

Việc tăng kích thước cửa sổ chỉ được dùng trong giao thức bắt tay 3 pha. Giá trị của trường co giãn cửa sổ thể hiện số bit cần được dịch trái đối với trường kích thước cửa sổ. Hệ số dãn có thể thay đổi từ 0 (không dãn) tới 14 (dãn tối đa).

Kết thúc kết nốiSửa đổi

Để kết thúc kết nối hai bên sử dụng quá trình bắt tay 4 bước và chiều của kết nối kết thúc độc lập với nhau. Khi một bên muốn kết thúc, nó gửi đi một gói tin FIN và bên kia gửi lại tin báo nhận ACK. Vì vậy, một quá trình kết thúc tiêu biểu sẽ có 2 cặp gói tin trao đổi.

Một kết nối có thể tồn tại ở dạng "nửa mở": một bên đã kết thúc gửi dữ liệu nên chỉ nhận thông tin, bên kia vẫn tiếp tục gửi.

Các vấn đề với mô hình bắt tay hai chiều

Mô hình bắt tay hai chiều không thành công do sự cố gói tin trùng lặp cũ.Giả sử rằng một gói tin trùng lặp cũ đến máy chủ.Gói tin cũ này đã đến từ một kết nối đã đóng trước đó và chứa một số thứ tự ‘z’.Tại một số thời điểm trong kết nối mới, máy chủ đang chấp nhận một gói có số thứ tự ‘z’.Khi nó nhận được gói tin cũ này có cùng số thứ tự ‘z’, nó sẽ vô tình chấp nhận gói tin cũ này và loại bỏ gói tin thực khỏi kết nối mới.

Tại sao TCP đóng kết nối bằng 4 bước

Trong trường hợp trên, nếu kết nối không diễn ra giữa máy khách và máy chủ, sự xuất hiện của gói yêu cầu kết nối trùng lặp cũ vẫn gây ra sự cố.Nếu máy chủ nhận được một gói như vậy, nó sẽ phản hồi lại bằng một gói SYN + ACK.Gói tin này sẽ bị khách hàng loại bỏ vì nó không có ý định kết nối.Nhưng máy chủ sẽ vào trạng thái deadlock, chờ máy khách gửi dữ liệu.

Một vấn đề khác là nếu một máy chủ C gửi một yêu cầu kết nối đến máy chủ bằng cách mạo danh máy khách, máy chủ sẽ phản hồi lại bằng một ACK cho máy khách.Máy khách sẽ loại bỏ gói ‘ACK’ này và yêu cầu máy chủ chấm dứt kết nối.Trong khoảng thời gian của các sự kiện này, máy chủ C có thể khởi động một cuộc tấn công giả mạo bằng cách gửi nhiều gói tin.

Nguyên lý hoạt động của giao thức TCP/IP

Nguyên lý hoạt động của giao thức TCP/IP trong mạng internetMô hình tổng quát của mạng Internet
Tại sao TCP đóng kết nối bằng 4 bước
Như trong hình 1, kết cấu vật lý của mạng Internet gồm có mạng chính chứa các server cung cấp dịch vụ cho mạng, mạng nhánh bao gồm các trạm làm việc sử dụng dịch vụ do Internet cung cấp. “Đám mây Internet” hàm chứa vô vàn mạng chính, mạng nhánh và bao phủ toàn thế giới. Để một hệ thống phức tạp như vậy hoạt động trơn tru và hiệu quả thì điều kiện tiên quyết là mọi máy tính trong mạng, dù khác nhau về kiến trúc, đều phải giao tiếp với mạng theo cùng một quy luật. Đó là giao thức TCP/IP.


http://vienthonggiare.com/, http://vfvtelecom.com/ Chuyên thiết bị cáp quang giá rẻ, Internet cáp quang tốc độ cao giá rẻ, Thiết bị mạng giá siêu rẻ…
Quá trình truyền dữ liệu qua mạng InternetNếu đã từng lập trình, bạn hẳn biết rằng một chương trình hoàn chỉnh được tạo nên từ nhiều module với các chức năng và nhiệm vụ khác nhau nhưng lại liên kết chặt chẽ với nhau. Quá trình truyền dữ liệu cũng như vậy. Để có thể truyền qua mạng Internet, dữ liệu phải được xử lý qua nhiều tầng. Một mạng intranet theo chuẩn OSI thường có bảy tầng nhưng Internet chỉ có bốn tầng xử lý dữ liệu là:http://vienthonggiare.com/, http://vfvtelecom.com/ Chuyên thiết bị cáp quang giá rẻ, Internet cáp quang tốc độ cao giá rẻ, Thiết bị mạng giá siêu rẻ…* Tầng application* Tầng transport còn gọi là tầng TCP (Transmission Control Protocol)* Tầng network còn gọi là tầng IP (Internet Protocol)* Tầng Datalink/Physicalhttp://vienthonggiare.com/, http://vfvtelecom.com/ Chuyên thiết bị cáp quang giá rẻ, Internet cáp quang tốc độ cao giá rẻ, Thiết bị mạng giá siêu rẻ…Giả sử bạn đang ở máy A và muốn gửi một thông điệp tới máy B. Bạn dùng một trình soạn thảo văn bản để soạn thư, sau đó nhấn nút Send. Tính từ thời điểm đó dữ liệu được xử lý lần lượt.Đầu tiên, dữ liệu được xử lý bởi tầng application. Tầng này có nhiệm vụ tổ chức dữ liệu theo khuôn dạng và trật tự nhất định để tầng application ở máy B có thể hiểu được. Điều này giống như khi bạn viết một chương trình thì các câu lệnh phải tuân theo thứ tự và cú pháp nhất định thì chương trình mới chạy được. Tầng application gửi dữ liệu xuống tầng dưới theo dòng byte nối byte. Cùng với dữ liệu, tầng application cũng gửi xuống các thông tin điều khiển khác giúp xác định địa chỉ đến, đi của dữ liệu.

Khi xuống tới tầng TCP, dòng dữ liệu sẽ được đóng thành các gói có kích thước không nhất thiết bằng nhau nhưng phải nhỏ hơn 64 KB. Cấu trúc của gói dữ liệu TCP gồm một phần header chứa thông tin điều khiển và sau đó là dữ liệu. Sau khi đóng gói xong ở tầng TCP, dữ liệu được chuyển xuống cho tầng IP.

Gói dữ liệu xuống tới tầng IP sẽ tiếp tục bị đóng gói lại thành các gói dữ liệu IP nhỏ hơn sao cho có kích thước phù hợp với mạng chuyển mạch gói mà nó dùng để truyền dữ liệu. Trong khi đóng gói, IP cũng chèn thêm phần header của nó vào gói dữ liệu rồi chuyển xuống cho tầng Datalink/Physical.

Khi các gói dữ liệu IP tới tầng Datalink sẽ được gắn thêm một header khác và chuyển tới tầng physical đi vào mạng. Gói dữ liệu lúc này gọi là frame. Kích thước của một frame hoàn toàn phụ thuộc vào mạng mà máy A kết nối.

Trong khi chu du trên mạng Internet, frame được các router chỉ dẫn để có thể tới đúng đích cần tới. Router thực ra là một module chỉ có hai tầng là Network và Datalink/Physical. Các frame tới router sẽ được tầng Datalink/Physical lọc bỏ header mà tầng này thêm vào và chuyển lên tầng Network (IP). Tầng IP dựa vào các thông tin điều khiển trong header mà nó thêm vào để quyết định đường đi tiếp theo cho gói IP. Sau đó gói IP này lại được chuyển xuống tầng Datalink/Physical để đi vào mạng. Quá trình cứ thế tiếp tục cho đến khi dữ liệu tới đích là máy B.

Khi tới máy B các gói dữ liệu được xử lý theo quy trình ngược lại với máy A. Theo chiều mũi tên, đầu tiên dữ liệu qua tầng datalink/physical. Tại đây frame bị bỏ đi phần header và chuyển lên tầng IP. Tại tầng IP, dữ liệu được bung gói IP, sau đó lên tầng TCP và cuối cùng lên tầng application để hiển thị ra màn hình.

http://vienthonggiare.com/, http://vfvtelecom.com/ Chuyên thiết bị cáp quang giá rẻ, Internet cáp quang tốc độ cao giá rẻ, Thiết bị mạng giá siêu rẻ…

Hệ thống địa chỉ và cơ chế truyền dữ liệu trong mạng Internet: Để một gói dữ liệu có thể đi từ nguồn tới đích, mạng Internet đã dùng một hệ thống đánh địa chỉ tất cả các máy tính nối vào mạng như hình 3.

Tại sao TCP đóng kết nối bằng 4 bước

Những tên và địa chỉ này được gửi cho máy tính nhận dữ liệu.

Để phân tích hệ thống tên/địa chỉ, hãy bắt đầu từ thấp lên cao:

a. Địa chỉ vật lý, còn gọi là địa chỉ MAC

Sở dĩ có tên gọi như vậy là vì địa chỉ này gắn liền với phần cứng và đại diện cho một thiết bị. Thông thường địa chỉ vật lý được đặt ngay trên bảng mạch máy tính hay trên thiết bị kết nối trực tiếp với máy (modem, card mạng…)

Địa chỉ vật lý được sử dụng như sau:

Thiết bị nhận dữ liệu kiểm tra địa chỉ vật lý đích của gói dữ liệu ở tầng vật lý. Nếu địa chỉ đích này phù hợp địa chỉ vật lý của thiết bị thì gói dữ liệu sẽ được chuyển lên tầng trên, nếu không nó sẽ bị bỏ qua.

b. SAP: Dùng để đại diện cho giao thức bên trên tầng MAC, ở đây là IP.

c. Địa chỉ mạng (network address)

Một thực thể trong mạng được xác định chỉ qua địa chỉ mạng mà không cần địa chỉ vật lý. Dữ liệu được truyền qua mạng chỉ dựa vào địa chỉ mạng. Khi nào dữ liệu tới mạng LAN thì địa chỉ vật lý mới cần thiết để đưa dữ liệu tới đích.

Ví dụ:
Máy gửi có địa chỉ 128.1.6.7 ->địa chỉ mạng là 128.1
Máy nhận có địa chỉ 132.5.8.12 ->địa chỉ mạng là 132.5
Mạng Internet có trách nhiệm dựa vào 2 địa chỉ mạng trên để đưa dữ liệu tới mạng 132.5. Khi tới mạng 132.5 thì dựa vào địa chỉ 8.12 sẽ tìm ra địa chỉ vật lý thực để truyền dữ liệu tới đích. Như vậy có một thắc mắc là: đã có địa chỉ vật lý rồi, tại sao lại cần thêm địa chỉ mạng?

Việc tồn tại 2 loại địa chỉ là do các nguyên nhân:

* 2 hệ thống địa chỉ được phát triển một cách độc lập bởi các tổ chức khác nhau.

* Địa chỉ mạng chỉ có 32 bit sẽ tiết kiệm đường truyền hơn so với địa chỉ vật lý 48 bit.

* Khi mạch máy hỏng thì địa chỉ vật lý cũng mất.

* Trên quan điểm người thiết kế mạng thì sẽ rất hiệu quả khi tầng IP không liên quan gì với các tầng dưới.

Như trên đã nói, từ địa chỉ mạng có thể tìm được địa chỉ vật lý. Công việc tìm kiếm này được thực hiện bởi giao thức ARP (Address Resolution Protocol). Nguyên tắc làm việc của ARP là duy trì một bảng ghi tương ứng địa chỉ IP – địa chỉ vật lý. Khi nhận được địa chỉ IP, ARP sẽ dùng bảng này để tìm ra địa chỉ vật lý. Nếu không thấy, nó sẽ gửi một gói dữ liệu, gọi là ARP request, chứa địa chỉ IP vào mạng LAN. Nếu máy nào nhận ARP request và nhận ra địa chỉ IP của mình thì sẽ gửi lại một gói dữ liệu chứa địa chỉ vật lý của nó.

Vậy từ địa chỉ vật lý, một máy tính trong mạng có thể biết địa chỉ IP của mình hay không? Câu trả lời là có. Giao thức gọi là RARP (Reverse Address Resolution Protocol) thực hiện công việc này. Giả sử trong mạng có một máy cần biết địa chỉ IP của mình, nó gửi một gói dữ liệu cho tất cả các máy trong mạng LAN. Mọi máy trong mạng đều có thể nhận gói dữ liệu này, nhưng chỉ có RARP server mới trả lại thông báo chứa địa chỉ mạng của máy đó.
http://vienthonggiare.com/, http://vfvtelecom.com/ Chuyên thiết bị cáp quang giá rẻ, Internet cáp quang tốc độ cao giá rẻ, Thiết bị mạng giá siêu rẻ…

Trên thực tế, khi muốn nhập vào một địa chỉ Internet nào đó, bạn hay đánh vào dòng chữ như “WWW.hotmail.com” mà ít thấy những dòng địa chỉ số khô khốc. Vậy có điều gì mâu thuẫn? Chẳng sao cả, Internet đã dùng một hệ thống gọi là DNS (Domain Name System) để đặt tên cho một host và cung cấp một số giao thức để chuyển đổi từ địa chỉ chữ ra địa chỉ số và ngược lại. Cách tổ chức tên của DNS tuân theo dạng hình cây như hình 4.

Tại sao TCP đóng kết nối bằng 4 bước

Một máy tính trong mạng sẽ ứng với một nút của cây. Như ở cây trên, máy ở lá FPT sẽ có địa chỉ hoàn chỉnh là fpt.com.vn. Mỗi nút trên cây biểu diễn một miền (domain) trong hệ thống DNS; mỗi miền lại có một hay nhiều miền con. Tại mỗi miền này đều phải có máy chủ DNS tương ứng quản lý hệ thống tên trong miền đó. Để hiểu rõ hơn hoạt động của DNS, lấy một ví dụ sau:

Một máy trạm có tên là test.fpt.com.vn muốn biết địa chỉ IP của máy www.microsoft. com, quá trình hỏi của nó như sau:

Khi máy test.fpt.com.vn gửi yêu cầu hỏi về máy www. microsoft.com tới DNS của miền fpt.com.vn, DNS xác định là tên đó không nằm trong miền mà nó quản lý và gửi ngược lên cho miền ở mức cao hơn là com.vn. Tại đây, DNS cũng không tìm được thông tin thoả mãn nên phải hỏi ngược lên DNS của miền vn.

Quá trình cứ thế tiếp diễn đến khi câu hỏi được gửi tới DNS của miền microsoft.com và tại đây câu hỏi được giải đáp.

Để hoạt động hiệu quả như trên, mỗi máy chủ DNS lưu trữ một cơ sở dữ liệu gồm các bản ghi chứa thông tin:

+ Tên của DNS cấp cao hơn

+ Địa chỉ IP

+ Địa chỉ dạng chữ tương ứng

Chỉ số của bản ghi được lấy từ địa chỉ IP tương ứng, nhờ đó từ địa chỉ IP có thể dễ dàng tìm ra địa chỉ chữ.

d. Protocol ID chỉ ra giao thức của tầng giao vận. Trên Internet trường này là TCP hoặc UDP.

e. Port là một số đặc trưng cho một chương trình chạy trên Internet. Ví dụ, chương trình lấy thư điện tử qua giao thức IMAP có port=143, truyền file có port =21, v.v…

f. Username là tên người đăng kí sử dụng chương trình.

ở phần II có nói tại router, IP sử dụng các thông tin điều khiển trong header của gói dữ liệu IP để quyết định đường đi tiếp theo của gói này. Có rất nhiều thông tin điều khiển nhưng ở đây chỉ xin phân tích các thông tin quan trọng.

– Đầu tiên là địa chỉ đích. Nếu địa chỉ đích trùng với địa chỉ của router đó thì gói dữ liệu được truyền trực tiếp cho host B. Nếu không trùng thì dữ liệu sẽ được truyền đến router tiếp theo trên đường đi. Vấn đề là router nào được chọn. Có 2 khả năng để lựa chọn router, tức là 2 khả năng để dẫn đường:

+ Thứ nhất là tuân theo một cách nghiêm ngặt source routing. Dữ liệu sẽ được truyền cho router tiếp theo trong source routing. Nhưng dữ liệu chỉ được truyền đi khi router được chọn có trong bảng các router có thể đến được của router hiện tại, bằng không sẽ sinh ra lỗi.

+ Thứ hai là “quên đi” source routing và tìm đường mới tới đích. Router tiếp theo được chọn dựa trên sự tìm đường này. Thông thường sự tìm đường dựa trên thuật toán Dijstra tìm kiếm theo chiều rộng. Trên thực tế, cách này đang được sử dụng rộng rãi và có thể trở thành chuẩn trong tương lai.

– Các gói dữ liệu IP thường có kích thước phụ thuộc vào mạng con. Các mạng con khác nhau thì kích thước gói IP của chúng cũng khác nhau. Vậy giả sử mạng A truyền được gói dữ liệu có kích thước lớn nhất là 1024 byte, mạng B truyền được gói dữ liệu có kích thước lớn nhất là 256 byte thì gói dữ liệu từ mạng A có kích thước 1024 byte qua mạng B như thế nào?

Để giải quyết vấn đề này, IP cung cấp khả năng phân và gom mảnh gói dữ liệu. Đây chính là lúc IP sử dụng trường flags và offset trong gói dữ liệu IP. Trường flags thực chất là các cờ thông báo gói dữ liệu này có bị phân mảnh hay không, trường offset chứa giá trị tương đối của gói con trong gói to ban đầu. Khi phân mảnh các cờ được bật lên, đồng thời trường offset được thiết lập giá trị. Dựa vào các dữ liệu trên, IP có thể dễ dàng gom mảnh gói dữ liệu, hồi phục khối dữ liệu to ban đầu.

Kiểm soát lỗi

Qua các phần trên ta thấy quá trình dữ liệu đi trên mạng đã khá rõ ràng nhưng trên một mạng rộng lớn như Internet thì có gì đảm bảo dữ liệu sẽ tới đích một cách an toàn? Điều gì xảy ra nếu trên đường đi các gói dữ liệu bị mất, tắc nghẽn, lạc đường…? Đây chỉ đơn thuần là các sự cố, nhưng thật đáng tiếc là nó lại rất hay xảy ra trên thực tế, do đó một yêu cầu đặt ra là phải có cơ chế thông báo và sửa lỗi trên mạng. Khi có lỗi, tầng IP đơn thuần huỷ bỏ dữ liệu và thông báo lỗi. Thông báo lỗi được thực hiện qua một giao thức gọi là ICMP (Internet Control Message Protocol). ICMP có thể coi là bạn đồng hành với IP và có một số đặc điểm sau:
http://vienthonggiare.com/, http://vfvtelecom.com/ Chuyên thiết bị cáp quang giá rẻ, Internet cáp quang tốc độ cao giá rẻ, Thiết bị mạng giá siêu rẻ…

– Dùng IP để truyền thông báo qua mạng

– Không có chức năng sửa lỗi mà chỉ đơn thuần là máy thông báo lỗi. Chức năng sửa lỗi là của tầng trên (tầng TCP)

– Thông báo lỗi về gói dữ liệu IP nhưng lại không thể thông báo lỗi về gói dữ liệu của chính mình

– Nếu gói dữ liệu IP bị phân mảnh thì khi xảy ra lỗi, ICMP chỉ thông báo lỗi của mảnh đầu tiên

Nói rằng việc sửa lỗi là của TCP nhưng thật ra TCP chẳng sửa lỗi gì cả, khi có lỗi xảy ra nó chỉ làm mỗi một việc là truyền lại. Hãy xem nó làm việc đó như thế nào. TCP truyền dữ liệu theo cơ chế “flow window”. Tất cả các byte truyền đều được đánh số thứ tự và TCP quản lý việc truyền dữ liệu dựa vào số thứ tự đó.

Giả sử có 13 byte dữ liệu gửi cho máy B (hình 5) .

Tại sao TCP đóng kết nối bằng 4 bước

Byte 0 đã gửi đi và được xác nhận là tới nơi. Sự xác nhận này được thực hiện bằng cách khi nhận được dữ liệu gửi đến, máy B sẽ gửi một thông báo về cho máy gửi. Thông báo đó có chứa số thứ tự của byte được chấp nhận chứa trong trường ACK.

Byte 1, 2 đã được gửi nhưng chưa có xác nhận, các byte 3, 4, 5 trong khung sẽ được truyền đi, các byte từ 6 trở đi không thể được truyền. Giá trị window limit được tính bằng công thức sau:

Window limit=SND UNA + SND WND
SND UNA = số byte đã gửi đi nhưng chưa được xác nhận

SND WND= số byte trong ô, giá trị này được lấy từ trường window trong gói dữ liệu TCP dùng để xác nhận các byte đã tới nơi. Giá trị này chính là số dữ liệu mà máy B có thể chấp nhận.

Máy B bây giờ lại gửi một thông báo thừa nhận có ACK=3, Window=6. Lúc này dữ liệu có dạng như hình 6.

Tại sao TCP đóng kết nối bằng 4 bước

Các byte 0, 1, 2 đã được xác nhận, cửa sổ đã mở rộng ra, window limit nhận giá trị 3+6 =9. Như vậy số byte có thể truyền đi được điều khiển bởi máy B, điều này giúp giảm đi sự tắc nghẽn giao thông trên mạng và làm cho máy B có thể chủ động xử lý dữ liệu đến một cách trôi chảy.

Khi có lỗi xảy ra trên đường truyền và phải truyền lại dữ liệu thì TCP không chờ đợi thông báo xác nhận từ phía máy B mà nó làm theo cách sau: khi truyền một gói dữ liệu, TCP bấm giờ và nếu thời gian hết mà không thấy thông báo xác nhận thì nó tiến hành truyền lại.

Như vậy thời gian để bấm giờ hết sức quan trọng. Ban đầu thời gian này được thiết lập xung quanh khoảng thời gian kể từ khi TCP A gửi dữ liệu đi đến khi nhận được thông báo xác nhận. Nhưng về sau do cách tính này không hợp lý nên người ta đã đưa ra nhiều cách thiết lập khác nhau. Một trong các cách tính được dùng phổ biến hiện nay là thuật toán của Phil Karn. Nội dung căn bản của thuật toán là mỗi khi hết thời gian thì khoảng thời gian bấm đồng hồ tăng lên gấp một số lần cho trước.

NVT=A x VT

NVT: giá trị thời gian mới để bấm đồng hồ

A : hằng số, thường lấy bằng 2

VT: giá trị thời gian cũá

Cơ chế kết nối giữa hai máy trong mạng Internet

Chặng cuối cùng trong hoạt động của mạng Internet là cơ chế kết nối giữa hai máy. Để toàn bộ các hoạt động truyền tin giữa hai máy trong mạng có thể diễn ra thì phải hình thành kênh liên lạc hay một kết nối giữa chúng. Quá trình đó diễn ra như sau (hình 7):

Tại sao TCP đóng kết nối bằng 4 bước

1: ULP B giả sử là một chương trình mail server ở Mỹ. Do là server nên lúc nào nó cũng chờ đợi sự kết nối.

2: ULP A là chương trình nhận thư điện tử của bạn. Để kết nối, bạn gửi yêu cầu kết nối xuống cho tầng TCP.

3: TCP chuẩn bị một gói dữ liệu TCP với cờ SYN=1 yêu cầu có sự đồng bộ hoá, SEQ có thể lấy bất kì giá trị nào, ở đây là =100 và gửi cho TCP B.

4: Sau khi nhận gói dữ liệu có SYN=1, TCP B gửi trả lại một thông báo có SYN=1, ACK=101, SEQ có thể lấy bất kì giá trị nào, ở đây là =177.

5: TCP A nhận được gói dữ liệu từ TCP B sẽ gửi tiếp một gói dữ liệu có ACK=178.

6: TCP A chuyển chấp nhận kết nối lên chương trình A.

7: Sau khi nhận nốt gói dữ liệu có ACK=178, TCP B chuyển chấp nhận kết nối lên chương trình B.

Sự kết nối giữa 2 module TCP ở các bước 3, 4, 5 gọi là cơ chế bắt tay 3 bước (three way handshake).

Quá trình đóng một kết nối cũng thực hiện tương tự.