網絡層:IP(RIP、OSPF、BGP)、ICMP、IGMP、ARP
傳輸層:TCP、UDP
應用層:http、https、ftp、SMTP、POP3、RDP
一、傳輸層概述
1. 傳輸層兩個協議應用場景
TCP:分段、編號、流量控制、建立會話、netstat -n
UDP:一個數據包就能完成數據通信、不建立會話、多播
-
TCP(Transmission Control Protocol)傳輸控制協議
應用場景:需要將要傳輸的文件分段傳輸時;就需要TCP協議來建立會話實現可靠傳輸;同時也有流量控制功能。(例如QQ傳文件)
查看會話 netstat -n
查看建立會話的進程 netstat -nb這種邏輯通信信道就相當於一條全雙工的可靠信道
-
UDP(User Data Protocol)用戶數據報協議
應用場景:一個數據包就能完成數據通信;不需要建立會話和流量控制;多播/廣播;是一種不可靠傳輸。(例如QQ聊天,屏幕廣播)
TCP 傳送的數據單位協議是 TCP 報文段(segment)
UDP 傳送的數據單位協議是 UDP 報文或用戶數據報。
2. 傳輸層和應用層之間的關系
TCP和UDP協議和不同的端口即可對應一個應用層的協議
http = TCP+80
https = TCP+443
ftp = TCP+21
SMTP = TCP+25
POP3 = TCP+110
RDP = TCP + 3389、遠程桌面服務
共享文件夾 = TCP + 445
SQL = TCP + 1433
DNS = UDP+53 or TCP+53
3. 應用層協議和服務之間的關系
服務運行后在TCP或UDP的某個端口偵聽客戶端的請求
ip地址來定位計算機,用端口來定位服務
查看自己計算機偵聽的端口
netstat -an
4. 運輸層協議和網絡層協議的主要區別
5. 運輸層的主要功能
-
運輸層為應用進程之間提供端到端的邏輯通信(但網絡層是為主機之間提供邏輯通信)。
-
運輸層還要對收到的報文進行差錯檢測。
-
運輸層需要有兩種不同的運輸協議,即面向連接的 TCP 和無連接的 UDP。
6. TCP/IP 體系中的運輸層協議
7. TCP、IP篩選實現服務器安全
TCP/IP篩選自win7后納入防火牆了 ,點擊“入站規則”或“ 出站規則” ,然后點擊“新建規則” ,選擇“端口”,並點擊“下一步” ,這里就可以選擇協議類型TCP或UDP,以及需要篩選的端口,設置完成后,點擊“下一步”。
值得注意:
- 更改端口增加服務器安全
- Windows防火牆不能防控灰鴿子木馬程序
- IPSec嚴格控制網絡流量
二、用戶數據報協議 UDP
- UDP 只在 IP 的數據報服務之上增加了很少一點的功能,即端口的功能和差錯檢測的功能。
- 雖然 UDP 用戶數據報只能提供不可靠的交付,但 UDP 在某些方面有其特殊的優點。
1. UDP 的主要特點
- UDP 是無連接的,即發送數據之前不需要建立連接。
- UDP 使用盡最大努力交付,即不保證可靠交付,同時也不使用擁塞控制。
- UDP 是面向報文的。UDP 沒有擁塞控制,很適合多媒體通信的要求。
- UDP 支持一對一、一對多、多對一和多對多的交互通信。
- UDP 的首部開銷小,只有 8 個字節。
2. UDP的首部格式
三、傳輸控制協議 TCP 概述
1. TCP協議的特點
- TCP 是面向連接的運輸層協議。
- 每一條 TCP 連接只能有兩個端點(endpoint),每一條 TCP 連接只能是點對點的(一對一)。
- TCP 提供可靠交付的服務。
- TCP 提供全雙工通信。
- 面向字節流,如下:
2. TCP的連接
- TCP 把連接作為最基本的抽象。
- 每一條 TCP 連接有兩個端點。
- TCP 連接的端點不是主機,不是主機的IP 地址,不是應用進程,也不是運輸層的協議端口。TCP 連接的端點叫做套接字(socket)或插口。
- 端口號拼接到(contatenated with) IP 地址即構成了套接字。
四、可靠傳輸的工作原理
1. 停止等待協議
- 在發送完一個分組后,必須暫時保留已發送的分組的副本。
- 分組和確認分組都必須進行編號。
- 超時計時器的重傳時間應當比數據在分組傳輸的平均往返時間更長一些
2. 可靠通信的實現
- 使用上述的確認和重傳機制,我們就可以在不可靠的傳輸網絡上實現可靠的通信。
- 這種可靠傳輸協議常稱為自動重傳請求ARQ (Automatic Repeat reQuest)。
- ARQ 表明重傳的請求是自動進行的。接收方不需要請求發送方重傳某個出錯的分組 。
3. 信道利用率
停止等待協議的優點是簡單,但缺點是信道利用率太低
4. 提供信道的利用率:流水線傳輸
5. 連續 ARQ 協議
流水線傳輸如何可靠?使用滑動窗口技術實現可靠傳輸
6. 累積確認
- 接收方一般采用累積確認的方式。即不必對收到的分組逐個發送確認,而是對按序到達的最后一個分組發送確認,這樣就表示:到這個分組為止的所有分組都已正確收到了。
- 累積確認有的優點是:容易實現,即使確認丟失也不必重傳。缺點是:不能向發送方反映出接收方已經正確收到的所有分組的信息。
7. Go-back-N(回退 N)
- 如果發送方發送了前 5 個分組,而中間的第 3 個分組丟失了。這時接收方只能對前兩個分組發出確認。發送方無法知道后面三個分組的下落,而只好把后面的三個分組都再重傳一次。
- 這就叫做 Go-back-N(回退 N),表示需要再退回來重傳已發送過的 N 個分組。
- 可見當通信線路質量不好時,連續 ARQ 協議會帶來負面的影響。
8. TCP 可靠通信的具體實現
- TCP 連接的每一端都必須設有兩個窗口——一個發送窗口和一個接收窗口。
- TCP 的可靠傳輸機制用字節的序號進行控制。TCP 所有的確認都是基於序號而不是基於報文段。
- TCP 兩端的四個窗口經常處於動態變化之中。
- TCP連接的往返時間 RTT 也不是固定不變的。需要使用特定的算法估算較為合理的重傳時間。
五、TCP 報文段的首部格式
- 源端口和目的端口字段——各占 2 字節。端口是運輸層與應用層的服務接口。運輸層的復用和分用功能都要通過端口才能實現。
- 序號字段——占 4 字節。TCP 連接中傳送的數據流中的每一個字節都編上一個序號。序號字段的值則指的是本報文段所發送的數據的第一個字節的序號。
- 確認號字段——占 4 字節,是期望收到對方的下一個報文段的數據的第一個字節的序號。
- 數據偏移(即首部長度)——占 4 位,它指出 TCP 報文段的數據起始處距離 TCP 報文段的起始處有多遠。“數據偏移”的單位是 32 位字(以 4 字節為計算單位)。
- 保留字段——占 6 位,保留為今后使用,但目前應置為 0
- 緊急 URG —— 當 URG = 1 時,表明緊急指針字段有效。它告訴系統此報文段中有緊急數據,應盡快傳送(相當於高優先級的數據)
- 確認 ACK —— 只有當 ACK = 1 時確認號字段才有效。當 ACK = 0 時,確認號無效
- 推送 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的報文段,就盡快地交付接收應用進程,而不再等到整個緩存都填滿了后再向上交付。
- 復位 RST (ReSeT) —— 當 RST = 1 時,表明 TCP 連接中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接。
- 同步 SYN —— 同步 SYN = 1 表示這是一個連接請求或連接接受報文
- 終止 FIN (FINis) —— 用來釋放一個連接。FIN = 1 表明此報文段的發送端的數據已發送完畢,並要求釋放運輸連接
- 窗口字段 —— 占 2 字節,用來讓對方設置發送窗口的依據,單位為字節。
- 檢驗和 —— 占 2 字節。檢驗和字段檢驗的范圍包括首部和數據這兩部分。在計算檢驗和時,要在 TCP 報文段的前面加上 12 字節的偽首部。
- 緊急指針字段 —— 占 16 位,指出在本報文段中緊急數據共有多少個字節(緊急數據放在本報文段數據的最前面)。
1. 抓包分析
- ARP,建立可靠傳輸
- UDP(DNS同時占用UDP和TCP的53端口),域名解析
- TCP,識別網關MAC地址
模擬建立會話到傳輸數據到確認的過程如下:
六、TCP 可靠傳輸的實現
1. 以字節為單位的滑動窗口技術
發送緩存與接收緩存的作用
發送緩存用來暫時存放:
1. 發送應用程序傳送給發送方 TCP 准備發送的數據;
2. TCP 已發送出但尚未收到確認的數據。
接收緩存用來暫時存放:
1. 按序到達的、但尚未被接收應用程序讀取的數據;
2. 不按序到達的數據。
需要注意:
- A 的發送窗口並不總是和 B 的接收窗口一樣大(因為有一定的時間滯后)。
- TCP 標准沒有規定對不按序到達的數據應如何處理。通常是先臨時存放在接收窗口中,等到字節流中所缺少的字節收到后,再按序交付上層的應用進程。
- TCP 要求接收方必須有累積確認的功能,這樣可以減小傳輸開銷。
2. 超時重傳時間的選擇
3. 選擇確認 SACK (Selective ACK)
- 接收方收到了和前面的字節流不連續的兩個字節塊。
- 如果這些字節的序號都在接收窗口之內,那么接收方就先收下這些數據,但要把這些信息准確地告訴發送方,使發送方不要再重復發送這些已收到的數據。
七、TCP 的流量控制
1. 利用滑動窗口實現流量控制
- 一般說來,我們總是希望數據傳輸得更快一些。但如果發送方把數據發送得過快,接收方就可能來不及接收,這就會造成數據的丟失。
- 流量控制(flow control)就是讓發送方的發送速率不要太快,既要讓接收方來得及接收,也不要使網絡發生擁塞。
- 利用滑動窗口機制可以很方便地在 TCP 連接上實現流量控制。
持續計時器 (persistence timer)。
- TCP 為每一個連接設有一個持續計時器。
- 只要 TCP 連接的一方收到對方的零窗口通知,就啟動持續計時器。
- 若持續計時器設置的時間到期,就發送一個零窗口探測報文段(僅攜帶 1 字節的數據),而對方就在確認這個探測報文段時給出了現在的窗口值。
- 若窗口仍然是零,則收到這個報文段的一方就重新設置持續計時器。
- 若窗口不是零,則死鎖的僵局就可以打破了
2. 必須考慮傳輸效率
可以用不同的機制來控制 TCP 報文段的發送時機:
- 第一種機制是 TCP 維持一個變量,它等於最大報文段長度 MSS。只要緩存中存放的數據達到 MSS 字節時,就組裝成一個 TCP 報文段發送出去。
- 第二種機制是由發送方的應用進程指明要求發送報文段,即 TCP 支持的推送(push)操作。
- 第三種機制是發送方的一個計時器期限到了,這時就把當前已有的緩存數據裝入報文段(但長度不能超過 MSS)發送出去。
八、TCP的擁塞控制
1. 擁塞控制的一般原理
在某段時間,若對網絡中某資源的需求超過了該資源所能提供的可用部分,網絡的性能就要變壞——產生擁塞(congestion)。
2. 擁塞控制方法:慢開始和擁塞避免
- 在主機剛剛開始發送報文段時可先設置擁塞窗口 cwnd = 1,即設置為一個最大報文段 MSS 的數值。
- 在每收到一個對新的報文段的確認后,將擁塞窗口加 1,即增加一個 MSS 的數值。
- 用這樣的方法逐步增大發送端的擁塞窗口 cwnd,可以使分組注入到網絡的速率更加合理。
3. 擁塞控制方法:快重傳和快恢復
九、TCP的傳輸連接管理(重點)
運輸連接就有三個階段,即:連接建立、數據傳送和連接釋放。
TCP 連接的建立都是采用客戶服務器方式。
主動發起連接建立的應用進程叫做客戶(client)。
被動等待連接建立的應用進程叫做服務器(server)。
1. TCP 的連接建立
用三次握手建立 TCP 連接
- A 的 TCP 向 B 發出連接請求報文段,其首部中的同步位 SYN = 1,並選擇序號 seq = x,表明傳送數據時的第一個數據字節的序號是 x。
- B 的 TCP 收到連接請求報文段后,如同意,則發回確認。B 在確認報文段中應使 SYN = 1,使 ACK = 1 ,其確認號ack = x + 1,自己選擇的序號 seq = y。
- A 收到此報文段后向 B 給出確認,其 ACK = 1, 確認號 ack = y + 1。A 的 TCP 通知上層應用進程,連接已經建立。
B 的 TCP 收到主機 A 的確認后,也通知其上層應用進程:TCP 連接已經建立。
例子如下:
用三次握手建立 TCP 連接的各狀態 :
2. TCP 的連接釋放
四次揮手
A 必須等待 2MSL 的時間
-
為了保證 A 發送的最后一個 ACK 報文段能夠到達 B。
-
防止 “已失效的連接請求報文段”出現在本連接中。A 在發送完最后一個 ACK 報文段后,再經過時間 2MSL,就可以使本連接持續的時間內所產生的所有報文段,都從網絡中消失。這樣就可以使下一個新的連接中不會出現這種舊的連接請求報文段。
為什么連接的時候是三次握手,關閉的時候卻是四次握手?
答:因為當Server端收到Client端的SYN連接請求報文后,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當Server端收到FIN報文時,很可能並不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,"你發的FIN報文我收到了"。只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送。故需要四步握手。
這個圖是更加的直觀
十、常見攻擊方式
1. SYN攻擊原理
何為syn攻擊?
首先在TCP/IP中,tcp協議提供可靠的socket連接服務,通過3次握手建立可靠連接。
syn其實就是在進行到第二階段結束后,此時服務器不是已經發送了syn消息和synack消息了嗎,這服務器真是個老好人啊,由於tcp3次握手機制,它得等着終端那家伙給它反饋synack消息啊,所以吧,服務器得分配一定的資源等着終端那家伙啊。可是呢,這終端比較壞,不但不回復synack包給服務器,反倒搞一大堆第一階段的syn請求消息。這下服務器可不好過了啊,得騰出好多好多資源給終端留着啊,最后可能就把自己搞死了。這就是所謂的syn攻擊啊,又稱為ddos攻擊。
如圖所示:利用軟件隨機生成IP地址訪問服務器
2. LAND攻擊
LAND攻擊利用了TCP連接建立的三次握手過程,通過向一個目標計算機發送一個TCP SYN報文(連接 建立請求報文)而完成對目標計算機的攻擊。與正常的TCP SYN報文不同的是,LAND攻擊報文的源IP地址 和目的IP地址是相同的,都是目標計算機的IP地址。這樣目標計算機接收到這個SYN報文后,就會向該報文 的源地址發送一個ACK報文,並建立一個TCP連接控制結構(TCB),而該報文的源地址就是自己,因此, 這個ACK報文就發給了自己。這樣如果攻擊者發送了足夠多的SYN報文,則目標計算機的TCB可能會耗盡, 最終不能正常服務。這也是一種DOS攻擊。
如圖所示:利用軟件進行,源地址IP和目的IP地址相同