第一篇:實驗八,華南師范大學實驗報告
華南師范大學實驗報告
姓名:課件密碼:29379
學號:實驗題目:液晶材料的合成及其應用
組別:第三組實驗時間:2012.3.22
【前言】
1、實驗目的① 了解液晶材料的結構特點、制備方法與應用
② 掌握DCC法合成膽固醇丙酸酯液晶材料的操作技術。
2、文獻綜述與總結
2.1 液晶是某些物質在熔融態或在溶液狀態下形成的有序流體的總稱。液晶的發現可以追溯到1888年, 奧地利植物學家F Reinitzer 發現, 把膽甾醇苯酸脂(Cho-lesteryl Benzoate, C6H5CO2C27H45 , 簡稱CB)晶體加熱到145.5℃會熔融成為混濁的液體, 145.5℃ 就是該物質的熔點。繼續加熱到178.5℃, 混濁的液體會突然變成清亮的液體, 而且這種由混濁到清亮的過程是可逆的。O Lehmann 經過系統地研究指出, 在一定的溫度范圍內, 有些物質的機械性能與各向同性液體相似;但是它們的光學性質卻和晶體相似, 是各向異性的。因此, 這些介于液體和晶體之間的相被稱為液晶相。
2.2液晶態既可以通過加熱純的化合物獲得,也可以通過改變雙親性分子在水溶液(或者更復雜的多組分體系)中的濃度和溫度得到;前者被稱為熱致液晶,后者被稱為溶致液晶。在熱致液晶中,分子形狀的各向異性(如棒狀分子或盤狀分子)及分子內不同化學結構單之間的微相分離作用(如剛性核與柔性鏈之間的不相容性)是形成液晶態的主要驅動力。形狀各向異性的分子傾向于平行地排列起來,從而最有效地占據空間,這樣既獲得了長程的取向序,如向列相,分子僅表現出取向序,而又不具有長程的位置序。進一步,當分子內化學結構不同的各部分之間的微相分離作用使得分子內性質不同的結構單元彼此分離地聚集起來,便形成了具有一維、二維乃至三維位置序的復雜液晶態結構,如各種近晶相及結構更為復雜的立方相等。
2.3液晶顯示器件的研究與應用現狀:液晶是具有廣泛用途的功能材料, 主要是用來制作電、光顯示器件的, 其應用范圍包括各種類型的顯示器和光閥, 生命過程, 生物膜及信息傳遞等。液晶已被廣泛應用到高新技術領域中, 在電子工業中作為顯示材料, 液晶顯示與其它顯示相比, 有低耗能、準確性高、靈敏度高、色調柔和、無X 射線、安全可靠的特點, 由于消耗功率極小, 一般在10-100μw/cm2 的數量級, 因此不需要龐大的電源就可制造顯示面積大而體積小的器件, 可實現大屏幕顯示, 也可制造微型器件。液晶已經被廣泛地應用到人們的日常生活中,如計算器的顯示屏, 筆記本電腦的顯示屏, 液晶電視等。液晶的應用主要有以下幾個方面: 液晶平板顯示、生物膜理論、液晶溫度傳感器、液晶壓力傳感器, 液晶在分析化學中的應用等。
2.4液晶材料的其他潛在應用:人工肌肉——Gennes 首先提出液晶彈性體作為人工肌肉的設想: 通過溫度變化使其發生向列相到各相同性態之間的相變, 引起彈性體薄膜沿指向矢方向單軸收縮, 因此可以用來模擬肌肉的行為。然而其局限性在于液晶彈性體薄膜自身具有的低導熱性和導電性, 因而對外
界刺激響應比較緩慢。對于以上缺陷, 可以通過摻雜導熱導電物質的方法來提高其響應能力。Shenoy 等[ 7] 報道了通過液晶彈性體表面涂覆碳涂層, 使用紅外二極管激光器產生光吸收, 從而可以大大縮短反應時間, 而且彈性體薄膜的機械性能未受影響;納米機械——1973 年, Shibayer 等首先從理論上預料Sc * 相液晶可能具有鐵電性, 并于同年首次合成了具有鐵電能具有鐵電性, 并于1984 年首次合成了具有鐵電性的手性液晶聚合物。Vallerien 小組采用10-1 ~ 109 Hz的介電譜研究了網絡聚合物和線性材料的鐵電性, 結果證實了在某些具有Sc* 相的網絡中確實存在鐵電性。Brehmer 等合成了第一個毫秒級短開關時間的鐵電液晶彈性體。通過鐵電性液晶彈性體的大的側向電收縮實現電能轉化為機械能, 可以改變目前納米尺寸的制動, 主要用某種晶體(如石英)和智能陶瓷中的線性壓電效應來實現, 但是應變卻很小(小于0.1%)的狀況。Lehmann 等報道了鐵電液晶彈性體作為薄膜型液晶納米器件的研究結果, 在硅氧烷主鏈上含手性側基和交聯度為10% 的液晶彈性體在115 mV/cm 的電場下表現了垂直電場方向的收縮率為4% 的反壓電效應。與過去所用的偏氟乙烯共聚物同樣數量級的電誘導應變需用的電場相比低2個數量級;人工智能——Yu Yanlei 等報道了改變偏振光的波長和方向能使液晶彈性體在不同方向上進行可逆地卷縮和舒展的機械效應, 可望用于微米或納米尺寸的高速操控器,如微型機器人和光學微型鑷子;形狀記憶——Rousseau 等報道了近晶C 型液晶彈性體的形狀記憶效應, 與傳統形狀記憶聚合物相比具有恢復精度高(99.1%)、在低溫下(-120℃)仍保持橡膠結構等優點, 可在低于室溫條件下應用。這種液晶彈性體可以通過不同單體組成復合來定制轉變恢復溫度。
【實驗部分】
1、實驗儀器與藥品
1.1實驗儀器
有機合成實驗玻璃儀器一套(必須含蒸餾、抽濾設備)、磁力攪拌器、薄層檢測用熒光儀、顯微熔點儀、紅外光譜儀
1.2實驗藥品
膽固醇、二環己基碳二亞胺、丙酸、N,N-二甲基苯胺、二氯甲烷、石
油醚、薄層檢測用硅膠GF254、乙醚、HCl溶液(1mol/L)、NaOH溶液
(1mol/L)、蒸餾水、無水乙醇、無水MgSO42、實驗原理
膽固醇脂類液晶為熱致膽甾型液晶,其在一定條件下,會隨溫度、磁場、電場、機械應力、氣體濃度的變化,而發生色彩的變化,可用于制作液晶溫度計、氣敏元件、電子元件、變色物質等,還可用于無損探傷、微波測量、疾病診斷、定向反應等化學、化工、冶金、醫學等領域。
長期以來,在膽固醇脂類液晶的合成中,多采用操作復雜、路線較長的酰鹵路線,而采用操作溫和、路線短的二環己基碳二亞胺,簡稱DCC所合法僅有少量報道。
在二環己基碳二亞胺(DCC)縮合法合成膽固醇脂類液晶過程中,多使用3級有機堿進行催化,特別吡啶的衍生物,如4-二甲氨基吡啶(簡稱DMAP)、4-吡咯烷基吡啶。不足的是,DMAP等吡啶的衍生物價格昂貴,隨刻依據其催化機理,用便宜的N,N-二甲基苯胺作為3級有機堿進行替代,但耗時長、產率低。
3、實驗步驟
DCC法合成膽固醇丙酸酯
① 加料在干燥的帶有磁力攪拌子、干燥管的圓底燒瓶中,加入膽固醇(1.93g)、脫水劑二環己基碳二亞胺(1.24g)、丙酸(0.4ml)、催化劑(除水促進劑)N,N-二甲基苯胺(0.15ml)、溶劑二氯甲烷(100ml),在常溫下攪拌,固體先溶解,后逐漸有白色沉淀生成。
② 反應監測攪拌下反應20~24h后,以30份石油醚和1份乙醚混合液為展開劑,薄層檢測反應終點。
③ 后處理反應結束后抽濾,出去未反應玩的二環己基碳二亞胺和生成的酰脲,用HCl溶液、NaOH溶液、蒸餾水分別洗滌濾液后,然后加入MgSO4干燥。
④ 產品精制蒸餾除去溶劑二氯甲烷后的黃色油狀粗產品,加入無水乙醇重結晶三次(每次8~10ml),抽濾,干燥,得到白色針狀晶體。
⑤ 產物鑒定稱量,計算產率,測定熔點等。
4、實驗現象與結果
測定Rf值為:2.1/4.3=0.488,按照文獻值應該為0.54,明顯比較少,可以看出產品的制備并不是理想的,有可能并未能生成該物質。
產品的外觀性狀:膽甾醇(膽固醇)丙酸酯為白色晶體,膽甾醇(膽固醇)酯的熔點測定數值為92℃~110℃,文獻值為102℃,以上數據均為其他同學的產品制得,我們本小組的實驗并沒有成功作出該產品來。
【結果與討論】
DCC 法具有反應條件溫和、合成路線短等優點,在膽甾醇酯合成的報道中用得最多。該方法主要是用有機酸和膽甾醇,在脫水劑DCC作用下合成膽甾醇酯,通常還加入除水促進劑。除水促進劑可大大加速反應的速度,同時提高反應的產率。DCC法中用到的除水促進劑有4-二甲基吡啶(DMAP)、4-吡咯烷基
吡啶、2,4,6-三甲基吡啶鹽酸鹽、N,N-二甲基苯胺等。其中DMAP 最常見,但其價格昂貴。為了有利于脫水縮合,DCC法合成膽甾醇酯時一般采用無水二氯甲烷作為反應的溶劑。
根據文獻資料知:用N,N-二甲基苯胺作除水促進劑也可以合成膽甾醇丙酸酯,但是產率不高,且反應時間較長,反應24h基本檢測不到產物,只有在反應72h后才能檢測到產物,產率16.4%.用N,N-二甲基苯胺作除水促進劑合成膽甾醇苯甲酸酯時,可能由于苯甲酸中苯環存在較大的空間位阻,反應72h也未能得到膽甾醇苯甲酸酯。另外,以N,N-二甲基苯胺為除水促進劑,用于DCC脫水縮合法合成酯類化合物鮮見于文獻報道,常用的除水促進劑多為吡啶的衍生物,如4-吡咯烷基吡啶,DAMP,2,4,6-三甲基吡啶鹽酸鹽等,其價格昂貴。
因為其他小組做的是用DAMP作為除水劑,通過兩個用不同除水促進劑的實驗對比,發現用DAMP作除水促進劑合成膽甾醇丙酸酯的反應時間和產率都要比用N,N-二甲基苯胺作除水促進劑要好,24h后膽甾醇丙酸酯的產率即可20.4%.【參考文獻】
[1] 陳經佳,汪朝陽,鄭綠茵等.DCC法合成膽甾醇酯.浙江化工.2005,36:(2).[2] 王瑾菲,蒲永平,楊公安.高分子液晶材料的應用及發展趨勢.陶瓷.2009,3
[3] 王海濤,白炳蓮,李敏.幾類非常規液晶材料的研究進展.化學通報.2012,75:(1)
[4] 宋秀美,汪朝陽,毛鄭州.膽甾醇酯的合成研究進展.廣州化學.2008,33:(1)
第二篇:華南師范大學增城學院實驗報告
華南師范大學增城學院實驗報告
系部會計系
專業班級會計學(09財務管理)2班課程名稱成本會計實訓
實驗教師范時云
學號
學生姓名
實驗項目名稱產品成本計算(品種法)
實驗日期
實驗地點會計綜合模擬實驗室(A505)
成績
制表單位:華南師范大學增城學院會計系
華南師范大學增城學院實驗報告
說明:實驗報告應包含實驗目的和要求,主要儀器設備、試劑或材料,實驗方法與步
驟,實驗數據記錄、處理及結果分析,心得體會。
特別注意:
字數1000字以上,字體:宋體,字號:小四號,實驗數據記錄必須寫相關重要計算過程。
學生簽名:
實驗教師評語及評分:
教師簽名:
第三篇:實驗八
實
驗
報
告
課程名稱:
SQL
Server
數據庫基礎
任課教師:
池宗琳
實驗名稱:
存儲過程
年級、專業:
2018級電子信息工程
學
號:
20181060093
姓
名:
馬
信
日期:
2019
年
月
日
云南大學
信息學院
一、實驗目的1、掌握使用SELECT語句實現對數據庫的簡單查詢
2、掌握使用SELECT語句實現對數據庫的多表鏈接查詢和子查詢
二、實驗內容、方法、步驟、結果與分析
完成以下各題功能,保存或記錄實現各題功能的Transact-SQL語句。
1.在數據庫HrSystem中創建存儲過程avg._wage,用于求所有員工的平均工資,并通過輸出參數返回該平均工資。要求在創建存儲過程之前要首先判斷該存儲過程是否已經存在,如果存在,則將其刪除。
USE
Hrsystem
GO
IF
EXISTS
(SELECT
name
FROM
sysobjects
WHERE
name
=
'avg_wage')
DROP
PROC
avg_wage
GO
CREATE
PROC
avg_wage
@AVWAGE
AS
FLOAT
AS
SELECT
@AVWAGE
=
AVG(Wage)
FROM
Employees
@AVWAGE
GO
2.執行第1題創建的存儲過程avg_
wage,打印員工平均工資。
USE
Hrsystem
GO
DECLARE
@avg
AS
FLOAT
EXEC
avg_wage
@avg
3.在數據庫HrSystem中創建存儲過程max_
wage,根據指定的部門名稱(輸人參數)返回該部門的最高工資(輸出參數)。要求在創建存儲過程之前要首先判斷該存儲過程是否已經存在,如果存在,則將其刪除。
USE
Hrsystem
GO
IF
EXISTS
(SELECT
name
FROM
sysobjects
WHERE
name
=
'max_wage')
DROP
PROC
avg_wage
GO
CREATE
PROC
max_wage
@Dename
varchar(20),@MAX_wage
FLOAT
OUTPUT
AS
SELECT
@MAX_wage
=
MAX(Wage)
FROM
Employees
WHERE
Dep_id
IN(SELECT
Dep_id
FROM
Departments
WHERE
Dep_name
=
@Dename)
GROUP
BY
Dep_id
4.執行第3題創建的存儲過程max
wage,指定部門為“財務部”,打印該類部門的最高工資。
USE
Hrsystem
GO
DECLARE
@MAX_wage
FLOAT
EXEC
max_wage
'財務部',@MAX_wage
OUTPUT
@MAX_wage
5.刪除存儲過程avg_
wage和I
max_
wage。
USE
Hrsystem
GO
DROP
PROCEDURE
max_wage
GO
DROP
PROCEDURE
avg_wage
(二)觸發器
創建一個“學生信息”數據庫,包含“學生基本信息”表、“專業”表和“系”表,各表包含的字段如下。
“學生基本信息”表:學號;姓名;性別;班級;出生日期;專業編號。
“專業”表:專業編號;專業名稱;系編號。
“系”
表:系編號;系名稱;系簡介。
各字段類型按其實際含義自行定義,輸人-
-些數據,要求數據要有代表性。
以下操作要求全部在SQL
Server
Management
Studio
中完成,保存或記錄實現各題功能的Transcat-SQL語句(包括測試相應觸發器是否生效的相關語句及測試結果)。
1.在“專業”表上創建一個INSERT觸發器“TRG1”。當發生插入專業表操作時,將顯示插入的記錄。
USE
學生信息
GO
CREATE
TRIGGER
TRG1
ON
專業
FOR
INSERT
AS
DECLARE
@depid
INT
DECLARE
@depname
varchar(50)
DECLARE
@number
INT
SELECT
@depid
=
專業編號
FROM
inserted
SELECT
@number
=
系編號
FROM
inserted
SELECT
@depname
=
專業名稱
FROM
inserted
PRINT('系名:'+STR(@depid)+'專業名:'+STR(@depname)+'系的編號:'+str(@number))
INSERT
INTO
專業
(專業編號,專業名稱,系編號)
VALUES(@depid,@depname,@number)
2.在“專業”表上創建一個DELETE觸發器“TRG2”,當發生刪除操作時,將給出警告、列出刪除的記錄并撤銷刪除。
USE
學生信息
GO
CREATE
TRIGGER
TRG2
ON
專業
FOR
DELETE
AS
PRINT('警告!禁止刪除')
ROLLBACK
TRANSACTION
3.在“專業”表上創建一個UPDTAE觸發器“TRG3”,當發生更新“專業名稱”字段的操作時,給出警告并撤銷更新
USE
學生信息
GO
CREATE
TRIGGER
TRG3
ON
專業
FOR
UPDATE
AS
DECLARE
@temp_proid
INT
DECLARE
@temp_xiid
INT
DECLARE
@temp_porna
varchar(50)
SELECT
@temp_porna
=
專業名稱
FROM
inserted
IF
@temp_porna
IS
not
NULL
BEGIN
PRINT('禁止修改專業名稱')
ROLLBACK
TRANSACTION
END
ELSE
BEGIN
SELECT
@temp_porna
=
專業名稱
FROM
deleted
SELECT
@temp_xiid
=
系編號
FROM
deleted
SELECT
@temp_proid
=
專業編號
FROM
deleted
UPDATE
專業
SET
專業編號
=
@temp_proid,系編號
=
@temp_xiid
WHERE
專業名稱
=
@temp_porna
END
4.在“學生基本信息”表上創建一
一個更新觸發器“TRG4“,當發生更新“學號”或“姓名”字段的操作時給出警告,并撤銷更新。
USE
學生信息
GO
CREATE
TRIGGER
TRG4
ON
學生基本信息
FOR
UPDATE
AS
DECLARE
@temp_stunum
char(11)
DECLARE
@temp_name
char(10)
DECLARE
@temp_gender
BIT
DECLARE
@temp_class
varchar(10)
DECLARE
@temp_date
DATETIME
DECLARE
@temp_proID
INT
SELECT
@temp_name
=
姓名
FROM
inserted
SELECT
@temp_stunum
=
學號
FROM
inserted
IF
@temp_name
IS
NOT
NULL
OR
@temp_stunum
IS
NOT
NULL
BEGIN
PRINT('禁止修改學號或者姓名')
ROLLBACK
TRANSACTION
END
ELSE
BEGIN
SELECT
@temp_stunum
=
學號
FROM
deleted
SELECT
@temp_name
=
姓名
FROM
deleted
SELECT
@temp_gender
=
性別
FROM
inserted
SELECT
@temp_class
=
班級
FROM
inserted
SELECT
@temp_date
=
出生日期
FROM
inserted
SELECT
@temp_proID
=
專業編號
FROM
inserted
UPDATE
學生基本信息
SET
性別
=
@temp_gender,班級
=
@temp_class,出生日期
=
@temp_date,專業編號
=
@temp_proID
WHERE
學號
=
@temp_stunum
END
5.刪除以
上各題創建的所有觸發器。做好“學生信息”數據庫的備份,以備第10章、第章上機操作時使用。
USE
學生信息
GO
DROP
TRIGGER
TRG1
DROP
TRIGGER
TRG2
DROP
TRIGGER
TRG3
DROP
TRIGGER
TRG4
三、實驗小結【對自己而言,通過實驗學到的關鍵技術方法】
掌握了觸發器的一些基本方法:
1.創建觸發器
2.分清了觸發器的種類,但是還是需要深入了解dml觸發器中三個種類觸發器的不同。
3.了解了觸發器在我們實際操作中的作用
4.
第四篇:交換機實驗 實驗報告
交換機實驗II 實驗目的
1.理解掌握環路對網絡造成的影響,掌握環路的自檢測的配置; 2.理解路由的原理,掌握三層交換設備路由的配置方法 3.掌握DHCP的原理以及其配置方法
實驗步驟
配置交換機的IP地址,及基本的線路連接等; 實驗1:
①.用獨立網線連接同一臺交換機的任意兩個端口時期形成自環
②.對交換機的兩個端口進行配置,開啟所有端口的環路檢測功能、設置檢測周期等屬性 實驗2:
①.按圖1方式對三層交換機的VLAN、端口進行配置
②.在交換機中分別對VLAN的IP地址進行配置
③.啟動三層交換機的IP路由
④.設置PC-A、PC-B的IP地址,分別將它們的網關設置為所屬三層交換機VLAN的IP地址
⑤.通過Ping驗證主機A、B之間的互通狀況 實驗3:
三層交換機作為DHCP服務器,兩臺PC-A和PC-B,分別從交換機上獲取IP地址。PC-C手動配置IP地址。
①.按圖2方式建立主機A、B、C與三層交換機間的連接,配置交換機的IP地址
②.配置三層交換機的DHCP地址池屬性
③.啟動DHCP服務
④.(1)查看主機A、B能否正確的獲取到給定范圍內IP地址,通過Ping查看網關、交換機之間的互通情況;(2)拔掉主機B的網線,將主機C的IP地址設置為主機B所獲取的到的IP地址,然后再插上B機網線,查看其是否能獲取到不同的IP地址;(3)分別重啟主機A、B及交換機,查看A、B獲取到的IP地址是否和前一次相同。
圖1.三層路由連接圖
圖2.DHCP連接圖
實驗結果
實驗1:環路測試
交換機出現環路的自檢測結果:
實驗2:路由配置:
主機A連接交換機端口2,劃分為vlan10,端口IP地址為192.168.1.1。主機IP地址192.168.1.23;
主機B連接交換機端口10,劃分為vlan20,端口IP地址為192.168.2.1。主機IP地址192.168.2.27;
在未設置IP routing之前主機A、B分屬于不同網段,因此它們不能互通,設置后通過路由則可相互聯通:
實驗三:DHCP配置和驗證:
主機A、B、C分別連接到交換機的端口2,端口18和端口10上。其中主機A、B的IP地址自動獲取,主機C的IP地址則手動配置。
主機A通過DHCP獲取的IP地址(192.168.1.211)
主機B通過DHCO獲取到的IP地址(192.168.1.210)
測試主機A與主機C的互通性(可連通)
測試主機B與主機A、C之間的互通性(可連通)
當主機C配置為主機B獲取到的IP地址是會產生IP地址沖突的錯誤提示:
配置的主機C的IP地址與主機B的IP地址相沖突
主機B網線重新連接后獲取到的新的IP地址
交換機重新啟動后A、B主機自動獲取到的IP地址信息:
主機A自動獲取的IP地址
主機B自動獲取的IP地址
DHCP可分配IP地址池內IP數目小于申請的主機數目時實驗驗證情況:(可分配的IP地址為192.168.1.210 — 192.168.1.212),此時連接主機A、B、C、D。
主機D自動獲取IP地址的結果
實驗與結果分析
環路問題:
分為第二層環路和第三層環路,所有環路的形成都是由于目的路徑不明確導致混亂而造成的。例如第二層,一個廣播信息經過兩個交換機的時候會不斷惡性循環的產生廣播造成環路,而第三層環路則是原路由意外不能工作,造成路由通告錯誤,形成一個惡性循環。傳統的二層預防技術主要有STP(Spanning tree)來預防,STP在不斷的修改和更新中,產生了諸如STP/RSTP/MSTP等多個版本,大家可根據各自的組網規劃來選擇應用,但是STP的配置復雜度,以及協議本身的開銷通常都是網絡管理人員比較頭痛的事情。
解決因環路(自環或外環)對網絡造成的影響,能夠提高網絡的自檢錯性、容錯性和健壯性。環路檢測的過稱為:對交換機的每個端口周期性的發送回路檢測(Loopback-detection)數據包;交換機查看端口收到包的CPUMAC字段,如果其中存的是本交換機的MAC,則本交換機的某些端口形成環路,否則將其丟棄,出現環路后,交換機會關閉端口號較大的端口以消除環路。圖1中反映了在交換機開啟所有端口的環路檢測功能后每隔30秒檢測到的信息以及對端口的關閉等操作信息。
三層路由意義和工作過程: 實現不同VLAN間主機的通信,通過配置VLAN能夠有效地控制廣播域的大小。在同一VLAN內的主機間的通信不需要經過交換機的路由處理可直接到達目的主機,當不同VLAN間通訊時,數據包先轉發至路由器,由路由器查詢其路由轉發表選擇正確的端口間數據包轉發到目的VLAN的交換機,再由目的VLAN內交換機將數據包轉發至目的主機。其中扮演主要角色的即為交換機的路由功能,如果沒有設置相關屬性則不同VLAN間不能通訊。
因此在圖3的驗證實驗中,通過路由器的轉發功能實現了分別位于VLAN10和VLAN20中主機A、B之間的通信,在未配置IP Routing之前VLAN10和VLAN20分屬不同網段(A、B也屬于不同網段),因此不能實現通信,配置之后路由器(三層交換設備)可通過內部路由轉發表實現數據的轉發和通信。
DHCP工作過程與實驗分析:
即動態主機配置協議(Dynamic Host Configuration Protocol),是一個局域網的網絡協議,使用UDP協議工作,主要有兩個用途:給內部網絡或網絡服務供應商自動分配IP地址,是使內部網絡管理員能夠集中管理(從中心結點監控)和自動分配IP 網絡地址的通信協議。當某臺計算機移到網絡中的其它位置時,能自動收到新的IP 地址。DHCP 服務器從地址池中為客戶端選擇并分配IP 地址及其他相關參數當作為DHCP服務器的設備收到客戶端發來的DHCP 請求時,將從地址池中挑選一個空閑的IP 地址。
DHCP工作過程:
當 DHCP客戶端第一次登錄網絡的時候,也就是客戶發現本機上沒有任何 IP 數據設定,它會向網絡發出一個 DHCP DISCOVER封包(廣播包)。因為客戶端還不知道自己屬于哪一個網絡,所以封包的來源地址會為 0.0.0.0,而目的地址則為 255.255.255.255,然后再附上 DHCP discover 的信息,向網絡進行廣播。如果都沒有得到DHCP服務器的響應,客戶端則會顯示錯誤信息,宣告 DHCP discover 的失敗。之后,基于使用者的選擇,系統會繼續在 5 分鐘之后再重復一次 DHCP discover 的過程。
當 DHCP服務器監聽到客戶端發出的 DHCP discover 廣播后,它會從那些還沒有租出的地址范圍內,選擇最前面的空置 IP,連同其它 TCP/IP 設定,響應給客戶端一個 DHCP OFFER封包。由于客戶端在開始的時候還沒有 IP 地址,所以在其 DHCP discover封包內會帶有其 MAC 地址信息,并且有一個 XID 編號來辨別該封包,DHCP服務器響應的 DHCP offer 封包則會根據這些資料傳遞給要求租約的客戶。根據服務器端的設定,DHCP offer封包會包含一個租約期限的信息。
如果客戶端收到網絡上多臺 DHCP 服務器的響應,只會挑選其中一個 DHCP offer 而已(通常是最先抵達的那個),并且會向網絡發送一個DHCP request廣播封包,告訴所有 DHCP 服務器它將指定接受哪一臺服務器提供的 IP 地址。同時,客戶端還會向網絡發送一個 ARP封包,查詢網絡上面有沒有其它機器使用該 IP 地址;如果發現該 IP 已經被占用,客戶端則會送出一個 DHCPDECLINE 封包給 DHCP服務器,拒絕接受其 DHCP offer,并重新發送 DHCP discover 信息。事實上,并不是所有 DHCP客戶端都會無條件接受 DHCP服務器的 offer,尤其這些主機安裝有其它 TCP/IP 相關的客戶軟件。客戶端也可以用 DHCP request 向服務器提出 DHCP 選擇,而這些選擇會以不同的號碼填寫在 DHCP Option Field 里面。
當 DHCP服務器接收到客戶端的 DHCP request 之后,會向客戶端發出一個DHCPACK 響應,以確認 IP 租約的正式生效,標志著一次DHCP的工作過程完成。
圖4—6反映了主機A、B通過自動獲取IP地址方式由三層交換機動態分配IP后,各自得到的IP地址,由于A、B、C連接與同一臺交換設備上,由沒有VLAN劃分等因素,所以它們之間不論是自動獲取IP地址還是手動配置IP地址(不沖突的前提下)都能相互連通。當為主機C配置成已得到自動分配IP地址的主機B的IP地址時,自然會出現IP地址沖突的出錯信息提示。當B網線重新鏈接時,相當于重新加入的客戶端,交換機會從地址池中順序選擇下一個未分配的IP地址給新的請求用戶。因此主機B會獲得新新的IP地址,并且其值是主機C的IP地址的下一個鄰接IP地址(在未超出可分配的IP地址范圍條件下)。圖7 —10中反映了上述描述的結果。
圖11中顯示了一種造成IP地址動態分配失敗的情形:可分配的IP地址數僅有3個,而由4臺主機請求分配IP地址,當可分配地址全部分配給主機A、B、C后,主機D的請求不能得到滿足,因此未得到給定范圍內的合理IP地址。
第五篇:實驗一 實驗報告
網 絡 程 序 設 實驗報告
實驗名稱:Winsock編程接口實驗 實驗類型: 驗 證 型
計
一、實驗目的
? 掌握Winsock的啟動和初始化;
? 掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查詢函數的使用。
二、實驗設計
實驗內容:
1、編寫程序能同時實現對多個域名的解析。比如在控制臺輸入:getip www.tmdps.cn對應的IP地址列表。
2、編寫程序獲取并輸出本地主機的所有適配器的IP地址,子網掩碼,默認網關,MAC地址。
根據實驗內容編寫程序:
1、對相關域名進行解析,利用gethostbyname()完成解析,用到的結構體為:
struct hostent{ char FAR*
h_name;char FAR* FAR* h_aliases;short
h_addrtype;short
h_length;char FAR* FAR* h_addr_list;}
得到的IP地址列表由h_addr_list存儲;
2、利用GetAdaptersInfo()函數獲得本地主機的相關信息,通過IP_ADAPTER_INFO結構體返回所需信息。
IP_ADAPTER_INFO的定義如下: typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO* Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
三、實驗過程(包含實驗結果)
1、分析題目,編寫程序;
2、將編寫的程序進行編譯、運行,輸入題目給定的內容,完成題目要求; 結果如下:
第1題:
第2題:
四、討論與分析
思考題:
1、Winsock初始化的作用:只有調用了WSAStartup()進行初始化之后,應用程 序才能調用其他Windows Sockets API函數,實現網絡通信;
2、函數原型為:
DWORD GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo,//接受數據的緩沖區
PULONG pOutBufLen
// 數據的長度大小);
3、域名解析時出現域名對應多個IP,原因:該域名存在于多個服務器。
五、實驗者自評
通過本次實驗,我掌握了Winsock的啟動和初始化以及gethostname(),gethostbyname(),GetAdaptersInfo()等函數查詢的使用,加深了以前對課本知識的認識程度。
六、附錄:關鍵代碼(給出適當注釋,可讀性高)
第1題代碼:
////////////////////////////////////////////////// // GetAllIps.cpp文件
//#include “../common/InitSock.h” #include
using namespace std;
#pragma comment(lib, “WS2_32”)// 鏈接到WS2_32.lib //CInitSock initSock;// 初始化Winsock庫
void main(){
char szMessage[256];// 取得本地主機名稱
// 初始化
WSADATA wsaData;if(WSAStartup(MAKEWORD(2,2), &wsaData)!= 0){
exit(0);}
// 通過主機名得到地址信息
printf(“ Get IP::”);gets(szMessage);
// 獲取主機信息
hostent *pHost = ::gethostbyname(szMessage);
// 打印出所有IP地址
in_addr addr;for(int i = 0;;i++){
char *p = pHost->h_addr_list[i];
if(p == NULL)
break;
memcpy(&addr.S_un.S_addr, p, pHost->h_length);
char *szIp = ::inet_ntoa(addr);
printf(“ 服務器 %s IP地址:%s n ”,szMessage, szIp);
printf(“服務器名字: %s n”,pHost->h_name);}
/////////////////////////// ::WSACleanup();
}
第2題代碼:
// 獲取并輸出本地主機的所有適配器的IP地址,子網掩碼,默認網關,MAC地址
#include
void main(){ // 定義變量
IP_ADAPTER_INFO *pAdapterInfo;ULONG ulOutBufLen;DWORD dwRetVal;PIP_ADAPTER_INFO pAdapter;
pAdapterInfo =(IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));ulOutBufLen = sizeof(IP_ADAPTER_INFO);// 第一次獲取適配器信息,得到ulOutBufLen的實際大小
if(GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)!= ERROR_SUCCESS){
free(pAdapterInfo);
pAdapterInfo =(IP_ADAPTER_INFO *)malloc(ulOutBufLen);} // 第二次獲取適配器信息,獲得了pAdapterInfo信息
if(dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)!= ERROR_SUCCESS){
cout<<“GetAdapterInfo Error!”< // 打印MAC地址信息、子網掩碼以及網關 pAdapter = pAdapterInfo;while(pAdapter){ cout<<“MAC Address: ”; for(int i=0;i AddressLength;i++) { if(i ==(pAdapter->AddressLength-1)) { cout< } else { cout< } } cout< cout<<“IP 地址:”< IpAddressList.IpAddress.String< cout<<“子網掩碼 :”< IpAddressList.IpMask.String< cout<<“網關 :”< IpAddressList.IpAddress.String< cout<<“****************************************”< pAdapter = pAdapter->Next;} // 釋放資源 if(pAdapterInfo){ free(pAdapterInfo);} cout< }