HTML 使用超級鏈接與網絡上的另一個文檔相連。幾乎可以在所有的網頁中找到鏈接。點擊鏈接可以從一張頁面跳轉到另一張頁面。
HTML 鏈接
如何在HTML文檔中創建鏈接。
(可以在本頁底端找到更多實例)
HTML 超鏈接(鏈接)
HTML使用標簽 <a>來設置超文本鏈接。
超鏈接可以是一個字,一個詞,或者一組詞,也可以是一幅圖像,您可以點擊這些內容來跳轉到新的文檔或者當前文檔中的某個部分。
當您把鼠標指針移動到網頁中的某個鏈接上時,箭頭會變為一只小手。
在標簽<a> 中使用了href屬性來描述鏈接的地址。
默認情況下,鏈接將以以下形式出現在瀏覽器中:
一個未訪問過的鏈接顯示為藍色字體并帶有下劃線。
訪問過的鏈接顯示為紫色并帶有下劃線。
點擊鏈接時,鏈接顯示為紅色并帶有下劃線。
注意:如果為這些超鏈接設置了 CSS 樣式,展示樣式會根據 CSS 的設定而顯示。
HTML 鏈接語法
鏈接的 HTML 代碼很簡單。它類似這樣::
<a href="url">鏈接文本</a>
href 屬性描述了鏈接的目標。.
實例
<a >訪問菜鳥教程</a>
上面這行代碼顯示為:: 訪問菜鳥教程
點擊這個超鏈接會把用戶帶到菜鳥教程的首頁。
提示: "鏈接文本" 不必一定是文本。圖片或其他 HTML 元素都可以成為鏈接。
HTML 鏈接 - target 屬性
使用 target 屬性,你可以定義被鏈接的文檔在何處顯示。
下面的這行會在新窗口打開文檔:
實例
<a>訪問菜鳥教程!</a>
HTML 鏈接- id 屬性
id屬性可用于創建在一個HTML文檔書簽標記。
提示: 書簽是不以任何特殊的方式顯示,在HTML文檔中是不顯示的,所以對于讀者來說是隱藏的。
實例
在HTML文檔中插入ID:
<a id="tips">有用的提示部分</a>
在HTML文檔中創建一個鏈接到"有用的提示部分(id="tips")":
<a href="#tips">訪問有用的提示部分</a>
或者,從另一個頁面創建一個鏈接到"有用的提示部分(id="tips")":
<a >
訪問有用的提示部分</a>
基本的注意事項 - 有用的提示
注釋: 請始終將正斜杠添加到子文件夾。假如這樣書寫鏈接:,就會向服務器產生兩次 HTTP 請求。這是因為服務器會添加正斜杠到這個地址,然后創建一個新的請求,就像這樣:。
圖片鏈接
如何使用圖片鏈接。
在當前頁面鏈接到指定位置
如何使用書簽
跳出框架
本例演示如何跳出框架,假如你的頁面被固定在框架之內。
創建電子郵件鏈接
本例演示如何如何鏈接到一個郵件。(本例在安裝郵件客戶端程序后才能工作。)
建電子郵件鏈接 2
本例演示更加復雜的郵件鏈接。
HTML 鏈接標簽
標簽 | 描述 |
---|---|
<a> | 定義一個超級鏈接 |
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
、通常訪問的網站是保存在遠程的服務器還是本地電腦,你是怎么判斷的?
保存在遠程的服務器,判斷的標準和依據在網絡是否連通的情況下能否正常訪問。
二、什么叫服務器?
一臺運行在網絡上有著專門的用途計算機。比如網站服務器、數據庫服務器、FTP服務器、游戲服務器、通訊服務器、多媒體服務器、教學服務器、……。
三、搭建屬于我們自己的網站服務器
安裝IIS(Internet Information Server)或APACHE來幫我們管理網站。
四、其他知識點:
1、IT,Information Technoligy,信息技術。包含硬件、通信、網絡、數據傳輸、軟件開發等領域。
2、查看本機的IP地址: 開始->運行 (windows+R)->cmd->ipconfig /all
3、WINDOWS NT:New Technoligy,新技術。包含me、95、98、XP、VISTA、2000、2003、2008、2012、2013、7。
4、UNIX:MAC IOS、ANDROID、LINUX、RED HAT LINUX。
5、打開控制面板:windows+r->control
6、IIS運行快捷鍵:windows+r->inetmgr (internet managerment root)
7、WEB:網頁,是一個單獨的頁面,擴展名可以是xxx.html、xxx.htm、xxx.jsp、xxxx.aspx、……。
8、WEBSITE:網站,圍繞一個主題所有網頁的集群。
9、本機的IP地址:127.0.0.1,或本機的域名:localhost
10、域名:本身就是一個無意義的字符串,只是為了方便人們記憶和訪問對應的網站而提出的概念。
11、測試網絡是否連通指令:ping 目標域名。
12、網站訪問請求相應的流程:
第一大歷史階段的流程
WEB2.0階段而是這樣的流程
13、訪問完整流程格式:
以訪問www.cwhello.com,由域名提供商解析成完成在以下格式
http://服務器IP地址:端口/訪問網站下具體哪一個頁面,例如:
http://123.112.113.114:80/index.php
http:// 超文本傳輸協議,訪問服務器的前綴,代表訪問的是網站,而不是其他的。又比如ftp:// 文件傳輸協議,代表訪問的服務器是文件服務器。
端口(Port):就相當于剛才例子的水龍頭,控制資源的打開與關閉。默認web 80,和前綴一起省略;ftp 21、MS SQL 1433、mysql 3306
首頁(扉頁):在網站中,選擇其中一個頁面布局、設計非常精美,讓用戶留下美好的影響,類似與門面,這個頁面稱為首頁。一般起名為index.xxxx、default.xxx。在服務器中可以進行設置,順序是從上往下。
14、訪問控制
目錄瀏覽權限:沒有設置首頁,訪問時直接指明域名,會顯示網站路徑。
訪問網站常見的錯誤代碼
404 路徑錯誤
500 內部代碼錯誤,比如PHP等
15、API,Application Programm Interface,應用程序接口。
16、DLL,Dynamic Linked Libarary,動態鏈接庫。
17、PHP最佳運行環境:LAMP=Linux +Apache+Mysql+PHP
WAMP=WINDOWS+APache+Mysql+php
18、APACHE安裝配置:
默認網站根目錄是 安裝目錄/htdocs 下
配置文件 安裝目錄/conf/httpd.conf
修改配置文件可以實現:
網站根目錄documentroot ,路徑設置不能有反斜杠\,修改網站根目錄以后默認沒有訪問,解決辦法:
1.修改directory 節點后面的路徑為網站根目錄
2.或者直接修改directory節點下權限allow from all
修改端口:listen 1234
首頁支持:directoryindex index.html index.php
添加對PHP的解析:
LoadModule ph5_module “對應版本apache的動態鏈接庫”
AddType application/x-httpd-php .php
小猿的某同事不甘于現狀,近期到處投簡歷面試。某天,小猿只見某灰頭土臉、唉聲嘆氣,于是小猿本著看熱鬧不嫌事兒大的心態,一臉壞笑湊上去問:“大佬,最近面試咋樣,是不是都拿好幾個offer了~^_^”,某答道:“什么呀,面個試咋就這么難,一道面試題硬是讓面試官扯出了整個計算機網絡知識圖譜,也是沒誰了~”,小猿好奇問:“啥題,啥題~”,某答:“爛大街的一道題,面試前也準備了,唉,你說為啥面試官就能從這道題目扯出一堆題目...”(此處省略一萬字)
接下來小猿就給大家說說某遇到的這道題,還有它牽扯出的整個計算機網絡的知識圖譜。廢話不多說,直接上題目
題目描述一:請說說HTTP請求的整個過程
題目描述二:當你在瀏覽器中輸出某個URL,按下回車后都經歷了什么樣的流程
題目描述三:請簡單介紹一下HTTP是怎么工作的
相信各位猿對這道題應該并不陌生,而且網上一搜一堆的講解與答案,但是某遇到的這個大牛面試官,卻可以從某的回答中延伸出更多的問題,如果想要過關,還是要對整個計算機網絡的知識體系有比較深刻的理解才行。下面先貼出小猿對這個題目的理解和可能從這道題目引出的計算機網絡的知識點,然后小猿對這些知識點慢慢的給大家分析。
小猿對題目的理解:
DNS解析:如果URL中是網址,需要向對這個網址進行域名解析,得到相應的IP地址
TCP連接:根據IP,找到對應的服務器,通過TCP的三次握手建立連接
發送HTTP請求:建立TCP連接后發起HTTP請求
服務器處理請求并返回HTTP報文:服務器根據請求參數得到返回結果,并返回HTTP報文
瀏覽器解析渲染頁面:瀏覽器得到報文,解析HTML代碼,并請求HTML代碼中的資源(例如js、css等),然后渲染頁面
連接結束:TCP4次揮手,HTTP斷開連接
七層結構簡介:
7層結構數據傳輸流程:
詳細介紹每層的功能和
應用層(Application Layer)
是計算機用戶,以及各種應用程序和網絡之間的接口:
是用戶與網絡,以及應用程序與網絡間的直接接口,使得用戶能夠與網絡進行交互式聯系。
實現各種服務:該層具有的各種應用程序可以完成和實現用戶請求的各種服務。
該層還負責協調各個應用程序間的工作。
應用層為用戶提供的服務和協議有:文件服務、目錄服務、文件傳輸服務(FTP)、遠程登錄服務(Telnet)、電子郵件服務(E-mail)、打印服務、安全服務、網絡管理服務、數據庫服務等。
表示層(Presentation Layer)
對來自應用層的命令和數據進行解釋,對各種語法賦予相應的含義,并按照一定的格式傳送給會話層。
主要功能:數據格式處理、編碼、壓縮解壓、加密解密等,具體說明如下:
數據格式處理:協商和建立數據交換的格式,解決各應用程序之間在數據格式表示上的差異。
數據的編碼:處理字符集和數字的轉換。例如由于用戶程序中的數據類型(整型或實型、有符號或無符號等)、用戶標識等都可以有不同的表示方式,因此,在設備之間需要具有在不同字符集或格式之間轉換的功能。
壓縮和解壓縮:為了減少數據的傳輸量,這一層還負責數據的壓縮與恢復。
數據的加密和解密:可以提高網絡的安全性。
會話層(Session Layer)
其任務就是組織和協調兩個會話進程之間的通信,并對數據交換進行管理,具體如下:
會話管理:允許用戶在兩個實體設備之間建立、維持和終止會話,并支持它們之間的數據交換。例如提供單方向會話或雙向同時會話,并管理會話中的發送順序,以及會話所占用時間的長短。
會話流量控制:提供會話流量控制和交叉會話功能。
尋址:使用遠程地址建立會話連接。
出錯控制:從邏輯上講會話層主要負責數據交換的建立、保持和終止,但實際的工作卻是接收來自傳輸層的數據,并負責糾正錯誤。會話控制和遠程過程調用均屬于這一層的功能。但應注意,此層檢查的錯誤不是通信介質的錯誤,而是磁盤空間、打印機缺紙等類型的高級錯誤。
傳輸層(Transport Layer)
向用戶提供可靠的端到端的差錯和流量控制,保證報文的正確傳輸。傳輸層的作用是向高層屏蔽下層數據通信的細節,即向用戶透明地傳送報文。
傳輸連接管理:提供建立、維護和拆除傳輸連接的功能。傳輸層在網絡層的基礎上為高層提供“面向連接”和“面向無接連”的兩種服務。
處理傳輸差錯:提供可靠的“面向連接”和不太可靠的“面向無連接”的數據傳輸服務、差錯控制和流量控制。在提供“面向連接”服務時,通過這一層傳輸的數據將由目標設備確認,如果在指定的時間內未收到確認信息,數據將被重發。
監控服務質量。
該層常見的協議:TCP/IP中的TCP協議、Novell網絡中的SPX協議和微軟的NetBIOS/NetBEUI協議。
網絡層(Network Layer)
通過路由選擇算法,為報文或分組通過通信子網選擇最適當的路徑
數據鏈路層的數據在這一層被轉換為數據包,然后通過路徑選擇、分段組合、順序、進/出路由等控制,將信息從一個網絡設備傳送到另一個網絡設備。
尋址:數據鏈路層中使用的物理地址(如MAC地址)僅解決網絡內部的尋址問題。在不同子網之間通信時,為了識別和找到網絡中的設備,每一子網中的設備都會被分配一個唯一的地址。由于各子網使用的物理技術可能不同,因此這個地址應當是邏輯地址(如IP地址)。
交換:規定不同的信息交換方式。常見的交換技術有:線路交換技術和存儲轉發技術,后者又包括報文交換技術和分組交換技術。
路由算法:當源節點和目的節點之間存在多條路徑時,本層可以根據路由算法,通過網絡為數據分組選擇最佳路徑,并將信息從最合適的路徑由發送端傳送到接收端。
連接服務:與數據鏈路層流量控制不同的是,前者控制的是網絡相鄰節點間的流量,后者控制的是從源節點到目的節點間的流量。其目的在于防止阻塞,并進行差錯檢測。
數據鏈路層是解決同一網絡內節點之間的通信,而網絡層主要解決不同子網間的通信。例如在廣域網之間通信時,必然會遇到路由(即兩節點間可能有多條路徑)選擇問題。
數據鏈路層(Data Link Layer)
物理層提供的比特流的基礎上,通過差錯控制、流量控制方法,使有差錯的物理線路變為無差錯的數據鏈路,即提供可靠的通過物理介質傳輸數據的方法。
該層通常又被分為介質訪問控制(MAC)和邏輯鏈路控制(LLC)兩個子層
MAC子層的主要任務是解決共享型網絡中多用戶對信道競爭的問題,完成網絡介質的訪問控制;
LLC子層的主要任務是建立和維護網絡連接,執行差錯校驗、流量控制和鏈路控制。數據鏈路層的具體工作是接收來自物理層的位流形式的數據,并封裝成幀,傳送到上一層;同樣,也將來自上層的數據幀,拆裝為位流形式的數據轉發到物理層;并且,還負責處理接收端發回的確認幀的信息,以便提供可靠的數據傳輸。
物理層(Physical Layer)
利用傳輸介質為數據鏈路層提供物理連接,實現比特流的透明傳輸。
物理層的作用是實現相鄰計算機節點之間比特流的透明傳送,盡可能屏蔽掉具體傳輸介質和物理設備的差異。使其上面的數據鏈路層不必考慮網絡的具體傳輸介質是什么。
分享一張大而全的七層協議框架圖
傳輸控制協議TCP簡介
面向連接的、可靠的、基于字節流的傳輸層通信協議
將應用的數據流分割成報文段并發送個給目標節點的TCP層,
分段的長度受數據鏈路層MTU(最大傳輸單元,Maximum Transmission Unit)的限制
TCP單個數據報的最大長度稱為最大段尺寸MSS;
在TCP三次握手建立連接的時候,雙方會商量傳輸中MSS的大小;
數據包都有序號以保證消息接收的順序,對方收到則發送ACK確認,未收到則重傳
使用奇偶校驗和來校驗數據在傳輸過程中是否有誤
TCP報文頭
SourcePort:源端口,占用2個字節。源端口和IP地址的作用是標識報文的返回地址。
p.s. IP可以唯一表示一臺主機,TCP協議和端口號可以唯一表示主機中的一個進程;所以我們可以根據IP地址+協議+端口號唯一表示網絡中的一個進程(即Socket的工作原理)。
DestinationPort:目的端口,占用2個字節;指明接收方計算機上的應用程序的端口。
SequenceNumber(序號seq):本報文段發送的數據組的第一個字節的序號。e.g.一個報文段的序號為300,此報文段數據部分共有100字節,則下一個報文段的序號為400。所以序號確保了TCP傳輸的有序性。
AcknowledgmentNumber(確認號ack):指明下一個期待收到的字節序號,表明該序號之前的所有數據已經正確無誤的收到。確認號只有當ACK標志為1時才有效。
offset(數據偏移):占用4bits。由于首部可能含有可選項內容,因此TCP報頭的長度是不確定的,報頭不包含任何任選字段則長度為20字節,4位首部長度字段所能表示的最大值為1111,轉化為10進制為15,15*32/8 = 60,故報頭最大長度為60字節。首部長度也叫數據偏移,是因為首部長度實際上指示了數據區在報文段中的起始偏移值。
Reserved(保留字節):為將來定義新的用途保留,現在一般置0。
TCP Flags(TCP控制位)
SYN:同步序號,用于建立連接過程,在連接請求中,SYN=1和ACK=0表示該數據段沒有使用捎帶的確認域,而連接應答捎帶一個確認,即SYN=1和ACK=1。
ACK:確認序號標志,為1時表示確認號有效,為0表示報文中不含確認信息,忽略確認號字段。
FIN:finish標志,用于釋放連接,為1時表示發送方已經沒有數據發送了,即關閉本方數據流。
URG:緊急指針標志,為1時表示緊急指針有效,為0則忽略緊急指針。
PSH:push標志,為1表示是帶有push標志的數據,指示接收方在接收到該報文段以后,應盡快將這個報文段交給應用程序,而不是在緩沖區排隊。
RST:重置連接標志,用于重置由于主機崩潰或其他原因而出現錯誤的連接。或者用于拒絕非法的報文段和拒絕連接請求。
CWR:Congestion Window Reduced
ECE:ECN echo
Window(窗口):滑動窗口大小,用來告知發送端接受端的緩存大小,以此控制發送端發送數據的速率,從而達到流量控制。窗口大小時一個16bit字段,因而窗口大小最大為65535。
Checksum(校驗和):奇偶校驗,此校驗和是對整個的 TCP 報文段,包括 TCP 頭部和 TCP 數據,以 16位進行計算所得。由發送端計算和存儲,并由接收端進行驗證。
UrgentPointer(緊急指針):只有當 URG 標志置 1 時緊急指針才有效。緊急指針是一個正的偏移量,和順序號字段中的值相加表示緊急數據最后一個字節的序號。 TCP 的緊急方式是發送端向另一端發送緊急數據的一種方式。
TCP Options(選項與填充)如果沒有選項,則TCP頭長度是20字節,TCP選項最大是40個字節。最常見的可選字段是最長報文大小,又稱為MSS(Maximum Segment Size),每個連接方通常都在通信的第一個報文段(為建立連接而設置SYN標志為1的那個段)中指明這個選項,它表示本端所能接受的最大報文段的長度。選項長度不一定是32位的整數倍,所以要加填充位,即在這個字段中加入額外的零,以保證TCP頭是32的整數倍。
Data(數據部分)TCP 報文段中的數據部分是可選的。在一個連接建立和一個連接終止時,雙方交換的報文段僅有 TCP 首部。如果一方沒有數據要發送,也使用沒有任何數據的首部來確認收到的數據。在處理超時的許多情況中,也會發送不帶任何數據的報文段。
在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接
第一次握手:建立連接時,客戶端發送SYN包到服務器,并進入SYN_SEND狀態,等待服務器確認。這里發送的SYN包,SYN標志位為1,seq序號初始為x
第二次握手:服務器收到SYN包,必須確認客戶的SYN,同時自己也發送一個SYN包給客戶端,此時服務端進入SYN_RECV狀態。這里服務端發送的SYN包中SYN標志位和ACK標志位都是1,seq序號初始為y,ack為x+1(表示客戶端下次再發送包seq從x+1開始)
第三次握手:客戶端收到服務器的SYN+ACK的包,向服務器發送確認包,此包ACK標志位1,seq序號為x+1,ack為y+1(表示服務端下一次發送數據seq從y+1開始)。此包發送完畢,客戶端和服務器端都進入ESTABLISHED狀態,完成三次握手,開始數據傳送。
為了初始化SequenceNumber
為了防止服務器端開啟一些無用的連接增加服務器開銷以及防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤。
問題描述
Server收到Client的SYN,回復SYN-ACK的時候未收到ACK確認
Server不斷重試直至超時,Linux默認等待63秒才斷開連接(Linux默認重試5次,每次等待時間翻倍,第一次重試前等待時間為1秒,第五次重試后等待時間是32秒,然后才斷開連接)
惡意攻擊者,不斷向服務端發送SYN請求后立刻下線,服務器端會等待63秒后才斷開連接,進而導致服務端資源耗盡,讓正常的連接請求不能處理
針對SYN Flood的防護措施
針對上述問題的解決辦法
SYN隊列滿后,通過tcp_syncookies參數回發SYN Cookie
如果是正常連接,Client會回發SYN Cookie給服務端;如果是惡意攻擊,因為Client已經下線,則不會返回。
正常連接返回SYN Cookie后,可以直接建立連接
保活機制
向對方發送保活探測報文,如果未收到響應則繼續發送
嘗試次數達到保活探測數仍未收到響應,則中斷連接
揮手是為了終止連接,TCP采用四次揮手來釋放連接
第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN-WAIT_1狀態;
第二次揮手:Server收到FIN后,發送一個ACK給client,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號),Server進入CLOSE_WAIT狀態;Client接收到Server的FIN之后,進入FIN_WAIT_2狀態;
第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態;
第四次揮手:Client收到FIN后,Client進入TIME_WAIT狀態,接著發送一個ACK給Server,確認序號為收到序號+1,Server進入CLOSED狀態,完成四次握手
防止上一次連接中的包,迷路后重新出現,影響新連接(經過2MSL,上一次連接中所有的重復包都會消失)
可靠的關閉TCP連接。為的是確認服務器端是否收到客戶端發出的ACK確認報文。當客戶端發出最后的ACK確認報文時,并不能確定服務器端能夠收到該段報文。所以客戶端在發送完ACK確認報文之后,會設置一個時長為2MSL的計時器。MSL指的是Maximum Segment Lifetime:一段TCP報文在傳輸過程中的最大生命周期。2MSL即是服務器端發出為FIN報文和客戶端發出的ACK確認報文所能保持有效的最大時長。
服務器端在1MSL內沒有收到客戶端發出的ACK確認報文,就會再次向客戶端發出FIN報文;
如果客戶端在2MSL內,再次收到了來自服務器端的FIN報文,說明服務器端由于各種原因沒有接收到客戶端發出的ACK確認報文。客戶端再次向服務器端發出ACK確認報文,計時器重置,重新開始2MSL的計時;
否則客戶端在2MSL內沒有再次收到來自服務器端的FIN報文,說明服務器端正常接收了ACK確認報文,客戶端可以進入CLOSED階段,完成“四次揮手”。
因為全雙工,發送方和接收方都需要FIN報文和ACK保報文
建立連接時,被動方服務器端結束CLOSED階段進入“握手”階段并不需要任何準備,可以直接返回SYN和ACK報文,開始建立連接。釋放連接時,被動方服務器,突然收到主動方客戶端釋放連接的請求時并不能立即釋放連接,因為還有必要的數據需要處理,所以服務器先返回ACK確認收到報文,經過CLOSE-WAIT階段準備好釋放連接之后,才能返回FIN釋放連接報文。
如果一直保持在CLOSE_WAIT狀態,那么只有一種情況,就是在對方關閉連接之后服務器程序自己沒有進一步發出ack信號。換句話說,就是在對方連接關閉之后,程序里沒有檢測到,或者程序壓根就忘記了這個時候需要關閉連接,于是這個資源就一直被程序占著。
檢查代碼,特別是釋放資源的代碼
檢查配置,特別是處理請求的線程配置
寫了這么多,請允許小猿喘口氣~,今天就到這吧,未完待續...
更多精彩可以搜索公眾號:隔壁王小猿(happy-gbwxy)關注,公眾號留言可以獲取JAVA面試寶典哦 (*^▽^*)
*請認真填寫需求信息,我們會在24小時內與您取得聯系。