Viết chương trình stream audio, video giữa Client và Server, mã hoá trước khi truyền
MỤC LỤC
Lời nói đầu. 2
I.Các giao thức hỗ trợ liên lạc trên internet3
1.Giao thức TCP/IP. 3
1.1.Giới thiệu chung. 3
1.2.Mô hình TCP/IP. 3
1.3.Địa chỉ IP. 4
1.4.Giao thức Internet IP (Internet Protocol)5
2. Giao thức RTP/RTCP. 7
II.Lập trình trong Java. 11
1.Mã hóa với Java. 11
2.Chương trình stream audio. 12
Tài liệu tham khảo:13
12 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 3594 | Lượt tải: 3
Bạn đang xem nội dung tài liệu Viết chương trình stream audio, video giữa Client và Server, mã hoá trước khi truyền, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
Lời nói đầu
Internet là một hệ thống thông tin toàn cầu gồm nhiều mạng máy tính liên kết với nhau. Bao gồm hàng ngàn mạng máy tính nhỏ hơn của các doanh nghiệp, của các viện nghiên cứu và các trường đại học, của người dùng cá nhân, và các chính phủ trên toàn cầu.
Mạng Internet mang lại rất nhiều tiện ích hữu dụng cho người sử dụng, một trong các tiện ích phổ thông của Internet là hệ thống thư điện tử (email), trò chuyện trực tuyến (chat), giải trí trực tuyến, máy truy tìm dữ liệu (search engine), các dịch vụ thương mại và chuyển ngân, và các dịch vụ về y tế giáo dục như là chữa bệnh từ xa hoặc tổ chức các lớp học ảo.
Như vậy, mạng internet đã mang lại nhiều lời ích và một trong những lợi ích đó là thông qua nó, người dùng có thể xem, nghe video, audio thời gian thực. Với mục đích tìm hiểu cách truyền video, audio thời gian thực trong mô hình Client/Server, em đã thực hiện đồ án “Viết chương trình stream audio, video giữa Client và Server, mã hóa trước khi truyền”. Từ đó em xác định các yêu cầu khi thực hiện đồ án:
+ Tìm hiểu về giao thức RTP/RTCP.
+ Lập trình mạng với Java.
+ Mã hóa với Java.
Công cụ thực hiện chương trình là Java.
Nội dung đồ án được chia thành 2 phần:
+ Các giao thức hỗ trợ liên lạc trên internet.
+ Lập trình trong java.
Với đồ án này, do em mới làm quen với ngôn ngữ java cùng với sự hạn chế về thời gian nên bản đồ án đã thực hiện chưa tốt, còn nhiều thiếu sót. Và với đồ án này, em xin gửi lời cảm ơn đến cô Bành Thị Quỳnh Mai đã giúp đỡ em thực hiện đồ án này.
I.Các giao thức hỗ trợ liên lạc trên internet
1.Giao thức TCP/IP
1.1.Giới thiệu chung
Giao thức TCP/IP được phát triển từ mạng ARPANET và Internet và được dùng như giao thức mạng và vận chuyển trên mạng Internet. TCP (Transmission Control Protocol) là giao thức thuộc tầng vận chuyển và IP (Internet Protocol) là giao thức thuộc tầng mạng của mô hình OSI. Họ giao thức TCP/IP hiện nay là giao thức được sử dụng rộng rãi nhất để liên kết các máy tính và các mạng.
Hiện nay các máy tính của hầu hết các mạng có thể sử dụng giao thức TCP/IP để liên kết với nhau thông qua nhiều hệ thống mạng với kỹ thuật khác nhau. Giao thức TCP/IP thực chất là một họ giao thức cho phép các hệ thống mạng cùng làm việc với nhau thông qua việc cung cấp phương tiện truyền thông liên mạng.
Các đặc điểm của TCP/IP:
- Độc lập với kiến trúc của 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ở: 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 giao thức mức ứng dụng (những giao thức thực hiện các chức năng thường dùng như e-mail, truyền nhận file).
1.2.Mô hình TCP/IP
Mô hình TCP/IP được tổ chức thành 4 lớp như sau: lớp ứng dụng (Application), lớp giao vận (Transport), lớp mạng (Internet) và lớp network access.
Lớp Application:
Ở lớp cao nhất, các chương trình ứng dụng giao tiếp với các giao thức ở lớp Transport để truyền và nhận dữ liệu. Chương trình ứng dụng truyền dữ liệu ở dạng được yêu cầu đến lớp Transport để xử lý trước khi chuyển xuống lớp Internet để tìm đường phân phối nó đi. Lớp Application bao gồm những ứng dụng trên mạng.
Lớp Transport:
Cung cấp giao tiếp từ chương trình ứng dụng này đến chương trình ứng dụng khác. Giao tiếp như vậy được gọi là đầu cuối- tới- đầu cuối (end-to-end). Lớp Transport sẽ đảm bảo thông tin đến mà không bị lỗi và theo đúng trật tự. Để làm được điều này, máy nhận phải gửi ACK về báo đã nhận đủ và đúng thông tin hay chưa, nếu chưa thì máy phát phải truyền lại datagram đã mất. Phần mềm ở lớp Transport chia thông tin thành các gói (packet), trong mỗi gói có chứa các trường (fields): địa chỉ nguồn, địa chỉ đích, checksum,... Thông tin sau khi được chia thành các gói sẽ được chuyển xuống các lớp thấp hơn để tiếp tục xử lý và gửi tới máy thu. Máy thu sẽ dựa vào nội dung của các trường này để quyết định nhận, kiểm tra tính đúng đắn của việc truyền và phục hồi lại thông tin.
Các dịch vụ của lớp Transport có thể là: TCP, UDP.... Khái niệm kết nối phiên (session) trong mô hình OSI có thể so sánh với cơ chế socket của TCP/IP. Socket TCP/IP là một điểm cuối (end-point) trong quá trình liên lạc, được tạo bởi địa chỉ của máy tính và một cổng xác định trên máy tính đó.
Lớp Internet:
Lớp Internet điều khiển các gói đi từ máy này đến máy khác theo những đường thích hợp nhất.
Lớp Internet kiểm soát các gói dữ liệu đến, kiểm tra xem có phải chúng được gửi đến máy đó hay không. Nếu đúng, lớp Internet sẽ loại bỏ header của datagram và đưa lên cho lớp Transport xử lý. Nếu không, máy sẽ bỏ qua hoặc sẽ gửi tiếp gói tin theo đường thích hợp để đến đích.
Lớp Network access:
TCP/IP không định nghĩa việc kết nối vật lý mà dùng những chuẩn sẵn có cung cấp bởi IEEE (như RS232, Ethernet hay những giao diện khác trong việc truyền dữ liệu).
Khi một packet dữ liệu được gửi đi, nó đến lớp Transport và được gắn thêm một transport header. Kế đó lớp Internet thêm internet header. Cuối cùng lớp gắn thêm header. Khi nhận gói dữ liệu, quá trình sẽ diễn ra ngược lại.
1.3.Địa chỉ IP
Mỗi máy tính trên mạng IP có một địa chỉ duy nhất xác định gọi là địa chỉ IP tạo bởi một số 32 bit. Địa chỉ IP chứa đủ những thông tin để xác định duy nhất một mạng và một máy tính trong mạng đó.
Vì địa chỉ IP của một máy tính không những phải xác định duy nhất máy tính đó mà còn phải xác định duy nhất mạng mà máy tính đó nối vào nên địa chỉ IP được chia thành phần ID của mạng (net ID) và phần ID của host (host ID). Việc phân chia này không giống nhau cho tất cả các địa chỉ IP mà lớp của địa chỉ sẽ quyết định bao nhiêu bit dành cho net ID và bao nhiêu bit dành cho host ID. Có 5 lớp địa chỉ IP: lớp A, B, C dùng cho mục đích chung, lớp D và E dùng cho mục đích đặc biệt trong tương lai. Một địa chỉ IP theo khuôn dạng sau:
Class ID
Net ID
Host ID
- Lớp A có Class ID là bit cao nhất bằng 0; 7 bit kế tiếp là net ID, 24 bit còn lại là host ID.
- Lớp B có Class ID là 2 bit cao nhất lần lượt là 1 và 0, 14 bit kế tiếp là net ID, 16 bit cuối cùng là host ID.
- Lớp C có Class ID là 3 bit cao nhất lần lượt bằng 1, 1, và 0; 21 bit kế tiếp là Net ID; 8 bit cuối cùng là Host ID.
1.4.Giao thức Internet IP (Internet Protocol)
IP tiếp nhận các datagram từ giao diện mạng (network interface) và từ các giao thức lớp cao hơn, sau khi định tuyến, nó sẽ gửi các gói dữ liệu này xuống giao diện mạng hoặc gửi lên các giao thức ở cấp cao hơn. Trên một host, có thể xem IP bao gồm hai phần, một phần kiểm soát các gói dữ liệu đến và một phần kiểm soát việc gửi các gói dữ liệu đi.
Phương thức hoạt động của IP:
- Hàng nhập chung, định tuyến chung: Quá trình IP dùng một hàng nhập chung cho tất cả các datagrams mà nó kiểm soát, bất kể là chúng đến từ giao diện mạng hay từ các giao thức lớp cao hơn. IP lấy các datagrams ra khỏi hàng nhập và xử lý chúng mà không cần biết chúng đến từ đâu. Hàng nhập chung đem lại sự đơn giản trong các thuật toán.
- IP hoạt động như một quá trình độc lập.
- Giao diện nội bộ (local host interface): Để tránh việc phân phát các gói tin nội bộ như một quá trình đặc biệt, IP thực hiện một giao thức mạng giả cho chính nội bộ của máy mình. Giao diện này có cùng cấu trúc như các giao diện mạng khác nhưng nó sẽ được xử lý bởi phần mềm giao thức nội bộ thay vì mạng vật lý. Việc thực hiện local host interface đặt ra vấn đề về cách thức chọn và xử lý các gói. Các datagrams đến từ giao diện mạng nào sẽ được đặt trong hàng chờ tương ứng của giao diện đó. Hệ thống có nhiều cách lựa chọn để xử lý ưu tiên cho datagram nào trước. Nếu IP luôn ưu tiên cho các datagrams đến từ network interface, lúc đó các datagrams của local host interface sẽ có chỉ số ưu tiên thấp hơn và chúng sẽ chỉ được xử lý khi hàng chờ của network interface trống. Ngược lại các datagrams của local host interface được ưu tiên hơn thì chúng sẽ được xử lý trước. Việc thực hiện đơn thuần một trong hai phương pháp trên không có hiệu quả tối ưu. Trong thực tế, người ta dùng một phương pháp có tên là round-robin, nghĩa là datagram nào đến trước sẽ được xử lý trước bất kể nguồn gốc của chúng là từ network interface hay từ local host interface. Một khi tất cả các hàng nhập của IP đều trống, quá trình IP sẽ bị chặn. Quá trình này sẽ được khôi phục và tiếp tục thực thi khi có datagram đến.
- Để kiểm tra và sửa lỗi, IP dùng các tổng kiểm tra (checksum). Số tổng kiểm tra này được đặt trong header và là một số 16 bit.
- Khi địa chỉ đích của một datagram ở dạng quảng bá (broadcast) thì tất cả các máy trên mạng đều nhận được datagram này. IP thực hiện 3 địa chỉ quảng bá: broadcast cho mạng nội bộ với địa chỉ toàn là 1, broadcast xác định (lớp A, B, C) với phần địa chỉ của host toàn là 1, và broadcast cho mạng con.
- Trước khi gửi một datagram phải chuyển đổi các byte thứ tự sang dạng chuẩn trên mạng. Khi nhận một datagram cần thực hiện quá trình chuyển đổi ngược lại.
User Datagram Protocol (UDP)
Giao thức UDP là cơ chế hướng phi kết nối (connectionless oriented). Nó cho phép một chương trình trên một máy có thể gửi dữ liệu đến chương trình trên một máy khác và nhận trả lời. Việc thực hiện được thông qua UDP port là điểm đầu cũng như điểm cuối trong quá trình thông tin.
Khái niệm cổng (port) trong UDP được hiểu như sau: nếu các máy trao đổi dữ liệu được với nhau thông qua địa chỉ thì các quá trình cần phải có chỉ số nhận dạng khi tiến hành trao đổi thông tin. Vì trên một máy trong một thời điểm có thể có rất nhiều quá trình cùng tồn tại, cho nên giá trị port được đưa ra là để có sự phân biệt giữa các quá trình. UDP sẽ dựa vào giá trị port để gửi các gói (packet) thông tin đến đúng địa chỉ của quá trình. Vì vậy, một chương trình khi muốn tham gia vào quá trình thông tin thì phải xác định giá trị port cho mình.
Các quá trình sử dụng port trong giao tiếp có thể thực hiện theo hai cách. Cách liên kết trực tiếp cho phép các quá trình nối kết trực tiếp với nhau và tiến hành trao đổi dữ liệu. Một cách khác là mô hình client/server cho phép một quá trình có thể thực hiện nhiều liên kết qua đó có thể gửi nhận dữ liệu với nhiều quá trình khác cùng một lúc.
Khi một quá trình muốn trao đổi dữ liệu với một quá trình khác theo phương thức trực tiếp thì cả hai quá trình phải xác định giá trị cổng của chính mình. Sau đó một quá trình sẽ tiến hành xác định giá trị cổng cũng như địa chỉ IP của quá trình kia. Sau khi định xong thì việc trao đổi dữ liệu mới bắt đầu diễn ra.
Còn với mô hình client/server (khách/chủ) thì server phải xác định cổng và chờ dữ liệu từ chính cổng này. Các quá trình client sẽ gọi đến cổng này để tiến hành quá trình truyền nhận dữ liệu.
Khi UDP nhận datagram và tiến hành việc phân phát theo đúng port tương ứng. Có hai cách để thực thi. Cách thứ nhất là chỉ dựa vào địa chỉ cổng đích, với cách này chương trình có thể nhận được dữ liệu từ tất cả các quá trình khác gửi đến. Cách thứ hai là tiến hành việc phân phát dựa trên địa chỉ nguồn và địa chỉ đích, với cách này quá trình chỉ có thể nhận dữ liệu từ một địa chi xác định. Mỗi cách trên đều có ưu điểm cũng như nhược điểm tuỳ theo từng thời điểm hoạt động của hệ thống. Vì vậy khi thực hiện, cả hai cách trên đều được sử dụng.
Transmission Control Protocol (TCP)
TCP là một trong những giao thức phức tạp nhất trong các giao thức trên mạng. Nó bao gồm cơ chế liên kết trực tiếp, gửi nhận dữ liệu tin cậy và có tính điều khiển được. TCP dùng cơ chế time out (đếm thời gian) và retransmission(truyền lại) để bảo đảm tính tin cậy trong việc truyền dữ liệu. Ngoài ra, TCP còn cung cấp cơ chế kiểm tra khi có hiện tượng trễ, trùng lặp hay mất mát trong quá trình truyền nhận dữ liệu.
TCP được thực hiện thông qua 3 quá trình. Quá trình thứ nhất kiểm soát các datagram được truyền đến, quá trình thứ hai chịu trách nhiệm về các datagram sẽ được truyền đi, quá trình còn lại sẽ xử lý các hiện tượng như trễ hoặc truyền lại khi timeout. Trên lý thuyết thì các quá trình này có sự liên kết trong hoạt động để tăng tính hiệu quả trong khi thực thi. TCP dùng chỉ số trình tự để đánh số cho các datagram trước khi truyền đi và chỉ số này dùng để xác định thứ tự các frame nhận giúp xác định hiện tượng trễ, trùng lặp hay mất mát trong quá trình truyền nhận.
Các quá trình thông tin với nhau dùng TCP cũng sử dụng port để tiến hành giao tiếp. Khác với UDP, trước khi giao tiếp các quá trình phải tiến hành liên kết với nhau. Sau khi đường truyền được thiết lập thì việc gửi nhận dữ liệu mới bắt đầu được diễn ra. Cơ chế liên kết của TCP giúp quá trình truyền nhận được diễn ra tin cậy hơn. Các quá trình thông tin với nhau thường sử dụng mô hình client/server.
2. Giao thức RTP/RTCP
Giao thức RTP (Realtime Transport Protocol) cung cấp các chức năng giao vận phù hợp cho các ứng dụng truyền dữ liệu mang đặc tính thời gian thực như là thoại và truyền hình tương tác. Những dịch vụ của RTP bao gồm trường chỉ thị loại tải trọng (payload identification), đánh số thứ tự các gói, điền tem thời gian...
Thông thường các ứng dụng chạy giao thức RTP ở bên trên giao thức UDP để sử dụng các dịch vụ ghép kênh (multiplexing) và kiểm tra tổng (checksum) của dịch vụ này; cả hai giao thức RTP và UDP tạo nên một phần chức năng của giao thức tầng giao vận. Tuy nhiên RTP cũng có thể được sử dụng với những giao thức khác của tầng mạng và tầng giao vận bên dưới miễn là các giao thức này cung cấp được các dịch vụ mà RTP đòi hỏi. Giao thức RTP hỗ trợ việc truyền dữ liệu tới nhiều đích sử dụng phân bố dữ liệu multicast nếu như khả năng nay được tầng mạng hoạt động bên dưới nó cung cấp.
Một điều cần lưu ý là bản thân RTP không cung cấp một cơ chế nào đảm bảo việc phân phát kịp thời dữ liệu tới các trạm mà nó dựa trên các dịch vụ của tầng thấp hơn để thực hiện điều này. RTP cũng không đảm bảo việc truyền các gói theo đúng thứ tự. Tuy nhiên số thứ tự trong RTP header cho phép bên thu xây dựng lại thứ tự đúng của các gói bên phát.
Đi cùng với RTP là giao thức RTCP (Realtime Transport Control Protocol) có các dịch vụ giám sát chất lượng dịch vụ và thu thập các thông tin về những người tham gia vào phiên truyền RTP đang tiến hành.
Khuôn dạng gói RTP
Tiêu đề giao thức RTP bao gồm một phần tiêu đề cố định thường có ở mọi gói RTP và một phần tiêu đề mở rộng phục vụ cho các mục đích nhất định.
1/Phần tiêu đề cố định
Tiêu đề cố định được miêu tả trong hình vẽ trên:
0
2
3
4
8
9
16 31
V=2
P
X
CC
M
PT
sequence number
timestamp
synchronization source identifier (SSRC)
contributing source list (CSRC)
......
Tiêu đề cố định gói RTP.
12 octets (byte) đầu tiên của phần tiêu đề có trong mọi gói RTP còn các octets còn lại thường được mixer thêm vào trong gói khi gói đó được mixer chuyển tiếp đến đích.
- Version(V): 2 bit.
Trường này chỉ ra version của RTP. Giá trị của trường này là 2.
- Padding (P): 1 bit.
Nếu bit padding được lập, gói dữ liệu sẽ có một vài octets thêm vào cuối gói dữ liệu. Octets cuối cùng của phần thêm vào này sẽ chỉ kích thước của phần thêm vào này (tính theo byte). Những octets này không phải là thông tin. Chúng được thêm vào để đáp ứng các yêu cầu sau:
Phục vụ cho một vài thuật toán mã hoá thông tin cần kích thước của gói cố định.
Dùng để cách ly các gói RTP trong trường hợp nhiều gói thông tin được mang trong cùng một đơn vị dữ liệu của giao thức tầng dưới.
- Extension (X): 1 bit.
Nếu như bit X được lập, theo sau phần tiêu đề cố định sẽ là một tiêu đề mở rộng.
- Marker (M): 1 bit.
Tuỳ từng trường hợp cụ thể mà bít này mang những ý nghĩa khác nhau ý nghĩa của nó được chỉ ra trong một profile đi kèm.
- Payload Type (PT): 7 bits.
Trường này chỉ ra loại tải trọng mang trong gói. Các mã sử dụng trong trường này ứng với các loại tải trọng được quy định trong một profile đi kèm.
- Sequence Number: 16 bits.
Mang số thứ tự của gói RTP. Số thứ tự này được tăng lên một sau mỗi gói RTP được gửi đi. Trường này có thể được sử dụng để bên thu phát hiện được sự mất gói và khôi phục lại trình tự đúng của các gói. Giá trị khởi đầu của trường này là ngẫu nhiên.
- Timestamp (tem thời gian): 32 bits.
Tem thời gian phản ánh thời điểm lấy mẫu của octets đầu tiên trong gói RTP. Thời điểm này phải được lấy từ một đồng hồ tăng đều đặn và tuyến tính theo thời gian để cho phép việc đồng bộ và tính toán độ jitter. Bước tăng của đồng hồ này phải đủ nhỏ để đạt được độ chính xác đồng bộ mong muốn khi phát lại và độ chính xác của việc tính toán jitter. Tần số đồng hồ này là không cố định, tuỳ thuộc vào loại khuôn dạng của tải trọng. Giá trị khởi đầu của tem thời gian cũng được chọn một cách ngẫu nhiên. Một vài gói RTP có thể mang cùng một giá trị tem thời gian nếu như chúng được phát đi cùng một lúc về mặt logic (ví dụ như các gói của cùng một khung hình video). Trong trường hợp các gói dữ liệu được phát ra sau những khoảng thời gian bằng nhau (tín hiệu mã hoá thoại tốc độ cố định, fixed-rate audio) thì tem thời gian được tăng một cách đều đặn. Trong trường hợp khác giá trị tem thời gian sẽ tăng không đều.
- Số nhận dạng nguồn đồng bộ SSRC (Synchronization Source Identifier): 32 bits.
SSCR chỉ ra nguồn đồng bộ của gói RTP, số này được chọn một cách ngẫu nhiên. Trong một phiên RTP có thể có nhiều hơn một nguồn đồng bộ. Mỗi một nguồn phát ra một dòng các gói RTP. Bên thu nhóm các gói của cùng một nguồn đồng bộ lại với nhau để phát lại tín hiệu thời gian thực. Nguồn đồng bộ có thể là nguồn phát các gói RTP phát ra từ một micro, camera hay một RTP mixer.
- Các số nhận dạng nguồn đóng góp (CSRC list - Contributing Source list): có từ 0 đến 15 mục mỗi mục 32 bít.
Các số nhận dạng nguồn đóng góp trong phần tiêu đề chỉ ra những nguồn đóng góp thông tin và phần tải trọng của gói. Các số nhận dạng này được Mixer chèn vào tiêu đề của gói và nó chỉ mang nhiều ý nghĩa trong trường hợp dòng các gói thông tin là dòng tổng hợp tạo thành từ việc trộn nhiều dòng thông tin tới mixer. Trường này giúp cho bên thu nhận biết được gói thông tin này mang thông tin của những người nào trong một cuộc hội nghị.
Số lượng các số nhận dạng nguồn đóng góp được giữ trong trường CC của phần tiêu đề. Số lượng tối đa của các số nhận dạng này là 15. Nếu có nhiều hơn 15 nguồn đóng góp thông tin vào trong gói thì chỉ có 15 số nhận dạng được liệt kê vào danh sách.
Mixer chèn các số nhận dạng này vào gói nhờ số nhận dạng SSRC của các nguồn đóng góp.
2/Phần tiêu đề mở rộng
Cơ chế mở rộng của RTP cho phép những ứng dụng riêng lẻ của giao thức RTP thực hiện được với những chức năng mới đòi hỏi những thông tin thêm vào phần tiêu đề của gói. Cơ chế này được thiết kế để một vài ứng dụng có thể bỏ qua phần tiêu đề mở rộng này (mà vẫn không ảnh hưởng tới sự hoạt động) trong khi một số ứng dụng khác lại có thể sử dụng được phần đó.
Cấu trúc của phần tiều đề mở rộng
0
2
3
4
8
9
16 31
defined by profile
length
header extension
...
Tiêu đề mở rộng của gói RTP.
Nếu như bit X trong phần tiêu đề cố định được đặt bằng 1 thì theo sau phần tiêu đề cố định là phần tiêu đề mở rộng có chiều dài thay đổi.
- 16 bit đầu tiên trong phần tiêu đề được sử dụng với mục đích riêng cho từng ứng dụng được định nghĩa bởi profile. Thường nó được sử dụng để phân biệt các loại tiều đề mở rộng.
- Length: 16 bits. Mang giá chiều dài của phần tiêu đề mở rộng tính theo đơn vị là 32 bits. Giá trị này không bao gồm 32 bit đầu tiên của phần tiêu đề mở rộng.
Giao thức điều khiển RTCP
Giao thức RTCP dựa trên việc truyền đều đặn các gói điều khiển tới tất cả các người tham gia vào phiên truyền. Nó sử dụng cơ chế phân phối gói dữ liệu trong mạng giống như giao thức RTP, tức là cũng sử dụng các dịch vụ của giao thức UDP qua một cổng UDP độc lập với việc truyền các gói RTP.
Giao thức điều khiển thời gian thực Real-time Control Protocol (RTCP) có nhiệm vụ giám sát và đánh giá quá trình truyền tin dựa trên việc truyền một cách định kỳ các gói tin điều khiển tới các thành viên tham gia phiên truyền với cùng cơ chế truyền dữ liệu. RTCP thi hành 4 chức năng chính :
Cung cấp cơ chế phản hồi chất lượng truyền dữ liệu. Bên gửi thống kê quá trình gửi dữ liệu qua bản tin người gửi cho các thành viên. Bên nhận cũng tiến hành gửi lại bản thống kê các thông tin nhận được qua bản tin người nhận. Từ việc giám sát quá trình gửi và nhận giữa các bên, ta có thể điều chỉnh lại các thông số cần thiết để tăng chất lượng cho phiên truyền. Đây là chức năng quan trọng nhất của RTCP.
Mỗi nguồn cung cấp gói tin RTP được định danh bởi một tên CNAME (Canonical end-point identifer SDES item). RTCP có nhiệm vụ cho các thành viên biết tên này. Khi có thành viên mới tham gia phiên truyền thì anh ta phải được gán với một trường CNAME trong gói tin SDES.
Quan sát số thành viên tham gia phiên truyền thông qua sự thống kê ở các bản tin.
Mang các thông tin thiết lập phiên truyền, các thông tin về người dùng. Đây là chức năng tùy chọn. Nó đặc biệt hữu ích với việc điều khiển các phiên lỏng, cho phép dễ dàng thêm bớt số thành viên tham gia hội thoại mà không cần có ràng buộc nào.
Giao thức RTCP bao gồm các loại gói sau:
- SR (Sender Report): Mang thông tin thống kê về việc truyền và nhận thông tin từ những người tham gia đang trong trạng thái tích cực gửi.
- RR (Receiver Report): Mang thông tin thống kê về việc nhận thông tin từ những người tham gia không ở trạng thái tích cực gửi.
- SDES (Source Description items): mang thông tin miêu tả nguồn phát gói RTP.
- BYE: chỉ thị sự kết thúc tham gia vào phiên truyền.
- APP: Mang các chức năng cụ thể của ứng dụng.
Giá trị của trường PT (Packet Type) ứng với mỗi loại gói được liệt kê trong bảng sau:
Loại gói
SR
RR
SDES
BYE
APP
PT (Decimal)
200
201
202
203
204
Các hợp gói của RTCP được phát đi một một cách đều đặn sau những khoảng thời gian bằng nhau để thường xuyên thông báo về trạng thái các điểm cuối tham gia. Vấn đề là tốc độ phát các hợp gói này phải đảm bảo không chiếm hết lưu lượng thông tin dành cho các thông tin khác.
Trong một phiên truyền, lưu lượng tổng cộng cực đại của tất cả các loại thông tin truyền trên mạng được gọi là băng thông của phiên (session bandwidth). Lưu lượng này được chia cho các bên tham gia vào cuộc hội nghị. Lưu lượng này được mạng dành sẵn và không cho phép vượt quá để không ảnh hưởng đến các dịch vụ khác của mạng. Trong mỗi phần băng thông của phiên được chia cho các bên tham gia phần lưu lượng dành cho các gói RTCP chỉ được phép chiếm một phần nhỏ và đã biết là 5% để không ảnh hưởng đến chức năng chính của giao thức là truyền các dòng dữ liệu media.
Như vậy không những RTP đáp ứng được yêu cầu thời gian thực mà còn cho phép tagiám sát và đánh giá chất lượng truyền tin cho VoIP.
II.Lập trình trong Java
1.Mã hóa với Java
Mã hóa (Encryption) là một tiến trình lấy dữ liệu, một khóa mã hóa và một bộ phát sinh văn bản mật mã để mã hóa toàn bộ dữ liệu. Nếu như không có khóa giải mã, khóa dữ liệu sẽ chỉ là vô nghĩa.
Giải mã (Decryption) là quá trình ngược lại của mã hóa. Là quá trình lấy dữ liệu đã mã hóa và khóa mã hóa rồi dịch ngược để có dữ liệu ở dạng ban đầu.
Các bộ công cụ mã hóa:
+ Mã hóa với khóa đối xứng: thông điệp chỉ đọc được khi người nhận có khóa mã hóa đúng với khóa mà người gửi đã dùng.
+ Mã hóa với khóa công khai: ta sử dụng một cặp khóa, khó bí mật và khóa công khai. Người gửi sử dụng khóa công khai của người nhận để mã hóa, khóa bí mật được theo cách nào đó gửi đến người nhận để phục vụ cho việc giải mã.
+ Phương pháp chữ ký số: người gửi cho dữ liệu qua một hàm băm để phát sinh một mã khóa gọi là mã băm, tiếp tục mã hóa nó với khóa bí mật rồi gửi mã băm đã mã hóa đi cùng với dữ liệu và khóa công khai. Người nhận dùng khóa công khai để giải mã tìm ra mã băm. Người nhận tiếp tục thực hiện cùng hàm băm trên phần dữ liệu nhận được để tìm ra mã băm, đối chiều nếu có sự giống nhau về mã băm nghĩa là truyền an toàn.
Java cung cấp một số giao diện lập trình ứng dụng cho việc mã hóa như JCA (Java Cryptography Architecture) và JCE (Java Cryptography Extension) trong đó JCE được thừa hưởng từ JCA API và bao gồm các APIs cho việc mã hóa, chuyển đổi khóa và mã xác thực thông điệp. JCE cùng với bộ phận mã hóa của Java2 SDK cung cấp một giao diện lập trình ứng dụng cho việc mã hóa dữ liệu hoàn hảo và không phụ thuộc hệ điều hành.
Các lớp engine JCE1.2:
+ javax.crypto.Clipher: cung cấp các hàm để viết thành mật mã phục vụ mã hóa/giải mã.
+ javax.crypto.KeyAgreement: cung cấp các hàm cho giao thức chuyển đổi khóa.
+ javax.crypto.KeyGenerator: cung cấp các hàm cho việc tạo khóa đối xứng.
+ javax.crypto.Mac:cung cấp các hàm cho thuật toán MAC.
+ javax.crypto.SecretKeyFactory: tạo khóa bí mật.
JCE cung cấp phương thức cho mã hóa đối xứng thông qua việc sử dụng khóa bí mật, một khóa được chia sẻ bởi người gửi và người nhận để mã hóa cũng như giải mã dữ liệu.
Các gói chính của JCE là:
+ javax.crypto: chứa các lớp đại diện cho các khái niệm mới của mật mã, chấp nhận khóa và chứng thực thông điệp.
+ javax.crypto.spec: bao gồm nhiều mô tả khóa và các lớp về tham số giải thuật.
+ javax.crypto.interfaces là interfaces cho khóa dựa trên thuật toán Diffie-Hellman.
2.Chương trình stream audio
1/Một số thực thể chính trong JMF:
+ Data source: đại diện cho luồng media, đó có thể là audio, video hoặc cả 2.
+ Player: là 1 player sử dụng data source và play.
+ Processor: 1 processor là một loại player mà duy trì điều khiển khi luồn data đang được thực thi.
+ Format: định dạng media của đối tượng, bao gồm audio format và video format.
+ Manager: kết hợp 2 thành phần, giống như player và data source.
2/Chương trình:
RTPServer
Tạo phiên RTP session.
Tạo datasource.
Tạo jmf processor.
Cấu hình processor với RTP và định dạng truyền.
Liên kết datasource với processor.
RTP manager tạo ra luồng gửi cho datasource. RTP Manager bắt đầu truyền.
RTPPlayer
Tạo RTP Mananger.
Thêm vào 1 RTP Session Listener.
Thêm vào 1 listener để xác định khi nào một luồng đã được nhận.
Tạo data source từ luồng ReceiveStream.
Tạo 1 player liên kết với data source.
Hiển thị player.
Khi không còn dữ liệu nhận về, thoát khỏi tất cả các luồng và đóng lại.
Tài liệu tham khảo:
Bảo mật lập trình mạng trong Java2 – NXB Thống kê.
Java lập trình mạng – NXB Giáo dục.
Java sun tutorial www.java.sun.com
Java Media Framework API -
JMF Programmers Guide -
Các file đính kèm theo tài liệu này:
- Viết chương trình stream audio, video giữa Client và Server, mã hoá trước khi truyền.DOC