Cai dat va cau hinh Windows Server 2012 R2 (35)

(Tiếp theo của "Cai dat va cau hinh Windows Server 2012 R2 (34)")



Gia hạn sử dụng địa chỉ IP



Ở chế độ mặc định, dịch vụ DHCP server trên Windows Server 2012 R2 sử dụng chế độ cấp động địa chỉ IP cho các client. Thời gian client được phép sử dụng địa chỉ IP là tám ngày. Khi client sử dụng địa chỉ IP được một khoảng thời gian đã được thiết lập trước, nó sẽ liên lạc với DHCP server để gia hạn sử dụng tiếp địa chỉ IP. Quá trình gia hạn sử dụng địa chỉ IP gồm các bước được mô tả trong sơ đồ sau:



  1. Khi máy client sử dụng địa chỉ IP được 50% thời gian cho phép (mốc thời gian này còn được gọi là thời điểm gia hạn, hay mốc thời gian T1), máy client sẽ tạo ra gói DHCPREQUEST, gửi unicast tới máy DHCP server đã cấp IP cho nó trước đây.
  2. Nếu tới thời điểm 87,5% thời gian sử dụng địa chỉ IP (mốc thời gian này còn được gọi là thời điểm gia hạn với server bất kì, hay mốc thời gian T2), mà client không nhận được trả lời từ DHCP server cũ, nó sẽ gửi broadcast gói DHCPREQUEST để xin gia hạn sử dụng địa chỉ IP với DHCP server bất kì trong mạng.
  3. Nếu server nhận được gói DHCPREQUEST từ client, nó sẽ: hoặc là gửi lại gói DHCPACK để đồng ý việc gia hạn, hoặc gửi gói DHCPNAK để từ chối việc gia hạn.
  4. Khi hết hạn sử dụng địa chỉ IP, nếu client không nhận được trả lời cho gói DHCPREQUEST, hoặc nhận được gói DHCPNAK, thì client sẽ giải phóng địa chỉ IP. Khi đó, mọi giao tiếp mạng sẽ ngừng lại, ngoại trừ việc gửi broadcast gói tin DHCPDISCOVER.

 

Cài đặt DHCP server


DHCP server là thành phần hoạt động độc lập, do vậy, một máy tính muốn trở thành DHCP server thì bạn phải cài đặt gói dịch vụ DHCP và tạo các kho địa chỉ (scope) trên nó.

Trong Windows Server 2012, thành phần DHCP server là một role. Vì vậy, để cài đặt DHCP server, bạn mở Server Manager, vào mục Manage, chạy Add Roles And Features Wizard.

Nếu bạn cài đặt role DHCP server trên máy tính đã là thành viên của domain (ADDS), DHCP server sẽ được cấp phép (authorize) tự động, khi đó, nó có thể cấp địa chỉ IP cho các máy tính là thành viên trong domain.

Nếu bạn cài đặt role DHCP server trên máy tính chưa là thành viên của domain, thì sau khi cài DHCP server, bạn sẽ phải gia nhập máy tính vào domain. Bạn cũng phải thực hiện cấp phép cho DHCP server bằng tay. Để cấp phép cho DHCP server, bạn mở DHCP, bấm chuột phải vào nút gốc, chọn Authorize.
Sau khi đã cài đặt DHCP server, bạn phải thực hiện tạo kho địa chỉ IP (scope) để cấp cho các máy client.

 

Tạo kho địa chỉ (scope)


Kho địa chỉ là một dải địa chỉ IP mà DHCP server sẽ cấp cho các máy client trong mạng. Với các phiên bản trước Windows Server 2012, bạn có thể tạo scope trong khi cài đặt DHCP server. Tuy nhiên, trong Windows Server 2012 và Windows Server 2012 R2, bạn sẽ tạo scope sau khi đã cài đặt DHCP server.

Các bước để tạo scope:

  1. Mở Server Manager, chọn Tools, chọn DHCP để mở cửa sổ DHCP.
  2. Ở khung cửa sổ bên trái, xổ nút gốc, và nút IPv4.
  3. Bấm chuột phải vào nút IPv4, chọn New Scope để mở trang New Scope Wizard.
  4. Bấm Next, để mở trang Scope Name.
  5. Nhập tên cho scope vào mục Name, bấm Next để mở trang IP Address Range (như hình bên dưới).


  1. Nhập địa chỉ bắt đầu của dải IP vào mục Start IP Address (ví dụ: 192.168.100.5). Nhập địa chỉ kết thúc của dải IP vào mục End IP Address (ví dụ: 192.168.100.253).
  2. Nhập giá trị subnet mask của mạng vào mục Subnet Mask (ví dụ: 255.255.255.0). Bấm Next để mở trang Add Exclusion And Delay.
  3. Exclusion: là các địa chỉ trong scope, nhưng không được cấp cho các client. Nhập địa chỉ bắt đầu và kết thúc của dải địa chỉ Exclusion vào Start IP Address và End IP Address tương ứng. Nếu dải địa chỉ Exclusion chỉ có một địa chỉ, thì nhập vào mục Start IP Address. Bấm nút Add để đưa vào danh sách. Bấm nút Next để mở trang Lease Duration.
  4.  Nhập khoảng thời gian client được phép sử dụng địa chỉ IP. Bấm Next để mở trang Configuration DHCP Options.
  5. Chọn Yes, I Want To Configure These Options Now. Bấm Next để mở trang Router (Default Gateway). Xem hình minh họa.


  1. Nhập địa chỉ IP Default Gateway của hệ thống mạng vào mục IP Address, bấm Add. Bấm Next để mở trang Domain Name And DNS Servers.
  2. Nhập tên của DNS server vào mục Server Name, bấm Resolve, địa chỉ IP của DNS server sẽ được tự động điền vào mục IP Address. Hoặc có thể gõ trực tiếp địa chỉ IP của DNS server vào mục IP Address. Bấm Add. Bấm Next để mở trang WINS Servers.
  3. Bấm Next để mở trang Activate Scope.
  4. Chọn Yes, I Want To Activate This Scope Now, bấm Next để mở trang Completing The New Scope Wizard.
  5. Bấm Finish để kết thúc.
  6. Đóng cửa sổ DHCP.
Sau khi đã tạo scope, các DHCP client trong mạng có thể lấy địa chỉ IP và các thông tin khác từ DHCP server. Bạn cũng có thể tạo thêm các scope cho các mạng con khác.
---------------------------
Tham khảo (Lược dịch):
Craig Zacker, Exam Ref 70-410 - Installing and Configuring Windows Server 2012 R2, Microsoft Press, 2014
--------------------------- 
Cập nhật 2015/1/28
---------------------------
Đọc thêm
Cai dat va cau hinh Windows Server 2012 R2 (36)
 

Hoc may voi Python (2)

(Tiếp theo của học máy với Python 1)



Xử lý tình trạng thiếu dữ liệu

Khi đọc dữ liệu từ tập tin dạng văn bản (text), sẽ xảy ra tình trạng có những chỗ dữ liệu không hợp lệ. Trong trường hợp đó, NumPy cho phép đánh dấu chỗ dữ liệu bị thiếu bằng kí hiệu numpy.NAN.

In [3]: c = np.array([1,2,np.NAN,3,4]) # giả sử dữ liệu này vừa được nhập từ tập tin dữ liệu
In [4]: c
Out[4]: array([ 1., 2., nan, 3., 4.])
In [5]: np.isnan(c) # kiểm tra phần tử chứa giá trị NAN
Out[5]: array([False, False, True, False, False], dtype=bool)
In [6]: c[~np.isnan(c)] # mảng các phần tử không bao gồm NAN
Out[6]: array([ 1., 2., 3., 4.])
In [7]: np.mean(c[~np.isnan(c)]) # mean( ): hàm tính giá trị trung bình
Out[7]: 2.5s

So sánh thời gian xử lý

Ví dụ sau thực hiện so sánh thời gian xử lý giữa NumPy và Python. Nội dung công việc là tính tổng bình phương các số từ 1 tới 1000, thực hiện 10000 lần và đo tổng thời gian cần thiết để thực hiện.

In [1]: import timeit
In [2]: normal_py_sec = timeit.timeit('sum(x*x for x in xrange (1000))', number=10000)
In [4]: naive_np_sec = timeit.timeit('sum(na*na)',setup="import numpy as np; na = np.arange(1000)",number = 10000)
In [5]: good_np_sec = timeit.timeit('na.dot(na)',setup="import numpy as np; na = np.arange(1000)", number = 10000)
In [6]: print("Normal Python: %f sec"%normal_py_sec)
Normal Python: 1.874073 sec
In [7]: print("Naive Numpy: %f sec"%naive_np_sec)
Naive Numpy: 6.491387 sec
In [8]: print("Good Numpy: %f sec"%good_np_sec)
Good Numpy: 0.094852 sec

Nếu sử dụng Python, thời gian xử lý là 1,874073 giây.

Nếu sử dụng NumPy với vai trò là thành phần lưu trữ dữ liệu (Naïve NumPy), thì thời gian xử lý là 6,491387 giây, chậm hơn 3,5 lần so với sử dụng Python.

Nếu sử dụng hàm dot() của Numpy, đây là hàm đã được tối ưu của NumPy, thì thời gian xử lý là 0,094852 giây, nhanh hơn 20 lần so với sử dụng Python.

Vì vậy, trong một số trường hợp, nên sử dụng các hàm đã được tối ưu trong NumPy hoặc SciPy để tăng tốc độ xử lý của hệ thống.

Tuy nhiên, kiểu dữ liệu mảng (array) trong NumPy lại không linh hoạt bằng kiểu dữ liệu danh sách (list) trong Python. Mảng trong NumPy chỉ chứa được một kiểu dữ liệu, trong khi danh sách trong Python có thể chứa nhiều kiểu dữ liệu.

In [9]: a = np.array([1,2,3])
In [10]: a.dtype
Out[10]: dtype('int32')

Nếu có nhiều kiểu dữ liệu trong mảng, NumPy sẽ cố gắng chuyển tất cả về một kiểu dữ liệu hợp lý nhất. Ví dụ:

In [11]: import numpy as np
In [12]: np.array([1,"string"])
Out[12]:
array(['1', 'string'], dtype='|S6')

Số 1 đã được chuyển thành kiểu kí tự ‘1’.

In [13]: np.array([1, "stringy", set([1,2,3])])
Out[13]: array([1, 'stringy', set([1, 2, 3])], dtype=object)

Số 1 và chuỗi ‘stringy’ đã được chuyển thành kiểu đối tượng (object).

 

Làm quen với SciPy


SciPy cung cấp các giải thuật hiệu quả trên kiểu dữ liệu mảng của NumPy.

SciPy hỗ trợ các tính toán liên quan đến: tính toán trên ma trận, đại số tuyến tính, tối ưu, clustering, spatial operation, biến đổi Fast Fourier.

Có thể sử dụng tất cả các chức năng của NumPy thông qua SciPy.

Bảng sau là các gói SciPy phổ biến:

Gói SciPy
Chức năng
Cluster

Constants

Fftpack

Integrate

Interpolate

Io
Nhập, xuất dữ liệu
Linalg

Maxentropy

Ndimage

Odr

Optimize

Signal

Sparse

Spatial

Special

Stats
Bộ công cụ về thống kê

 

Ứng dụng máy học đầu tiên


Giả sử bạn có một website bán hàng, bạn đã thiết lập hạ tầng để có thể đáp ứng số lượng truy cập là 100 000 lần/giờ.

Để theo dõi tình trạng hoạt động của hệ thống, bạn thực hiện đếm và ghi lại số lần truy cập website theo từng giờ.

Dựa vào thông tin theo dõi, bạn sẽ phải dự báo khi nào thì số lượng truy cập sẽ chạm ngưỡng 100 000 lần/giờ? hay dự báo khi nào sẽ phải nâng cấp hệ thống?

 

Đọc dữ liệu


Dữ liệu theo dõi số lần truy cập theo từng giờ được lưu trong tập tin dạng .tsv.

TSV (tab-separated values): là tập tin dạng văn bản, được sử dụng để lưu dữ liệu có cấu trúc bảng, trong đó mỗi hàng của bảng được lưu trên một dòng, mỗi trường dữ liệu trên một dòng được ngăn cách bởi một khoảng tab (hay kí tự tab).


Bấm Ctrl + A để chọn toàn bộ dữ liệu, bấm Ctrl + C để copy dữ liệu, mở chương trình Notepad, bấm Ctrl + V để dán dữ liệu vào Notepad.

Bấm vào mục File của Notepad, chọn Save, tại mục File name nhập tên cho tập tin, nhớ để tất cả trong dấu nháy kép, ví dụ “web_traffic.tsv”.

Một phần của tập tin dữ liệu web_traffic.tsv được thể hiện ở hình sau:



Dữ liệu gồm hai cột, cột đầu tiên là giờ, cột thứ hai là số lượt truy cập tương ứng. Tất cả gồm 743 hàng.

Sử dụng hàm genfromtxt () của SciPy để đọc dữ liệu.

In [1]: import scipy as sp
In [2]: data = sp.genfromtxt("D:\Liv\Re\Ebooks\ML\web_traffic.tsv", delimiter="\t")

Xuất thử dữ liệu để kiểm tra, ví dụ xuất 10 hàng đầu tiên.

In [3]: print(data[:10])
[[ 1.00000000e+00 2.27200000e+03]
[ 2.00000000e+00 nan]
[ 3.00000000e+00 1.38600000e+03]
[ 4.00000000e+00 1.36500000e+03]
[ 5.00000000e+00 1.48800000e+03]
[ 6.00000000e+00 1.33700000e+03]
[ 7.00000000e+00 1.88300000e+03]
[ 8.00000000e+00 2.28300000e+03]
[ 9.00000000e+00 1.33500000e+03]
[ 1.00000000e+01 1.02500000e+03]]

Xem định dạng dữ liệu:

In [4]: print (data.shape)

(743, 2)
Dữ liệu gồm 743 hàng, 2 cột.

 

Tiền xử lý và làm sạch dữ liệu


Để tiện xử lý trên SciPy, tạo hai vector ứng với hai chiều của dữ liệu, mỗi vector có kích thước 743. Vector x ứng với số giờ, và vector y ứng với số lần truy cập/giờ tương ứng.
In [5]: x = data[:,0]
In [6]: y = data[:,1]
Quan sát giá trị của y, sẽ thấy có một số giá trị không hợp lệ, chứa giá trị “nan”.
Tổng số giá trị không hợp lệ của y là: 8
In [7]: sp.sum(sp.isnan(y))
Out[7]: 8
Loại bỏ các hàng chứa giá trị không hợp lệ, cụ thể sẽ bỏ đi 8 hàng trong tổng số 743 hàng.
In [8]: x = x[~sp.isnan(y)]
In [9]: y = y[~sp.isnan(y)]
Biểu diễn dữ liệu dưới dạng đồ thị không gian hai chiều.
Sử dụng gói pyplot của Matplotlib.
In [11]: import matplotlib.pyplot as plt
In [12]: plt.scatter(x,y)
Out[12]: <matplotlib.collections.PathCollection at 0x6ad9df0>
In [13]: plt.title("Luu luong truy cap web")
Out[13]: <matplotlib.text.Text at 0x6ab4130>
In [15]: plt.xlabel("Thoi gian")
Out[15]: <matplotlib.text.Text at 0x6a90c70>
In [16]: plt.ylabel("Truy cap/gio")
Out[16]: <matplotlib.text.Text at 0x6a9ac10>
In [20]: plt.xticks([w*7*24 for w in range(5)],['Tuan %i'%(w+1) for w in range(5)])
Out[20]:
([<matplotlib.axis.XTick at 0x6aa3bf0>,
<matplotlib.axis.XTick at 0x6a9aa70>,
<matplotlib.axis.XTick at 0x472f790>,
<matplotlib.axis.XTick at 0x6ad62b0>,
<matplotlib.axis.XTick at 0x6ad65f0>],
<a list of 5 Text xticklabel objects>)
In [22]: plt.autoscale(tight=True)
In [23]: plt.grid()
In [24]: plt.show()
Đồ thị kết quả:
--------------------------
Tham khảo (lược dịch)
Willi Richert, Luis Pedro Coelho, Building Machine Learning Systems with Python, PACKT publishing, 2013
--------------------------
Cập nhật (2015/1/27)
--------------------------
Đọc thêm

Cai dat va cau hinh Windows Server 2012 R2 (34)

(Tiếp theo của "Cai dat va cau hinh Windows Server 2012 R2 (33)")



Cấu hình tunnel thủ công

Bạn có thể tạo thủ công một tunnel (đường hầm) để truyền gói tin IPv6 trên nền IPv4. Mỗi máy tính chạy hệ điều hành Windows Server 2012 R2 hoặc Windows 8.1 có thể xem như là một đầu của tunnel. Sử dụng lệnh sau để thiết lập tunnel:

Netsh interface ipv6 add v6v4tunnel “interface” localaddress remoteaddress

Trong đó, “interface” là tên của tunnel, localaddress và remoteaddress là địa chỉ Ipv4 của hai đầu tunnel.
Ví dụ cụ thể:

Netsh interface ipv6 add v6v4tunnel “DuongHam” 206.73.118.19 157.54.206.43

Cấu hình tunnel tự động

Sau đây là một số giải pháp đã được Windows hỗ trợ, để tự động tạo tunnel trên hạ tầng IPv4. Đây là những giải pháp để giải quyết vấn đề tương thích trong thời kì chuyển từ IPv4 sang IPv6. Các giải pháp đều có cơ chế lồng địa chỉ IPv4 vào trong địa chỉ IPv6.

- 6TO4

Công nghệ 6TO4 gồm hai giải pháp quan trọng, một là lồng địa chỉ IPv4 vào trong địa chỉ IPv6, hai là bọc các gói tin IPv6 bằng các gói tin IPv4.

- ISATAP

ISATAP (Intra-Site Automatic Tunnel Addressing Protocol): là giao thức được các hệ điều hành máy trạm của Windows sử dụng. Giải pháp này giả lập kết nối IPv6 trên hạ tầng IPv4.

ISATAP cũng có cơ chế chuyển địa IPv4 thành IPv6, nhưng sử dụng phương pháp khác so với 6TO4. ISATAP không hỗ trợ multicasting.

- TEREDO

 Trong giải pháp thiết lập đường hầm 6TO4, hai đầu của đường hầm phải sử dụng địa chỉ IPv4 public (địa chỉ được đăng kí). Tuy nhiên, trong nhiều hệ thống mạng, máy tính đóng vai trò là đầu đường hầm lại sử dụng địa chỉ IPv4 private và hoạt động phía sau của NAT router. Do vậy, không thể thiết lập đường hầm trong trường hợp này.

Teredo là một giải pháp để khắc phục hạn chế ở trên, nó cho phép một thiết bị hoạt động phía sau của NAT router (lưu ý: NAT router này không hỗ trợ IPv6) có thể đóng vai trò là một đầu của đường hầm. Teredo sẽ đóng gói IPv6 vào trong một gói UDP. Khác với 6TO4 đóng gói IPv6 vào trong gói IPv4.

Máy tính đóng vai trò là một đầu của đường hầm sẽ là Teredo client, nó cần phải giao tiếp với Teredo server để thực hiện chức năng của đầu đường hầm.

 

Tóm tắt nội dung

­ 
- Địa chỉ IPv4 có độ dài 32 bit, được viết dưới dạng bốn số thập phân, mỗi số có giá trị từ 0 tới 255, mỗi số thập phân được ngăn cách nhau bởi dấu chấm (.). Ví dụ: 192.168.43.100. Mỗi số thập phân được gọi là một octet hay một byte. 

- Theo chuẩn ban đầu, địa chỉ IPv4 được chia thành ba lớp để gán cho các thiết bị. Có nhiều dải địa chỉ có kích thước khác nhau để gán cho các hệ thống mạng. Dựa vào subnet mask để xác định: bao nhiêu bit trong một địa chỉ IPv4 là bit host, bao nhiêu bit là bit net.

- Để tránh sự lãng phí trong việc sử dụng địa chỉ IPv4 có phân lớp, người ta đã đưa ra một số giải pháp để chia mạng con, gồm: VLSM và CIDR.

- Với hệ thống có hỗ trợ IPv6, khi Windows khởi động, nó sẽ chạy tiến trình IPv6 Stateless Address Autoconfiguration để gán địa chỉ unicast kiểu link-local cho mỗi interface.

- Trong giai đoạn chuyển đổi từ IPv4 sang IPv6, giải pháp đơn giản nhất để giải quyết vấn đề tương thích là sử dụng song song cả hai loại địa chỉ trên cùng hệ thống. Giải pháp này đang được Windows sử dụng.

- Giải pháp chính trong việc truyền các gói tin IPv6 trên nền IPv4 là tạo đường hầm. Trong giải pháp này, gói IPv6 sẽ được bọc trong gói IPv4.

 

Câu hỏi ôn tập

 

  1. Trong việc truyền các gói tin IPv6 trên nền IPv4, giải pháp nào sau đây được sử dụng phổ biến?
    1. Subnetting.
    2. Tunneling.
    3. Supernetting.
    4. Contracting.
  2. Loại địa chỉ IPv6 nào sau đây tương đương với IPv4 private?
    1. Link-local unicast.
    2. Global unique unicast.
    3. Unique local unicast.
    4. Anycast.
  3. Giải pháp tạo đường hầm tự động nào sau đây được hệ điều hành Windows sử dụng, trong trường hợp máy tính nằm sau NAT router?
    1. Teredo
    2. 6TO4
    3. ASATAP
    4. APIPA
  4. Một hệ thống muốn được nhận ra trên Internet, thì nó phải sử dụng loại địa chỉ IP nào?
    1. Registered (được đăng kí).
    2. Binary.
    3. Class B.
    4. Subnetted.
  5. Cho địa chỉ mạng là 172.16.32.0/19, vậy subnet mask sẽ là?
    1. 255.224.0.0
    2. 255.240.0.0
    3. 255.255.224.0
    4. 255.255.240.0
    5. 255.255.255.240

 

4.1.  DHCP

 

Một số khái niệm về DHCP


DHCP (Dynamic Host Configuration Protocol) là dịch vụ tự động cấp địa chỉ IP và một số thông tin cấu hình TCP/IP cho một máy tính trong mạng, đồng thời nó cũng có trách nhiệm thu hồi lại các thông tin đã cấp khi hết hạn.

Scope là kho địa chỉ sẽ được cấp cho các máy trong mạng.

Cấu hình địa chỉ IP bằng tay thường mất thời gian, hay gây ra lỗi do nhập sai, do gán trùng địa chỉ IP, khó kiểm soát các địa chỉ IP đã gán. DHCP sẽ giúp khắc phục các hạn chế này.

DHCP gồm ba thành phần:

­ - DHCP server[1]: tiếp nhận và đáp ứng các yêu cầu liên quan đến cấu hình TCP/IP từ các máy client. 

- DHCP client: gửi yêu cầu tới DHCP server, nhận các thông tin cấu hình TCP/IP và thiết lập cho máy client.

- Thành phần giao tiếp (DHCP communication protocol): quy định cách thức và quy trình giao tiếp giữa client và server.

Tất cả các hệ điều hành Windows đều có sẵn thành phần DHCP client. Tất cả các hệ điều hành máy chủ Windows đều có sẵn thành phần DHCP server.

DHCP cung cấp ba hình thức cấp địa chỉ IP cho client:

- Cấp động (Dynamic allocation): DHCP server cấp cho client một địa chỉ IP trong kho địa chỉ của nó, client được phép sử dụng địa chỉ này trong một khoảng thời gian nhất định. Sau khi hết thời gian sử dụng, client phải báo lại cho DHCP server để tiếp tục được cấp thêm thời gian sử dụng. Nếu client không tiếp tục sử dụng, địa chỉ IP đó sẽ được DHCP server thu hồi để cấp cho máy tính khác. 

- Cấp ổn định (Automatic allocation): DHCP server sẽ cấp ổn định một địa chỉ IP nào đó trong kho cho máy client. Nếu client muốn đổi địa chỉ IP khác, bạn phải thực hiện cấu hình lại. Kiểu cấp này giống với kiểu cấp động, tuy nhiên, tại DHCP server có duy trì một bảng lưu lại các địa chỉ IP đã được cấp trước đó, khi client yêu cầu cấp địa chỉ IP, DHCP server sẽ ưu tiên cấp cho client địa chỉ mà trước đó nó đã dùng. 

- Dành riêng (Manula allocation): DHCP server sẽ cấp cố định một địa chỉ IP cho máy tính, việc cấp phát được dựa trên địa chỉ MAC của máy client. Trong thuật ngữ của Microsoft DHCP, hình thức này được gọi là reservations (đặt trước).

Ngoài địa chỉ IP, DHCP server còn cấp cho máy client các thông tin sau: subnet mask, default gateway, địa chỉ của DNS server, và nhiều thông tin khác (tổng cộng khoảng hơn 50 thông tin cấu hình).

DHCP sử dụng tám loại gói tin trong quá trình hoạt động. Các gói tin đều có định dạng giống nhau. DHCP truyền gói tin dựa trên UDP/IP, truyền trên cổng 67 tại máy server và trên cổng 68 tại máy client.

 

Gói tin DHCP


Tất cả các gói tin được DHCP sử dụng đều có phần tùy chọn, đây là nơi chứa các thông tin cần thiết để thực hiện các cấu hình liên quan đến TCP/IP.

Trường Message Type cho biết chức năng của gói tin DHCP, đây là trường bắt buộc phải có trong các gói tin DHCP. DHCP sử dụng tám loại gói tin sau:

­- DHCPDISCOVER: máy client sử dụng để yêu cầu các thông tin cấu hình TCP/IP từ máy server. 

- DHCPOFFER: máy server sử dụng để gửi địa IP đề nghị cho máy client.

- DHCPREQUEST: máy client sử dụng để thông báo chấp nhận hoặc gia hạn sử dụng một địa chỉ IP.

- DHCPDECLINE: máy client sử dụng để từ chối một địa chỉ IP do server đề nghị. 

- DHCPACK: máy server sử dụng để gửi cho client, sau khi client chấp nhận sử dụng địa chỉ IP. 

- DHCPNAK: máy server sử dụng để từ chối việc sử dụng địa chỉ IP của client. 

- DHCPRELEASE: máy client sử dụng để thông báo, thôi không sử dụng địa chỉ IP nữa. 

- DHCPINFORM: máy client sử dụng để lấy thêm các thông tin cấu hình TCP/IP từ server.

Các thông tin mở rộng của BOOTP

BOOTP(Bootstrap Protocol): là giao thức giúp máy client tự động lấy địa chỉ IP khi khởi động. Phần mở rộng này bao gồm rất nhiều các thông tin cấu hình cho máy client. Cụ thể gồm:

­- Subnet Mask: mặt nạ mạng con đi kèm với địa chỉ IP, giúp hệ thống xác định số bit host và số bit net trong địa chỉ IP, từ đó biết được địa chỉ mạng của máy client. 

- Router: địa chỉ IP của default gateway. 

- Domain Name Server: địa chỉ IP của máy DNS server. 

- Host Name: cho biết tên dạng DNS của máy client.

- Domain Name: cho biết tên miền của máy client.

Các thông tin mở rộng khác của gói DHCP

Đây là các thông tin được sử dụng trong quá trình trao đổi giữa client và server, để gia hạn sử dụng lại một địa chỉ IP.

­- Requested IP Address: máy client sử dụng để gia hạn sử dụng một địa chỉ IP. 

- IP Address Lease Time: xác định khoảng thời gian gia hạn. 

- Server Identifier: địa chỉ IP của máy DHCP server. 

- Parameter Request List: các thông tin máy client muốn DHCP server cung cấp thêm. 

- Message: nội dung thông báo lỗi được server gửi tới  client, đi kèm với gói DHCPNAK. 

- Renewal (T1) time value: khi hết khoảng thời gian này, client phải thực hiện gia hạn sử dụng địa chỉ IP. 

- Rebinding (T2) time value: hết khoảng thời gian này, client phải hoàn thành việc gia hạn sử dụng địa chỉ IP. Nếu client không thể gia hạn được với DHCP server cũ, nó sẽ thực hiện gửi broadcast tới toàn mạng để hoàn thành việc gia hạn sử dụng một địa chỉ IP.

Hoạt động của DHCP

Hiểu được hoạt động của DHCP sẽ giúp bạn thực hiện triển khai hệ thống cấp phát địa chỉ IP hiệu quả.

Trong các máy Windows, khi đánh dấu chọn vào mục Obtain An IP Address Automatically trong mục TCP/IPv4 hoặc Obtain An IPv6 Address Automatically trong mục TCP/IPv6 của cạc mạng là bạn đã kích hoạt DHCP client.

Quá trình hoạt động của DHCP luôn được khởi phát từ máy client. Xem lưu đồ dưới đây:



  1. Với máy tính đã được bật chức năng DHCP client, khi khởi động, nó sẽ tạo ra gói DHCPDISCOVER, gửi broadcast ra toàn mạng để yêu cầu máy DHCP server cấp địa chỉ IP cho nó.
  2. Khi các máy DHCP server nhận được gói DHCPDISCOVER, nó sẽ tạo ra gói DHCPOFFER, gói này chứa địa chỉ IP và các thông tin cấu hình khác, server gửi gói DHCPOFFER tới máy client.
  3. Client sẽ chấp nhận một trong các địa chỉ IP do các server đề nghị. Sau khi chấp nhận, client sẽ tạo gói DHCPREQUEST, trong gói có chứa địa chỉ IP mà nó chấp nhận, gửi broadcast gói DHCPREQUEST ra toàn mạng.
  4. Với server có địa chỉ IP được client chấp nhận, khi nhận được gói DHCPREQUEST, nó sẽ ghi lại địa chỉ IP và các thông tin đã được cấp phát vào cơ sở dữ liệu của nó.
  5. Sau đó, server sẽ gửi lại gói DHCPACK cho client xác nhận quá trình cấp địa chỉ IP đã hoàn thành. Nếu không thể hoàn thành quá trình cấp IP cho client, server sẽ gửi gói DHCPNAK tới client và quá trình tự động lấy địa chỉ IP của client được bắt đầu lại từ đầu.
  6. Cuối cùng, client sẽ kiểm tra tính duy nhất của địa chỉ IP nó vừa nhận được, nó thực hiện bằng cách sử dụng ARP để broadcast ra toàn mạng. Nếu không có phản hồi, nghĩa là IP nó nhận là hợp lệ, quá trình lấy địa chỉ IP đã hoàn thành. Nếu nhận được phản hồi, client sẽ hủy địa chỉ IP vừa nhận, đồng thời gửi lại gói DHCPDECLINE cho server. Client sẽ khởi động lại quá trình lấy địa chỉ IP.

[1] Ebook đang tham khảo ghi là: DHCP service
------------------------ 
Tham khảo (Lược dịch):
Craig Zacker, Exam Ref 70-410 - Installing and Configuring Windows Server 2012 R2, Microsoft Press, 2014
--------------------------- 
Cập nhật 2015/1/26
---------------------------
Đọc thêm
Cai dat va cau hinh Windows Server 2012 R2 (35)

Hoc may voi Python (1)




Học máy với Python

 

Chương 1. Tổng quan

 

Mở đầu


Học máy (machine learning) là dạy cho máy tính biết cách tự thực hiện các công việc.

Các vấn đề quan trọng của học máy là: lựa chọn giải thuật phù hợp đối với từng bài toán, cài đặt chương trình và đánh giá kết quả.

Ví dụ đơn giản về học máy: khi sử dụng thư điện tử (email), hàng ngày bạn hay phải phân loại các thư nhận được theo nhóm. Ví dụ, bạn sẽ phân thành các nhóm: gia đình, bạn bè, công việc. Ngày qua ngày, bạn sẽ thấy chán và thấy mất thời gian. Bạn muốn viết một chương trình để máy tính làm công việc này thay cho bạn. Khi viết chương trình, cách tiếp cận mà mọi người hay nghĩ tới là mô phỏng lại quá trình bộ óc của con người đã làm. Cách này khá phức tạp và không hiệu quả. Cách thứ hai là xây dựng một tập dữ liệu gồm các cặp email/nhãn, đây là các email đã được phân loại, dựa trên tập dữ liệu này, chương trình sẽ tìm ra được tập luật, sau đó, máy tính sẽ áp dụng tập luật này để phân loại tự động cho các email mới. Tập dữ liệu ở đây được gọi là dữ liệu huấn luyện (training data).

Máy học có liên quan nhiều đến lĩnh vực thống kê.

Máy học giúp tìm ra các mối liên hệ, những quy luật từ dữ liệu.

Tài liệu này giúp bạn có cái nhìn tổng quan về một số giải thuật đang được sử dụng phổ biến.

Tuy nhiên, bạn cũng nên biết là, việc cài đặt các giải thuật trong học máy để giải quyết một bài toán không phải là tất cả, mà bên cạnh đó, bạn cần phải thực hiện các công việc khác.

Sau đây là các công việc cần phải thực hiện để giải quyết một bài toán:

  1. Đọc và làm sạch dữ liệu đầu vào.
  2. Khảo sát và hiểu dữ liệu đầu vào.
  3. Biểu diễn dữ liệu đầu vào.
  4. Chọn và cài đặt giải thuật.
  5. Đánh giá kết quả.

Đối với dữ liệu đầu vào, các vấn đề bạn hay gặp phải là: dữ liệu có giá trị không hợp lệ, thiếu dữ liệu. Trong một số trường hợp, việc có quá ít dữ liệu hoặc có quá nhiều dữ liệu đều không tốt cho kết quả thực thi.

Dữ liệu cung cấp cho giải thuật thường là dữ liệu đã được tiền xử lý, rất ít giải thuật có thể sử dụng các dữ liệu chưa qua tiền xử lý.

Dữ liệu được tiền xử lý và tổ chức tốt, cộng với một giải thuật đơn giản, vẫn có thể cho ra kết quả tốt hơn rất nhiều so với một giải thuật phức tạp, nhưng chạy trên bộ dữ liệu được tiền xử lý và tổ chức không tốt.

Việc lựa chọn giải thuật phù hợp cho một bài toán là một vấn đề không đơn giản. Trong nhiều tình huống, bạn buộc phải thỏa hiệp giữa thời gian thực thi và độ chính xác của kết quả.

Cuối cùng, việc đánh giá kết quả của giải thuật cũng rất quan trọng.

Để làm các phần thực hành, bạn cần phải cài đặt ngôn ngữ lập trình Python. Để thực hiện các tính toán bạn sẽ sử dụng các gói NumPy (Numeric Python) và SciPy (Scientific Python). Để hiển thị kết quả một cách trực quan, bạn sẽ sử dụng gói Matplotlib.

Enthought Canopy là gói phần mềm có tích hợp sẵn cả Python, Numpy, Scipy, Matplotlib và một số thứ khác.

Vào địa chỉ sau https://store.enthought.com/downloads/ để tải gói Enthought Canopy về máy.

Nhớ lựa chọn phiên bản cho phù hợp với máy tính của bạn. Xem hình bên dưới.



(Tập tin cài đặt trên website là canopy-1.5.1-win-32.msi. Tuy nhiên, khi tôi dùng IDM để tải về máy, thì IDM tự đổi tên tập tin thành canopy-1.5.1-win-32.exe, chạy tập tin này sẽ bị lỗi. Nếu bạn bị tình trạng tương tự, hãy đổi lại đuôi .exe thành .msi là cài đặt được bình thường).

 

Làm quen với NumPy


NumPy là viết tắt của Numeric Python, là một gói chương trình hỗ trợ cho các tính toán khoa học bằng ngôn ngữ lập trình Python.

Xem thêm thông tin về Numpy tại đường dẫn: http://www.numpy.org/

Chạy Enthought Canopy\Code Editor, màn hình kết quả:



Nhập lệnh vào cửa sổ Python.

In [3]: import numpy # nạp gói numpy cho python
In [4]: numpy.version.full_version # xem phiên bản
Out[4]: '1.8.1'

Nạp và đặt lại tên tham chiếu cho gói numpy.

In [7]: import numpy as np

Khai báo mảng a, gồm 6 phần tử, với giá trị của các phần tử là: 0, 1, 2, 3, 4, 5.

In [8]: a = np.array([0, 1, 2, 3, 4, 5])

Xem số chiều của mảng a.

In [10]: a.ndim
Out[10]: 1

Xem dạng biểu diễn của mảng a.

In [12]: a.shape
Out[12]: (6,) # 6 hàng

Tạo ma trận hai chiều b từ mảng dữ liệu một chiều a. Ma trận b gồm 3 hàng, 2 cột. Tuy nhiên, giá trị các phần tử của a và b vẫn duy trì sự đồng bộ, nghĩa là b chưa thực sự là một bản sao độc lập của a. Nếu thay đổi giá trị trong b thì giá trị trong a cũng thay đổi, và ngược lại. Đây là đặc tính của numpy giúp hạn chế việc lặp lại của dữ liệu, giúp tiết kiệm bộ nhớ.

In [13]: b = a.reshape((3,2))
In [14]: b
Out[14]:
array([[0, 1],
           [2, 3],
          [4, 5]])

Xem số chiều và dạng thể hiện của b.

In [15]: b.ndim
Out[15]: 2
In [16]: b.shape
Out[16]: (3, 2)

Thay đổi giá trị một phần tử trong b, ví dụ b[1][0] = 77 (hàng 1, cột 0). Rồi xem kết quả.

In [17]: b[1][0] = 77
In [18]: b
Out[18]:
array([[ 0, 1],
           [77, 3],
          [ 4, 5]])

Xem lại giá trị của a, thấy rằng a cũng bị thay đổi.

In [19]: a
Out[19]: array([ 0, 1, 77, 3, 4, 5])

Để tạo ra ma trận c, là bản sao thực sự độc lập từ a, sử dụng thêm lệnh copy.

In [20]: c = a.reshape((3,2)).copy()
In [21]: c
Out[21]:
array([[ 0, 1],
           [77, 3],
          [ 4, 5]])

Đổi giá trị trong ma trận c, phần tử c[0][0] = -99. Xem kết quả.

In [22]: c[0][0] = -99
In [23]: c
Out[23]:
array([[-99, 1],
           [ 77, 3],
          [ 4, 5]])
In [24]: a
Out[24]: array([ 0, 1, 77, 3, 4, 5])

Numpy cho phép tính toán linh hoạt trên mảng. Ví dụ: nhân tất cả các phần tử của mảng a với 2, hoặc tính bình phương các phần tử.

In [26]: a[2] = 2
In [27]: a
Out[27]: array([0, 1, 2, 3, 4, 5])
In [28]: a*2
Out[28]: array([ 0, 2, 4, 6, 8, 10])
In [29]: a**2
Out[29]: array([ 0, 1, 4, 9, 16, 25])

Chỉ mục trong mảng (indexing)

Cho mảng a gồm 6 phần tử, giá trị của các phần tử là: 1, 2, 87, 3, 4, 5.

In [1]: import numpy as np
In [2]: a = np.array([1,2,87,3,4,5])
In [3]: a
Out[3]: array([ 1, 2, 87, 3, 4, 5])

Để lấy giá trị của một phần tử trong mảng, ta sẽ sử dụng chỉ mục (index) để tham chiếu đến nó.

Ví dụ, muốn lấy giá trị đầu tiên.

In [4]: a[0]
Out[4]: 1

Numpy cho phép sử dụng mảng làm chỉ mục, ví dụ, muốn lấy giá trị của các phần tử thứ 2, 3, 4 trong mảng a, sử dụng lệnh sau.

In [6]: a
Out[6]: array([ 1, 2, 87, 3, 4, 5])
In [7]: a[np.array([2,3,4])]
Out[7]: array([87, 3, 4])

Cho phép so sánh từng phần tử của mảng với một giá trị bất kì.

In [8]: a>4
Out[8]: array([False, False, True, False, False, True], dtype=bool)

Xuất các giá trị trong mảng lớn hơn 4.

In [9]: a[a>4]
Out[9]: array([87, 5])

Thay thế các giá trị vượt ngưỡng bằng một giá trị cụ thể. Ví dụ, thay thế các giá trị lớn hơn 4 của mảng bằng 4.

In [10]: a[a>4] = 4
In [11]: a
Out[11]: array([1, 2, 4, 3, 4, 4])

Có thể sử dụng hàm clip để đưa các giá trị của mảng về một miền cho trước, các giá trị cao hơn hoặc thấp 
hơn ngưỡng sẽ bị thay thế bởi ngưỡng.

In [17]: a
Out[17]: array([1, 2, 4, 3, 4, 4])
In [18]: a.clip(2,3)
Out[18]: array([2, 2, 3, 3, 3, 3])
--------------------------
Tham khảo (lược dịch)
Willi Richert, Luis Pedro Coelho, Building Machine Learning Systems with Python, PACKT publishing, 2013
--------------------------
Cập nhật (2015/1/20)
--------------------------
Đọc thêm