CHƯƠNG I NHỮNG KIẾN THỨC TỔNG QUAN VỀ IP-PN 1.1 Giới thiệu về bộ giao thức TCP/IP Tháng 6/1968, một cơ quan của Bộ Quốc phòng Mỹ là Cục các dự án nghiên cứu tiên tiến (Advanced Research Project Agency - viết tắt là ARPA) đã xây dựng dự án nối kết các trung tâm nghiên cứu lớn trong toàn liên bang với mục tiêu là chia sẻ, trao đổi tài nguyên thông tin, đánh dấu sự ra đời của ARPANET - tiền thân của mạng Internet hôm nay. Ban đầu, giao thức truyền thông được sử dụng trong mạng ARPANET là NCP (Network Control Protocol), nhưng sau đó được thay thế bởi bộ giao thức TCP/IP (Transfer Control Protocol/ Internet Protocol). Bộ giao thức TCP/IP gồm một tập hợp các chuẩn của mạng, đặc tả chi tiết cách thức cho các máy tính thông tin liên lạc với nhau, cũng như quy ước cho đấu nối liên mạng và định tuyến cho mạng. TCP/IP có những đặc điểm sau đây đã làm cho nó trở nên phổ biến: - Độc lập với kiến trúc mạng: TCP/IP có thể sử dụng trong các kiến trúc Ethernet, Token Ring, trong mạng cục bộ LAN cũng như mạng diện rộng WAN.
- Chuẩn giao thức mở: vì TCP/IP có thể thực hiện trên bất kỳ phần cứng hay hệ điều hành nào. Do đó, TCP/IP là tập giao thức lý tưởng để kết hợp phần cứng cũng như phần mềm khác nhau. - Sơ đồ địa chỉ toàn cầu: mỗi máy tính trên mạng TCP/IP có một địa chỉ xác định duy nhất. Mỗi gói dữ liệu được gửi trên mạng TCP/IP có một Header gồm địa chỉ của máy đích cũng như địa chỉ của máy nguồn.
- Khung Client - Server: TCP/IP là khung cho những ứng dụng client - server mạnh hoạt động trên mạng cục bộ và mạng diện rộng. - Chuẩn giao thức ứng dụng: TCP/IP không chỉ cung cấp cho người lập trình phương thức truyền dữ liệu trên mạng giữa các ứng dụng mà còn cung cấp nhiều phương thức mức ứng dụng.2 Mô hình phân lớp bộ giao thức TCP/IP Bộ giao thức TCP/IP là sự kết hợp của các giao thức khác nhau ở các lớp khác nhau, không chỉ có các giao thức TCP và IP. Mỗi lớp có chức năng riêng. Mô hình TCP/IP được tổ chức thành 4 lớp (theo cách nhìn từ phía ứng dụng xuống lớp vật lý) như sau: Hình 1.1: Mô hình phân lớp bộ giao thức TCP/IP Lớp ứng dụng (Application layer): Điều khiển chi tiết từng ứng dụng cụ thể.
Nó tương ứng với các lớp ứng dụng, trình diễn trong mô hình OSI. Nó gồm các giao thức mức cao, mã hóa, điều khiển hội thoại …Các chương trình ứng dụng giao tiếp với các giao thức ở lớp vận chuyển để truyền và nhận dữ liệu. Chương trình ứng dụng truyền dữ liệu ở dạng yêu cầu đến lớp vận chuyển để xử lý trước khi chuyển xuống lớp Internet để tìm đường đi. Lớp vận chuyển (Transport layer): Chịu trách nhiệm truyền thông điệp (message) từ một số tiến trình (một chương trình đang chạy) tới một tiến trình khác.
Lớp vận chuyển sẽ đảm bảo thông tin truyền đến nơi nhận không bị 11 lỗi và đúng theo trật tự. Nó có 2 giao thức rất khác nhau là giao thức điều khiển truyền dẫn TCP và giao thức dữ liệu đồ người sử dụng UDP. Lớp Internet (Internet layer): Cung cấp chức năng đánh địa chỉ, độc lập phần cứng mà nhờ đó dữ liệu có thể di chuyển giữa các mạng con có kiến trúc vật lý khác nhau. Lớp này điều khiển việc chuyển gói qua mạng, định tuyến gói.
Các giao thức của lớp này là IP, ICMP, ARP, RARP. Lớp truy cập mạng (Network Access Network): Cung cấp giao tiếp với mạng vật lý. (Thông thường lớp này bao gồm các driver thiết bị trong hệ thống vận hành và các card giao diện mạng tương ứng trong máy tính. Lớp này thực hiện nhiệm vụ điều khiển tất cả các chi tiết phần cứng hoặc thực hiện giao tiếp vật lý vớ cácp (hoặc với bất kỳ môi trường nào được sử dụng)).
Cung cấp kiểm soát lỗi dữ liệu phân bố trên mạng vật lý. Lớp này không định nghĩa một giao thức riêng nào cả, nó hỗ trợ tất cả các giao thức chuẩn và độc quyền. Các giao thức trong mô hình TCP/IP: 1.1 Giao thức Internet Mục đích của giao thức Internet là chuyển thông tin (dữ liệu) từ nguồn tới đích. IP sử dụng các gói tin dữ liệu (datagram).
Mỗi datagram có chứa địa chỉ đích và IP sử dụng thông tin này để định tuyến gói tin tới đích của nó theo đường đi thích hợp. Các gói tin của cùng một cặp người sử dụng dùng những tuyến thông tin khác nhau, việc định tuyến là riêng biệt đối với từng gói tin. Giao thức IP không lưu giữ trạng thái, sau khi datagram được chuyển đi thì bên gửi không còn lưu thông tin gì về nó nữa, vì thế mà không có phương pháp nào để phát hiện các gói bị mất và có thể dẫn tới tình trạng lặp gói và sai thứ tự gói tin.2: Định tuyến khi sử dụng IP datagram. Giao thức Internet là giao thức phi kết nối (connectionless), nghĩa là không cần thiết lập đường dẫn trước khi truyền dữ liệu và mỗi gói tin được xử lí độc lập.
IP không kiểm tra tổng cho phần dữ liệu của nó, chỉ có Header của gói là được kiểm tra để tránh gửi nhầm địa chỉ. Các gói tin có thể đi được theo nhiều hướng khác nhau để tới đích. Vì vậy dữ liệu trong IP datagram không được đảm bảo. Để xử lý nhược điểm mất hoặc lặp gói IP phải dựa vào giao thức lớp cao hơn để truyền tin cậy (ví dụ TCP).
Data Sender 1 Data Receiver Data Data Sender 2 Data Data Hình 1. 3: Giao thức kết nối vô hướng 1.2 Giao thức lớp vận chuyển a.Giao thức UDP Giao thức UDP (User Datagram Protocol) cung cấp cơ chế chính yếu mà các chương trình ứng dụng sử dụng để gửi đi các gói tin tới các chương trình ứng dụng khác. UDP cung cấp các cổng để phân biệt các chương trình ứng dụng trên một máy tính đơn. Nghĩa là, cùng với mỗi một bản tin gửi đi, mỗi bản tin UDP 13 còn bao gồm một giá trị cổng nguồn và cổng đích, giúp cho phần mềm UDP tại đích có thể phát chuyển gói tin tới đúng nơi nhận và cho phép nơi nhận gửi trả lại xác nhận tin.
UDP cung cấp dịch vụ chuyển phát không định hướng, không đảm bảo độ tin cậy như IP. UDP không sử dụng cơ chế xác nhận để đảm bảo gói tin đên đích hay không, không thực hiện sắp xếp các bản tin và không cung cấp thông tin phản hồi để xác định mức độ truyền thông tin giữa hai máy. Chính vì vậy, một chương trình ứng dụng sử dụng giao thức UDP chấp nhận hoàn toàn trách nhiệm cho vấn đề xử lý độ tin cậy. Cấu trúc tiêu đề của UDP được mô tả như trong hình 1.4: Cấu trúc tiêu đề UDP Các trường cổng nguồn và cổng đích chứa các giá trị 16 bit dùng cho cổng giao thức UDP được sử dụng để tách các gói tin trong tiến trình đang đợi để nhận chúng.
Cổng nguồn là trường dữ liệu tùy chọn. Khi sử dụng, nó xác định cổng đáp xác nhận sẽ được gửi đến. Nếu không được dùng, nó có giá trị zero. Trường độ dài chứa độ dài của UDP tính theo octet, bao gồm cả phần đầu UDP và dữ liệu người sử dụng.
Trường tổng kiểm tra là vùng tùy chọn, cho phép việc cài đặt được thực hiện với ít bước tính toán hơn khi sử dụng UDP trên mạng cục bộ có độ tin cậy cao. Tổng kiểm tra trong UDP cung cấp cách duy nhất để đảm bảo rằng dữ liệu nhận được nguyên vẹn và nên được sử dụng thường xuyên. Nếu giá trị của tổng kiểm tra bằng zero thì có nghĩa là trường tổng kiểm tra chưa được tính và thường được thể hiện bằng cách cài đặt toàn bộ các bit 1, tránh với trường hợp sau khi chạy thuật toán tổng kiểm tra cũng có thể sinh ra kết quả là các bit được lập bằng 0 và giá trị của trường tổng kiểm tra cũng được xem bằng zero. UDP sử dụng phương pháp gán phần đầu giả vào gói tin UDP, thêm vào đó một octet có giá trị zero để có được đúng bội số của 16 bit và tính tổng cho toàn bộ.
14 Octet được nối vào phần đầu giả sẽ không được truyền đi cùng với gói tin UDP và chúng không được tính đến trong phần độ dài.Giao thức TCP Giao thức TCP (Transmission Control Protocol) cung cấp dịch vụ truyền thông dữ liệu định hướng truyền thống cho các chương trình - dịch vụ chuyển dòng (stream) tin cậy. TCP cung cấp một mạch ảo, còn được gọi là kết nối. Nó cấp khả năng đứt quãng, kiểm tra lỗi và điều khiển luồng. Cấu trúc tiêu đề TCP: Hình 1.5: Cấu trúc tiêu đề TCP Giải thích ý nghĩa các trường: Source port, Destination port (cổng nguồn, cổng đích): chứa các giá trị cổng TCP để xác định các chương trình ứng dụng tại hai đầu kết nối.
Mỗi khi TCP nhận gói dữ liệu từ IP, nó sẽ gỡ bỏ phần đầu IP và đọc phần đầu TCP. Khi đọc Destination port, nó sẽ tìm trong tệp tin chứa các thông tin về dịch vụ để gửi dữ liệu đến chương trình ứng với số cổng đó. Song với TCP, giá trị cổng phức tạp hơn UDP vì một giá trị cổng TCP cho trước không tương ứng với một đối tượng đơn. Thay vì vậy, TCP được xây dựng trên kết nối trừu tượng, trong đó các đối tượng được xác định là những liên kết mạch ảo, không phải từng cổng.
Ví dụ như giá trị 192.3,25 xác định cổng TCP 25 trên máy tính có địa chỉ 192. Sequence Number (số thứ tự): xác định vị trí trong chuỗi các byte dữ liệu trong segment của nơi gửi. 15 Acknowledgment Number (số xác nhận): xác định số octet mà nguồn đang đợi để nhận kế tiếp. Lưu ý là Sequence Number để chỉ đến lượng dữ liệu theo cùng chiều với segment, trong khi giá trị Acknowledgment Number để chỉ đến dữ liệu ngược lại với segment đến.
Header length (độ dài tiêu đề): chứa một số nguyên để xác định độ dài của phần đầu segment, được tính theo bội số của 32 bit. Giá trị này là cần thiết vì có phần Options có độ dài thay đổi, tùy thuộc vào những lựa chọn đã được đưa vào. Unused (dự phòng): được dành riêng để sử dụng trong tương lai. Flags (bít mã): gồm có 6 bít để xác định mục đích và nội dung của segment, diễn dịch các nội dung trong phần đầu dựa vào nội dung các bit.
Ví dụ segment chỉ chuyển tải ACK, hoặc chỉ chuyển đưa dữ liệu hay để tải những yêu cầu để thiết lập hoặc ngắt nối.