不少不一樣的廠家生產各類型號的計算機,它們運行徹底不一樣的操做系統,但TCP/IP協議族容許它們互相進行通訊。這一點很讓人感到吃驚,由於它的做用已遠遠超出了起初的設想。它成爲被稱做「全球互聯網」或「因特網(Internet)」的基礎html
TCP/IP一般被認爲分四層安全
每一層負責不一樣的功能:服務器
TCP和UDP是兩種最爲著名的運輸層協議,兩者都使用ip做爲網絡層協議。TCP優勢,可靠穩定,因爲它是在創建鏈接的狀況下以及使用各類重傳、校驗、序號標識、確認應答等各類機制因此保證了可靠穩定的傳輸,固然因爲它有這些過程因此會有佔用系統資源高、傳輸效率低、實現服務器複雜缺點。而UDP正好相反網絡
IP是網絡層上的主要協議,同時被TCP和UDP使用,是一個不可靠服務,ip數據報傳輸過程是無鏈接的,每次傳輸數據報時是不保證成功到達目的地的,若是再傳輸過程當中發生了錯誤,那麼採起的處理的方式是直接丟包並用ICMP來與其餘主機或路由器交換錯誤報文和其餘重要信息 你們都知道TCP屬於可靠傳輸tcp
ICMP是IP協議的附屬協議。IP層用它來與其餘主機或路由器交換錯誤報文和其餘重要信息,Ping工具使用了ICMP協議工具
IGMP是Internet組管理協議。它用來把一個UDP數據報多播到多個主機。大數據
ARP(地址解析協議)和RARP(逆地址解析協議)是某些網絡接口(如以太網和令牌環網)使用的特殊協議,用來轉換IP層和網絡接口層使用的地址。編碼
IP是TCP/IP協議族中最爲核心的協議。全部的TCP、UDP、ICMP及IGMP數據都以IP數據報格式傳輸。IP層提供不可靠、無鏈接的數據報傳送服務操作系統
IPV4共分五類翻譯
公有IP地址:也叫全局地址,是指合法的IP地址,它是由NIC(網絡信息中心管理機構就是互聯網絡信息中心(Internet Network Information Centre))或者ISP(網絡服務提供商)分配的地址,對外表明一個或多個內部局部地址,是全球統一的可尋 址的地址。
私有IP地址:也叫內部地址,屬於非註冊地址,專門爲組織機構內部使用。因特網分配編號委員會(IANA)保留了3塊IP地址作爲私有IP地址:
10.0.0.0 ——— 10.255.255.255
172.16.0.0——— 172.16.255.255
192.168.0.0———192.168.255.255
從圖能夠看出IP號由網絡號和主機號組成,而A、B這兩類在同一個網段下的主機號分配太多,這個不太符合實際生活。因此有了子網號
主要目的爲了減小一個網段下的主機號分配過多問題
經過子網掩碼肯定IP是否屬於一個網段,是否能夠直接通訊
若是目的主機與源主機直接相連(如點對點鏈路)或都在一個共享網絡上(以太網或令牌環網),那麼IP數據報就直接送到目的主機上。不然,主機把數據報發往一默認的路由器上,由路由器來轉發該數據報。
IP層在內存中有一個路由表。當收到一份數據報並進行發送時,它都要對該表搜索一次。當數據報來自某個網絡接口時,IP首先檢查目的IP地址是否爲本機的IP地址。若是確實是這樣,數據報就被送到由IP首部協議字段所指定的協議模塊進行處理。若是數據報的目的不是這些地址,那麼(1)若是IP層被設置爲路由器的功能,那麼就對數據報進行轉發(也就是說,像下面對待發出的數據報同樣處理);不然(2)數據報被丟棄。
NAT英文全稱是「Network Address Translation」, 是一種把內部私有網絡地址(IP地址)翻譯成合法網絡IP地址的技術, NAT在必定程度上,可以有效的緩解公網地址不足的問題。但不能根本解決IP不足
TCP是一種面向鏈接的傳輸協議,面向鏈接意味着兩個使用TCP的應用(一般是一個客戶和一個服務器)在彼此交換數據以前必須先創建一個TCP鏈接。這一過程與打電話很類似,先撥號振鈴,等待對方摘機說「喂」,而後才說明是誰。
TCP是一種安全可靠的傳輸協議,經過下列方式提供可靠性
不計任選字段,它一般是20個字節
那麼Data層最大數據是多少字節? MTU,最大傳輸單元,和鏈路層協議有着密切的關係。每一個以太網幀都有最小的大小64Bytes最大不能超過1518Bytes,這個限制之外的認爲是錯誤的幀。
TCP 包的大小就應該是 1518 - 以太網頭尾(18) - IP頭(20) - TCP頭(20) = 1460 (Bytes)
鏈接,三次握手
斷開,四次握手
鏈接是雙通道的,斷開每一個通道都須要兩次握手
此時客戶端向服務端通道斷開,不能再發送數據,而服務器端還能給客戶端發送數據
客戶端鏈接服務器未響應時,會有三次重鏈接操做,每次重鏈接時間會增加。三次未成功最後放棄鏈接
TCP所使用的是滑動窗口協議的一種流量控制方法,容許發送方在中止並等待確認前能夠連續發送多個分組。因爲發送方沒必要每發一個分組就停下來等待確認,所以該協議能夠加速數據的傳輸。 滑動窗口:接收方一次最多能夠接受數據的大小
保活功能主要是爲服務器應用程序提供的。服務器應用程序但願知道客戶主機是否崩潰,從而能夠表明客戶使用資源。
保活優勢:
非正常斷開, 服務器並不能檢測到,經過保活機制能夠檢查到廢棄的鏈接,從而釋放服務器資源
保活缺點:
應用層經過心跳機制和TCP保活機制對比:
應用層:
TCP保活:
TCP是一種可靠的面向鏈接的傳輸控制協議,若是數據有問題會經過ARQ重傳數據。這就會引入一個問題:
(1)如何確認接收方收到分組和分組的正確性?
接收方經過返回一個ACK值確認已經收到正確的分組
如此會引入如下三個問題:
(1)發送方應該對一個ACK等待多長時間
接收方在收到數據後,並不會當即回覆ACK,而是延遲必定時間。通常ACK延遲發送的時間爲200ms,但這個200ms並不是收到數據後須要延遲的時間。系統有一個固定的定時器每隔200ms會來檢查是否須要發送ACK包。這樣作有兩個目的。 一、這樣作的目的是ACK是能夠合併的,也就是指若是連續收到兩個TCP包,並不必定須要ACK兩次,只要回覆最終的ACK就能夠了,能夠下降網絡流量。 二、若是接收方有數據要發送,那麼就會在發送數據的TCP數據包裏,帶上ACK信息。這樣作,能夠避免大量的ACK以一個單獨的TCP包發送,減小了網絡流量。
(2)若是ack丟了怎麼辦
(3)若是分組被接收到了,有差錯
問題二若是丟了就再次發送原分組,固然這會致使接收方接受到多個拷貝,解決辦法是經過序列號來處理
問題三能夠經過編碼技術檢查數據完整性,或者不返回ack等待重傳完整的分組
這種運行方式效率很低,因此出現了滑動窗口的方案。
TCP 一般一個TCP頭部爲20字節,即佔160位,帶選項時爲60字節。這個值是由《頭部長度》位控制,以32位字爲單位,《頭部長度》佔4位那麼最大值爲15,因此
15*4=60(最大)5*4=20(最小)
源端口、目的端口、序列號、確認號、頭部長度、SYN、FIN、ACK、窗口大小、TCP校驗和、選項
當創建一個TCP鏈接時,客戶端和服務器都會隨機一個初始序列號值,以後客戶端或服務器每發送一個數據流,會將這個數據流拆分紅若干個分組,稱爲一個組包。接收方收到一個分組,會對序列號+1並做爲ACK延時(爲了與SACK選項區分)返回給發送方,表示已成功接受分組,並指望發送下一個以當前序列號開始的分組
選項:
SACK: 選擇確認選項,出現空洞或接受到亂序數據發送給發送方
MSS:最大段選項
13.7 tcp服務器選項