Linux基礎(chǔ)教程之TCP協(xié)議詳解
批處理應(yīng)用程序
????FTP 、TFTP 、庫存更新
????無需直接人工交互
????帶寬很重要,但并非關(guān)鍵性因素
交互式應(yīng)用程序
????庫存查詢、數(shù)據(jù)庫更新。
????人機(jī)交互。
????因為用戶需等待響應(yīng),所以響應(yīng)時間很重要,但并非關(guān)鍵性因素,除非要等待很長時間。
實時應(yīng)用程序
????VoIP 、視頻
????人與人的交互
????端到端的延時至關(guān)重要
拓?fù)浣Y(jié)構(gòu)
物理拓?fù)洌?/span>
總線拓?fù)?所有設(shè)備均可接收信號
環(huán)狀拓?fù)?信號繞環(huán)傳輸,單一故障點
星型拓?fù)?通過中心點傳輸,單一故障點
擴(kuò)展星型拓?fù)?比星型拓?fù)涞膹?fù)原能力更強(qiáng)
邏輯拓?fù)?
雙環(huán)拓?fù)?信號沿相反方向傳輸,比單環(huán)的復(fù)原能力更強(qiáng)
全網(wǎng)狀拓?fù)?容錯能力強(qiáng),實施成本高
部分網(wǎng)狀拓?fù)?在容錯能力與成本之間尋求平衡
網(wǎng)絡(luò)模型分層:七層
1-4層通信子網(wǎng) ? ? ?5-7層資源子網(wǎng)
1.物理層:
二進(jìn)制傳輸;為啟動,維護(hù)以及關(guān)閉物理鏈路定義了電氣規(guī)范,機(jī)械規(guī)范,過程規(guī)范和功能規(guī)范
2.數(shù)據(jù)鏈路層:
訪問介質(zhì);定義如何格式化數(shù)據(jù)以便進(jìn)行傳輸以及如何控制對網(wǎng)絡(luò)的訪問
支持錯誤檢測
3.網(wǎng)絡(luò)層;數(shù)據(jù)傳輸
路由數(shù)據(jù)包
選擇傳遞數(shù)據(jù)的最佳路徑
支持邏輯尋址和路徑選擇
4.傳輸層;傳輸問題
確保數(shù)據(jù)傳輸?shù)目煽啃?/span>
建立,維護(hù)和終止虛擬電路
通過錯誤檢查和恢復(fù)
信息流控制來保障可靠性
5.會話層;主機(jī)間通信
建立,管理和終止在應(yīng)用程序之間的會話
6.表示層;數(shù)據(jù)表示
確保接受系統(tǒng)可以讀出該數(shù)據(jù)
格式化數(shù)據(jù)
構(gòu)建數(shù)據(jù)
協(xié)商用于應(yīng)用層的數(shù)據(jù)傳輸語法
提供加密
7.應(yīng)用層;網(wǎng)絡(luò)進(jìn)程訪問應(yīng)用層
為應(yīng)用程序進(jìn)程提供網(wǎng)絡(luò)服務(wù)(電子郵件,文件傳輸和終端仿真)
提供用戶身份驗證
對等通信
三種通訊模式
1.單播:兩臺計算機(jī)通過特有的通道進(jìn)行通信。
2.廣播:多臺計算機(jī)在一定的范圍內(nèi)通信(本地子網(wǎng)范圍),當(dāng)某一計算機(jī)發(fā)送消息,其他所有的計算機(jī)都會受到信息。
3.組播:即發(fā)送者和接受者可以實現(xiàn)多種通信方式,這種方式以小組的形式存在,既可以是同一物理網(wǎng)絡(luò),也可以是不同的物理網(wǎng)絡(luò)。這樣一來,就能極大地提升通信的速率。
LAN 組成 ????局域網(wǎng) Local Area Network
Computers
????PCs 計算機(jī)
????Servers 服務(wù)器
Interconnections
????NICs 網(wǎng)卡
????Media 媒體
Network devices 網(wǎng)絡(luò)設(shè)備
????Hubs 集線器
????Switches 交換機(jī)
????Routers 路由器
Protocols 協(xié)議
????Ethernet 以太網(wǎng)
????IP
????ARP
????DHCP
網(wǎng)絡(luò)線纜和接口
雙絞線 Twisted-Pair
線纜 Coaxal
光纖 Fiber-Optic
UTP
線序:T568B標(biāo)準(zhǔn) ???????橙白 ?橙綠白藍(lán)藍(lán)白綠棕白棕
100M實際用1/2(發(fā)數(shù)據(jù)) 3/6(收數(shù)據(jù))兩組線
1000M實際用1/2 3/6 4/5 7/8(都可收發(fā)數(shù)據(jù))四組線
UTP 直通線(Straight-Through)
以太網(wǎng)橋
交換式以太網(wǎng)的優(yōu)勢
擴(kuò)展了網(wǎng)絡(luò)帶寬
分割了網(wǎng)絡(luò)沖突域,使網(wǎng)絡(luò)沖突被限制在最小的范圍內(nèi)
交換機(jī)作為更加智能的交換設(shè)備,能夠提供更多用戶所要求的功能:優(yōu)先級、虛擬網(wǎng)、遠(yuǎn)程檢測……
以太網(wǎng)橋的工作原理
以太網(wǎng)橋監(jiān)聽數(shù)據(jù)幀中源MAC 地址,學(xué)習(xí)MAC ,建立MAC表 表
對于未知MAC 地址,網(wǎng)橋?qū)⑥D(zhuǎn)發(fā)到除接收該幀的端口之外的所有端口
????當(dāng)網(wǎng)橋接到一個數(shù)據(jù)幀時,如果該幀的目的位于接收端口所在網(wǎng)段上,它就過濾掉該數(shù)據(jù)幀;如果目的MAC 地址在位于另外一個端口,網(wǎng)橋就將該幀轉(zhuǎn)發(fā)到該端口
????當(dāng)網(wǎng)橋接到廣播幀時候,它立即轉(zhuǎn)發(fā)到除接收端口之外的所有其他端口
路由器
為了實現(xiàn)路由, 路由器需要做下列事情:
????分隔廣播域
????選擇路由表中到達(dá)目標(biāo)最好的路徑
????維護(hù)和檢查路由信息
????連接廣域網(wǎng)
路由
路由:把一個數(shù)據(jù)包從一個設(shè)備發(fā)送到不同網(wǎng)絡(luò)里的另一個設(shè)備上去。這些工作依靠路由器來完成。路由器只關(guān)心網(wǎng)絡(luò)的狀態(tài)和決定網(wǎng)絡(luò)中的最佳路徑。路由的實現(xiàn)依靠路由器中的路由表來
VLAN
分隔廣播域
安全
靈活管理
VLAN = ?廣播域= 絡(luò)邏輯網(wǎng)絡(luò) (Subnet)
分層的網(wǎng)絡(luò)架構(gòu)
核心層Core Layer??????????企業(yè)級應(yīng)用快速轉(zhuǎn)發(fā)
分布層Distribution?Layer????廣播域,路由,安全,遠(yuǎn)程接入,訪問層匯聚
訪問層Access?Layer????????終端接入
TCP/IP 協(xié)議棧
Transmission Control Protocol/Internet Protocol
傳輸控制協(xié)議/ 因特網(wǎng)互聯(lián)協(xié)議
TCP/IP 是一個Protocol Stack ,包括TCP、IP 、UDP 、ICMP 、RIP 、TELNET、FTP 、SMTP 、ARP 等許多協(xié)議
最早發(fā)源于美國國防部(縮寫為DoD )的因特網(wǎng)的前身ARPA 網(wǎng)項目,1983 年1 月1
日,TCP/IP 取代了舊的網(wǎng)絡(luò)控制協(xié)議NCP,成為今天的互聯(lián)網(wǎng)和局域網(wǎng)的基石和標(biāo)準(zhǔn)。由互聯(lián)網(wǎng)工程任務(wù)組負(fù)責(zé)維護(hù)。
共定義了四層
和ISO 參考模型的分層有對應(yīng)關(guān)系
TCP/IP 協(xié)議棧和 OSI 模型
TCP/IP 應(yīng)用層
Application
File transfer 文件傳輸
FTP FTP協(xié)議 傳載大文件
TFTP 輕量級FTP 傳載小文件
Network File System 網(wǎng)絡(luò)文件系統(tǒng)
E-mail 電子郵件
Simple Mail Transfer Protocol 簡單郵件傳輸協(xié)議
Remote login 遠(yuǎn)程登錄
Telnet
rlogin
Network management 網(wǎng)絡(luò)管理
Simple Network Management?Protocol 簡單網(wǎng)絡(luò)管理協(xié)議
Name management 名稱管理
Domain Name System 域名系統(tǒng)
傳輸層
Transport
Session multiplexing 多路會話
Segmentation 分段
Flow control (when required) 流控制(必要時)
Connection-oriented(when required) 面向連接(必要時)
Reliability (when required) 可靠的(必要時)
Reliable可靠的 | Best-Effort高效的 | |
Connection Type連接類型 | Connection-oriented 面向連接的 | Connectionless 無連接 |
Protocol 協(xié)議 | TCP | UDP |
Sequencing 順序 | Yes | No |
Uses | E-mail 電子郵件
File sharing 文件共享 Downloading 下載 | Voice streaming 語音流
Video streaming 視頻流 |
TCP 特性
工作在傳輸層面向連接協(xié)議
????全雙工協(xié)議
????半關(guān)閉
????錯誤檢查
????將數(shù)據(jù)打包成段,排序
????確認(rèn)機(jī)制
????數(shù)據(jù)恢復(fù),重傳
????流量控制,滑動窗口
????擁塞控制,慢啟動和擁塞避免算法
TCP包頭
源端口、目標(biāo)端口:計算機(jī)上的進(jìn)程要和其他進(jìn)程通信是要通過計算機(jī)端口的,而一個計算機(jī)端口某個時刻只能被一個進(jìn)程占用,所以通過指定源端口和目標(biāo)端口,就可以知道是哪兩個進(jìn)程需要通信。源端口、目標(biāo)端口是用16位表示的,可推算計算機(jī)的端口個數(shù)為2^16個
???????序列號:表示本報文段所發(fā)送數(shù)據(jù)的第一個字節(jié)的編號。在TCP 連接中所傳送的字節(jié)流的每一個字節(jié)都會按順序編號。由于序列號由32位表示,所以每2^32個字節(jié),就會出現(xiàn)序列號回繞,再次從0開始
???????確認(rèn)號:表示接收方期望收到發(fā)送方下一個報文段的第一個字節(jié)數(shù)據(jù)的編號。也就是告訴發(fā)送發(fā):我希望你(指發(fā)送方)下次發(fā)送的數(shù)據(jù)的第一個字節(jié)數(shù)據(jù)的編號是這個確認(rèn)號。也就是告訴發(fā)送方:我希望你(指發(fā)送方)下次發(fā)送給我的TCP 報文段的序列號字段的值是這個
???????數(shù)據(jù)偏移:由于TCP 首部包含一個長度可變的選項部分,所以需要這么一個值來指定這個TCP出報文段到底有多長。它指出TCP報文段的數(shù)據(jù)起始處距離TCP報文段的起始處有多遠(yuǎn),即TCP 報文段的首部長度。該字段的單位是32 位字,即:4個字節(jié)
URG :表示本報文段中發(fā)送的數(shù)據(jù)是否包含緊急數(shù)據(jù)。后面的緊急指針字段(urgent pointer)只有當(dāng)URG=1時才有效
ACK :表示是否前面的確認(rèn)號字段是否有效。ACK=1 ,表示有效。只有當(dāng)ACK=1時,前面的確認(rèn)號字段才有效。TCP 規(guī)定,連接建立后,ACK 必須為1, 帶ACK 標(biāo)志的TCP 報文段稱為確認(rèn)報文段
???????PSH :提示接收端應(yīng)用程序應(yīng)該立即從TCP 接收緩沖區(qū)中讀走數(shù)據(jù),為接收后續(xù)數(shù)據(jù)騰出空間。如果為1 ,則表示對方應(yīng)當(dāng)立即把數(shù)據(jù)提交給上層應(yīng)用,而不是緩存起來,如果應(yīng)用程序不將接收到的數(shù)據(jù)讀走,就會一直停留在TCP 接收緩沖區(qū)中
???????RST :如果收到一個RST=1 的報文,說明與主機(jī)的連接出現(xiàn)了嚴(yán)重錯誤(如主機(jī)崩潰),必須釋放連接,然后再重新建立連接。或者說明上次發(fā)送給主機(jī)的數(shù)據(jù)有問題,主機(jī)拒絕響應(yīng),帶RST 標(biāo)志的TCP 報文段稱為復(fù)位報文段
???????SYN :在建立連接時使用,用來同步序號。當(dāng)SYN=1 ,ACK=0 時,表示這是一個請求建立連接的報文段;當(dāng)SYN=1,ACK=1 時,表示對方同意建立連接。SYN=1,說明這是一個請求建立連接或同意建立連接的報文。只有在前兩次握手中SYN才置為1 ,帶SYN 標(biāo)志的TCP 報文段稱為同步報文段
v FIN :表示通知對方本端要關(guān)閉連接了,標(biāo)記數(shù)據(jù)是否發(fā)送完畢。如果FIN=1,即告訴對方:“我的數(shù)據(jù)已經(jīng)發(fā)送完畢,你可以釋放連接了”,帶FIN 標(biāo)志的TCP報文段稱為結(jié)束報文段
窗口大小:表示現(xiàn)在運行對方發(fā)送的數(shù)據(jù)量,也就是告訴對方,從本報文段的確認(rèn)號開始允許對方發(fā)送的數(shù)據(jù)量
????校驗和:提供額外的可靠性
????緊急指針:標(biāo)記緊急數(shù)據(jù)在數(shù)據(jù)字段中的位置。
????選項部分:其最大長度可根據(jù)TCP 首部長度進(jìn)行推算。TCP首部長度用4 位表示,選項部分最長為:(2^4-1)*4-20=40 字節(jié)
TCP 協(xié)議
傳輸層通過port 號,確定應(yīng)用層協(xié)議
Port number:
tcp :傳輸控制協(xié)議,面向連接的協(xié)議;通信前需要建立虛擬鏈路;結(jié)束后拆除鏈路
0-65535
udp :User Datagram Protocol ,無連接的協(xié)議
0-65535
IANA: 互聯(lián)網(wǎng)數(shù)字分配機(jī)構(gòu)(負(fù)責(zé)域名,數(shù)字資源,協(xié)議分配)
0-1023 :系統(tǒng)端口或特權(quán)端口( 僅管理員可用) ?,眾所周知,永久的分配給固定的系統(tǒng)應(yīng)用使用,22/tcp(ssh), 80/tcp(http), 443/tcp(https)
1024-49151 :用戶端口或注冊端口,但要求并不嚴(yán)格,分配給程序注冊為某應(yīng)用使用,1433/tcp(SqlServer,1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp (memcached)
49152-65535: : 動態(tài)端口或私有端口,客戶端程序隨機(jī)使用的端口其范圍的定義:/proc/sys/net/ipv4/ip_local_port_range
TCP 三次握手
第一次握手:建立連接。客戶端發(fā)送連接請求報文段,將SYN位置為1,Sequence Number為x;然后,客戶端進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器的確認(rèn)
第二次握手:服務(wù)器收到SYN報文段。服務(wù)器收到客戶端的SYN報文段,需要對這個SYN報文段進(jìn)行確認(rèn),設(shè)置Acknowledgment Number為x+1(Sequence Number+1);同時,自己自己還要發(fā)送SYN請求信息,將SYN位置為1,Sequence Number為y;服務(wù)器端將上述所有信息放到一個報文段(即SYN+ACK報文段)中,一并發(fā)送給客戶端,此時服務(wù)器進(jìn)入SYN_RECV狀態(tài)
第三次握手:客戶端收到服務(wù)器的SYN+ACK報文段。然后將Acknowledgment Number設(shè)置為y+1,向服務(wù)器發(fā)送ACK報文段,這個報文段發(fā)送完畢以后,客戶端和服務(wù)器端都進(jìn)入ESTABLISHED狀態(tài),完成TCP三次握手
為什么要三次握手
已失效的連接請求報文段”的產(chǎn)生在這樣一種情況下:client發(fā)出的第一個連接請求報文段并沒有丟失,而是在某個網(wǎng)絡(luò)結(jié)點長時間的滯留了,以致延誤到連接釋放以后的某個時間才到達(dá)server。本來這是一個早已失效的報文段。但server收到此失效的連接請求報文段后,就誤認(rèn)為是client再次發(fā)出的一個新的連接請求。于是就向client發(fā)出確認(rèn)報文段,同意建立連接。假設(shè)不采用“三次握手”,那么只要server發(fā)出確認(rèn),新的連接就建立了。由于現(xiàn)在client并沒有發(fā)出建立連接的請求,因此不會理睬server的確認(rèn),也不會向server發(fā)送數(shù)據(jù)。但server卻以為新的運輸連接已經(jīng)建立,并一直等待client發(fā)來數(shù)據(jù)。這樣,server的很多資源就白白浪費掉了。采用“三次握手”的辦法可以防止上述現(xiàn)象發(fā)生。例如剛才那種情況,client不會向server的確認(rèn)發(fā)出確認(rèn)。server由于收不到確認(rèn),就知道client并沒有要求建立連接。
防止服務(wù)器端一直等待而浪費資源
TCP四次揮手
第一次分手:主機(jī)1(可以使客戶端,也可以是服務(wù)器端),設(shè)置Sequence Number和Acknowledgment Number,向主機(jī)2發(fā)送一個FIN報文段;此時,主機(jī)1進(jìn)入FIN_WAIT_1狀態(tài);這表示主機(jī)1沒有數(shù)據(jù)要發(fā)送給主機(jī)2了
第二次分手:主機(jī)2收到了主機(jī)1發(fā)送的FIN報文段,向主機(jī)1回一個ACK報文段,Acknowledgment Number為Sequence Number加1;主機(jī)1進(jìn)入FIN_WAIT_2狀態(tài);主機(jī)2告訴主機(jī)1,我“同意”你的關(guān)閉請求
第三次分手:主機(jī)2向主機(jī)1發(fā)送FIN報文段,請求關(guān)閉連接,同時主機(jī)2進(jìn)入LAST_ACK狀態(tài)
第四次分手:主機(jī)1收到主機(jī)2發(fā)送的FIN報文段,向主機(jī)2發(fā)送ACK報文段,然后主機(jī)1進(jìn)入TIME_WAIT狀態(tài);主機(jī)2收到主機(jī)1的ACK報文段以后,就關(guān)閉連接;此時,主機(jī)1等待2MSL后依然沒有收到回復(fù),則證明Server端已正常關(guān)閉,那好,主機(jī)1也可以關(guān)閉連接了
TCP協(xié)議是一種面向連接的、可靠的、基于字節(jié)流的運輸層通信協(xié)議。TCP是全雙工模式,這就意味著,當(dāng)主機(jī)1發(fā)出FIN報文段時,只是表示主機(jī)1已經(jīng)沒有數(shù)據(jù)要發(fā)送了,主機(jī)1告訴主機(jī)2,它的數(shù)據(jù)已經(jīng)全部發(fā)送完畢了;但是,這個時候主機(jī)1還是可以接受來自主機(jī)2的數(shù)據(jù);當(dāng)主機(jī)2返回ACK報文段時,表示它已經(jīng)知道主機(jī)1沒有數(shù)據(jù)發(fā)送了,但是主機(jī)2還是可以發(fā)送數(shù)據(jù)到主機(jī)1的;當(dāng)主機(jī)2也發(fā)送了FIN報文段時,這個時候就表示主機(jī)2也沒有數(shù)據(jù)要發(fā)送了,就會告訴主機(jī)1,我也沒有數(shù)據(jù)要發(fā)送了,之后彼此就會愉快的中斷這次TCP連接。
FIN_WAIT_1: 這個狀態(tài)要好好解釋一下,其實FIN_WAIT_1和FIN_WAIT_2狀態(tài)的真正含義都是表示等待對方的FIN報文。而這兩種狀態(tài)的區(qū)別是:FIN_WAIT_1狀態(tài)實際上是當(dāng)SOCKET在ESTABLISHED狀態(tài)時,它想主動關(guān)閉連接,向?qū)Ψ桨l(fā)送了FIN報文,此時該SOCKET即進(jìn)入到FIN_WAIT_1狀態(tài)。而當(dāng)對方回應(yīng)ACK報文后,則進(jìn)入到FIN_WAIT_2狀態(tài),當(dāng)然在實際的正常情況下,無論對方何種情況下,都應(yīng)該馬上回應(yīng)ACK報文,所以FIN_WAIT_1狀態(tài)一般是比較難見到的,而FIN_WAIT_2狀態(tài)還有時常常可以用netstat看到。(主動方) FIN_WAIT_2:上面已經(jīng)詳細(xì)解釋了這種狀態(tài),實際上FIN_WAIT_2狀態(tài)下的SOCKET,表示半連接,也即有一方要求close連接,但另外還告訴對方,我暫時還有點數(shù)據(jù)需要傳送給你(ACK信息),稍后再關(guān)閉連接。(主動方)
CLOSE_WAIT:這種狀態(tài)的含義其實是表示在等待關(guān)閉。怎么理解呢?當(dāng)對方close一個SOCKET后發(fā)送FIN報文給自己,你系統(tǒng)毫無疑問地會回應(yīng)一個ACK報文給對方,此時則進(jìn)入到CLOSE_WAIT狀態(tài)。接下來呢,實際上你真正需要考慮的事情是察看你是否還有數(shù)據(jù)發(fā)送給對方,如果沒有的話,那么你也就可以 close這個SOCKET,發(fā)送FIN報文給對方,也即關(guān)閉連接。所以你在CLOSE_WAIT狀態(tài)下,需要完成的事情是等待你去關(guān)閉連接。(被動方)
LAST_ACK: 這個狀態(tài)還是比較容易好理解的,它是被動關(guān)閉一方在發(fā)送FIN報文后,最后等待對方的ACK報文。當(dāng)收到ACK報文后,也即可以進(jìn)入到CLOSED可用狀態(tài)了。(被動方)
TIME_WAIT: 表示收到了對方的FIN報文,并發(fā)送出了ACK報文,就等2MSL后即可回到CLOSED可用狀態(tài)了。如果FINWAIT1狀態(tài)下,收到了對方同時帶FIN標(biāo)志和ACK標(biāo)志的報文時,可以直接進(jìn)入到TIME_WAIT狀態(tài),而無須經(jīng)過FIN_WAIT_2狀態(tài)。(主動方)
CLOSED: 表示連接中斷。
例:
????1.OSI 模型中物理層,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,傳輸層中的數(shù)據(jù)傳輸單位分別是什么?其他三個層的名稱是什么?
????答:物理層單位為比特bit,數(shù)據(jù)鏈路層單位為幀,網(wǎng)絡(luò)層單位為包,傳輸層單位為段,其他三個層分別是會話層,表示層,應(yīng)用層。
????2.簡述為什么說 TCP 是可靠連接而 UDP 是不可靠連接?
????答:TCP是面向連接的協(xié)議(三次握手,四次揮手),全雙工,半關(guān)閉,將數(shù)據(jù)打成段,排序,錯誤檢查,確認(rèn)機(jī)制,數(shù)據(jù)恢復(fù),重傳,流量控制,滑動窗口,擁塞控制,慢啟動和擁塞避免算法。
TCP 超時重傳
異常網(wǎng)絡(luò)狀況下(開始出現(xiàn)超時或丟包),TCP 控制數(shù)據(jù)傳輸以保證其承諾的可靠服務(wù)
TCP 服務(wù)必須能夠重傳超時時間內(nèi)未收到確認(rèn)的TCP 報文段。為此,TCP 模塊為每個TCP 報文段都維護(hù)一個重傳定時器,該定時器在TCP 報文段第一次被發(fā)送時啟動。如果超時時間內(nèi)未收到接收方的應(yīng)答,TCP 模塊將重傳TCP 報文段并重置定時器。至于下次重傳的超時時間如何選擇,以及最多執(zhí)行多少次重傳,就是TCP 的重傳策略
與TCP 超時重傳相關(guān)的兩個內(nèi)核參數(shù):
/proc/sys/net/ipv4/tcp_retries1 ,指定在底層IP 接管之前TCP最少執(zhí)行的重傳次數(shù),默認(rèn)值是3
????/proc/sys/net/ipv4/tcp_retries2 ,指定連接放棄前TCP最多可以執(zhí)行的重傳次數(shù),默認(rèn)值15 (一般對應(yīng)13 ~30min)
擁塞控制
TCP 為提高網(wǎng)絡(luò)利用率,降低丟包率,并保證網(wǎng)絡(luò)資源對每條數(shù)據(jù)流的公平性。即所謂的擁塞控制
TCP 擁塞控制的標(biāo)準(zhǔn)文檔是RFC 5681 ,其中詳細(xì)介紹了擁塞控制的四個部分:慢啟動(slow start )、擁塞避免(congestion avoidance )、快速重傳(fast retransmit )和快速恢復(fù)(fast recovery )。擁塞控制算法在Linux下有多種實現(xiàn),比如reno 算法、vegas 算法和cubic 算法等。它們或者部分或者全部實現(xiàn)了上述四個部分
當(dāng)前所使用的擁塞控制算法
/proc/sys/net/ipv4/tcp_congestion_control
映射第四層到應(yīng)用程序
UDP特性
工作在傳輸層
提供不可靠的網(wǎng)絡(luò)訪問
非面向連接協(xié)議
有限的錯誤檢查
傳輸性能高
ARP表
[root@centos7 ~]#ip neigh 192.168.74.1 dev eth0 lladdr 00:50:56:c0:00:01 REACHABLE 192.168.74.254 dev eth0 lladdr 00:50:56:e3:29:de STALE 192.168.199.1 dev eth1 lladdr d4:ee:07:52:3a:46 STALE 192.168.199.207 dev eth1 lladdr ac:c1:ee:7b:a3:5b STALE [root@centos7 ~]#arp -n Address HWtype HWaddress Flags Mask Iface 192.168.74.1 ether 00:50:56:c0:00:01 C eth0 192.168.74.254 ether 00:50:56:e3:29:de C eth0 192.168.199.1 ether d4:ee:07:52:3a:46 C eth1 192.168.199.207 ether ac:c1:ee:7b:a3:5b C eth1
Internet層
Internet Protocol (IP) 因特網(wǎng)協(xié)議(IP)
Internet Control Message 因特網(wǎng)控制消息
Protocol (ICMP) 協(xié)議(ICMP)
Address Resolution 地址解析
Protocol (ARP) 協(xié)議(ARP)
Reverse Address 反向地址
Resolution Protocol (RARP) 解析協(xié)議(RARP)
Internet協(xié)議特征????
????運行于OSI網(wǎng)絡(luò)層
????面向無連接的協(xié)議
????獨立處理數(shù)據(jù)包
????分層編址
????盡力而為傳輸
????無數(shù)據(jù)恢復(fù)功能
IP PDU 報頭
版本: 占4位,指 IP 協(xié)議的版本目前的IP 協(xié)議版本號為4
首部長度: 占4 位, 可表示的最大數(shù)值是15個單位,一個單位為4字節(jié),因此IP 的首部長度的最大值是60 字節(jié)
區(qū)分服務(wù): 占8 位, 用來獲得更好的服務(wù), 在舊標(biāo)準(zhǔn)中叫做服務(wù)類型,但實際上一直未被使用過. 后改名為區(qū)分服務(wù). 只有在使用區(qū)分服務(wù)(DiffServ) 時, 這個字段才起作用. 一般的情況下都不使用
總長度: 占16 位, 指首部和數(shù)據(jù)之和的長度, 單位為字節(jié), 因此數(shù)據(jù)報為的最大長度為 65535 ?字節(jié).總長度必須不超過最大傳送單元MTU
標(biāo)識: 占16 位, 它是一個計數(shù)器, 通常,每發(fā)送一個報文,改值會加1,也用于數(shù)據(jù)包分片,在同一個包的若干分片中,該值是相同的
標(biāo)志(flag): 占3 位, 目前只有前兩位有意義
MF :標(biāo)志字段的最低位是MF(More Fragment),MF=1表示后面還有分片。MF=0表示最后一個分片
DF :標(biāo)志字段中間的一位是DF(Don’t Fragment)當(dāng),只有當(dāng)DF=0時才允許分片片偏移:?占12?位,?指較長的分組在分片后某片在原分組中的相對位置.?片偏移以8?個字節(jié)為偏移單位
???????生存時間: 占8位, 記為TTL (Time To Live) 數(shù)據(jù)報在網(wǎng)絡(luò)中可通過的路由器數(shù)的最大值,TTL 字段是由發(fā)送端初始設(shè)置一個8 bit字段. 推薦的初始值由分配數(shù)字RFC指定, 當(dāng)前值為64.發(fā)送ICMP把回顯應(yīng)答時經(jīng)常把TTL值設(shè)為最大值255
???????協(xié)議: 占8 位, 指出此數(shù)據(jù)報攜帶的數(shù)據(jù)使用何種協(xié)議以便目的主機(jī)的IP 層將數(shù)據(jù)部分上交給哪個處理過程, 1表示為 ICMP協(xié)議, 2表示為IGMP協(xié)議, 6表示為TCP協(xié)議, 17表示為UDP協(xié)議
???????首部檢驗和: 占16 位, 只檢驗數(shù)據(jù)報的首部不檢驗數(shù)據(jù)部分.這里不采用 CRC 檢驗碼而采用簡單的計算方法
???????源地址和目的地址:都各占4字節(jié), 分別記錄源地址和目的地址
IP PDU報頭示例
片偏移以8個字節(jié)為偏移單位