Tất cả các giao thức ở lớp Transport đều có các tính năng chính sau:
Phân đoạn và tổng họp - hầu hết các mạng đều có một giới hạn về khối lượng dữ liệu mà có thể chứa trong một PDU. Tại máy gửi, lớp Transport phân đoạn dữ liệu từ lóp Application thành các khổi dữ liệu có kích thước phù họp với giới hạn này. Tại máy nhận, lóp Transport tổng họp sắp xếp lại dữ liệu trước khi gửi nó đến ứng dụng hay dịch vụ đích.
Phối họp các cuộc trao đổi - có thể có nhiều ứng dụng hay dịch vụ đang chạy trên mỗi máy tính trên mạng. Mỗi ứng dụng hay dịch vụ này được gán một địa chỉ gọi là port để lớp Transport có thể xác định dữ liệu này thuộc ứng dụng hay dịch vụ nào.
Bên cạnh việc sử dụng thông tin trong header đối với tính năng cơ bản như phân đoạn và tổng hợp sắp xếp lại dữ liệu, một vài giao thức tại lóp Transport hỗ trợ: •
• Truyền theo hướng có kết nối (Connection-oriented): thiết lập một kết nối giữa hai ứng dụng trước khi chúng truyền dữ liệu thực sự. Làm như vậy đảm bảo rằng các ứng dụng đã san sàng nhận dữ liệu và việc quản lý chúng trở nên chặt chẽ hom.
• Phân phát dữ liệu tin cậy: đảm bảo rằng máy nhận đã nhận đầy đủ các segment mà máy gửi đã gửi. Nếu có segment nào bị mất vì những lý do nào đó trong q trình truyền thì máy gửi sẽ gửi lại segment đó.
• Sắp xếp lại dữ liệu theo đúng thứ tự: khi đi từ nguồn đển đích, các segment có thể đi theo nhiều hướng khác nhau với thời gian truyền khác nhau. Do đó, chúng có thể đển đích khơng đúng trật tự như ban đầu. Dựa vào số thứ tự của các segment, lớp Transport sắp xếp chúng lại đúng thứ tự mà máy gửi đã gửi. • Điều khiển luồng (Flow control): mỗi máy tính thường bị giới hạn về các tài
nguyên như bộ nhớ, bandwidth,... Khi lớp Transport nhận biết được những tài nguyên này bị quá tải, một vài giao thức có thể yêu cầu ứng dụng đang gửi hãy giảm tốc độ gửi. Lớp Transport thực hiện điều này bằng cách điều chỉnh khối lượng dữ liệu truyền. Điều khiển luồng có thể ngăn chặn tình trạng mất các segment và tránh truyền lại không cần thiết.
1 .3 .2 I HỖ TR Ợ TRUYÊN KHÔNG TIN CẬY
Như đã biết, tính năng chính của lớp Transport là quản lý việc trao đổi dữ liệu giữa các ứng dụng trên các máy tính. Tuy nhiên, các ứng dụng khác nhau có thể có những yêu cầu về vận chuyển dữ liệu khác nhau, vì thế có nhiều giao thức Transport khác nhau đã được phát triển để đáp ứng các yêu cầu này.
Có những dịch vụ đòi hỏi việc vận chuyển dữ liệu phải tin cậy, nhưng cũng có những dịch vụ khơng cần như vậy. Trong ngữ cảnh này, tin cậy (reliability) có nghĩa là đảm bảo rằng mỗi segment được gửi từ máy gửi đều phải đi đến đích. Để đạt được độ tin cậy này, lớp Transpor có ba hoạt động cơ bản:
• Máy gửi theo dõi tất cả các segment đã được gửi ra ngồi.
• Sau khi nhận được các segment, máy nhận phải phản hồi lại cho máy gửi rằng mình đã nhận được những segment nào.
• Máy gửi sẽ truyền lại bất kỳ segment nào mà nó khơng được máy nhận xác nhận là đã nhận được.
Vì phải theo dối, phản hồi và truyền lại dữ liệu bị mất nên phát sinh nhiều thông tin điều khiển được trao đổi giữa máy gửi và máy nhận. Chính vì điều này làm cho tải qua các máy tính và các tài nguyên mạng tăng lên. Những thông tin điều khiển này nằm trong header của Transport.
Đây chính là sự đánh đổi giữa giá trị của độ tin cậy và gánh nặng mà nó đặt ra cho mạng. Dựa trên yêu cầu của ứng dụng, những người phát triển ứng dụng phải cân nhắc
việc chọn giao thức vận chuyển ở lớp Transport cho phù hợp. Bên cạnh giao thức vận chuyển dữ liệu tin cậy, lóp Transport cịn có giao thức vận chuyển không tin cậy (unreliable). Giao thức này chỉ quan tâm đến một điều là làm sao vận chuyển dữ liệu càng nhanh càng tốt (best-effort). Do đó, nó khơng có ba hoạt động cơ bản trên. Việc xử lý lỗi và truyền lại được giao phó cho giao thức ở lớp Application.
Xác định nhu cầu về độ tin cậy
Các dịch vụ như cơ sở dữ liệu, web, e-mail đều yêu cầu tất cả dữ liệu được gửi phải đến được đích trong trạng thái nguyên vẹn giống như ban đầu thì mới có thể sử dụng được. Vì thế, các dịch vụ này phải dùng giao thức ở lớp Transport có độ tin cậy cao. Các ứng dụng khác thì cho phép mất một lượng dữ liệu nhỏ. Ví dụ, nếu một hay hai segment của chuỗi dữ liệu video bị lỗi tại ứng dụng đích, nó chỉ tạo ra một lỗ thủng tạm thời trong chuỗi dữ liệu, điều này có thể làm cho chất lượng hình ảnh giảm đi một ít nhưng người dùng khơng dễ nhận ra điều này. Trong trường hợp này, tốt hơn hết là hiển thị hình ảnh tốt nhất có thể có tại thời điểm các segment đến và bỏ qua độ tin cậy.
1.3.3 I TCP VÀ UDP
Hai giao thức phổ biến của họ giao thức TCP/IP tại lóp Transport là Transmission Control Protocol (TCP) và User Datagram Protocol (UDP). Cả hai giao thức này đều có nhiệm vụ là quản lý việc trao đổi dữ liệu giữa các ứng dụng. Sự khác nhau giữa hai giao thức này là tính năng của chúng: TCP là một giao thức tin cậy, còn UDP là một giao thức không tin cậy.
Transmission Control Protocol (TCP)
TCP là một giao thức hướng kết nổi (oriented-connection), được mô tả trong RFC 793. Nó cung cấp một phương thức truyền dữ liệu song cơng hồn toàn (full duplex) tin cậy. Đổi với TCP, một kết nối phải được thiết lập trước khi một hoạt động truyền thơng tin thực sự có thể bắt đầu. TCP chịu trách nhiệm phân chia dữ liệu thành các segment, sắp xểp lại các segment thành dữ liệu ban đầu tại đích, truyền lại bất kỳ segment nào không thể nhận được. TCP cung cấp một mạch ảo giữa các ứng dụng, vì các tính năng trên, nên TCP phải phát sinh thêm thông tin điều khiển được trao đổi giữa các máy tính.
Các ứng dụng của TCP:
• Hypertext Transfer Protocol (HTTP). • File Transfer Protocol (FTP).
• Telnet. • v.v ...
User Datagram Protocol (UDP)
UDP là một giao thức không kết nối (connectionless protocol). Nó là một giao thức đơn giản dùng để trao đổi các datagram mà khơng có báo nhận và cũng khơng có sự bảo đảm chuyển phát nào. Xử lý lỗi và truyền lại được giao phó cho giao thức lớp cao hơn. Nó truyền các datagram theo phương thức “best-effort”. Do đó, ưu điểm của UDP là chi phí phân phổi dữ liệu thấp. UDP được thiết kể cho các ứng dụng không cần sắp xếp lại các segment theo đúng thứ tự.
Các ứng dụng của UDP gồm:
• Dynamic Host Control Protocol (DHCP). • Domain Name System (DNS).
• Simple Network Management Prorocol (SNMP). • Trivial File Transfer Protocol (TFTP).
• Voice over IP (VoIP). • Video streaming. • v.v...
1.3.4 I ĐỊA CHỈ PORT
Đe phân biệt các segment và datagram của mỗi ứng dụng, cả TCP và UDP đều dựa vào thông tin duy nhất là chỉ số port. Thông tin này nằm trong phần header.
Source port là số nhận dạng của ứng dụng nguồn. Destination port là số nhận dạng của ứng dụng đích ở xa.
Port được gán theo nhiều cách khác nhau, tùy thuộc vào thông điệp này là một yêu cầu từ client gửi đến server hay một trả lời từ server gửi đến client. Trong khi các dịch vụ server đều được gán với một port cố định và tĩnh, thì các ứng dụng client được gán một port động ngẫu nhiên. Lý do vì nếu các dịch vụ server thay đổi port thường xuyên thì người dùng khơng thể nào biết được port của chúng để truy cập đến.
To: you@example.com From: me@example.com Su b je ct Email
Different
Applications Electronic Mail HTML Page Internet Chat
ị 1 iỊ ị Ï Protocols POP3 HTTP IM Application Qata Port Port Numbers 110 Application Data Port Application Data Port 80 531 Hình 19: Địa chỉ Port
Những dịch vụ server phổ biến thường có một port mặc định và người quản trị hầu như khơng thay đổi port này khi cấu hình nếu khơng có một lý do gì đặc biệt. Làm như vậy để tạo thuận lợi cho người sử dụng. Khi muốn truy cập đến dịch vụ server nào đó, người sử dụng khơng cần chỉ ra port đích. Chẳn hạn HTTP có port là 80, telnet có port là 23,...Khi một ứng dụng client gửi một yêu cầu đến một ửng dụng server, tùy thuộc vào ứng dụng mà lớp Transport biết được port đích là bao nhiêu mà gán cột Destiantion port trong header. Ví dụ, bạn mở một trình duyệt web và truy cập đến một website. Trình duyệt web gửi một yêu cầu đến một dịch vụ web server. Khi đó Source port là một số ngẫu nhiên và Destination port là 80. Neu người quản trị thay đổi port của dịch vụ web server thành 8080 thì khi đó trong đường dẫn URL người sử dụng phải chỉ ra port 8080.
Port nguồn của một yêu cầu từ client được gán ngẫu nhiên miễn là không trùng với port nào khác đang được dùng trong hệ thống. Port này đóng vai trị là một địa chỉ trả về của ứng dụng đang yêu cầu. Lớp Transport theo dõi port này và ứng dụng phát sinh yêu cầu để khi nhận được một trả lời thì nó có thể chuyển đến đúng úng dụng đã yêu cầu. Trong một trả lời từ server, port này được dùng như port đích.
Socket
Đặt trường hợp, chúng ta có hai máy tính với địa chỉ IP là 192.168.1.20, 192.168.1.21 và trên hai máy tính này đều mở trình duyệt web và cùng truy cập đến một web site. Giả sử rằng cả hai trình duyệt web này đều được gán một port ngẫu nhiên là 49152,
thì làm sao web server phân biệt được yêu cầu nào trên máy nào để xử lý và phản hồi cho đúng. Lúc này, xuất hiện một khái niệm mới đó là Socket.
Socket là một sự kểt họp giữa địa chỉ IP của lớp Network và port của lóp Transport để nhận dạng một tiến trình duy nhất đang chạy trên một máy tính. Trong trường hợp này hình thành hai socket: 192.168.1.20:49152 và 192.168.1.21:49152. Như vậy, dựa vào socket mà web server có thể phân biệt được các cuộc trao đổi giữa các host.
Port Number Group
Internet Assigned Numbers Authority (IANA) là một tổ chức có nhiệm vụ gán port cho các ứng dụng và cũng là tổ chức đưa ra các chuẩn địa chỉ khác nhau. * •
0 to 1023 Well-known Ports
1024 to 49151 Registered Ports
49152 to 65535 Private and/or Dynamic Ports
__ -- " i' _________ ____ _____ _ < s» i ft« ______ -
Port G roup Port N um ber R an ge
Trong TCP header và UDP header giá trị Source port và Destination port được dùng 2 byte để biểu diễn. Như vậy giá trị của port nằm trong khoảng từ 0 đến 65535. Chúng được chia làm ba khoảng:
• Các port thơng dụng (Well Known Port) (từ 0 đến 1023): những số này được gán cho dịch vụ và ứng dụng phổ biến, chan hạn như HTTP (web server)-80, POP3/SMTP (e-mail server)-10/25, Telnet-23, và v.v...Bằng cách định nghĩa những well-known- port này cho các ứng dụng server, các ứng dụng client, có thể được lập trình để yêu cầu một kết nối đến port chỉ định đó và dịch vụ được gán đến nó.
• Các port đã đăng ký (Registered Port) (từ 1024 đến 49151): những port này được gán cho các tiến trình hay ứng dụng của người dùng. Các tiến trình này là các ứng dụng cá nhân mà người dùng cài đặt vào máy chứ không phải các dịch vụ server phổ biển ở trên vốn sử dụng well-known-port. Port của các chương trình client thường được cấp động ngẫu nhiên trong khoảng này.
• Port riêng hay port động (Dynamic hay Private Port) (từ 49152 đến 65535): cịn có tên gọi là port phù du (Ephemeral Port), những port này thường được gán động cho các ứng dụng client khi khởi tạo một kết nối. Các client ít khi sử dụng các port Dynamic hay Private để kết nối đến server.
Port Number Acronym I1 20 21 22 Protocol TCP TCP TCP Application
File Transfer Protocol (data) FTP File Transfer Protocol (control) FTP
Secure Shell SSH
* , v , „„ iini-itr f» _ „ „ „ „ v „ .Mjimm -jTi-iai-u >■ n j ir.iriir-rr.m T.iiTii .-fiiM rr-.iTr.Tr:
23 I TCP Telnet -
25 TCP Simple Mail Transfer Protocol SMTP
53 UDP. TCP Domain Name Service DNS
67, 68 UDP Dynamic Host Configuration Protocol DHCP
69 UDP Trivial File Transfer Protocol TFTP
80 TCP Hypertext Transfer Protocol HTTP
110 TCP Post Office Protocol version 3 POP3
143 TCP Internet Message Access Protocol IMAP
161 UDP Simple Network Management Protocol SNMP
443 TCP Hypertext Transfer Protocol Secure HTTPS
Bảng 2: Các port thông dụng
Là người quản trị các dịch vụ, bạn cần phải biết rõ trên các server của mình hiện giờ đang mở những port nào, trạng thái của chúng ra sao, hay có bao nhiêu kết nối từ bên ngoài đến server. Cách tốt nhất để bảo mật các server của mình là bạn tực hiện nguyên tắc “đóng tất cả các port chỉ mở những port nào cần thiết cho hoạt động của server”. Làm như vậy bạn sẽ kiểm soát các port được dễ dàng hơn và không tạo nhiều kẻ hở cho những truy cập khơng mong muốn đến server.
Một tiện ích quan trọng mà hầu như người quản trị mạng nào cũng cần để kiểm tra những điều này đó là netstat.
C : \ > n e t s t a t
A c t iv e Co nnectio ns
Proto L o ca l Address F o re ig n Address S ta te
TCP kenpc: 3126 192.16 8.0.2:n e t b io s -s s n ESTABLISHED
TCP kenpc: 3158 2 0 7.1 3 8.126.152:h t tp ESTABLISHED
TCP kenpc: 3159 2 0 7.1 3 8.126.169:h t tp ESTABLISHED
TCP kenpc:3160 2 0 7.1 3 8.126.169:h t tp ESTABLISHED
TCP kenpc:3161 s c . m sn.com :h ttp ESTABLISHED
TCP kenpc:3166 W W W.c is c o .c o m : h ttp ESTABLISHED
C : \ >
Netstat, liệt kê các giao thức đang được các dịch vụ hay ứng dụng sử dụng, địa chỉ và port cục bộ, địa chỉ và port ở ngoài, và trạng thái của liên kết.
Một chức năng của lớp Transport là một phiên (session) làm việc giữa các thiết bị tương tự nhau tại lớp ứng dụng. Để hoạt động truyền dữ liệu bắt đầu, cả hai ứng dụng truyền và nhận thông báo cho hệ điều hành ràng một kết nối sẽ được khởi tạo. Thiết bị khởi đầu một kết nối phải được chấp nhận bởi thiết bị kia. Các giao thức mạng để xác nhận rằng hoạt động truyền dữ liệu đã được quản lý và cả hai phía đang ở trạng thái san sàng.
Kết nổi này được thiết lập và truyền dữ liệu bắt đầu sau khi đạt được tất cả sự đồng bộ. Trong quá trình truyền dữ liệu thực sự, hai máy tiếp tục thông tin để xác nhận rằng dữ liệu đang được phân phát chính xác.
TCP - Làm cho cuộc trao đổi trở nên tin cậy
Sự khác biệt chính giữa giao thức TCP và UDP là độ tin cậy. Độ tin cậy của giao thức TCP được thể hiện ở chỗ nó là một giao thức hướng kết nối (connection-oriented). Điều này có nghĩa là: trước khi hai ứng dụng trên hai máy tính có thể trao đổi dữ liệu cho nhau địi hỏi phải có một kết nối được thiết lập giữa chúng. Nó đảm bảo ràng mỗi máy tính đã san sàng trao đổi dữ liệu. Đồng thời, nó cho phép theo dõi một phiên giao dịch hay chuỗi giao tiếp giữa các máy tính. Một cuộc trao đổi hồn chỉnh dựa trên giao thức TCP yêu cầu phải thiết lập một phiên giao dịch theo cả hai hướng.
TCP còn một cơ chế khác đỏ là sự xác nhận trong quá trình trao đổi dữ liệu để đảm bảo rằng máy nhận đã nhận đầy đủ dữ liệu từ máy gửi. Sau khi kết nối được thiết lập, máy nhận phải phản hồi cho máy gửi biết nó đã nhận được những segment nào và mong chờ nhận segment nào kế tiếp bằng các ACK (acknowledgement). Khi nhận ACK từ máy nhận, máy gửi biết được là mình đã gửi thành công và không theo dõi các segment đó nữa. Ngược lại, nếu khơng nhận được nó trong một khoảng thời gian