You are on page 1of 70

BÀI THỰC HÀNH SỐ 1

Họ tên sinh viên:.............................................


Tổ:......................MSSV:.................................
I. Mục tiêu
 Hiểu biết về các môi trường truyền thông dụng, các bước thực hiện bấm
cáp TP.
 Hiểu biết về cấu hình TCP/IP trên hệ điều hành Microsoft Windows, hệ
điều hành Linux.
 Hiểu biết một số lệnh liên quan về mạng.
 Hiểu biết về phần mềm Wireshark.
II. Các bước thực hiện
1. Giới thiệu các môi trường truyền thông dụng
a. Cặp cáp xoắn
 UTP(Unshielded Twisted-Pair)
 STP(Shielded Twisted-Pair)

................................... ................................

b. Cáp đồng trục


 Cáp đồng trục mảnh (Thinnet)
 Cáp đồng trục dày (Thicknet)

c. Cáp quang

................................... ................................

d. Các chuẩn và phụ kiện với TP


 Các chuẩn
- Chuẩn T568-B
- Chuẩn T568-A

................................... ................................
 Các phụ kiện
- Patch Cord
- Modular Jack
- Outlet
- Patch Panel

Trang 1/70
................................... ................................

2. Các bước thực hiện bấm cáp UTP


a. Lựa chọn kiểu cáp: Straight Cable, Crossover Cable và Rollover
Cable

Kiểu cáp:.........................................................................................
Chức năng:.....................................................................................

Trang 2/70
Kiểu cáp:.........................................................................................
Chức năng:.....................................................................................

Kiểu cáp:.........................................................................................
Chức năng:.....................................................................................

<---cable---
Pin Connector#1 Pin Connector#2
>
White-
1 1 White-Green
Orange
2 Orange 2 Green
White-
3 White-Green 3
Orange
6 Green 6 Orange

b.Các bước thực hiện bấm cáp UTP


 Xác định khoảng cách thực cần thiết cho đoạn cáp, sau đó cộng thêm 20-25
cm.
 Bóc vỏ một đầu cáp từ 2,5-4 cm tính từ đầu sợi cáp.
 Sắp xếp các đôi cáp theo chuẩn T568-A hoặc T568-B và sửa các sợi cáp
cho thẳng.
 Dùng dụng cụ cắt các sợi cáp tại vị trí cách mép vỏ từ 1,5-2 cm.
 Kiểm tra lại vị trí các đôi cáp. Đưa các đôi cáp vào RJ45 Connector.
 Thực hiện bắm bằng dụng cụ bắm cáp.
 Kiểm tra cáp đã bấm bằng thiết bị kiểm tra (nếu có).

Trang 3/70
c. Xác định kiểu cáp sử dụng cho các mô hình sau

Server Workstation

a) b)

c)
a.................................................................................................
b.................................................................................................
c..................................................................................................
3. Hiểu biết về cấu hình TCP/IP trên hệ điều hành Microsoft
Windows
a. Xem thông tin TCP/IP
 Sử dụng lệnh ipconfig để xem thông tin cấu hình TCP/IP
 Thông thường có hai Adapter (Network Interface Card và giao tiếp
PPP)
 Cho biết các thông tin trên Network Interface Card:
IP Address:...............................Subnet Mask:
..................................................

Trang 4/70
Default Gateway:......................DNS Server:
.......................................................
b. Cấp phát động hoặc cấu hình tĩnh thông tin TCP/IP
 Start -> Settings -> Control Panel -> Network Connections -> Local
Area Connection -> Properties -> Internet Protocol (TCP/IP) ->
Properties
 Nếu muốn cấu hình tĩnh thì sử dụng các thông tin ở mục 3 để cấu
hình.
4. Hiểu biết về cấu hình TCP/IP trên hệ điều hành Linux
 Xem xét tập tin cấu hình /etc/sysconfig/networking/devices/ifcfg-eth0.
Các thông tin trong tập tin /etc/sysconfig/networking/devices/ifcfg-eth0
để cấu hình TCP/IP cho NIC thứ nhất.
 Nếu có thay đổi về thông tin TCP/IP thì thay đổi trong tập tin
/etc/sysconfig/ifcfg-ethx, sau đó khởi động lại dịch vụ nework:
# service network restart
5. Tìm hiểu một số lệnh liên quan về mạng
a. Lệnh ipconfig (ifconfig trên Linux/UNIX)
 Người quản trị sử dụng lệnh này để xem thông tin TCP/IP trên các
giao tiếp mạng, và tất nhiên cũng có thể dùng để cấu hình TCP/IP cho
các giao tiếp mạng.
 Cho biết cú pháp của lệnh trên:
.....................................................................................................................
.....................................................................................................................
b. Lệnh netstat
 Người quản trị sử dụng lệnh này để xem xét toàn diện thông tin về hệ
thống cục bộ và bộ giao thức TCP/IP.
 Cho biết kết quả của lệnh netstat –a
.....................................................................................................................
.....................................................................................................................
c. Lệnh tracert (traceroute trên Linux/UNIX)
 Người quản trị sử dụng lệnh này để dò tìm đường đi đến một hệ
thống khác, mục đích xác định được lỗi xảy ra khi không thực hiện
được kết nối.
 Cho biết kết quả của lệnh tracert www.google.com
.....................................................................................................................
.....................................................................................................................
d. Lệnh route
 Người quản trị sử dụng lệnh này để xem, thêm hay loại bỏ các đường
đi trong bảng đường đi của mỗi máy tính.
 Cho biết kết quả của lệnh route PRINT
.....................................................................................................................
.....................................................................................................................
e. Lệnh ping
 Người quản trị sử dụng lệnh này để hỏi một hệ thống khác để chắc
chắn rằng kết nối vẫn còn hoạt động.

Trang 5/70
 Cho biết kết quả của lệnh ping www.yahoo.com
.....................................................................................................................
.....................................................................................................................
f. Công cụ nslookup
 Người quản trị sử dụng công cụ này để kiểm tra hoạt động của hệ
thống hỏi đáp tên (Domain Name System).
 Cho biết địa chỉ IP của www.vnn.vn (thực hiện nslookup www.vnn.vn):
.....................................................................................................................
.....................................................................................................................
 Cho biết địa chỉ IP của Mail eXchange domain hotmail.com (thực hiện
nslookup -type=MX hotmail.com)
g. SSH (Secure Shell) Client
 Người quản trị sử dụng công cụ để kết nối vào một hệ thống và làm
việc từ xa. Thay thế cho telnet, ftp, rcp, rsh, ...
6. Hiểu biết về Wireshark
a. Packet Sniffer
Công cụ cơ bản cho việc quan sát các thông điệp trao đổi giữa các thực
thể hoạt động. Chúng nắm bắt các thông điệp vào ra trên máy tính của
bạn, lưu trữ và hiển thị các thành phần của các trường khác nhau của
giao thức trong các thông điệp trên.

b. Wireshark
Một packet analyzer miển phí chạy trên nhiều hệ điều hành (Windows, Unix,
Mac) kết hợp thư viện pcap. Các thông tin liên quan tham khảo tại:
http://www.wireshark.org/

c. Sử dụng Wireshark
Khi chạy chương trình Wireshark, giao diện đồ họa sẽ xuất hiện, và chưa
có thông tin gì hiển thị trên các cửa sổ.

Trang 6/70
 Lựa chọn giao tiếp mạng và bắt đầu bắt gói: Capture -> Interfaces ->

Capture hoặc Capture -> Start, dừng lại và hiển thị thông tin.
d. Ví dụ
 Khởi động một trình duyệt.
 Khởi động Wireshark.
 Catpure -> Start -> thay đổi các tùy chọn -> OK
 Một cửa sổ tóm tắt số lượng các gói của nhiều loại. Nếu nhấn Stop,
sẽ dừng lại quá trình bắt gói vì vậy không nhấn Stop trong quá trình
bắt gói.
 Nhập URL sau vào trình duyệt: http://www.hutech.edu.vn/, trang web
sẽ được hiển thị.
 Dừng lại tiến trình bắt gói trên Wireshark. Các thông điệp HTTP trao
đổi với Web Server (hoặc Proxy Server) chắc chắn xuất hiện đâu đó
trong danh sách các thông điệp bắt được. Cho biết hình ảnh của
Wireshark sau khi dừng lại tiến trình bắt gói
 Gõ “http” vào nơi khai báo filter, nhấn Apply để chỉ xem các thông
điệp liên quan đến HTTP. Cho biết hình ảnh của Wireshark sau khi
filter.
 Chọn thông điệp đầu tiên để xem xét. Đây phải là thông điệp HTTP
GET mà máy tính bạn đã gởi đến Web Server www.hutech.edu.vn
(hoặc Proxy Server). Khi chọn thông điệp này thì Ethernet frame
header, IP datagram header, TCP segment header, HTTP message
heder cũng được hiển thị trong cửa sổ packet header.
Cho biết thông tin của các header (Ethernet frame header, IP
datagram header, TCP segment header, HTTP message heder).
 Thoát khỏi Wireshark.
.

--HẾT—

Trang 7/70
BÀI THỰC HÀNH SỐ 2
Họ tên sinh viên: Trần Minh Thành.............................
Tổ:11CTH06 .................MSSV:1111020467 ..............
III. Mục tiêu
 Hiểu biết về Ethernet.
 Hiểu biết về ARP.
 Hiểu biết về ICMP.
IV. Các bước thực hiện
1. Hiểu biết về Ethernet
Khởi động trình duyệt IE hoặc Firefox, loại bỏ các thông tin trong cache:
o IE: Tools  Internet Options  Delete Files

o Firefox: Nhấn Ctrl-Shift-Del, chọn Cache


Loại bỏ việc sử dụng proxy server nếu có thể:
o IE: Tools  Internet Options  Connections  LAN Settings

Trang 8/70
Khởi động lại phần mềm Wireshark, bắt đầu tiến trình bắt gói.
Nhập URL: http://www.hutech.edu.vn/ vào trình duyệt IE, trang web hiển
thị.
Dừng lại tiến trình bắt gói trên Wireshark. Chọn Frame chứa thông điệp
HTTP GET.
Xem xét thông tin (từ chi tiết đến tổng quát) trong Frame trên và trả lời
các câu hỏi sau:
o Địa chỉ default gateway: .................................................................
o Kích thước của Frame (bytes): ......................................................
o Địa chỉ Ethernet 48-bit của máy tính bạn đang sử dụng: ...............
o Địa chỉ đích 48-bit trong Ethernet frame là gì: ................................
o Địa chỉ đích trên là địa chỉ của máy tính nào (www.hutech.edu.vn
hay default gateway): .....................................................................
o Các địa chỉ trên có phải là địa chỉ IP không?..................................
o Cho biết giá trị thập lục phân của trường Frame type (2 bytes): . . .
o Cho biết ý nghĩa của trường Frame type:.......................................

Trang 9/70
o Cho biết có bao nhiêu byte kể từ ký tự ASCII “G” trong từ khĩa
“GET” (hay chiều dài thông điệp ở tầng ứng dụng): ......................
o Hãy cho biết sự khác nhau giữa định dạng của Ethernet Frame
trên so với định dạng Ethernet Frame đã học ở chương 3 lý thuyết:
.........................................................................................................
Tương tự xem xét thông tin (từ chi tiết đến tổng quát) trong Frame chứa
thông điệp HTTP response và trả lời các câu hỏi sau:
o Kích thước của Frame (bytes): ......................................................
o Địa chỉ đích 48-bit có phải là địa chỉ Ethernet máy tính của bạn hay
không? ............................................................................................
o Địa chỉ nguồn 48-bit trong Ethernet frame: ....................................
o Địa chỉ nguồn trên là địa chỉ của máy tính nào (www.hutech.edu.vn
hay default gateway): .....................................................................
o Cho biết giá trị thập lục phân của trường Frame type: ..................
o Cho biết có bao nhiêu byte kể từ ký tự ASCII “O” trong “OK”: .......
2. Hiểu biết ARP (Address Resolution Protocol)
Xem lại lý thuyết chương 4, và các URL sau để nắm các thông tin về
ARP.
o ftp://ftp.rfc-editor.org/innotes/std/std37.txt
o http://www.erg.abdn.ac.uk/users/gorry/course/inet-pages/arp.html
Mở DOS prompt, thực hiện lệnh arp, lệnh này hiển thị các thành phần
của ARP cache trên máy tính của bạn.
o Cho biết cú pháp của lệnh arp để xem thông tin ARP cache: ........
o Cho biết ý nghĩa của từng cột trong ARP cache: ...........................
Xóa ARP cache bằng lệnh arp –d *
Khởi động trình duyệt và loại bỏ các thông tin trong cache.
Khởi động lại phần mềm Wireshark, bắt đầu tiến trình bắt gói.
Nhập URL: http://www.hutech.edu.vn/ vào trình duyệt, trang web hiển thị.
Dừng lại tiến trình bắt gói trên Etherea, lọc các thông điệp với “arp”.
Xem xét thông tin 02 Frame thuộc về protocol ARP request và reply, sau
đó trả lời các câu hỏi sau:
o Giá trị thập lục phân của địa chỉ nguồn và đích trong Ethernet
Frame của thông điệp ARP request là gì: ......................................
o Tìm Ethernet Frame bao gồm thông điệp ARP reply, cho biết giá trị
thập lục phân của địa chỉ nguồn và đích, và cho biết đó là địa chỉ
của máy tính nào: ...........................................................................
3. Hiểu biết về ICMP
a. ICMP và ping
Khởi động lại phần mềm Wireshark, bắt đầu tiến trình bắt gói.
Mở DOS prompt và thực hiện lệnh ping –n 10 www.hutech.edu.vn hoặc
ping –n 10 www.google.com (nếu lệnh ping www.hutech.edu.vn thất bại)
Sau khi lệnh ping kết thúc, dừng lại tiến trình bắt gói trên Wireshark. Lọc
các thông điệp với “icmp”.
Xem xét thông tin (từ chi tiết đến tổng quát) trong các gói ping trên và trả
lời các câu hỏi sau:

Trang 10/70
oĐịa chỉ IP máy tính của bạn: ..........................................................
oĐịa chỉ IP của website www.hutech.edu.vn (www.google.com): ....
oVì sao mỗi ICMP packet không có chỉ số port nguồn và đích? ......
oXem xét một ICMP packet request, cho biết định dạng của packet
này: .................................................................................................
o Xem xét một ICMP packet reply, cho biết định dạng của packet
này: .................................................................................................
b. ICMP và tracert
Khởi động lại phần mềm Wireshark, bắt đầu tiến trình bắt gói.
Mở DOS prompt và thực hiện lệnh tracert www.hutech.edu.vn hoặc
tracert www.google.com (nếu lệnh tracert www.hutech.edu.vn thất bại).
Sau khi lệnh tracert kết thúc, dừng lại tiến trình bắt gói trên Wireshark.
Lọc các thông điệp với “icmp”.
Xem xét thông tin (từ chi tiết đến tổng quát) trong các gói icmp trên và trả
lời các câu hỏi sau:
o Cho biết địa chỉ IP của máy tính có tên là www.cse.hcmut.edu.vn
(hoặc www.google.com): ................................................................
o Cho biết sự khác nhau giữa gói ICMP ping reply và gói ICMP ping
request: ..........................................................................................
o Phát thảo đường đi từ máy tính của bạn đến www.hutech.edu.vn
(www.google.com): .........................................................................

--HẾT--
BÀI THỰC HÀNH SỐ 3
Họ tên sinh viên: ...........................................
Tổ: ..............................MSSV: ......................

V. Mục tiêu
 Cấu hình hạ tầng mạng cục bộ với ConfigMaker.
 Giả lập hạ tầng mạng cục bộ với RouterSim.
 Triển khai hạ tầng mạng cục bộ thực tế.

VI. Các bước thực hiện


1. Hạ tầng mạng cục bộ

Trang 11/70
a. Đồ hình vật lý

b. Các yêu cầu kỹ thuật


 Loại cáp sử dụng: UTP Cat5e
 Loại connector sử dụng:
…….................................................................................................
 Chiều dài tối đa của mỗi đoạn cáp sử dụng:
…….................................................................
 Kiểu bấm cáp từ máy tính đến Hub:
……..............................................................................
 Kiểu bấm cáp từ Hub đến Hub:
…….....................................................................................

c. Cấu hình TCP/IP


 Vùng địa chỉ IP sử dụng:
……................................................................................................
 Mặt nạ mạng con sử dụng:
…….............................................................................................

d. Kiểm tra kết nối mạng


 Kiểm tra kết nối các máy tính bằng
lệnh: ........................................................................

2. Cấu hình hạ tầng mạng cục bộ với ConfigMaker


a. Hiểu biết về phần mềm ConfigMaker
 Giới thiệu
Đây là một phần mềm dùng để cấu hình mạng (LAN, WAN) với một số thiết bị
mạng của Cisco. Ngoài ra nó còn hỗ trợ các tính năng xem xét cấu hình trên các
thiết bị Cisco.
 Sử dụng ConfigMaker
Khi chạy chương trình ConfigMaker, giao diện đồ họa sẽ xuất hiện. Các cửa sổ
bên trái là các trang thiết bị mạng, các kết nối mạng. Để thiết kế hay cấu hình

Trang 12/70
một mạng (LAN, WAN), ta chỉ cần dùng chuột “kéo và thả” các trang thiết bị,
dùng chuột đánh dấu đầu và cuối cho các kết nối mạng.

b. Cấu hình hạ tầng mạng cục bộ với ConfigMaker


 Hub/Switch chính sử dụng:
……..............................................................................................
 Hub/Switch nhánh sử dụng:
…….............................................................................................
 Loại kết nối mạng cục bộ sử dụng:
……..................................................................................
 Kiểm tra kết nối mạng bằng
lệnh: ............................................................................................

3. Giả lập hạ tầng mạng cục bộ với RouterSim


a. Làm quen với chương trình Router Sim
Các màn chính trong trong RouterSim:
Network Visualizer Screen

Trang 13/70
Là màn hình giao diện đồ hoạ chính trong Router Sim. Đây là nơi bạn sẽ tạo và
cấu hình các thiết bị được thêm vào trong màn hình Network Visualizer. Nhấn đúp
chuột lên thiết bị để cấu hình một thiết bị đó, khi đó sẽ chuyển sang màn hình
Simulation.

Simulation Screen

Là màn hình giả lập các thiết bị, dùng để cấu hình các thiết bị như router, switch,

Trang 14/70
b. Giả lập một mạng máy tính trong Router Sim
1. Nhấp chuột vào nút Net Visualizer, khi đó màn hình lưới Network Visualizer
sẽ xuất hiện.
2. Chọn các “thiết bị” từ thực đơn bên và đưa vào màn hình Net Visualizer.
3. Tiếp tục thêm các thiết bị cần thiết để tạo thành một mạng máy tính.

Muốn bỏ một thiết bị ra khỏi màn hình Net Visualizer, chúng ta chọn thiết bị đó
và chọn Edit-> Cut. Nếu chúng ta muốn xóa toàn bộ các thiết bị, click vào nút
Clear Visualizer.

c. Kết nối các thiết bị trong Router Sim


Sau khi có các thiết bị trong màn hình Network Visualizer, chúng ta phải kết nối
chúng lại với nhau.
1. Nhấp chuột phải trên thiết bị.
2. Nhấp chuột trên các cổng muốn kết nối, ví dụ: E0, S0, S1.
3. Đối với các cổng S0, S1, sẽ yêu cầu kết nối DTE hay DCE. Chú ý đối với
DCE chúng ta phải cấu hình clock rate cho cổng đó.
4. Tương tự chúng ta nhấn chuột phải lên thiết bị cần kết nối tới và click chuột
trái lên port kết nối.

Nếu muốn bỏ các kết nối chúng ta làm tương tự như việc kết nối:
1. Click chuột phải lên thiết bị.
2. Click chuột trái lên kết nối muốn bỏ.
3. Chương trình sẽ hỏi chúng ta muốn bỏ kết nối đó hay không? OK

d. Giả lập hạ tầng mạng cục bộ với RouterSim


1. Chọn các thiết bị mạng và Host.
2. Kết nối các Host đến các thiết bị mạng và giữa các thiết bị mạng.
3. Cấu hình thông tin IP cho các Host với vùng địa chỉ IP là 192.168.1.0/24.
4. Kiểm tra kết nối mạng bằng lệnh ping trên màn hình giả lập của các Host.

4. Triển khai hạ tầng mạng cục bộ thực tế


Sử dụng các trang thiết bị mạng (Hub/Switch) và các máy tính hiện có triển khai hạ
tầng mạng cục bộ có đồ hình như trong mục 1.1 hoặc có đồ hình tương tự.

-HẾT-

Trang 15/70
BÀI THỰC HÀNH SỐ 4
Họ tên sinh viên: ...........................................
Tổ: ..............................MSSV: ......................

VII. Mục tiêu


 Hiểu biết cách cấu hình Cisco Router.
 Liên mạng cục bộ dùng Cisco Router.

VIII. Cấu hình Router

1. Đăng nhập vào router

- Để kết nối vào router chúng ta nhấn enter từ màn hình Network
Visualizer, chúng ta sẽ vào user mode. Trong chế độ user mode
chúng ta chỉ có thể sử dụng được một số lệnh như: ping,
traceroute, …
- Muốn cấu hình router chúng ta vào ở trong chế độ privileged
mode, bằng cách sử dụng lệnh enable để vào privileged mode (
Router# )
- Dùng lệnh logout, exit để thoát
- Các dấu nhắc trong Router:
o Router # : Đang ở chế độ privileged (enable)
o Router (config) # : Đang ở chế độ global config mode
(config)
o Router (config-if) # : Đang ở chế độ config các interface
của router (interface
ethernet0)
o Router (config-subif) # : subinterfacce (int f0/0.1)
o Router (config-line) # : cấu hình trên các line (line
console 0)
o Router (config-router) # : Cấu hình routing (router rip)

2. Xem thông tin một router

Trang 16/70
- ? : Xem các lệnh có thể thực hiện được ở chế độ
này
- command? : Xem các lệnh có các kí tự bắt đầu như vậy
- Command ? : Xem các tham số của một lệnh
- show version : Xem version của HDH của router
- show running-config (sh run), show startup-config (sh
start)
o Xem cấu hình đang chạy của router và cấu hình của router
được lưu trong NVRAM.

3. Đặt Password cho router


Trong router chúng ta có 5 password để bảo vệ router. Hai password đầu tiên để
bảo vệ chế độ privileged mode, khi sử dụng lệnh enable. Và 3 password khác
dùng để bảo vệ router khi người dùng đăng nhập từ console port, auxiliary port
hoặc là telnet (ở mức user mode).

a. Password cho Privileged mode

- Config T : Để vào cấu hình router (Router(config)#)


- enable secret : Đặt password cho router (1)
- enable password : Đặt password cho router (2)
o Chú ý: Khi đã đặt password theo lệnh (1) thì password
trong lệnh (2) sẽ không có tác dụng nữa.

b. Password cho console port, auxiliary port và Telnet


- Sử dụng lệnh line để đặc password user mode cho các cổng
phụ như:

Router(config)#line ?
<0-6> First Line number
aux Auxiliary line
console Primary terminal line
vty Virtual terminal

Trong đó:
o aux: config router qua modem
o console : config router thông qua console port
o vty : config router qua telnet. (Nếu không được đặt
password thì không thể sử dụng Telnet để cấu hình router)
- Line [aux/console/vty] [0]
- Login
- Password <pass>

c. Mã hóa mật mã
- Config t

Trang 17/70
- Service password-encryption
- Bắt đầu đặt password như trên
- No service password-encryption

4. Cấu hình cho router

a. Cài đặt câu thông báo khi logon vào router


- banner motd # Câu thông báo #

b. Cấu hình các giao tiếp của router


- interface (int) e0/ s0/ s1 / [fastethernet 0/0]
- no shutdown (no shut)
- ip address A.B.C.D subnetmask
- ip address A.B.C.D subnetmask secondary
- description (desc) câu miêu tả

c. Đặt Router hostname


- con t
- hostname Tên_của_router

IX. Liên mạng cục bộ dùng Cisco Router

1. Đồ hình mạng

2. Các bước thực hiện


- Kéo thả các Switch, Router và các Host
- Kết nối các Host đến các Switch
- Thực hiện khai báo Hostname và thông tin IP cho các Switch và
các Host với 2 vùng địa chỉ IP là 192.168.1.0/24 và
192.168.2.0/24.
- Cấu hình Router.

Trang 18/70
- Kiểm tra liên thông mạng giữa các thiết bị.

-HẾT-

BÀI THỰC HÀNH SỐ 5


Họ tên sinh viên: ...........................................
Tổ: ..............................MSSV: ......................

X. Mục tiêu
 Cấu hình VLAN cơ bản.
 Giả lập mạng cục bộ dùng VLAN.

XI. Cấu hình VLAN cơ bản

+ Khi triển khai VLAN trong một hệ thống mạng cục bộ, người quản
trị có thể thiết kế VLAN theo hai cách thức:

* Thiết kế VLAN theo dạng end-to-end: còn gọi là campus-wide.


Trong kiểu chia VLAN này, VLAN sẽ trải rộng trên toàn campus. Một
thành viên của VLAN đó di chuyển trong mạng, thuộc tính là thành
viên của VLAN đó không thay đổi. Điều này có nghĩa là, mỗi VLAN
phải sẵn có ở từng switch, đặc biệt là những switch nằm ở layer
access trong mô hình 3-layer: core-distribution-access.
Như vậy, trong end-to-end VLAN, các người dùng sẽ được nhóm vào
thành những nhóm dựa theo chức năng, theo nhóm dự án hoặc theo
cách mà những người dùng đó sử dụng tài nguyên mạng.

Trang 19/70
*Chia VLAN dạng cục bộ:
VLAN được giới hạn trong một switch hoặc một khu vực địa lý hẹp
(trong một wiring closet). Ly do để dùng dạng VLAN này là các VLAN
dạng end-to-end trở nên khó duy trì. Các người dùng thường xuyên
yêu cầu nhiều tài nguyên khác nhau. Các tài nguyên này thường nằm
trong nhìều VLAN khác nhau.

Thực hiện

1.Tạo cơ sở dữ liệu VLAN


Mỗi VLAN có một số phân biệt là vlan-id, có thể từ 1 đến 1001. Để tạo
cơ sở dữ liệu VLAN (VLAN database) thực hiện các bước như sau:

–Vào mode cấu hình cho VLAN database:

Switch#vlan database

–Tạo mới VLAN bằng câu lệnh vlan vlan-id [name name]. Nếu không
đặt tên cho VLAN thì tên sẽ được lấy mặc định

Switch(vlan)# vlan 20 name marketing

–Cập nhật dữ liệu VLAN vào cơ sở dữ liệu VLAN, và thoát về priviledge


mode.

Switch(vlan)# exit

–Kiểm tra cấu hình VLAN bằng lệnh show vlan

Switch# vlan database


Switch(vlan)# vlan 20 name marketing
VLAN 20 added:
Name: marketing
Switch(vlan)# exit
APPLY completed.
Exiting....

Switch# show vlan name marketing


VLAN Name Status Ports
---- -------------------------------- ---------
---------------------
20 marketing active

VLAN Type SAID MTU Parent RingNo BridgeNo Stp Trans1


Trans2

Trang 20/70
---- ----- ---------- ----- ------ ------ -------- ----
------ ------
20 enet 100003 1500 - - - - 0 0

Việc tạo ra các VLAN khác sẽ được thực hiện tương tự.

2.Gán các port cho VLAN tương ứng

Trước tiên cần cấu hình tất cả các port là “access” ports. Các port trên
switch 2950 có thể ở 1 trong 3 chế độ: trunk port, multi-VLAN port và
access port. Trunk port và multi-VLAN port được dùng để nối với
switch khác (hoặc thiết bị khác có tạo VLAN trunking). Do kết nối các
workstation với các port này nên cần phải cấu hình tất cả các port
này ở chế độ access port.

Switch(config)#interface fa0/1
Switch(config-if)#switchport mode access

Gán các port vào VLAN theo yêu cầu bằng cách sử dụng lệnh
switchport access vlan n (n là số hiệu VLAN)

Switch(config)#interface fa0/4
Switch(config-if)#switchport access vlan 10
Switch(config)#interface fa0/5
Switch(config-if)#switchport access vlan 10
Switch(config)#interface fa0/6
Switch(config-if)#switchport access vlan 10
Switch(config)#interface fa0/7
Switch(config-if)#switchport access vlan 20
Switch(config)#interface fa0/8
Switch(config-if)#switchport access vlan 20
Switch(config)#interface fa0/9
Switch(config-if)#switchport access vlan 20
Switch(config)#interface fa0/10
Switch(config-if)#switchport access vlan 30
Switch(config)#interface fa0/11
Switch(config-if)#switchport access vlan 30
Switch(config)#interface fa0/12
Switch(config-if)#switchport access vlan 30

Mặc định các port được gán vào VLAN 1.

XII. Cấu hình VLAN trunking


Mô hình lab

Trang 21/70
Thực hiện
Cấu hình trên Switch DL1 làm VTP Server
1. Đặt hostname, mật khẩu và cấu hình cổng vlan trên DL1:

Switch#conf t
Enter configuration commands, one per line. End with
CNTL/Z.
Switch(config)#hostname DL1
DL1(config)#enable password cisco
DL1(config)#line vty 0 15
DL1(config-line)#password cisco
DL1(config-line)#login
DL1(config-line)#exit
DL1(config)#int vlan 1
DL1(config-if)#ip address 192.168.1.3 255.255.255.0
DL1(config-if)#end
DL1#

2. Thiết lập VTP domain là VNPRO, VTP mode là SERVER, tạo ra các
VLAN 10 (SALES), 20 (ACCOUNTING), 30 (ENGINEERING)

DL1#vlan database
Thiết lập chế độ VTP server modeDL1(vlan)#vtp server
DL1(vlan)#vtp domain VNPRO đặt switch DL1 vào domain
VNPRO
Tạo VLAN 10 và đặt tên là SALESDL1(vlan)#vlan 10 name
SALES
VLAN 10 added:
Name: SALES
DL1(vlan)#vlan 20 name ACCOUNTING
VLAN 20 added:
Name: ACCOUNTING

Trang 22/70
DL1(vlan)#vlan 30 name ENGINEERING
VLAN 30 added:
Name: ENGINEERING
Lưu cấp hình vào file vlan.datDL1(vlan)#apply
APPLY completed.
DL1(vlan)#exit
APPLY completed.
Exiting....
DL1#

+ Một switch chỉ thuộc 1 VTP domain


Mặc định switch ở chế độ VTP server mode

3. Kích hoạt trunking trên cổng Fa0/1 và cho phép tất cả các VLAN
qua trunk:

DL1#conf t
Enter configuration commands, one per line. End with
CNTL/Z.
DL1(config)#int f0/1
DL1(config-if)#switchport mode trunk
đóng gói kiểu isl (hoặc dot1q) để đi qua đường
trunkDL1(config-if)#switchport trunk encapsulation isl
Cho phép tất cả các VLAN qua trunkDL1(config-
if)#switchport trunk allowed vlan all
DL1(config-if)#exit
DL1(config)#

+ Giả sử ta chỉ muốn cho phép các VLAN 10, 20, 30 ta dùng lệnh:
DL1(config-if)#switchport trunk allowed vlan 10
DL1(config-if)#switchport trunk allowed vlan 20
DL1(config-if)#switchport trunk allowed vlan 30
4. Gán các port vào VLAN tương ứng

DL1(config)#int f0/4
Cấu hình cổng ở access modeDL1(config-if)#switchport
mode access
cấu hình cổng vào vlan 10DL1(config-if)#switchport
access vlan 10
!–– Mỗi access port chỉ phục vụ cho một VLAN
DL1(config-if)#int f0/5
DL1(config-if)#switchport mode access
DL1(config-if)#switchport access vlan 10
DL1(config-if)#int f0/6
DL1(config-if)#switchport mode access
DL1(config-if)#switchport access vlan 10

Trang 23/70
DL1(config)#int f0/7
DL1(config-if)#switchport mode access
DL1(config-if)#switchport access vlan 20
DL1(config-if)#int f0/8
DL1(config-if)#switchport mode access
DL1(config-if)#switchport access vlan 20
DL1(config-if)#int f0/9
DL1(config-if)#switchport mode access
DL1(config-if)#switchport access vlan 20

DL1(config)#int f0/10
DL1(config-if)#switchport mode access
DL1(config-if)#switchport access vlan 30
DL1(config-if)#int f0/11
DL1(config-if)#switchport mode access
DL1(config-if)#switchport access vlan 30
DL1(config-if)#int f0/12
DL1(config-if)#switchport mode access
DL1(config-if)#switchport access vlan 30

5. Xem cấu hình vừa thực hiện

DL1#sh vlan brief

VLAN Name Status Ports


---- -------------------------------- ---------
------------------------------
1 default active Fa0/2, Fa0/3, Fa0/13, Fa0/14
Fa0/15, Fa0/16, Fa0/17, Fa0/18
Fa0/19, Fa0/20, Fa0/21, Fa0/22
Fa0/23, Fa0/24, Gi0/1, Gi0/2
10 SALES active Fa0/4, Fa0/5, Fa0/6
20 ACCOUNTING active Fa0/7, Fa0/8, Fa0/9
30 ENGINEERING active Fa0/10, Fa0/11, Fa0/12
1002 fddi-default act/unsup
1003 token-ring-default act/unsup
1004 fddinet-default act/unsup
1005 trnet-default act/unsup
DL1#

Cấu hình trên Switch AL1 làm VTP Client

1. Đặt hostname, mật khẩu và cấu hình management vlan trên DL1:

Switch#conf t
Enter configuration commands, one per line. End with

Trang 24/70
CNTL/Z.
Switch(config)#hostname AL1
AL1(config)#enable mật khẩu cisco
AL1(config)#line vty 0 15
AL1(config-line)#mật khẩu cisco
AL1(config-line)#login
AL1(config-line)#exit
AL1(config)#int vlan 1
AL1(config-if)#ip address 192.168.1.2 255.255.255.0
AL1(config-if)#end
AL1#

2. Thiết lập VTP domain là VNPRO, VTP mode là CLIENT

AL1#vlan database
AL1(vlan)#vtp client
AL1(vlan)#vtp domain VNPRO
AL1(vlan)#exit
In CLIENT state, no apply attempted.
Exiting....
AL1#

3. Kích hoạt trunking trên cổng Fa0/1 và cho phép tất cả các VLAN
qua trunk:

AL1#conf t
Enter configuration commands, one per line. End with
CNTL/Z.
AL1(config)#int f0/1
AL1(config-if)#switchport mode trunk
đóng gói kiểu isl (hoặc dot1q) để đi qua đường
trunkAL1(config-if)#switchport trunk encapsulation isl
Cho phép tất cả các VLAN qua trunkAL1(config-
if)#switchport trunk allowed vlan all
AL1(config-if)#exit
AL1(config)#

4. Áp đặt các port chỉ định vào VLAN tương ứng

AL1(config)#int f0/4
AL1(config-if)#switchport mode access
AL1(config-if)#switchport access vlan 10
AL1(config-if)#int f0/5
AL1(config-if)#switchport mode access
AL1(config-if)#switchport access vlan 10
AL1(config-if)#int f0/6

Trang 25/70
AL1(config-if)#switchport mode access
AL1(config-if)#switchport access vlan 10

AL1(config)#int f0/7
AL1(config-if)#switchport mode access
AL1(config-if)#switchport access vlan 20
AL1(config-if)#int f0/8
AL1(config-if)#switchport mode access
AL1(config-if)#switchport access vlan 20
AL1(config-if)#int f0/9
AL1(config-if)#switchport mode access
AL1(config-if)#switchport access vlan 20

AL1(config)#int f0/10
AL1(config-if)#switchport mode access
AL1(config-if)#switchport access vlan 30
AL1(config-if)#int f0/11
AL1(config-if)#switchport mode access
AL1(config-if)#switchport access vlan 30
AL1(config-if)#int f0/12
AL1(config-if)#switchport mode access
AL1(config-if)#switchport access vlan 30

5. Xem cấu hình vừa thực hiện

AL1#sh vlan
VLAN Name Status Ports
---- -------------------------------- ---------
---------------------------
1 default active Fa0/2, Fa0/3
10 SALES active Fa0/4, Fa0/5, Fa0/6
20 ACCOUNTING active Fa0/7, Fa0/8, Fa0/9
30 ENGINEERING active Fa0/10, Fa0/11, Fa0/12
1002 fddi-default active
1003 token-ring-default active
1004 fddinet-default active
1005 trnet-default active

VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode


Trans1 Trans2
---- ----- ---------- ----- ------ ------ -------- ----
-------- ------ ------
1 enet 100001 1500 - - - - - 0 0
10 enet 100010 1500 - - - - - 0 0
20 enet 100020 1500 - - - - - 0 0
30 enet 100030 1500 - - - - - 0 0
1002 fddi 101002 1500 - 0 - - - 0 0

Trang 26/70
1003 tr 101003 1500 - 0 - - srb 0 0
1004 fdnet 101004 1500 - - - ieee - 0 0
1005 trnet 101005 1500 - - - ibm - 0 0
AL1#

Kiểm tra
1. Kiểm tra cổng Fa0/1 đã hoạt động chưa

AL1#show int f0/1


Cổng đã hoạt độngFastEthernet0/1 is up, line protocol is
up
Hardware is Fast Ethernet, address is 00b0.64c9.cd41 (bia
00b0.64c9.cd41)
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive not set
Auto-duplex (Full), Auto Speed (100), 100BaseTX/FX
ARP type: ARPA, ARP Timeout 04:00:00
...

2. Kiểm tra cổng Fa0/1 đã kích hoạt trunking và đúng kiểu


encapsulation chưa

AL1#sh int f0/1 switchport


Name: Fa0/1
Switchport: Enabled
Administrative mode: trunk
Cổng F0/1 hoạt động ở chế độ trunk modeOperational Mode:
trunk
Administrative Trunking Encapsulation: isl
Kiểu đóng gói là islOperational Trunking Encapsulation:
isl
Negotiation of Trunking: Disabled
Access Mode VLAN: 0 ((Inactive))
Trunking Native Mode VLAN: 1 (default)
Cho phép tất cả các VLAN qua kết nối trunkTrunking VLANs
Enabled: ALL
Các VLAN hiện hành đang hoạt độngTrunking VLANs Active:
1,10,20,30
Pruning VLANs Enabled: 2-1001

Priority for untagged frames: 0


Override vlan tag priority: FALSE
Voice VLAN: none
Appliance trust: none

Trang 27/70
AL1#

3. Kiểm tra revision number trên client có đồng bộ với server chưa

AL1#sh vtp status


VTP Version : 2
Configuration Revision số revision number: 2
Maximum VLANs supported locally : 68
Number of existing VLANs : 8
VTP Operating Mode Switch hoạt động ở chế độ client:
Client
VTP Domain Name Switch thuộc domain VNPRO: VNPRO
VTP Pruning Mode : Disabled
VTP V2 Mode : Disabled
VTP Traps Generation : Disabled
MD5 digest : 0xDC 0x45 0xB2 0xD9 0x5B 0x7A 0x50 0x19
Configuration last modified by 192.168.1.2 at 3-1-93
01:54:06
AL1#

DL1#sh vtp status


VTP Version : 2
Configuration Revision : 2
Maximum VLANs supported locally : 1005
Number of existing VLANs : 8
VTP Operating Mode : Server
VTP Domain Name : VNPRO
VTP Pruning Mode : Disabled
VTP V2 Mode : Disabled
VTP Traps Generation : Disabled
MD5 digest : 0xDC 0x45 0xB2 0xD9 0x5B 0x7A 0x50 0x19
Configuration last modified by 192.168.1.2 at 3-1-93
01:54:06
Local updater ID is 192.168.1.2 on interface Vl1 (lowest
numbered VLAN interface
found)
DL1#

+ Revision number là một trong những thông số quan trọng của VTP.
Mỗi khi VTP server thay đổi VLAN database thì sẽ tăng giá trị revision
lên 1 và thực hiện quảng cáo VLAN database này. Các thiết bị có số
revision nhỏ hơn phải chấp nhận VLAN database có số revision lớn
hơn.

Nếu VTP server xoá bỏ tất cả các VLAN & có số revision cao nhất thì
các thiết bị khác cũng sẽ bị xoá VLAN.

Trang 28/70
4. Kiểm tra số lần gửi và nhận thông tin trunking

DL1#sh vtp counters


VTP statistics:
Summary advertisements received : 18
Subset advertisements received : 5
Request advertisements received : 1
Summary advertisements transmitted : 12
Subset advertisements transmitted : 2
Request advertisements transmitted : 0
Number of config revision errors : 0
Number of config digest errors : 0
Number of V1 summary errors : 0
VTP pruning statistics:

Trunk Join Transmitted Join Received Summary advts


received from
non-pruning-capable device
---------------- ---------------- ----------------
---------------------------
Fa0/1 0 0 0
DL1#

AL1#sh vtp counters


VTP statistics:
Summary advertisements received : 13
Subset advertisements received : 2
Request advertisements received : 0
Summary advertisements transmitted : 20
Subset advertisements transmitted : 6
Request advertisements transmitted : 1
Number of config revision errors : 0
Number of config digest errors : 0
Number of V1 summary errors : 0

VTP pruning statistics:

Trunk Join Transmitted Join Received Summary advts


received from
non-pruning-capable device
---------------- ---------------- ----------------
---------------------------
Fa0/1 1 0 0
AL1#

Trang 29/70
XIII. Cấu hình liên mạng cục bộ dùng VLAN
Mô hình Lab

Có ba 2950 switch được dùng trong bài lab. Chúng ta sẽ cấu hình
VLAN trên các switch 2950 và dùng 2600A router để diển tả việc định
tuyến.Chúng ta sẽ tạo ba VLAN trên các switch 2950A, 2950B, and
2950C. Chúng ta sẽ dùng subnet 192.168.100.0/24.

1. Cấu hình Router 2600


Router>enable
Router#config t
Router(config)#hostname 2600A

2600A(config)#enable secret todd


2600A(config)#line console 0
2600A(config-line)# password todd
2600A(config-line)#login
2600A(config-line)#line aux 0
2600A(config-line)#password todd
2600A(config-line)#login
2600A(config-line)#line vty 0 4
2600A(config-line)#password todd
2600A(config-line)#login
2600A(config-line)#interface fastethernet 0/0
2600A(config-if)#ip address 192.168.100.1 255.255.255.0

Trang 30/70
2600A(config-if)#description connection to LAN 100
2600A(config-if)#no shutdown
2600A(config-if)#exit
2600A(config)#banner motd #
This is the 2600A router
#
2600A(config)#exit
2600A#write
2600A#

2. Cấu hình Switch 2950A


Switch>enable
Switch#config t
Switch(config)#hostname 2950A
2950A(config)#enable password todd
2950A(config)#enable secret routersim
2905A(config)#line console 0
2950A(config-line)#password console
2950A(config-line)#login
2950A(config-line)#line vty 0 15
2950A(config-line)#password todd
2950A(config-line)#login
2950A(config-line)#exit
2950A(config)#ip default-gateway 192.168.100.1
2950A(config)#interface VLAN 1
2950A(config-if)#ip address 192.168.100.2 255.255.255.0
2950A(config-if)#interface fastethernet 0/10
2950A(config-if)#description Trunk Link to 2600A
2950A(config-if)#switchport mode trunk
2950A(config-if)#speed 100
2950A(config-if)#duplex full
2950A(config-if)#interface fastethernet 0/11
2950A(config-if)#description Link to 2950B
2950A(config-if)#switchport mode trunk
2950A(config-if)#speed 100
2950A(config-if)#duplex full
2950A(config-if)#interface fastethernet 0/12
2950A(config-if)#description Trunk Link to 2950C

2950A(config-if)#switchport mode trunk


2950A(config-if)#speed 100
2950A(config-if)#duplex full
2950A(config-if)#exit
2950A(config)#exit
2950A#ping 192.168.100.1

3. Tạo VTP domain là routersim và xét 2950A switch là VTP

Trang 31/70
server

2950A#config t
2950A(config)#vtp domain routersim
2950A(config)#vtp mode server

4. Cấu hình Switch 2950B


Switch>enable
Switch#config t
Switch(config)#hostname 2950B
2950B(config)#enable password todd
2950B(config)#enable secret routersim
2950B(config)#line console 0
2950B(config-line)#password console
2950B(config-line)#login
2950B(config-line)#line vty 0 15
2950B(config-line)#password todd
2950B(config-line)#login
2950B(config-line)#exit
2950B(config)#ip default-gateway 192.168.100.1
2950B(config)#interface vlan1
2950B(config-if)#ip address 192.168.100.3 255.255.255.0
2950B(config-if)#interface fastethernet 0/11
2950B(config-if)#description Trunk Link to 2950A
2950B(config-if)#switchport mode trunk
2950B(config-if)#speed 100
2950B(config-if)#duplex full
2950B(config-if)#interface fastethernet 0/12
2950B(config-if)#description Trunk Link to 2950C
2950B(config-if)#switchport mode trunk
2950B(config-if)#speed 100
2950B(config-if)#duplex full
2950B(config-if)#exit
2950B(config)#exit
2950B#ping 192.168.100.1

5. Cấu hình 2950B switch là thành viên của VTP domain


routersim
2950B#config t
2950B(config)#vtp domain routersim
2950B(config)#vtp mode client

6. Cấu hình Switch 2950C


Switch>enable
Switch#config t
Switch(config)#hostname 2950C
2950C(config)#enable password todd

Trang 32/70
2950C(config)#enable secret routersim
2950C(config)#line console 0
2950C(config-line)#password console
2950C(config-line)#login
2950C(config-line)#line vty 0 15
2950C(config-line)#password todd
2950C(config-line)#login
2950C(config-line)#exit
2950C(config)#ip default-gateway 192.168.100.1
2950C(config)#interface vlan1
2950C(config-if)#ip address 192.168.100.4 255.255.255.0
2950C(config-if)#interface fastethernet 0/11
2950C(config-if)#description Trunk Link to 2950B
2950C(config-if)#switchport mode trunk
2950C(config-if)#speed 100
2950C(config-if)#duplex full
2950C(config-if)#interface fastethernet 0/12
2950C(config-if)#description Trunk Link to 2950A
2950C(config-if)#switchport mode trunk
2950C(config-if)#speed 100
2950C(config-if)#duplex full
2950C(config-if)#exit
2950C(config)#exit
2950C#ping 192.168.100.1

7. Cấu hình 2950C switch là thành viên của VTP domain


routersim
2950C#config t
2950C(config)#vtp domain routersim
2950C(config)#vtp mode client

8. Tạo 3 VLANs trên 2950A switch là Sales, Marketing,


Finance
2950A#vlan database
2950A(vlan)#vlan 2 name Sales
2950A(vlan)#vlan 3 name Marketing
2950A(vlan)#vlan 4 name Finance

9. Xem thông tin VLAN trên Switch 2950B, 2950C


2950B#show vlan
2950C#show vlan

10. Tạo port f0/1 trên các Switch là thành viên của VLAN 2
2950A#config t
2950A(config)#interface fastethernet 0/1
2950A(config-if)#switchport access vlan 2
2950A(config-if)#switchport mode access

Trang 33/70
2950B#config t
2950B(config)#interface fastethernet 0/1
2950B(config-if)#switchport access vlan 2
2950B(config-if)#switchport mode access

2950C#config t
2950C(config)#interface fastethernet 0/1
2950C(config-if)#switchport access vlan 2
2950C(config-if)#switchport mode access

11. HostA, HostD và HostG sẽ thuộc VLAN 2 (Sales), là một vùng địa
chỉ mạng con của 192.168.100.0/24. HostA là 192.168.100.5, HostD
là 192.168.100.8 và HostG là 192.168.100.11. Default gateway là
192.168.100.1.

12. Kiểm tra việc cấu hình đúng các VLAN bằng cách ping từ HostA
đến HostD Và HostA đến HostG.

13. HostB, HostE và HostH sẽ thuộc VLAN 3 (Marketing), là một vùng


địa chỉ mạng con của 192.168.100.0/24. HostB là 192.168.100.6,
HostE là 192.168.100.9 và HostH là 192.168.100.12. Default gateway
là 192.168.100.1.

14. Cấu hình port f0/2 trên 2950A switch là thành viên của VLAN 3.

2950A#config t
2950A(config)#interface fastethernet 0/2
2950A(config-if)#switchport access vlan 3
2950A(config-if)#switchport mode access
Cấu hình port f0/2 trên 2950B switch là thành viên của VLAN 3.

2950B#config t
2950B(config)#interface fastethernet 0/2
2950B(config-if)#switchport access vlan 3
2950B(config-if)#switchport mode access

Cấu hình port f0/2 trên 2950C switch là thành viên của VLAN 3.

2950C#config t
2950C(config)#interface fastethernet 0/2
2950C(config-if)#switchport access vlan 3
2950C(config-if)#switchport mode access

15. Kiểm tra việc cấu hình đúng các VLAN bằng cách ping từ HostB
đến HostE Và HostB đến HostH.

Trang 34/70
16. HostC, HostF và HostI sẽ thuộc VLAN 3 (Finance), là một vùng địa
chỉ mạng con của 192.168.100.0/24. HostC là 192.168.100.7, HostF
là 192.168.100.10 và HostI là 192.168.100.13. Default gateway là
192.168.100.1.

17. Cấu hình port f0/3 trên 2950A switch là thành viên của VLAN 4.

2950A#config t
2950A(config)#interface fastethernet 0/3
2950A(config-if)#switchport access vlan 4
2950A(config-if)#switchport mode access

Cấu hình port f0/3 trên 2950B switch là thành viên của VLAN 4.

2950B#config t
2950B(config)#interface fastethernet 0/3
2950B(config-if)#switchport access vlan 4
2950B(config-if)#switchport mode access

Cấu hình port f0/3 trên 2950C switch là thành viên của VLAN 4.

2950C#config t
2950C(config)#interface fastethernet 0/3
2950C(config-if)#switchport access vlan 4
2950C(config-if)#switchport mode access

18. Kiểm tra việc cấu hình đúng các VLAN bằng cách ping từ HostC
đến HostF Và HostC đến HostI.
-HẾT-

BÀI THỰC HÀNH SỐ 6


Họ tên sinh viên: ...........................................
Tổ: ..............................MSSV: ......................

XIV. Mục tiêu


 Giả lập liên mạng cục bộ dùng Switch Layer 3 hỗ trợ interVLAN
Routing.
 Giả lập mạng Campus.

Trang 35/70
XV. Giả lập liên mạng cục bộ dùng Switch Layer 3 hỗ trợ
interVLAN Routing
Đồ hình mạng sử dụng:

1. Cấu hình Switch 3550


Switch#config t
Switch(config)#hostname 3550A
3550A(config)#ip routing
3550A(config)#interface fa0/1
3550A(config-if)#switchport trunk encapsulation ?
dot1q Interface uses only 802.1q trunking encapsulation when trunking
isl Interface uses only ISL trunking encapsulation when trunking
negotiate Device will negotiate trunking encapsulation with peer on interface
3550A(config-if)#switchport trunk encapsulation dot1q
3550A(config-if)#switchport mode trunk
3550A(config-if)#interface fa0/2
3550A(config-if)#switchport trunk encapsulation dot1q
3550A(config-if)#switchport mode trunk
3550A(config-if)#interface fa0/3
3550A(config-if)#switchport trunk encapsulation dot1q
3550A(config-if)#switchport mode trunk
3550A(config-f)#interface fa0/4

Trang 36/70
3550A(config-if)#switchport trunk encapsulation dot1q
3550A(config-if)#switchport mode trunk
2. Gán 1 địa chỉ IP cho Switch 3550A cho phép dể dàng quản trị và cấu hình
từ xa
3550A(config-if)#interface vlan 1
3550A(config-if)#ip address 192.168.10.1 255.255.255.0
3550A(config-if)#no shut
3. Tạo hai VLAN là 10 và 20.
3550A(config-if)#exit
3550A(config)#vlan 10
3550A(config-vlan)#vlan 20
3550A(config-vlan)#exit
3550A(config)#exit
4. Dùng lệnh show vlan để kiểm tra
3550A#sh vlan
VLAN Name Status Ports
-------------- --------- --------------------------------------
1 default active Fa0/3, Fa0/4, Fa0/5, Fa0/6
Fa0/7, Fa0/8, Fa0/9, Fa0/10
Fa0/11, Fa0/12, Fa0/15, Fa0/16
Fa0/17, Fa0/18, Fa0/21, Fa0/22
Fa0/23, Fa0/24, Gi0/1, Gi0/2
10 active VLAN0010
20 active VLAN0020
5. Xét VTP domain là RouterSim.
3550A#config t
3550A(config)#vtp domain RouterSim
Domain name set to RouterSim
3550A(config)#exit
6. Dùng lệnh show vtp status để kiểm tra trạng thái
3550A#sh vtp status
VTP Version : 2
Configuration Revision : 0
Maximum VLANs supported locally :1005
Number of existing VLANs : 8
VTP Operating Mode : Server
VTP Domain Name : RouterSim
VTP Pruning Mode : Disabled
VTP V2 Mode : Disabled

Trang 37/70
VTP Traps Generation : Disabled
MD5 digest : 0x80 0x2E 0xC5 0xF0 0x84 0x40 0xCD 0x64
Configuration last modified by 172.16.100.100 at 4-11-04 06:27:17
7. Cấu hình 2 switch 2950 (các port trunk và địa chỉ IP để dể dàng quản trị và
cấu hình từ xa)
Switch#config t
Switch(config)#hostname 2950A
2950A(config)#interface fa0/11
2950A(config-if)#switchport mode trunk
2950A(config-if)#interface fa0/12
2950A(config-if)#switchport mode trunk
2950A(config-if)#interface vlan 1
2950A(config-if)#ip address 192.168.10.2 255.255.255.0
2950A(config-if)#no shutdown
2950A(config-if)#exit
Switch#config t
Switch(config)#hostname 2950B
2950B(config)#interface fa0/11
2950B(config-if)#switchport mode trunk
2950B(config-if)#interface fa0/12
2950B(config-if)#switchport mode trunk
2950B(config-if)#interface vlan 1
2950B(config-if)#ip address 192.168.10.3 255.255.255.0
2950B(config-if)#no shutdown
2950B(config-if)#exit
8. Trên các Switch 2950 xét VTP domain là RouterSim và VTP mode là client
2950A(config)#vtp domain RouterSim
2950A(config)#vtp mode ?
client Set the device to client mode.
server Set the device to server mode.
transparent Set the device to transparent mode.
2950A(config)#vtp mode client
Setting device to VTP CLIENT mode.
2950A(config)#exit
2950B(config)#vtp domain RouterSim
2950B(config)#vtp mode client
Setting device to VTP CLIENT mode.
2950B(config)#exit

Trang 38/70
9. Gõ lệnh show vtp status và kiểm tra thông tin domain và mode. Gõ lệnh
show vlan và kiểm tra các VLAN 10 và 20.
10. Xét port Fa0/2 trên mỗi Switch 2950 là thành viên của VLAN 10 và 20; int
fa0/2 trên 2950A là VLAN 10 và int fa0/2 trên 2950B là VLAN 20.
2950A#config t
2950A(config)#int fa0/2
2950A(config-if)#switchport access vlan 10
2950A(config-if)#cntl-z
2950B#config t
2950B(config)#int fa0/2
2950B(config-if)#switchport access vlan 20
2950B(config-if)#cntl-z
11. Cấu hình Switch 3550 để cung cấp định tuyến giữa các VLAN 10 và 20.
3550A#config t
3550A(config)#int vlan 10
3550A(config-if)#ip address 10.10.10.1 255.255.255.0
3550A(config-if)#int vlan 20
3550A(config-if)#ip address 20.20.20.1 255.255.255.0
3550A(config-if)#cntl-z
12. Cấu hình Host A với địa chỉ IP là 10.10.10.2/24 và default gateway là
10.10.10.1, và 20.20.20.2/24 cho Host B và 20.20.20.1 là default gateway.
13. Ping từ Switch 3550 switch đến mỗi Switch 2950.
3550A#ping 192.168.10.2
3550A#ping 192.168.10.3
14. Kiểm tra bạn có thể định tuyến giữa các VLANs bằng cách ping từ Host A
đến Host B.
XVI. Giả lập mạng Campus

Đồ hình mạng sử dụng:

Trang 39/70
-HẾT-

BÀI THỰC HÀNH SỐ 7


Họ tên sinh viên: ...........................................
Tổ: ..............................MSSV: ......................
XVII. Mục tiêu
 Hiểu biết về IP.
 Hiểu biết về TCP.
XVIII. Các bước thực hiện
1. Hiểu biết về IP
a. IP và ping
- Khởi động lại phần mềm Ethereal, bắt đầu tiến trình bắt gói.
- Mở một DOS prompt và lần lượt thực hiện lệnh ping với kích thước
tin là 50, 500, 5000 bytes (tới bất kỳ trang nào).
- Sau khi lệnh ping kết thúc, dừng lại tiến trình bắt gói trên Ethereal.
Lọc các thông điệp với “ip.proto==01”.
- Xem xét thông tin Internet Protocol (từ chi tiết đến tổng quát) trong
các gói ping trên và trả lời các câu hỏi sau:
 Cho biết version của IP:
.........................................................................................................
 Bao nhiêu byte trong IP header:
.........................................................................................................
 Bao nhiêu byte trong payload của IP datagram:
 Khi ping 50 bytes: .................................................................
 Khi ping 500 bytes: ...............................................................
 Khi ping 5000 bytes: .............................................................
 Cho biết giá trị và ý nghĩa của trường Identification: ................
 Cho biết giá trị và ý nghĩa của trường TTL: ..............................
 Các IP datagram trên có IP datagram nào bị fragment? Làm thế
nào để xác định datagram nào bị fragment hay không bị fragment?

Trang 40/70
.........................................................................................................
 Đối với IP datagram thứ 3 (ping 5000 bytes), hãy cho biết có bao
nhiêu fragment được tạo ra?
.........................................................................................................
 Xem xét fragment đầu tiên và fragment thứ 2 của IP datagram thứ
3 (ping 5000 bytes), cho biết sự thay đổi trong IP header.
.........................................................................................................
 Xem xét fragment cuối cùng của datagram thứ 3 (ping 5000
bytes), cho biết thông tin nào cho biết nó là fragment cuối cùng:
.........................................................................................................
b. IP và các lớp trên (Transport, Application)
- Khởi động trình duyệt, xoá các thông tin trong cache.
- Khởi động lại phần mềm Ethereal, bắt đầu tiến trình bắt gói.
- Nhập URL: http://www.hutech.edu.vn/, trang web sẽ hiển thị.
- Dừng lại tiến trình bắt gói trên Ethereal. Lọc các thông điệp với “http”.
- Xem xét thông tin Internet Protocol (từ chi tiết đến tổng quát) trong gói
HTTP GET và trả lời các câu hỏi sau:
 Bao nhiêu byte trong IP header:
.........................................................................................................
 Bao nhiêu byte trong payload của IP datagram:
.........................................................................................................
 Trong IP header, cho biết giá trị trường Protocol. Cho biêt ý nghĩa
của trường này:
.........................................................................................................
 Xem xét kích thước các thành phần IP datagram trên, hãy cho biết
định dạng của IP datagram (xem lại lý thuyết và so sánh với thực
nghiệm, giải thích sự khác nhau nêu có).
.........................................................................................................
2. Hiểu biết về TCP
 Khởi động trình duyệt IE, loại bỏ các thông tin trong cache (Tools->
Internet Options-> Delete Files), và loại bỏ việc sử dụng proxy server nếu
có thể (Tools ->Internet Options -> Connections -> LAN Settings), xóa
cach (xem bài thực hành số 2)
 Khởi động phần mềm Ethereal, bắt đầu tiến trình bắt gói.
 Nhập URL: www.hutech.edu.vn vào trình duyệt IE, trang web hiển thị
 Sau khi download xong, dừng lại tiến trình bắt gói trên Ethereal, lọc các
thông điệp với “tcp”. Chọn gói thông điệp được gởi từ máy của bạn đến
server (xem địa chỉ IP nguồn và đích).
 Xem xét thông tin (từ chi tiết đến tổng quát) trong gói trên và trả lời các
câu hỏi sau:
 Địa chỉ IP máy tính của bạn (client):
.........................................................................................................
 TCP port được dùng trên máy client:
.........................................................................................................
 Địa chỉ IP của website www.hutech.edu.vn (server):
.........................................................................................................

Trang 41/70
 TCP port được dùng với máy chủ (server):
.........................................................................................................
 Ta không cần quan tâm đến các TCP segment chứa các thông điệp
HTTP vì vậy trên giao diện Ethereal chọn Analyze->Enabled Protocols,
bỏ chọn cho HTTP và nhấn OK. Giao diện của Ethereal sẽ thay đổi. Xem
xét thông tin (từ chi tiết đến tổng quát) trong các TCP segment trên và trả
lời các câu hỏi sau:
 Sequence number của TCP SYN segment được dùng để bắt đầu
kết nối TCP giữa client (máy tính của bạn) và www.hutech.edu.vn?
(chọn package TCP SYN từ máy của bạn đến server)
.........................................................................................................
 Thông tin của field nào trong segment này dùng để xác định nó là
một SYN segment?
.........................................................................................................
 Sequence number của TCP SYN ACK segment được gởi bởi
www.hutech.edu.vn?
.........................................................................................................
 Giá trị của trường ACKnowledgement field trong SYN ACK
segment này?
.........................................................................................................
 www.hutech.edu.vn xác định giá trị ACKnowledgement bằng cách
nào?
.........................................................................................................
 Thông tin của field nào trong segment này dùng để xác định nó là
một SYN ACK segment?
.........................................................................................................
 Sequence number của TCP segment chứa lệnh HTTP GET (là
segment mà có GET trong trường DATA):
.........................................................................................................
 Xem TCP chứa lệnh HTTP GET như là segment đầu tiên. Cho biết
các chỉ số sequence number của các segment tiếp theo trong TCP
connection có chứa lệnh HTTP GET:
.........................................................................................................
 Cho biết kích thước của mỗi TCP segment trên:
.........................................................................................................
 Cho biết throughput (bytes transferred per unit time) của TCP
connection trên:
.........................................................................................................
 Xem lại chương 5 và dựa trên thực nghiệm hãy vẽ lại quá trình thiết
lập kết nối, truyền nhận dữ liệu, đóng kết nối TCP với đầy đủ các
thông số.
.........................................................................................................

--HẾT--

Trang 42/70
BÀI THỰC HÀNH SỐ 8
Họ tên sinh viên:.................................................
Tổ:....................MSSV:......................................
XIX. Mục tiêu
 Hiểu biết về DNS.
 Hiểu biết về HTTP.
XX. Các bước thực hiện
1. Hiểu biết về DNS
 Mở một DOS prompt và thực hiện lệnh ipconfig /flushdns để loại bỏ
các thông tin trong DNS cache trên máy tính của bạn. Thực hiện lệnh
ipconfig để biết địa chỉ IP máy tính bạn đang sử dụng.
 Khởi động lại phần mềm Ethereal, bắt đầu tiến trình bắt gói.
 Thực hiện lệnh nslookup www.yahoo.com trên DOS prompt.
 Sau khi lệnh nslookup thực hiện xong, dừng lại tiến trình bắt gói trên Ethereal,
lọc các thông điệp với “ip.addr==<your IP address>”.
 Xem xét thông tin (từ chi tiết đến tổng quát) trong các thông điệp trên và trả lời
các câu hỏi sau:
 Thông điệp DNS query được tạo ra từ máy tính nào và được gởi thông
qua port nào?
 Máy tính nào? Địa chỉ IP:........................................
 Port:..................................................................................................
 Thông điệp DNS response được tạo ra từ máy tính nào và được gởi thông
qua port nào?
 Máy tính nào? Địa chỉ IP:........................................
 Port:..................................................................................................
 Các thông điệp trên dùng TCP hay UDP? dựa vào trường nào để biết?
 Địa chỉ IP đích trong thông điệp DNS query có trùng với địa chỉ DNS
Server cục bộ (dùng lệnh ipconfig/all để xác định) hay không?
 Dựa vào trường nào để biết 1 thông điệp là DNS query hay DNS
response?
.....................................................................................................................
 Xem xét thông điệp DNS query thứ 2, hãy cho biết giá trị và ý nghĩa
trường Type của DNS query?
.....................................................................................................................

Trang 43/70
 Xem xét thông điệp DNS response cuối cùng, hãy cho biết kết quả trả lời
(trường Answer) gồm những thông tin gì và ý nghĩa của mỗi thông tin?
.....................................................................................................................
 Khởi động lại phần mềm Ethereal, bắt đầu tiến trình bắt gói.
 Thực hiện lệnh nslookup -type=MX yahoo.com trên DOS prompt.
 Sau khi lệnh nslookup thực hiện xong, dừng lại tiến trình bắt gói trên Ethereal,
lọc các thông điệp với “ip.addr=<your IP address>”.
 Xem xét thông tin trong các thông điệp trên và trả lời các câu hỏi sau:
 Xem xét thông điệp DNS query thứ 2, hãy cho biết giá trị và ý nghĩa
trường Type của DNS query?
.....................................................................................................................
 Xem xét thông điệp DNS response cuối cùng, hãy cho biết bao nhiêu kết
quả trả lời trong trường “Answers”?
.....................................................................................................................
 Xét kết quả trả lời đầu tiên trong trường “Answers”, cho biết ý nghĩa của
những thông tin trong kết quả này?
.....................................................................................................................

2. Hiểu biết về HTTP


 Khởi động trình duyệt IE hoặc Firefox, loại bỏ các thông tin trong cache (IE:
ToolsInternet OptionsDelete Files, FF: Ctrl-Shift-Del), và loại bỏ việc sử
dụng proxy server nếu có thể (IE: ToolsInternet OptionsConnectionsLAN
Settings, FF: ToolsOptions).
 Khởi động lại phần mềm Ethereal, bắt đầu tiến trình bắt gói.
 Nhập URL: http://www.cse.hcmut.edu.vn/people.html vào
trình duyệt, trang web hiển thị.
 Dừng lại tiến trình bắt gói trên Ethereal, lọc các thông điệp với “http”.
 Xem xét thông tin trong các thông điệp trên và trả lời các câu hỏi sau:
 Web browser của bạn đang chạy là HTTP 1.0 hay HTTP 1.1? ..............
 Cho biết sự khác nhau cơ bản giữa HTTP1.0 và HTTP1.1?...................
 Version của HTTP mà server www.hutech.edu.vn đang chạy? ..............
 Thông tin và ý nghĩa của response code trả về từ server: ......................
 Tập tin HTML mà Web browser nhận được đã được thay đổi lần cuối
cùng khi nào:
.....................................................................................................................
 Kích thước của tập tin HTML mà Web browser nhận được: .................
 Có bao nhiêu thông điệp yêu cầu HTTP GET được gởi từ trình duyệt: .
 Khởi động lại phần mềm Ethereal, bắt đầu tiến trình bắt gói.
 Làm tươi (refresh) trình duyệt web bằng cách nhấn F5 hoặc nút Refresh trên
toolbar.
 Sau khi trang web hiển thị lại, dừng lại tiến trình bắt gói trên Ethereal, lọc các
thông điệp với “http”.
 Xem xét thông tin (từ chi tiết đến tổng quát) trong các thông điệp trên và trả lời
các câu hỏi sau:

Trang 44/70
 Xem xét yêu cầu HTTP GET đầu tiên của trình duyệt, cho biết có dòng
“IF-MODIFIED-SINCE” hay không? nếu có thì cho biết ý nghĩa của
dòng này? ..............................................................................................
 Thông tin của response code trả về từ server: ........................................
 Tập tin HTML do server trả về chứa những thông tin cơ bản nào? .......
 Kích thước của thông điệp trả về từ Web server mà Web browser nhận
được:
.....................................................................................................................
 Có bao nhiêu thông điệp yêu cầu HTTP GET được gởi từ trình duyệt: .

--HẾT--

BÀI THỰC HÀNH SỐ 9


XXI. Mục tiêu
 Hiểu biết về kết nối mạng diện rộng.
 Hiểu biết về IP Routing.
 Liên mạng diện rộng dùng Cisco Router.

XXII. Kết nối mạng diện rộng


1. Cấu hình giao tiếp mạng diện rộng
2600>enable
2600#config t
2600(config)#interface serial 0/0
2600(config­if)#encapsulation ppp
2600(config­if)#clock rate 64000  
2600(config­if)#ip address 192.168.1.1 255.255.255.252
2600(config­if)#no shutdown
2600(config­if)#^z
2600#

2. Kiểm tra thông tin cấu hình giao tiếp mạng diện rộng
2600#show interface s0/0

XXIII. Cài đặt IP Routing


1. Cấu hình Static routing
Chúng ta sẽ phải xây dựng bảng routing tĩnh cho mỗi router để có
thể dẫn đường cho toàn mạng. Chúng ta phải cấu hình cho tất cả
các router thì việc tìm đường mới có thể hoạt động được.
Các lệnh để cấu hình router:
- con t
- ip route NetID Subnetmask DestIP
- …

Trang 45/70
- exit
- show ip route

Ví dụ:

Router#con t
Router(config)#ip route 172.16.0.0 255.255.0.0
192.168.1.2
Router(config)#exit
Router#

2. Cấu hình Default routing


Cấu hình Default routing thì không giống như cấu hình default
gate-way trtrên host. Nên nhớ rằng router là dafault gateway và
chúng ta không thể đặt một default gateway trên router. Default
gateway sẽ thực hiện : nếu một packet cho một mạng không nằm
trong routing table thì router sẽ chuyển packet này đến một
default route.
Chúng ta chỉ có thể cấu hình default routing trên các router gốc, là
các router chỉ có một đường in và out.
Cấu hình default routing sử dụng các lệnh sau:
- con t
- no ip route NetID Subnetmask DestIP
- ip route 0.0.0.0 0.0.0.0 DestIP
- ip classless
- exit

Ví dụ:

Router>en
Router#con t
Enter configuration commands, one per line. End with
CNTL/Z.
Router(config)#ip route 0.0.0.0 0.0.0.0 172.16.20.1
Router(config)#ip classless
Router(config)#exit
Router#
3. Cấu hình RIP routing
- con t
- router rip
- network 172.16.0.0
- ^z
4. Cấu hình IGRP routing
- con t
- router IGRP 10
- network 172.16.0.0

Trang 46/70
- ^z

XXIV. Liên mạng diện rộng dùng Cisco Router


1. Cấu hình 1

a. Đồ hình mạng

- Xây dựng đồ hình mạng mạng trên.


- Kiểm tra kết nối mạng trong mỗi subnet bằng lệnh ping.

b. Định tuyến tĩnh


- Cấu hình.định tuyến tĩnh trên 02 bộ định tuyến.
- Kiểm tra kết nối liên mạng bằng lệnh ping.
- Xem xét bảng đường đi trên 02 bộ định tuyến.
- Lưu lại cấu hình này với tên tập tin là cauhinh1.nml
- Nếu thay đổi mạng 10.0.0.0/8 thành mạng 203.162.4.0/24 thì
liên mạng có còn hay
không. Hãy giải thích và đưa ra giải pháp định tuyến thay thế
nếu không còn liên mạng.

c. Định tuyến động


- Mở lại cauhinh1.nml
- Loại bỏ cấu hình định tuyến tĩnh trên 02 bộ định tuyến.
- Cấu hình.định tuyến động với RIP trên 02 bộ định tuyến.
- Kiểm tra kết nối liên mạng bằng lệnh ping.
- Xem xét bảng đường đi trên 02 bộ định tuyến
- Xem xét quá trình trao đổi và cập nhật thông tin bảng đường đi
trên bộ định tuyến A.
- Thay đổi mạng 10.0.0.0/8 thành mạng 203.162.4.0/24
- Nhận biết quá trình trao đổi và cập nhật lại bảng đường đi trên
bộ định tuyến A.
- Kiểm tra lại kết nối liên mạng bằng lệnh ping.

Trang 47/70
2. Cấu hình

a. Topo mạng

- Dùng kỹ thuật subnet để chia mạng 172.16.0.0/16 thành các


mạng con.
- Sử dụng lại cauhinh1.nml ở trên để xây dựng đồ hình mạng
mạng trên.
- Kiểm tra kết nối mạng trong mỗi subnet bằng lệnh ping.

b. Định tuyến
- Lựa chọn phương án cấu hình định tuyến hợp lý cho các bộ định
tuyến.
- Kiểm tra kết nối liên mạng bằng lệnh ping.
- Xem xét bảng đường đi trên 03 bộ định tuyến
- Lưu lại cấu hình này với tên tập tin là cauhinh2.nml

-HẾT-

BÀI THỰC HÀNH SỐ 10

I. Mục tiêu
- Hiểu biết lập trình mạng với Java.

II. Các bước thực hiện


1. Hiểu biết về giao thức HTTP

Trang 48/70
- RFC 1945: Hypertext Transfer Protocol -- HTTP/1.0
- RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1

2. Soạn thảo tập tin MiniHTTPServer.java (Lưu ý: hiệu chỉnh


các đoạn …)
import java.net.*;
import java.io.*;
import java.util.*;

public class MiniHTTPServer {


public static void main (String argv[]) throws
IOException {
int port = 8000; // port number
// Create a ServerSocket object
ServerSocket server_socket = ...
System.out.println ("Server started");

// Loop indefinitely while waiting for clients to


connect
while (true) {

// accept () does not return until a client


requests a connection
Socket client_socket = ...

// Now that a client has arrived, create an


instance of our special
// thread subclass to respond to it.
Worker worker = new Worker (client_socket);
...
System.out.println ("New client connected");
}
} // main
} // class MiniHTTPServer

3. Soạn thảo tập tin Worker.java (Lưu ý: hiệu chỉnh các đoạn
…)
import java.net.*;
import java.io.*;
import java.util.*;

/** Threaded process to serve the client connected to


the socket.**/
class Worker extends Thread {
Socket socket = null;
/** Pass the socket as a argument to the constructor
**/

Trang 49/70
Worker ( Socket client_socket ) throws SocketException
{
socket = client_socket;

// Set the thread priority down so that the


ServerSocket
// will be responsive to new clients.
setPriority ( NORM_PRIORITY - 1 );
}

/**
* This thread receives a message from the client
that will
* request a web page file. The file name is found
relative to
* the directory location of this code.
**/
public void run () {
try {
// Use the client socket to obtain an input stream
from it.
InputStream is = ...

// For text input we wrap an InputStreamReader


around
// the raw input stream and set ASCII character
encoding.
InputStreamReader isr =
new InputStreamReader (is, "8859_1");

// Finally, use a BufferReader wrapper to obtain


// buffering and higher order read methods.
BufferedReader in = new BufferedReader (isr);

// Now get an output stream to the client.


OutputStream os = ...

// For text output we wrap an OutputStreamWriter


around
// the raw output stream and set ASCII character
encoding.
OutputStreamWriter osr =
new OutputStreamWriter (os, "8859_1");

// Finally, we use a PrintWriter wrapper to obtain


its

Trang 50/70
// higher level output methods.Open in autoflush
mode.
// (Autoflush occurs only with println() method.)
PrintWriter out = new PrintWriter (osr, true);

// First read the message from the client


String str = in.readLine ();
System.out.println ("Client message: " + str);

// Example: GET /index.html HTTP/1.0 \r\n\r\n


// Split the message into substrings.
String [] tokens = str.split(" ");

// Check that the message has a minimun number of


words
// and that the first word is the GET command.
if ((tokens.length >= 2) &&
tokens[0].equals ("GET")) {
String file_name = tokens[1];

// Ignore the leading "/" on the file name.


if (file_name.startsWith ("/"))
file_name = file_name.substring (1);

// If no file name is there, use index.html


default.
if (file_name.endsWith ("/") || file_name.equals
(""))
file_name = file_name + "index.html";

// Check if the file is hypertext or plain text


String content_type;
if (file_name.endsWith (".html") ||
file_name.endsWith (".htm")) {
content_type = "text/html";
}
else {
content_type = "text/plain";
}
// Now read the file from the disk and write it
to the
// output stream to the client.
try {

// Open a stream to the file.


FileInputStream file_in = new FileInputStream
(file_name);

Trang 51/70
// Send the header.
out.print ("HTTP/1.0 200 OK\r\n");
File file = new File (file_name);
Date date = new Date (file.lastModified ());
out.print ("Date: " + date + "\r\n");
out.print ("Server: MiniServer 1.0\r\n");
out.print ("Content-length: " +
file_in.available ()
+ "\r\n");
out.print ("Content-type: " + content_type
+ "\r\n\r\n");

// Creat a byte array to hold the file.


byte [] data = new byte [file_in.available
()];

file_in.read (data); // Read file into the


byte array
os.write (data); // Write it to client
output stream
os.flush (); // Remember to flush
output buffer
file_in.close (); // Close file input
stream

} catch (FileNotFoundException e) {
// If no such file, then send the famous 404
message.
out.println ("404 Object Not Found" );
}
} else{
out.println ("400 Bad Request");
}
} catch (IOException e) {
System.out.println ( "I/O error " + e );
}

// Close client socket.


try {
...
} catch (IOException e){
System.out.println ("I/O error " + e );
}
// On return from run () the thread process will
stop.
} // run

Trang 52/70
} // class Worker

4. Thực thi MiniHTTP Server


- Tạo một tập tin hello.html tại thư mục chứa 2 tập tin
Java nói trên (ví dụ c:\bai1):
<HTML>
<HEAD>
<TITLE> Hello World </TITLE>
<meta http-equiv=”Content-Type”
content=”text/html; charset=iso-8859-1”>
</HEAD>
<BODY BGCOLOR=”#FFFFFF”>
Hello World !
</BODY>
</HTML>

- Biên dịch và thực thi MiniHTTP Server:


C:\bai1> javac Worker.java MiniHTTPServer.java
C:\bai1> java MiniHTTPServer
- Từ một trình duyệt Web ( IE hay Firefox) gõ vào URL:
http://127.0.0.1:8000/hello.html
- Quan sát kết quả trên trình duyệt và trên MiniHTTP Server

5. Soạn thảo tập tin ClientApp.java (Lưu ý: hiệu chỉnh các đoạn
…)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

/**
* This program provides a graphical user interface to
* set up the connection to a server and to download
* the file from the server and display it in a text
area.
**/
public class ClientApp extends JFrame
implements Runnable, ActionListener
{

// Menu item names


JMenuItem fMenuSave = null;
JMenuItem fMenuClose = null;

Trang 53/70
//
JTextArea fTextArea = null;

JTextField fIpField;
JTextField fPortField;
JTextField fFileField;

// Default address is local


String fIpAddr = "127.0.0.1";

// Default port
int fPort = 8000;

// Socket to connect with server.


Socket fSocket = null;

// File name
String fFilename = "hello.html";

// Change the button name as needed


String fButtonName = "Get";
JButton fButton = null;

// Filter and File object for file chooser


HtmlFilter fHtmlFilter = new HtmlFilter ();
File fFile = new File ("default.html");

Thread fThread = null;

/** Start the program. **/


public static void main (String [] args) {
ClientApp f =
new ClientApp ("Client for MicroServer ");
f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}

/**
* Create user interface for client. Includes text
fields
* for the server IP address, the server's port
number, a
* text area to show the data returned from the
server, and
* a button to initiate the connection to the server.
**/
ClientApp (String title){

Trang 54/70
super (title);

Container content_pane = getContentPane ();

// Create a user interface.


content_pane.setLayout ( new BorderLayout () );
fTextArea = new JTextArea ("");
fTextArea.setLineWrap (true);

content_pane.add ( fTextArea, "Center");

// Create a panel with three text fields to obtain


// the server address, the port number,
// the file to download, and to initiate the link
// with the server.
fIpField = new JTextField (fIpAddr);
fPortField = new JTextField (""+fPort);
fFileField= new JTextField (fFilename);

// Button to initiate the download from the server


fButton = new JButton (fButtonName);
fButton.addActionListener (this);

JPanel panel = new JPanel (new GridLayout (2,2));


panel.add (fIpField);
panel.add (fPortField);
panel.add (fFileField);
panel.add (fButton);

content_pane.add ( panel, "South");

// Use the helper method makeMenuItem


// for making the menu items and registering
// their listener.
JMenu m = new JMenu ("File");

// File handling.
m.add (fMenuSave = makeMenuItem ("Save"));
m.add (fMenuClose = makeMenuItem ("Quit"));

JMenuBar mb = new JMenuBar ();


mb.add (m);

setJMenuBar (mb);
setSize (400,400);

setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

Trang 55/70
} // ctor

/** Process events from the frame menu and the


chooser.**/
public void actionPerformed ( ActionEvent e ){
boolean status = false;
String command = e.getActionCommand ();

if (command.equals (fButtonName) ) {

// First get the server address


fIpAddr = fIpField.getText ();

// Get port number


fPort = Integer.parseInt (fPortField.getText ());

// Get the name of the file to download


fFilename = fFileField.getText ();

start ();

} else if (command.equals ("Save") ) {


// Save a file
status = saveFile ();
if ( !status)
JOptionPane.showMessageDialog (
null,
"IO error in saving file!!", "File Save
Error",
JOptionPane.ERROR_MESSAGE);

} else if (command.equals ("Quit") ){


dispose ();
}
} // actionPerformed

/**
* Start the thread to connect to the server
* and read the file from it.
*/
public void start (){

// If the thread reference not null then a


// thread is already running. Otherwise, create
// a thread and start it.
if (fThread == null) {

Trang 56/70
fThread = new Thread (this);
fThread.start ();
}
} // start

/** Connect with the server via a thread process. **/


public void run () {

// Clear the text area


fTextArea.setText ("Downloading...");

try{
// Connect to the server via the given IP address
and port number
...

// Assemble the message line.


String message = "GET /" + fFilename;

// Now get an output stream to the server.


OutputStream os = ...

// Wrap in writer classes


PrintWriter pw = new PrintWriter (
new OutputStreamWriter (os, "8859_1"), true );

// Send the message to the server


pw.println (message);

// Get the input stream from the server and then


// wrap the stream in two wrappers.
BufferedReader br = new BufferedReader (
new InputStreamReader ( ... ) );

fTextArea.setText ("");
String line;
// Add the text one line at a time from the server
// to the text area.
while ((line = br.readLine ()) != null )
fTextArea.append (line + '\n');

} catch ( UnknownHostException uhe) {


fTextArea.setText ("Unknown host");

} catch ( IOException ioe){


fTextArea.setText ("I/O Exception");
} finally{

Trang 57/70
try{
// End the connection
...
fThread=null;
} catch ( IOException ioe) {
fTextArea.append ("IO Exception while closing
socket");
}
}
} // run

/**
* This "helper method" makes a menu item and then
* registers this object as a listener to it.
**/
private JMenuItem makeMenuItem (String name) {
JMenuItem m = new JMenuItem ( name );
m.addActionListener ( this );
return m;
}

/**
* Use a JFileChooser in Save mode to select files
* to open. Use a filter for FileFilter subclass to
select
* for *.java files. If a file is selected, then
write the
* the string from the text area into it.
**/
boolean saveFile () {

File file = null;


JFileChooser fc = new JFileChooser ();

// Start in current directory


fc.setCurrentDirectory (new File ("."));

// Set filter for web pages.


fc.setFileFilter (fHtmlFilter);

// Set to a default name for save.


fc.setSelectedFile (file);

// Open chooser dialog


int result = fc.showSaveDialog (this);

if (result == JFileChooser.CANCEL_OPTION) {

Trang 58/70
return true;
}else if (result == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile ();
if (file.exists ()) {
int response = JOptionPane.showConfirmDialog
(null,
"Overwrite existing file?","Confirm
Overwrite",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE);
if (response == JOptionPane.CANCEL_OPTION)
return false;
}
return writeFile (file, fTextArea.getText ());
} else {
return false;
}
} // saveFile

/**
* Use a PrintWriter wrapped around a BufferedWriter,
which in turn
* is wrapped around a FileWriter, to write the
string data to the
* given file.
**/
public static boolean writeFile (File file, String
data_string){

try {
PrintWriter out =
new PrintWriter (new BufferedWriter (new
FileWriter (file)));
out.print (data_string);
out.flush ();
out.close ();
}catch (IOException e) {
return false;
}
return true;
}
} // class ClientApp

/** Class to use with JFileChooser for selecting


hypertext files.**/

Trang 59/70
class HtmlFilter extends
javax.swing.filechooser.FileFilter{

public boolean accept (File f){


return f.getName ().toLowerCase ().endsWith (".htm")
|| f.getName ().toLowerCase ().endsWith
(".html")
|| f.isDirectory ();
}

public String getDescription (){


return "Web pages (*.htm*)";
}
} // class HtmlFilter
6. Thực thi ClientApp
C:\bai1> javac ClientApp.java
C:\bai1> java ClientApp

7. Bài tập
- Tạo giao diện người dùng cho MiniHTTP Server. Giao diện
cho phép người dùng đặt lại chỉ số port trước khi tạo
ServerSocket và nó cũng hiển thị địa chỉ IP của các client và
tập tin mà client yêu cầu tương ứng.
Hướng dẫn:
// Get the port number from fPortField.
try{
port = Integer.parseInt
(fPortField.getText());
} catch (Exception e) {
port = 8000; // Default
System.out.println ("Use default port =
8000");
}

- Hiệu chỉnh MiniHTTP Server nhằm tạo đáp ứng cho yêu
cầu dùng phương thức HEAD
(Ví dụ: HEAD /index.html HTTP/1.0 \r\n\r\n)

- Hiệu chỉnh ClientApp nhằm tận dụng phương thức HEAD


mà MiniHTTP Server cung cấp.

Về việc nộp bài thực hành:


- Bài làm gồm các tập tin .java, .class, .html, … được
đặt vào một thư mục và nén thành 1 tập tin .zip cùng có tên
là MSSV_Hovaten (ví dụ: 505032411_NguyenVanA.zip)

Trang 60/70
BÀI THỰC HÀNH SỐ 11

III. Mục tiêu


- Xây dựng ứng dụng gởi nhận file.đơn giản.

IV. Các bước thực hiện


8. Xây dựng giao thức đơn giản
- Lệnh Upload: PUT FILENAME
- Lệnh Download: GET FILENAME NEW_FILENAME
- Lệnh thoát: QUIT
- Giá trị trả về:
i. Thực thi lệnh thành công : 200 OK
ii. Không tìm thấy tập tin để download : 201
File Not Found
iii. Tập tin đã tồn tại khi upload : 202 File
Existed
iv. Các lệnh chưa hỗ trợ : 203 Bad
Request

9. Soạn thảo tập tin FileServer.java (Lưu ý: hiệu chỉnh các


đoạn …)
import java.net.*;
import java.io.*;
import java.util.*;

public class FileServer {


public static void main (String argv[]) throws
IOException {
int port = 8000; // server port number
// Create a ServerSocket object
ServerSocket server_socket = ...
System.out.println ("Server started");

// Loop indefinitely while waiting for clients to


connect
while (true) {

// accept () does not return until a client


requests a connection

Trang 61/70
Socket client_socket = ...

// Now that a client has arrived, create an


instance of our special
// thread subclass to respond to it.
Worker worker = new Worker (client_socket);
...
System.out.println ("New client connected");
}

} // main
} // class FileServer

10. Soạn thảo tập tin Worker.java (Lưu ý: hiệu chỉnh các
đoạn …)
import java.net.*;
import java.io.*;
import java.util.*;

/** Threaded process to serve the client connected to


the socket.**/
class Worker extends Thread {
Socket socket = null;
/** Pass the socket as a argument to the constructor
**/
Worker ( Socket client_socket ) throws SocketException
{
socket = client_socket;

// Set the thread priority down so that the


ServerSocket
// will be responsive to new clients.
setPriority ( NORM_PRIORITY - 1 );
}

/**
* This thread receives a message from the client
that will
* request a web page file. The file name is found
relative to
* the directory location of this code.
**/
public void run () {
try {
// Use the client socket to obtain an input stream
from it.
InputStream is = ...

Trang 62/70
// For text input we wrap an InputStreamReader
around
// the raw input stream and set ASCII character
encoding.
InputStreamReader isr =
new InputStreamReader (is, "8859_1");

// Finally, use a BufferReader wrapper to obtain


// buffering and higher order read methods.
BufferedReader in = new BufferedReader (isr);

// Now get an output stream to the client.


OutputStream os = ...

// For text output we wrap an OutputStreamWriter


around
// the raw output stream and set ASCII character
encoding.
OutputStreamWriter osr =
new OutputStreamWriter (os, "8859_1");

// Finally, we use a PrintWriter wrapper to obtain


its
// higher level output methods.Open in autoflush
mode.
// (Autoflush occurs only with println() method.)
PrintWriter out = new PrintWriter (osr, true);

while (true)
{
// First read the message from the client
String str = in.readLine ();
System.out.println ("Client message: " + str);

// Example: GET example.txt


// Split the message into substrings.
String [] tokens = str.split(" ");

if ((tokens.length >= 1) &&


tokens[0].equals ("QUIT")) {
...
}
// Check that the message has a minimun number of
words
// and that the first word is the GET command.
if ((tokens.length >= 2) &&

Trang 63/70
tokens[0].equals ("GET")) {
String file_name = tokens[1];

// Now read the file from the disk and write it


to the
// output stream to the client.
try {

// Open a stream to the file.


FileInputStream file_in = new FileInputStream
(file_name);

// Send the header.


out.println("200 OK\r\n");
File file = new File (file_name);
out.println("Content-length: " +
file_in.available ()
+ "\r\n");

// Creat a byte array to hold the file.


byte [] data = new byte [file_in.available
()];

file_in.read (data); // Read file into the


byte array
os.write (data); // Write it to client
output stream
os.flush (); // Remember to flush
output buffer
file_in.close (); // Close file input
stream

} catch (FileNotFoundException e) {
// If no such file, then send the 201 message.
out.println ("201 File Not Found" );
}
//}

// Check that the message has a minimun number of


words
// and that the first word is the GET command.
//else if ((tokens.length >= 2) &&
// tokens[0].equals ("PUT")) {
//String file_name = tokens[1];

// Now read the input stream from client and


write it to the disk.

Trang 64/70
//try {
// Open a stream to the file.
//FileOutStream file_out = new
FileOutputStream (file_name);
//...
//} catch (FileNotFoundException e) {
// out.println ("202 File Existed" );
//}
} else {
out.println ("203 Bad Request");
}
} catch (FileNotFoundException e) {
out.println ("202 File Existed");
}
catch (IOException e) {
System.out.println ( "I/O error " + e );
}
} // End while
// Close client socket.
try {
...
} catch (IOException e){
System.out.println ("I/O error " + e );
}
// On return from run () the thread process will
stop.
} // run

} // class Worker

11. Thực thi FileServer


- Copy tập tin example.txt tại thư mục chứa 2 tập tin Java
nói trên (ví dụ c:\bai2)
- Biên dịch và thực thi File Server:
C:\bai2> javac Worker.java FileServer.java
C:\bai1> java FileServer
- Mở một Command Prompt:
telnet 127.0.0.1 8000
GET example.txt
- Quan sát kết quả trên Command Prompt.

12. Soạn thảo tập tin FileClient.java (Lưu ý: hiệu chỉnh các
đoạn …)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

Trang 65/70
import java.io.*;
import java.net.*;

/**
* This program provides a graphical user interface to
* set up the connection to a server and to
download/upload
* the file from/to the server.
**/
public class ClientClient extends JFrame
implements Runnable, ActionListener
{

//
JTextArea fTextArea = null;

JTextField fIpField;
JTextField fPortField;
JTextField fFileField;

// Default address is local


String fIpAddr = "127.0.0.1";

// Default port
int fPort = 8000;

// Socket to connect with server.


Socket fSocket = null;

// File name
String fFilename = "example.txt";

// Change the button name as needed


String fButtonName = "Get";
JButton fButton = null;

Thread fThread = null;

/** Start the program. **/


public static void main (String [] args) {
FileClient f =
new FileClient ("Client for FileServer ");
f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}

/**

Trang 66/70
* Create user interface for client. Includes text
fields
* for the server IP address, the server's port
number, a
* text area to show the data returned from the
server, and
* a button to initiate the connection to the server.
**/
FileClient (String title){
super (title);

Container content_pane = getContentPane ();

// Create a user interface.


content_pane.setLayout ( new BorderLayout () );
fTextArea = new JTextArea ("");
fTextArea.setLineWrap (true);

content_pane.add ( fTextArea, "Center");

// Create a panel with three text fields to obtain


// the server address, the port number,
// the file to download, and to initiate the link
// with the server.
fIpField = new JTextField (fIpAddr);
fPortField = new JTextField (""+fPort);
fFileField= new JTextField (fFilename);

// Button to initiate the download from the server


fButton = new JButton (fButtonName);
fButton.addActionListener (this);

JPanel panel = new JPanel (new GridLayout (2,2));


panel.add (fIpField);
panel.add (fPortField);
panel.add (fFileField);
panel.add (fButton);
content_pane.add ( panel, "South");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}

/** Process events from the frame menu and the


chooser.**/
public void actionPerformed ( ActionEvent e ){
boolean status = false;
String command = e.getActionCommand ();

Trang 67/70
if (command.equals (fButtonName) ) {

// First get the server address


fIpAddr = fIpField.getText ();

// Get port number


fPort = Integer.parseInt (fPortField.getText ());

// Get the name of the file to download


fFilename = fFileField.getText ();

start ();
}
}

/**
* Start the thread to connect to the server
* and read the file from it.
*/
public void start (){

// If the thread reference not null then a


// thread is already running. Otherwise, create
// a thread and start it.
if (fThread == null) {
fThread = new Thread (this);
fThread.start ();
}
} // start

/** Connect with the server via a thread process. **/


public void run () {
// Clear the text area
fTextArea.setText ("Downloading...");

try{
// Connect to the server via the given IP address
and port number
...

// Assemble the message line.


String message = "GET " + fFilename;

// Now get an output stream to the server.


OutputStream os = ...

// Wrap in writer classes

Trang 68/70
PrintWriter pw = new PrintWriter (
new OutputStreamWriter (os, "8859_1"), true );

// Send the message to the server


pw.println (message);

// Get the input stream from the server and then


// wrap the stream in two wrappers.
BufferedReader br = new BufferedReader (
new InputStreamReader ( ... ) );

String line;
// Get some first line to get file size
...
// Prepare buffer to get data from File Server and
save to local file
...

fTextArea.setText ("OK");

// Send message QUIT to the server


pw.println (“QUIT”);

} catch ( UnknownHostException uhe) {


fTextArea.setText ("Unknown host");

} catch ( IOException ioe){


fTextArea.setText ("I/O Exception");
} finally{
try{
// End the connection
...
fThread=null;
} catch ( IOException ioe) {
fTextArea.append ("IO Exception while closing
socket");
}
}
} // run

13. Thực thi FileClient


C:\bai1> javac FileClient.java
C:\bai1> java FileClient

14. Bài tập


- Hoàn chỉnh phần hỗ trợ lệnh PUT của FileServer.java (Lưu ý
các dòng comment // khi lệnh gởi đến là PUT.

Trang 69/70
- Hiệu chỉnh FileClient.java hỗ trợ lệnh PUT.
- Mở rộng giao thức với các lệnh DIR, CD
- Mở rộng FileServer.java để hỗ trợ các lệnh DIR và CD

Về việc nộp bài thực hành:


- Bài làm gồm các tập tin .java, .class, … được đặt vào
một thư mục và nén thành 1 tập tin .zip cùng có tên là
MSSV_Hovaten (ví dụ: 505032411_NguyenVanA.zip)

Trang 70/70

You might also like