Khởi động Agent

Một phần của tài liệu Bài tiểu luận môn hoc IP ứng dụng và bảo mật giới thiệu công cụ ns (Trang 66)

9. Agents

9.5.2.Khởi động Agent

Agent TcpAgent được khởi động như trong ví dụ sau đây khi nguồn FTP nhận được lệnh khởi động ở thời điểm 1.2. Quá trình khởi động là một thủ tục được định nghĩa trong lớp Application/FTP (Section 32.4). Định nghĩa trong ~ns/tcl/lib/ns- source.tcl như sau:

{

[$self agent] send -1 }

Trong trường hợp này, agent tham chiếu đến agent TCP đơn giản và gửi –1 là tín hiệu tương tự báo hiệu sẽ gửi 1 file lớn.

Và lệnh gửi làm bên gửi TCP đơn giản tạo ra các gói. Đầu ra hàm thực hiện như sau:

void TcpAgent::output(int seqno, int reason) {

Packet* p = allocpkt();

hdr_tcp *tcph = (hdr_tcp*)p->access(off_tcp_); double now = Scheduler::instance().clock(); tcph->seqno() = seqno; tcph->ts() = now; tcph->reason() = reason; Connector::send(p, 0); ... if (!(rtx_timer_.status() == TIMER_PENDING)) /* No timer pending. Schedule one. */

set_rtx_timer(); }

Ở đây chúng ta xem xét việc sử dụng phương thức Agent::allocpkt(). Tiến trình đầu ra đầu tiên đặt một gói mới (có header chung và IP đã được điền), sau đó phải điền vào trường header lớp TCP. Để tìm header trong một gói (giả thiết đã được phép (Section 12.2.4)) thì off_tcp_ đã phải được khởi tạo xong, như mô tả trong hàm khởi tạo. Phương thức packet access() trả về con trỏ đến header TCP, các trường số thứ tự và dấu thời gian đã điền, và phương thức send() của lớp Connector được gọi để để gửi gói xuống lớp dưới. Chú ý rằng, toán tử ngăn cách :: được sử dụng để tránh việc gọi TcpSimpleAgent::send() (đã được định nghĩa). Việc kiểm tra định thời sử dụng phương thức định thời status() được định nghĩa trong lớp TimerHandler. Nó được sử dụng ở đây để thiết lập định thời truyền lại nếu nó chưa được thiết lập (phía gửi TCP chỉ thiết lập một bộ định thời cho mỗi cửa sổ trên mỗi kết nối).

Một phần của tài liệu Bài tiểu luận môn hoc IP ứng dụng và bảo mật giới thiệu công cụ ns (Trang 66)