P

Sơ lược về giao thức GTP
------------------------

GTP là một nhóm giao thức truyền thông dựa trên nền công nghệ IP. GTP được sử dụng để truyền tải gói tin GPRS trong mạng GSM và UMTS.

GTP có thể được phân tách thành các giao thức riêng biệt: GTP-C, GTP-U và các giao thức GTP cơ bản. Trong đó, GTP-C được sử dụng để báo hiệu giữa GGSN (cổng hỗ trợ GPRS) và SGSN (nút dịch vụ GPRS) trong mạng lõi GPRS. GTP-C cho phép SGSN thiết lập một phiên làm việc cho người sử dụng dịch vụ. GTP-C cũng cho phép tắt phiên làm việc, điều chỉnh các tham số chật lượng dịch vụ hoặc cập nhật một phiên làm việc cho một thuê bao đến từ một nút dịch vụ GPRS khác.

GTP-U được sử dụng cho việc truyền tải dữ liệu (của người sử dụng) trong mạng lõi GPRS cũng như giữa mạng truy cập vô tuyến (RAN) và mạng lõi. Dữ liệu cần truyền được đóng gói (packaged) theo một trong các định dạng: IPv4, IPv6 hoặc PPP.

Giao thức cơ bản của GTP: Sử dụng cấu trúc bản tin tương tự GTP-C và GTP-U, nhưng có chức năng độc lập. Nó có thể truyền dữ liệu thanh toán (nạp tiền) từ CDF (Charging Data Function)của mạng GSM hoặc UMTS tới CGF (Charging Gateway Function). Trong đa số trường hợp, chức năng này đồng nghĩa với việc: Từ nhiều phần tử mạng, ví dụ như các GGSN, dữ liệu thanh toán được tập trung về một máy tính trung tâm, giúp cho việc điều hành của trung tâm tính cước trở nên thuận tiện hơn.

Các phiên bant GTP khác nhau được thự thi bởi RNCs, SGSNs, GGSNs và CGFs trong mạng 3GPP. GTP hoàn toàn trong suốt đối với người sử dụng thuê bao di động sử dụng GPRS khi thiết bị này kết nối tới SGSN.

GTP có thể hoạt động trên cả hai giao thức TCP và UDP (xem thêm mô hình TCP/IP). GTP phiên bản một (GTPv1) chỉ hoạt động trên nền giao thức UDP.

Những đặc tính chung
--------------------

Tất cả các phiên bản của GTP đều có chung cấu trúc bản tin. Đó là phần header và cơ chế kết nối

### Header

**Header của GTPv1 bao gồm các trường**:

| + | Bit 0 | 1 | 2 | 3 | 4 | 5-7 | 8-15 | 16-23 | 24-31 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | N-PDU Number Flag | Sequence Number Flag | Extension Header Flag | Reserved | Protocol type | Version | Message Type | Total length |
| 32 | TEID |
| 64 | Sequence number | N-PDU number | Next extension header type |

***Trong đó***

VersionLà trường có độ dài 3 bit. Với GTPv1, trường này nhận giá trị bằng 1.
Protocol Type (PT)Có độ dài là 1 bit, với GTP cơ bản, trường này có giá trị là 0. Các phiên bản còn lại, nó nhận giá trị bằng 1.
ReservedTrường dự trữ, độ dài là 1 bit (giá trị phải bằng 0).
Extension header flag(E)Biến trạng thái (độ dài 1 bit), thể hiện việc có hay không có phần header mở rộng.
Sequence number flag(S)Biến trạng thái (độ dài 1 bit), thể hiện việc có hay không có trường Sequence Number.
N-PDU number flag(PN)Biến trạng thái (độ dài 1 bit), thể hiện việc có hay không có trường N-PDU number.
Message TypeCó độ dài 8 bits, biểu thị loại bản tin GTP.
LengthCó độ dài 16 bits, thể hiện kích thước gói tin cần chuyển.
Tunnel endpoint identifier (TEID)Kích thước 32 bits, được sử dụng để tổ hợp nhiều kết nói khác nhau vào một "đường hầm" GTP.
Sequence numberTrường không bắt buộc, có độ dài 16 bits. Trường này tồn tại nếu một trong các biến E, S hoặc PN được thiết lập bằng 1. Trường này phải được biểu diễn nếu biến S được thiết lập bằng 1.
N-PDU numberTrường không bắt buộc, kích thước 8 bits. Trường này tồn tại nếu một trong các biến E, S hoặc PN được thiết lập bằng 1. Trường này phải được biểu diễn nếu biến PN được thiết lập bằng 1.
Next extension header typeTrường không bắt buộc, kích thước 8 bits. Trường này tồn tại nếu một trong các biến E, S hoặc PN được thiết lập bằng 1. Trường này phải được biểu diễn nếu biến E được thiết lập bằng 1.
**Phần header mở rộng có cấu trúc như sau**:

| + | Bits 0-7 | 8-23 | 24-31 |
| --- | --- | --- | --- |
| 0 | Total length | Contents |
| ... | ... |
| ... | Contents | Next extension header |

Total lengthĐộ dài 8 bit, thể hiện trạng việc phân bổ độ dài của phần header mở rộng, bao gồm độ dài, nội dung và trường header mở rộng tiếp theo (trong 4 đơn vị octet, tương đương 32 bit). Độ dài của phần header mở rộng phải là bội số của 4.
ContentsChứa nội dung của phần header mở rộng
Next extension headerĐộ dài 8 bit.Thể hiện loại mở rộng tiếp theo. Nó bằng 0 nếu không có phần mở rộng tiếp theo. Tham số mở này cho phép có nhiều trường header mở rộng.
### Cơ chế kết nối

Cơ chế kết nối là đặc tính chung thứ hai trong cấu trúc bản tin. Đây là cơ chế kiểm tra sự liên kết từ một GSN tới một GSN khác. Có hai bản tin được sử dụng:

* echo request: Yêu cầu báo hiệu lại - GSN nguồn gửi tới GSN đích để kiểm tra xem GSN đích có còn "sống" hay không.
* echo response: Phản hồi báo hiệu lại - GNS đích gửi lại GSN nguồn để thông báo bản thân nó đang "sống".

Thông thường, cứ sau mỗi 60 giây, một GSN nguồn có thể gửi một bản tin **echo request** tới tất cả các GSN đích mà nó đang kết nối. Nếu GNS đích nào không phản hồi, GSN nguồn sẽ hiểu rằng đích đó đã "chết", và kết nối đến đích đó sẽ bị hủy bỏ.

Ngoài hai bản tin chung kể trên, các phiên bản GTP khác nhau không còn bản tin chung nào khác. Điều đó đồng nghĩa với việc, các phiên bản GTP khác nhau tạo nên các giao thức hoàn toàn phân biệt.

GTP-C
-----

Giao thức GTP-C là phần điều khiển của GTP tiêu chuẩn. Khi một thuê bao yêu cầu PDP context (tình huống PDP), SGSN sẽ gửi yêu cầu tạo PDP context, dưới dạng bản tin GTP-C, tới GGSN, liệt kê chi tiết các yêu cầu của thuê bao. GGSN sẽ gửi lại bản tin GTP-C phản hồi, bao gồm thông tin chi tiết về PDP context đã thực sự được kích hoạt hoặc thông báo quá trình đáp ứng yêu cầu đã thất bại, kèm theo đó là nguyên nhân thất bại. GTP-C sử dụng cổng dịch vụ 2123 của chuẩn bản tin UDP.

GTP-U
-----

GTP-U, dựa trên nền công nghệ IP một cách tương đối, là một giao thức "đường hầm", cho phép thiết lập nhiều "đường hầm" giữa các điểm đầu cuối. Khi sử dụng trong mạng UMTS, mỗi thuê bao sẽ được cấp một hoặc nhiều "đường hầm", mỗi tình huống PDP được kích hoạt sẽ có một "đường hầm" tương ứng. "Đường hầm" có thể được tạo một cách riêng biệt cho các kết nối cụ thể với các yêu cầu chất lượng dịch vụ khác nhau.

Các "đường hầm" riêng biệt được xác định bởi tham số TEID (Tunnel Endpoint Identifier - tham số xác định điểm cuối "đường hầm") trong bản tin GTP-U, TEID được nhận một số ngẫu nhiên thông qua quá trình cấp phát động. Nếu quá trình này được mã hóa một cách tin cậy, nó sẽ cung cấp một phương thức bảo mật giúp ngăn chặn một số loại hình tấn công trái phép. Ngoài ra, theo yêu cầu của chuẩn 3GPP cho tất cả lưu lượng truy cập GTP, bao gồm cả dữ liệu người dùng, cần được truyền tải trong mạng riêng an toàn, không kết nối trực tiếp với mạng internet.

GTP-U làm việc trên nền giao thức UDP thông qua cổng dịch vụ 2152.

GTP cơ bản
----------

GTP cơ bản là giao thức được sử dụng trong mạng GSM và UMTS dựa trên nền công nghệ IP, nó sử dụng cấu trúc bản tin tương tự GTP-C và GTP-U, nhưng về cơ bản là khác biệt với hai giao thức kể trên. GTP cơ bản truyền dữ liệu thông qua cổng đã được đăng ký 3386 của giao thức UDP/TCP.

GTP trong mạng lõi GPRS
-----------------------

GTP là giao thức chính được sử dụng trong mạng lõi GPRS. Đây là giao thức cho phép người dùng cuối của mạng GSM hoặc UMTS di chuyển từ nơi này đến nơi khác trong khi vẫn giữ kết nối tới Internet, miễn là khu vực đó có cổng hỗ trợ dịch vụ GPRS (GGSN). GTP thực hiện điều này bằng cách đem dữ liệu thuê bao từ điểm phục vụ GPRS (SGSN) hiện tại đến GGSN sẽ tiếp nhận phiên làm việc với thuê bao. Có ba dạng GTP được sử dụng trong mạng lõi GPRS:

* GTP-U: Truyền dữ liệu người dùng trong những "đường hầm" riêng biệt tương ứng với mỗi PDP context.
* GTP-C: Kiểm soát các lý do, bao gồm:
	+ Thiết lập và xóa bỏ PDP contexts
	+ Xác minh khả năng kết nối của GSN
	+ Cập nhật; chẳng hạn, một thuê bao di chuyển từ một SGSN này tới một SGSN khác.
* GTP cơ bản: truyền tải dữ liệu giao dịch từ các GSN tới khối chức năng xử lý giao dịch.

GGSN và SGSN (gọi chung là GSN) "lắng nghe" bản tin GTP-C trên cổng 2123 UDP và "lắng nghe" bản tin GTP-U trên cổng 2152. Việc giao tiếp diễn ra trong nội mạng hoặc có thể diễn ra khi thuê bao sử dụng dịch vụ chuyển vùng quốc tế \*trong trường hợp này, giao tiếp sẽ diễn ra thông qua tổng đài chuyển mạch GPRS - GRX).

Các CGF lắng nghe bản tin GTP cơ bản được gửi tới từ GSN thông qua giao thức TCP/UDP trên cổng dịch vụ 3386. Mạng lõi sẽ gửi thông tin giao dịch tới CGF, thông thường bao gồm các thông tin: *thời gian kích hoạt PDP context* và *chất lượng dữ liệu mà người dùng cuối đã truyền*. Tuy nhiên, tương tác này thường diễn ra trong một mạng ít được tiêu chuẩn hóa, và có thể, chuẩn mạng phụ thuộc vào nhà cung cấp và những tùy chọn thiết lập cấu hình khác nhau, thậm chí, chuẩn có thể được mã hóa độc quyền bởi nhà cung cấp.

Sử dụng trên giao diện IuPS
---------------------------

Chỉ giao thức GTP-U được sử dụng cho giao diện IuPS (giao diện tương tác giữa mạng lõi GPRS với mạng truy cập di động (Radio Access Network - RAN). Trong trường hợp này, RANAP được sử dụng như một giao thức kiểm soát và thiết lập "đường hầm" GTP-U giữa SGSN và RNC (Radio Network Controller - Bộ điều khiển mạng di động).

Chồng giao thức
---------------

|  |
| --- |
|  ???? |
| IP (user) |
| GTP |
| UDP |
| IP |
| Layer 2 (e.g. WAN or Ethernet) |
| GTP-U protocol stack |

GTP có thể hoạt động trên cả hai giao thức TCP và UDP. GTP phiên bản một (GTPv1) chỉ hoạt động trên nền giao thức UDP.

Kể từ năm 2004, có hai phiên bản được xác lập, phiên bản 0 và phiên bản 1. Hai phiên bản này khác biệt cơ bản về cấu trúc. Với phiên bản 0, giao thức báo hiệu (giao thức thiết lập "đường hầm" bằng cách kích hoạt **PDP context**) kết hợp với giao thức "đường hầm" trên một cổng dịch vụ. Phiên bản 1 thực chất bao gồm hai giao thức, GTP-C sử dụng cho điều khiển và GTP-U có nhiệm vụ duy trì "đường hầm" dữ liệu (của người sử dụng).

GTP-U cũng được sử dụng để truyền dữ liệu người dùng từ RNC đến SGSN trong mạng UMTS. Tuy nhiên, trong trường hợp này báo hiệu được thực hiện bằng cách sử dụng RANAP thay vì sử dụng giao thức GTP-C

Sự khác biệt giữa các phiên bản GTP
-----------------------------------

Phiên bản GTP ban đầu (phiên bản 0) có sự khác biệt đáng kể với phiên bản GTP hiện tại (phiên bản 1):

* GTPv1 xác định đường hầm ngẫu nhiên, GTPv0 thì không;
* Tùy chọn được cung cấp cho giao thức truyền tải X.25;
* Với GTPV0, cổng dịch vụ 3386 được sử dụng cho tất cả các chức năng (không chỉ cho tính phí như trong GTPv1);
* TCP được hỗ trợ như là một lựa chọn thay cho UDP, nhưng hỗ trợ này là không bắt buộc (GTPv1 hoạt động trên UDP);
* Một số lĩnh vực liên quan đến thuê bao, chẳng hạn như **chất lượng dịch vụ** vẫn còn nhiều hạn chế.

Phiên bản 0 gặp vấn đề về bảo mật với tham số không ngẫu nhiên TEID, kẻ tấn công có thể lợi dụng nó để xâm nhập trái phép vào mạng đường trục của hệ thống GPRS bằng cách truy cập vào bất kì mạng chuyển vùng dịch vụ nào đó của đối tác, hoặc thông qua việc việc gửi gói tin từ ngoài. Phiên bản 0 đã được thay thế bởi phiên bản một trong hầu hết các mạng. Cho dù, tiêu chuẩn cho các phiên bản mới hơn (của GTP) vẫn phải được hỗ trợ bởi GSN (tức là không thể loại bỏ hoàn toàn phiên bản 0), nhưng, các cổng khác nhau được sử dụng bởi phiên bản 0, có thể được chặn lại một cách dễ dàng bằng cách sử dụng **danh sách IP được phép truy cập**.

Việc chuẩn hóa GTP
------------------

GTP ban đầu được chuẩn hóa bởi ETIS (tiêu chuẩn GSM 09.06). Với việc xây dựng chuẩn cho UMTS, việc xây dựng tiêu chuẩn cho GTP được chuyển sang 3GPP, chuẩn TS 29.060. GTP cơ bản sử dụng định dạng bản tin tương tự các giao thức GTP khác, nhưng được sử dụng một cách chuyên biệt hơn với tiêu chuẩn dành riêng 32.259, tiêu chuẩn định dạng cho dữ liệu giao dịch mà nó truyền tải.

Những phiên bản sau này của tiêu chuẩn TS 29.060 không chấp nhận tương tác giữa GTPv1 và GTPv0, điều này có nghĩa là GSN sẽ không hỗ trợ cho các phiên bản cao hơn.

Chuẩn GTPv2 (dành cho việc phát triển dịch vụ gói tin) bắt đầu được xây dựng vào đầu năm 2008 và chính thức công bố vào tháng 12 năm 2008. GTPv2 được xây dựng nhằm hỗ trợ GPTv1 trong vấn đề "Phiên bản cao hơn không được hỗ trợ bởi GSN". Tuy nhiên, GTPv2 hoàn toàn không hỗ trợ cho GTPv0 trong vấn đề này.

Liên kết ngoài
--------------

Chú thích
---------

1. ↑  Ghi chú: Đường hầm (tunnel) là một kết nối riêng ảo, sử dụng giao thức khác với mạng nguồn và đích để gửi các gói dữ liệu qua mạng.