對網絡上的資源進行了總結,參考會在文尾給出
----------------------------------------------------------------------------
TCP/IP協議組,分爲四個層次:網絡接口層、網絡層、傳輸層和應用層。
網絡層:IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。
傳輸層:TCP協議與UDP協議。
應用層:HTTP,FTP、TELNET、SMTP、DNS等協議。
HTTP全稱是HyperText Transfer Protocal,即:超文本傳輸協議,HTTP連接最顯著的特點是客戶端發送的每次請求都需要服務器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱爲“一次連接”。
HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協議,它是一個安全通信通道。HTTPS是HTTP over SSL/TLS,HTTP是應用層協議,TCP是傳輸層協議,在應用層和傳輸層之間,增加了一個安全套接層SSL/TLS:SSL (Secure Socket Layer,安全套接字層),TLS (Transport Layer Security,傳輸層安全協議)。可以用來 1,內容加密 建立一個信息安全通道,來保證數據傳輸的安全;2,身份認證 確認網站的真實性;3,數據完整性 防止內容被第三方冒充或者篡改。
Https和Http的區別
- https協議需要到CA申請證書。
- http是超文本傳輸協議,信息是明文傳輸;https 則是具有安全性的ssl加密傳輸協議。
- http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
- http默認使用80端口,https默認使用443端口
IP協議:IP 是 TCP/IP 協議族中最核心的協議,所有的 TCP、 UDP、 ICMP、 IGMP 數據都以 IP數據報的格式傳輸。 IP 僅提供盡力而爲的傳輸服務,如果發生某種錯誤,IP 會丟失該數據,然後發送 ICMP 消息給信源端。另外,IP 數據報可以不按發送順序接受。
---------------------------------------------------------------------------------------------
UDP:用戶數據報協議(User Datagram Protocol)
UDP爲應用程序提供了一種無需建立連接就可以發送封裝的 IP 數據報的方法。UDP是一種保留消息邊界的簡單的面向數據報的協議。UDP不提供差錯糾正、隊列管理、重複消除、流量控制和擁塞控制,但提供差錯檢測(包含我們在傳輸層中碰到的第一個真實的端到端(end-to-end)校驗和)。這種協議自身提供最小功能,因此使用它的應用程序要做許多關於數據報如何發送和處理的控制工作。想要保證數據被可靠傳遞或正確排序,應用程序必須自己實現這些保護功能。一般來說,每個被應用程序請求的UDP輸出操作只產生一個UDP數據報,從而發送一個IP數據報。而對於面向數據流的傳輸層協議(例如TCP),應用程序寫入的全部數據與真正在單個IP數據報裏傳送的或接收方接收的內容可能沒有聯繫。
主要特點:
1)UDP 是無連接的,即發送數據之前不需要建立連接,因此減少了開銷和發送數據之前的時延。
2)UDP 使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的連接狀態表。
3)UDP 是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部後就向下交付IP層。UDP對應用層交下來的報文,既不合並,也不拆分,而是保留這些報文的邊界。因此,應用程序必須選擇合適大小的報文。
4)UDP 沒有擁塞控制,因此網絡出現的擁塞不會使源主機的發送速率降低。很多的實時應用(如IP電話、實時視頻會議等)要去源主機以恆定的速率發送數據,並且允許在網絡發生擁塞時丟失一些數據,但卻不允許數據有太多的時延。UDP正好符合這種要求。
5)UDP 支持一對一、一對多、多對一和多對多的交互通信。
6)UDP 的首部開銷小,只有8個字節,比TCP的20個字節的首部要短。
應用:
- 文件傳送(TFTP)
- 路由選擇協議(RIP)
- IP 地址配置(BOOTP,DHTP)
- 網絡管理(SNMP)
- 遠程文件服務(NFS)
- 名字轉換(DNS)
- IP 電話、流式多媒體通信
- 遊戲、視頻、直播
雖然某些實時應用需要使用沒有擁塞控制的UDP,但當很多的源主機同時都向網絡發送高速率的實時視頻流時,網絡就有可能發生擁塞,結果大家都無法正常接收。因此,不使用擁塞控制功能的UDP有可能會引起網絡產生嚴重的擁塞問題。
還有一些使用UDP的實時應用,需要對UDP的不可靠的傳輸進行適當的改進,以減少數據的丟失。在這種情況下,應用進程本身可以在不影響應用的實時性的前提下,增加些提高可靠性的措施,如採用前向糾錯或重傳已丟失的報文。
數據的分裝
用戶數據是打包在 UDP 協議中、 UDP 協議又是基於 IP 協議之上的,IP 協議又是走MAC 層發送的,即從包含關係來說:MAC 幀中的數據段爲 IP 數據報,IP 報文中的數據段爲 UDP 報文,UDP 報文中的數據段爲用戶希望傳輸的數據內容,如“hello world!”。下圖爲使用 UDP 協議發送“hello world!”的數據層層打包示意圖:
---------------------------------------------------------------------------------------------
TCP作爲一種面向連接的,可靠的協議,它屬於傳輸層的協議。只有在確認通信對端存在時纔會發送數據,從而可以控制通信流量的浪費。TCP通過檢驗和、序列號、確認應答、重發控制、連接管理以及窗口控制等機制實現可靠性傳輸。
TCP首部格式
源端口、目標端口:發送端和接收端的端口號
序列號:表示數據發送的位置,每發送一次數據,就累加一次該數據字節數的大小,不會從0、1開始,而是在建立連接時由計算機生成的隨機數作爲其初始值,通過SYN包傳給接收端主機。SYN包和FIN包也會作爲一個字節增加對應的序列號。
確認應答號:由接收端發送,指下一次應該收到的數據的序列號。 實際上,它是指已收到確認應答號減一爲止的數據。發送端收到這個確認應答以後可以認爲在這個序號以前的數據都已經被正常接收。因此當前報文段最後一個字節的編號+1即爲確認應答號。
數據偏移:該字段表示TCP所傳輸的數據部分應該從TCP包的哪個位開始計算,當然也可以把它看作TCP首部的長度,單位爲4字節。
窗口大小:用於通知從相同TCP首部的確認應答號所指位置開始能夠接收的數據大小,TCP不允許發送超過此處所示大小的數據。
控制位:
字段 |
含義 |
URG |
緊急指針是否有效。爲1,表示某一位需要被優先處理 |
ACK |
確認應答號是否有效,1爲有效。TCP規定除了最初建立連接時的SYN包之外該位必須設置爲1 |
PSH |
爲1時,表示需要將收到的數據立刻傳給上層應用協議;爲0時,則不需要立即傳而是先進行緩存。 |
RST |
爲1時表示TCP連接中出現異常必須強制斷開連接。 |
SYN |
用於建立連接。SYN爲1表示希望建立連接,並在其序列號的字段進行序列號初始值的設定。 |
FIN |
爲1時,表示今後不會再有數據發送,希望斷開連接。 |
--------------------------------------
三次握手
任意次的握手都是“不可靠”的,握手成功只能說明握手時的通信是正常的,並不能保證握手後的通信是正常的。握手只能保證儘可能的可靠,而不可能保證絕對可靠。
四次揮手
TCP連接是雙向的,在四次揮手中,前兩次揮手用於斷開一個方向的連接,後兩次揮手用於斷開另一方向的連接。
--------------------------------------
相關機制
確認應答機制:當發送端的數據到達接收主機時,接收端主機會返回一 個已收到消息的通知。這個消息叫做確認應答(ACK)。當發送端將數據發出之後會等待對端的確認應答。如果有確認應答,說明數據已經成功到達對端。反之,則數據丟失的可能性很大。在一定時間內沒有等到確認應答,發送端就可以認爲數據已經丟失,並進行重發。當然沒有收到確認應答,不代表數據沒有被接受,可能是應答信號丟失了。發送端沒有收到確認應答信號會重發。
重發超時:指在重發數據之前,等待確認應答到來的那個特定時間間隔。如果超過了這個時間仍未收到確認應答,發送端將進行數據重發。這個時間需要確保“確認應答”可以在這個事件內返回,這個事件會受到數據包途徑的網絡環境的不同而變化。數據也不會被無限、反覆地重發。達到一定重發次數之後,如果仍沒有任何確認應答返回,就會判斷爲網絡或對端主機發生了異常,強制關閉連接。並且通知應用通信異常強行終止。
TCP要求不論處在何種網絡環境下都要提供高性能通信,並且無論網絡擁堵情況發生何種變化,都必須保持這一特性。爲此,它在每次發包時都會計算往返時間(RTT)和偏差(RTT時間波動的值、方差。也叫抖動。) 。將這個往返時間和偏差相加。
MSS(最大消息長度):在建立TCP連接的同時,也可以確定發送數據包的單位。理想的情況是,最大消息長度正好是IP中不會被分片處理的最大數據長度。TCP在傳送大量數據時,是以MSS的大小將數據進行分割發送。進行重發時也是以MSS爲單位。 MSS是在三次握手的時候,在兩端主機之間被計算得出。兩端的主機在發出建立連接的請求時,會在TCP首部中寫入MSS選項,告訴對方自己的接口能夠適應的MSS的大小。
窗口控制:TCP以1個段爲單位,每發一個段進行一次確認應答的處理這樣的傳輸方式有一個缺點。那就是包的往返時間越長通信性能就越低。TCP引入了窗口這個概念,確認應答不再是以每個分段,而是以更大的單位進行確認,轉發時間將會被大幅度的縮短。也就是說,發送端主機,在發送了一個段以後不必要一直等待確認應答,而是繼續發送。窗口大小就是指無需等待確認應答而可以繼續發送數據的最大值。這個機制實現使用大量的緩衝區。收到確認應答的情況下,將窗口滑動到確認應答中的序列號的位置。這樣可以順序地將多個段同時發送提高通信性能。這種機制也被稱爲滑動窗口控制。
TCP提供一種機制可以讓發送端根據接收端的實際接收能力控制發送的數據量。這就是所謂的流控制。它的具體操作是,接收端主機向發送端主機通知自己可以接收數據的大小,於是發送端會發送不超過這個限度的數據。該大小限度就被稱作窗口大小。窗口大小的值就是由接收端主機決定的。 TCP首部中,專門有一個字段用來通知窗口大小。接收主機將自己可以接收的緩衝區大小放入這個字段中通知給發送端。這個字段的值越大,說明網絡的吞吐量越高。
存在窗口控制時,考慮重發機制。先考慮確認應答未能返回的情況。在這種情況下,數據已經到達對端,是不需要再進行重發的,可通過下一次確認應答確認。然而,在沒有使用窗口控制的時候,沒有收到確認應答的數據都會被重發。當報文丟失時,接收端會發送缺失塊的確認應答,即想要接受的序號數據塊。發送端連續三次接受後會進行重發。
--------------------------------------
擁塞控制
有了TCP的窗口控制,收發主機之間即使不再以一個數據段爲單位發送確認應答,也能夠連續發送大量數據包。然而,如果在通信剛開始時就發送大量數據,也可能會引發其他問題。 一般來說,計算機網絡都處在一個共享的環境。因此也有可能會因爲其他主機之間的通信使得網絡擁堵。在網絡出現擁堵時,如果突然發送一個較大量的數據,極有可能會導致整個網絡的癱瘓。 TCP爲了防止該問題的出現,在通信一開始時就會通過一個叫做慢啓動的算法得出的數值,對發送數據量進行控制。
---------------------------------------------------------------------------------------------
socket
傳輸層實現端到端的通信,因此,每一個傳輸層連接有兩個端點。傳輸層連接的端點叫做套接字(socket)。端口號拼接到IP地址就構成了套接字。所謂套接字,實際上是一個通信端點,每個套接字都有一個套接字序號,包括主機的IP地址與一個16位的主機端口號,即形如(主機IP地址:端口號)。套接字可以看成是兩個網絡應用程序進行通信時,各自通信連接中的一個端點。通信時,其中的一個網絡應用程序將要傳輸的一段信息寫入它所在主機的Socket中,該Socket通過網絡接口卡的傳輸介質將這段信息發送給另一臺主機的Socket中,使這段信息能傳送到其他程序中。因此,兩個應用程序之間的數據傳輸要通過套接字來完成。
爲了實現以上的通信過程而建立成來的通信管道,其真實的代表是客戶端和服務器端的一個通信進程,雙方進程通過socket進行通信,而通信的規則採用指定的協議。socket只是一種連接模式,不是協議,socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用接口(API),通過Socket,我們才能使用TCP/IP協議。TCP、UDP是其使用最基本的兩個協議,由於很多協議都是基於這兩種協議,所以用socket可以創建任何協議的連接。
特點:
優
1) 傳輸數據爲字節級,傳輸數據可自定義,數據量小
2)傳輸數據時間短,性能高
3)適合於客戶端和服務器端之間信息實時交互
4)可以加密,數據安全性強
缺
1)需對傳輸的數據進行解析,轉化成應用級的數據
2)對開發人員的開發水平要求高
3)相對於Http協議傳輸,增加了開發量
----------------------------------------------------------------------------
膜拜大佬: