Thiết kế mạng_3



Giới thiệu bộ giao thức TCP/IP

Đây là bộ giao thức được sử dụng phổ biến nhất. Mối quan hệ giữa năm tầng của bộ giao thức TCP/IP và bảy tầng của mô hình OSI được minh họa trong hình dưới đây.

Application

Application
Presentation

Sessision

Transport

Transport
Network

Internet
Data link

Data link
Physical

Physical
OSI

TCP/IP
Năm tầng của bộ giao thức TCP/IP gồm: application, transport, internet, data link và physical. Hai tầng data link và physical đôi khi được nhóm lại thành 1 tầng, gọi là tầng network interface (tầng giao tiếp mạng) hoặc network access hoặc host-to-network.
Tầng application của TCP/IP bao gồm các chức năng của tầng application, presentation và session trong mô hình OSI.
Các ứng dụng trong tầng application bao gồm:
-         FTP (File Transfer Protocol) và TFTP (Trivial File Transfer Protocol): truyền file giữa các thiết bị.
-         SMTP (Simple Mail Transfer Protocol) và POP3 (Post Office Protocol): cung cấp dịch vụ email.
-         HTTP (HyperText Transfer Protocol): truyền thông tin giữa WWW server và trình duyệt web.
-         Telnet (telecommunication network hoặc terminal network hoặc teletype network): cung cấp dịch vụ kết nối và thao tác với một máy tính ở xa thông qua môi trường mạng LAN hoặc Internet.
-         DNS (domain name system): chuyển đổi tên của thiết bị mạng (tên miền) sang địa chỉ (IP) và ngược lại.
-         SNMP (simple network management protocol): sử dụng để quản lý và theo dõi mạng.
-         DHCP (dynamic host configuration protocol): cung cấp địa chỉ IP động cho thiết bị.

Các giao thức tầng transport của bộ giao thức TCP/IP

Tầng này gồm hai giao thức:
-         TCP (transmission control protocol): giao thức TCP cung cấp khả năng truyền dữ liệu tin cậy và có yêu cầu thiết lập kết nối (hướng kết nối). Trước khi truyền dữ liệu, TCP trên thiết bị nguồn sẽ thiết lập một kết nối với TCP trên thiết bị đích, thực hiện đồng bộ giữa hai thiết bị. Trong quá trình trao đổi dữ liệu giữa hai thiết bị sẽ có cơ chế hồi báo, nếu bên nhận chưa nhận đủ dữ liệu nó sẽ yêu cầu bên gửi thực hiện gửi lại phần dữ liệu còn thiếu. Ví dụ: FTP là ứng dụng sử dụng giao thức TCP, giao thức này giúp FTP truyền dữ liệu đúng và đủ.
-         UDP (user datagram protocol): giao thức UDP cung cấp cơ chế truyền dữ liệu không có hồi báo, không thực hiện thiết lập kết nối trước khi truyền (connectionless). Nói cách khác, UDP không đảm bảo tất cả dữ liệu đã được gửi đi từ máy gửi sẽ đến máy đích. Việc kiểm tra dữ liệu đã được truyền đi có thành công hay không? đầy đủ hay chưa? có phải truyền lại hay không? là nhiệm vụ của các tầng cao hơn hoặc của người sử dụng. Ví dụ: TFTP là một ứng dụng sử dụng UDP. Sau khi nhận được dữ liệu, TFTP sẽ kiểm tra lỗi, kiểm tra tính toàn vẹn của dữ liệu, nếu có lỗi xảy ra, nó sẽ cảnh báo người dùng và yêu cầu truyền lại toàn bộ dữ liệu.
Hình sau minh họa các trường trong gói dữ liệu của TCP và UDP (PDU tại tầng này là segment)


Các trường của 1 UDP segment:
-         Source port number và destination port number (mỗi trường 16 bit): là các số nguyên không âm cho biết giao thức của tầng bên trên (tầng application) tại máy gửi và máy nhận.
-         Length (16 bit): kích thước của vùng header và data, đơn vị tính là từ nhớ 32-bit (32-bit word).
-         Checksum (16 bit): giá trị kiểm tra (checksum) của trường header và data, được sử dụng để đảm bảo dữ liệu (segment) đã nhận được là chính xác.
-         Data (kích thước có thể thay đổi): PDU của tầng bên trên.
Các trường của một TCP segment:
-         Source port number và destination port number (mỗi trường 16 bit): là các số nguyên không âm cho biết giao thức của tầng bên trên (tầng application) tại máy gửi và máy nhận.
-         Sequence number và acknowledgment number (mỗi trường 32 bit): là các số nguyên, được sử dụng để kiểm soát quá trình truyền dữ liệu, giúp đảm bảo các gói dữ liệu nhận được có thứ tự chính xác và đảm bảo dữ liệu gửi đã tới được đích.
-         Header length (4 bit): kích thước của header, tính bằng từ nhớ 32-bit.
-         Reserved (6 bit): không sử dụng, mang giá trị 0.
-         Code bit (6 bit): mã xác định kiểu của segment. Ví dụ, bit SYN (synchronize) được sử dụng để thiết lập phiên kết nối, bit ACK (acknowledge) được sử dụng để hồi báo, và bit FIN (finish) được sử dụng để đóng phiên kết nối.
-         Window size (16 bit): số octet mà thiết bị nhận có thể tiếp nhận, trước khi phải gửi một hồi báo cho thiết bị gửi, một octet gồm tám bit dữ liệu.
-         Checksum (16 bit): giá trị kiểm tra của trường header và data, được sử dụng để đảm bảo dữ liệu đã nhận được là chính xác.
-         Urgent (16 bit): báo hiệu kết thúc của phần dữ liệu cần truyền gấp.
-         Option (0 hoặc 32 bit): là trường tùy chọn, xác định kích thước tối đa của một TCP segment.
-         Data (kích thước không cố định): dữ liệu của tầng phía trên.
Chú ý, header của UDP có kích thước nhỏ hơn header của TCP. UDP không cần các trường sequence, acknowledgment, window size, vì nó không cần cơ chế đảm bảo truyền tin cậy, không thiết lập và duy trì kết nối.
Port number
TCP và UDP sử dụng port number để phân biệt các ứng dụng đang chạy trên cùng một thiết bị.
Port number được chia thành ba loại: well-known, registered và public/private.
-         Well-known là các port có giá trị từ 0 -> 1023, dùng cho các ứng dụng phổ biến. Ví dụ:
o       FTP: TCP sử dụng port 20 cho truyền dữ liệu (data) và port 21 cho điều khiển (control).
o       TFTP: UDP sử dụng port 69.
o       SMTP: TCP sử dụng port 25.
o       POP3: TCP sử dụng port 110.
o       HTTP: TCP sử dụng port 80.
o       Telnet: TCP sử dụng port 23.
o       DNS: TCP và UDP sử dụng port 53.
o       SNMP: UDP sử dụng port 161.
-         Registered là các port có giá trị từ 1024 -> 49151, người dùng muốn sử dụng các port này, cần phải đăng kí với tổ chức IANA.
-         Public/private là các port có giá trị từ 49152 -> 65535, người dùng được phép sử dụng tự do các port này mà không cần đăng kí.
Hình dưới đây minh họa thiết bị tại Toronto đang mở một phiên làm việc Telnet với thiết bị ở London. Để ý là, giá trị source port từ Toronto là 50051, nghĩa là, Toronto ghi nhận phiên làm việc telnet này với London ở cổng 50051, để phân biệt với các phiên làm việc telnet khác có thể đang chạy trên chính máy Toronto.
Thiết bị tại London nhận được gói tin với giá trị dest port là 23, nó nhận ra đây là một phiên làm việc telnet. Trong gói trả lời, nó sử dụng dest port là 50051, với giá trị dest port này, Toronto sẽ biết đây là phiên telnet mà nó đã mở để làm việc với London.
 


Sequencing (sắp tuần tự), acknowledgment (hồi báo) và Windowing (khung truyền) của TCP

Để minh họa hoạt động của TCP, hãy xem xét một phiên làm việc của TCP từ lúc thiết lập kết nối, truyền dữ liệu  và đóng kết nối.
Một kết nối TCP được thiết lập bằng quá trình “three-way handshake” – ba lần bắt tay. Quá trình này sử dụng trường code bit (SYN, ACK), trường sequence number và acknowledgment number.
Hình sau thể hiện quá trình “three-way handshake”:


Ở ví dụ trên, người dùng tại Toronto muốn thiết lập một phiên làm việc dựa trên TCP với  thiết bị ở London để chạy chương trình telnet.
Bước đầu tiên của “three-way handshake” là bước khởi tạo, Toronto gửi đi một segment với bit SYN được thiết lập – có nghĩa là nó muốn bắt đầu một phiên làm việc và thực hiện đồng bộ với London. Segment này có giá trị sequence number khởi tạo là 21.
Giả sử thiết bị tại London đồng ý thiết lập phiên làm việc, nó sẽ gửi lại một segment với bit SYN được thiết lập. Ngoài ra, bit ACK cũng được thiết lập, vì London phải gửi hồi báo cho Toronto biết là đã nhận được segment mà Toronto đã gửi trước đó. Giá trị acknowledgment number được thiết lập là 22, chỉ ra rằng London đang mong nhận được segment thứ 22, tức là nó đã nhận được segment 21. Segment mới thiết lập giá trị sequence number là 75.
Cuối cùng, Toronto trả lời bằng một segment hồi báo với sequence number là 22 (như London đang mong đợi), và acknowledgment number là 76, chỉ ra rằng, nó đang mong đợi segment thứ 76, nghĩa là segment thứ 75 đã truyền tới đích thành công. Phiên làm việc đã được thiết lập, và hai máy Toronto và London có thể bắt đấu trao đổi dữ liệu.
Chú ý: sequence và acknowledgment number chính là số octet, chứ không phải số segment. Để dễ hiểu, ở ví dụ trên đã giả sử một segment là một octet dữ liệu. Trong thực tế điều này không đúng.
Trường window size trong segment có nhiệm vụ kiểm soát lưu lượng (flow) của phiên truyền dữ liệu. Nó cho biết số octet mà một thiết bị có thể nhận trước khi phải gửi một hồi báo. Vì mỗi thiết bị có khả năng tiếp nhận dữ liệu khác nhau (nếu thiết bị quá bận nó sẽ yêu cầu gửi số lượng dữ liệu ít hơn), nên mỗi thiết bị có thể có windows size khác nhau. Ví dụ minh họa trong hình dưới đây.

Ví dụ ở hình trên, window size tại Toronto có giá trị 3, và tại London có giá trị 2. Vì vậy, khi Toronto gửi dữ liệu tới London, nó có thể gửi hai octet trước khi phải đợi một hồi báo, Ngược lại, khi London gửi dữ liệu tới Toronto, nó có thể gửi ba octet trước khi phải đợi một hồi báo.
Chú ý: window size được tính bằng số octet có thể gửi, không phải số segment. Để dễ hiểu, ví dụ ở trên đã coi một segment có kích thước bằng một octet. Thực tế, kích thước của window size lớn hơn nhiều so với ví dụ, điều này cho phép thiết bị truyền một khối lượng lớn dữ liệu giữa các lần hồi báo.
Sau khi toàn bộ dữ liệu của phiên đã được truyền, phiên làm việc sẽ được đóng. Quá trình đóng cũng tương tự như quá trình thiết lập, cũng sử dụng “handshake”, gồm bốn bước, được minh họa trong hình sau:


Ở hình trên, Toronto muốn đóng phiên telnet với London. Bước đầu tiên của quá trình “handshake” là Toronto gửi một segment với bit FIN được thiết lập, với mục đích là kết thúc phiên làm việc. Segment này cũng bao gồm sequence number mà Toronto đang sử dụng (sequence number = 107).
London ngay lập tức trả lời yêu cầu của Toronto. Với segment có bit ACK được thiết lập và giá trị của ack = 108, có nghĩa là London đã nhận được segment số 107. Segment của London thiết lập sequence number 322. Sau đó London thông báo cho ứng dụng telnet biết là kết nối telnet từ Toronto tới nó đã bị đóng (đóng một chiều, từ Toronto tới London).
Khi ứng dụng tại London gửi yêu cầu đóng kết nối chiều ngược lại, London sẽ gửi một segment mới, với cờ FIN được thiết lập, nghĩa là muốn đóng phiên làm việc.
Cuối cùng, Toronto đáp lại với một segment hồi báo có acknowledgment number = 323 (nghĩa là thiết bị này đã nhận được segment 322). Phiên làm việc bây giờ đã được đóng ở cả hai phía.
-------------------------------------------------------
LGC - Lược dịch “Designing for Cisco Internetwork Solutions”