图解TCPIP---第六章---传输层TCPUDP
哈哈哈哈哈哈哈哈
TCPIP識(shí)別一個(gè)進(jìn)行通信的應(yīng)用需要5大要素
- 源IP地址
- 目標(biāo)IP地址
- 源端口
- 目標(biāo)端口
- 協(xié)議號(hào)
0-1023 知名端口號(hào)
1024-49151 這些端口被正式注冊(cè)了 但是可以用于任何通信
49152-65535 操作系統(tǒng)動(dòng)態(tài)分配的端口號(hào)
一些知名端口號(hào)如下
- 20 ftp-data File Transfer [Deafult Data]
- 21 ftp File Transfer [Control]
- 22 ssh
- 23 talent
- 25 smtp Simple Mail Transfer Protocol
- 43 nicname Who Is
- 53 domain Domain Name Server
- 80 http
- 101 hostname NIC Host Name Server
- 443 https
UDP
常被用于以下幾個(gè)方面
- 包總量比較少的通信 DNS SNMP等
- 視頻 音頻等多媒體通信
- 限定于LAN等特定網(wǎng)絡(luò)中的應(yīng)用通信
- 廣播通信(廣播 多播)
TCP
確認(rèn)應(yīng)答 序列號(hào)
TCP通過(guò)檢驗(yàn)和 序列號(hào) 確認(rèn)應(yīng)答 重發(fā)控制 連接管理 窗口控制 等 機(jī)制實(shí)現(xiàn)可靠傳輸
確認(rèn)應(yīng)答ACK acknowledgement
否定確認(rèn)應(yīng)答 NACK negative acknowledgement
-
Q1 發(fā)送端發(fā)送數(shù)據(jù)后會(huì)等待對(duì)端的確認(rèn)應(yīng)答
- 一定時(shí)間未等到確認(rèn)應(yīng)答 發(fā)送端認(rèn)為數(shù)據(jù)已經(jīng)丟失 重發(fā)
- 未收到數(shù)據(jù)也可能是返回的確認(rèn)在中途丟失
- 也有可能是對(duì)端的確認(rèn)延遲到達(dá)
- 發(fā)送端按照機(jī)制重復(fù)即可但是對(duì)接收端可能重復(fù)收到數(shù)據(jù) 簡(jiǎn)直就是災(zāi)難 需要處理這種情況
- 一定時(shí)間未等到確認(rèn)應(yīng)答 發(fā)送端認(rèn)為數(shù)據(jù)已經(jīng)丟失 重發(fā)
-
A1 需要一種機(jī)制 能識(shí)別是否已經(jīng)接收數(shù)據(jù) 能判斷是否需要接收
- 上述確認(rèn)應(yīng)答處理 重發(fā)控制 重復(fù)控制 等等 功能都可以通過(guò)序列號(hào)實(shí)現(xiàn) 序列號(hào)是按順序給發(fā)送數(shù)據(jù)的每一個(gè)字節(jié)(8位字節(jié))都標(biāo)上號(hào)碼的編號(hào)
- 如下圖
超時(shí)重發(fā)
- Q1 超時(shí)時(shí)間如何定義
- A1 最好找到一個(gè) 確認(rèn)應(yīng)答一定時(shí)間內(nèi)一定能在這個(gè)時(shí)間段內(nèi)返回
- Q2 TCP要求不論處在何種網(wǎng)絡(luò)都提供高性能通信 并且無(wú)論網(wǎng)絡(luò)擁堵情況發(fā)生何種變化 都必須保持這一特性
- A2 每次發(fā)包時(shí)都計(jì)算往返時(shí)間及其偏差 往返時(shí)間和偏差(RTT時(shí)間波動(dòng)的值 方差)相加 超時(shí)重發(fā)時(shí)間就是這個(gè)和在大一丟丟的
- A3 在BSD的Unix以及Windows中 超時(shí)都是按0.5s為單位 偏差的最小值也是0.5 所以最小的重發(fā)時(shí)間時(shí)1s
- A4 數(shù)據(jù)被重發(fā)之后若還是收不到則再次發(fā)送 超時(shí)等待時(shí)間會(huì)2倍 4倍函數(shù)延長(zhǎng) 數(shù)據(jù)也不會(huì)無(wú)限反復(fù)的重復(fù) 到達(dá)一定的次數(shù)后如果仍沒(méi)有任何確認(rèn)應(yīng)答 則會(huì)判斷網(wǎng)絡(luò)或?qū)Χ酥鳈C(jī)異常 強(qiáng)制管理連接并通知應(yīng)用程序
- 如下圖
連接管理
三次握手 四次揮手
MSS最大消息長(zhǎng)度
TCP在傳送大量消息時(shí) 是以MSS進(jìn)行分割 重發(fā)也是也MSS為單位
MSS是在三次握手時(shí)計(jì)算出來(lái)的 在發(fā)送SYN請(qǐng)求時(shí)會(huì)在TCP首部寫入MSS選項(xiàng) 會(huì)在兩者中選一個(gè)比較小的值投入使用
窗口
為每個(gè)數(shù)據(jù)包進(jìn)行確認(rèn)應(yīng)答的缺點(diǎn)是包往返時(shí)間越長(zhǎng)網(wǎng)絡(luò)的吞吐量越差
引入窗口概念 窗口的滑動(dòng)如下
窗口控制和重發(fā)控制如下圖 P211
流控制
窗口大小這個(gè)字段是由接收端控制的 TCP首部中有一個(gè)字段通知窗口大小 具體過(guò)程如下
擁塞控制 P213
通信剛開(kāi)始就發(fā)送大量數(shù)據(jù) 可能存在隱藏問(wèn)題
在網(wǎng)絡(luò)擁堵時(shí) 如果突然出現(xiàn)一個(gè)較大量的數(shù)據(jù)可能導(dǎo)致網(wǎng)絡(luò)癱瘓
TCP為了防止該問(wèn)題 在通信一開(kāi)始便會(huì)通過(guò)一個(gè)慢啟動(dòng)算法得出的數(shù)值對(duì)發(fā)送數(shù)據(jù)量進(jìn)行控制
定義了一個(gè)擁塞窗口的概念
提高網(wǎng)絡(luò)利用率的規(guī)范
- Nagle算法 盡在下列任意一種條件滿足才能發(fā)送數(shù)據(jù) 這個(gè)算法可能導(dǎo)致某種程度的延遲因此在窗口系統(tǒng)(X Window System)以及繼續(xù)控制等領(lǐng)域中使用TCP時(shí)往往會(huì)關(guān)閉該算法的啟用
- 已發(fā)送的數(shù)據(jù)全部都已經(jīng)收到確認(rèn)應(yīng)答
- 可以發(fā)送最大段長(zhǎng)度MSS的數(shù)據(jù)時(shí)
- 延遲確認(rèn)應(yīng)答
- 每次都立刻回復(fù)確認(rèn)應(yīng)答的話 可能會(huì)返回一個(gè)較小的窗口(因?yàn)閯偨邮胀陻?shù)據(jù) 緩沖區(qū)已滿)在流控制一節(jié)可以看到接收端可以控制窗口大小
- 延遲機(jī)制如下
- 在沒(méi)有收到2x最大段長(zhǎng)度的數(shù)據(jù)為止不做確認(rèn)應(yīng)答(根據(jù)操作系統(tǒng)不同 有時(shí)不論數(shù)據(jù)大小 只要收到兩個(gè)包就即可返回確認(rèn)應(yīng)答的情況) 總而言之就是各種機(jī)制延遲確認(rèn)應(yīng)答
- 在其他情況下 最大延遲0.5s發(fā)送確認(rèn)應(yīng)答 很多操作系統(tǒng)設(shè)置為0.2s 延遲超過(guò)0.5時(shí)很有可能導(dǎo)致重發(fā)數(shù)據(jù) 這個(gè)時(shí)間越小 CPU的負(fù)荷越高性能也下降 時(shí)間越大越有可能觸發(fā)發(fā)送主機(jī)的重發(fā)處理
- 捎帶應(yīng)答
- TCP的確認(rèn)應(yīng)答和回執(zhí)數(shù)據(jù)一起返回通過(guò)一個(gè)包發(fā)送
- 比如電子郵件協(xié)議的SMTP POP 文件傳輸協(xié)議FTP的連接控制部分等
- 沒(méi)有啟動(dòng)延遲確認(rèn)應(yīng)答(即接收數(shù)據(jù)后立刻返回確認(rèn)應(yīng)答)是無(wú)法實(shí)現(xiàn)捎帶應(yīng)答的
- 因?yàn)樯訋П仨毜却龖?yīng)用程序處理完數(shù)據(jù)并將作為回執(zhí)的數(shù)據(jù)返回時(shí)才能進(jìn)行捎帶 哈哈哈
其他傳輸層協(xié)議 P218
- UDP-Lite
- SCTP
- DCCP
- 等等
UDP-Lite
- 基于UDP的通信中 檢驗(yàn)和出現(xiàn)錯(cuò)誤 所收到的包將全部丟棄 然而現(xiàn)實(shí)中有些應(yīng)用在面對(duì)這種情況不希望丟棄
- 如果將UDP中的檢驗(yàn)和設(shè)置為無(wú)效那么即使數(shù)據(jù)的一部分毀壞也不會(huì)將整個(gè)包廢棄 不過(guò)這個(gè)方法并不好 如果是IP首部中的IP地址被破壞或者端口號(hào)被破壞等等會(huì)產(chǎn)生嚴(yán)重后果
- 為了解決這些問(wèn)題 UDP-Lite出現(xiàn)了
- UDP-Lite計(jì)算校驗(yàn)和的范圍可以由應(yīng)用自行控制 有這樣的機(jī)制可以只針對(duì)不允許發(fā)生錯(cuò)誤的部分進(jìn)行校驗(yàn)和的價(jià)差
UDP格式
這個(gè)沒(méi)啥好說(shuō)的
TCP格式
TCP中沒(méi)有包長(zhǎng)度和數(shù)據(jù)長(zhǎng)度的字符串
- 數(shù)據(jù)偏移 表示TCP所傳輸?shù)臄?shù)據(jù)部分應(yīng)該從TCP包的哪個(gè)部分開(kāi)始計(jì)算 可以理解為TCP首部長(zhǎng)度
- 控制位 8位大小 每一位都有其意義 P223
- 緊急指針只有在URG控制位為1時(shí)有效 P225
- 可選項(xiàng) P225
TCP UDP 計(jì)算校驗(yàn)和偽首部
總結(jié)
以上是生活随笔為你收集整理的图解TCPIP---第六章---传输层TCPUDP的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 25利他行为可以学习和模仿吗
- 下一篇: 前端学习(2917):上午回顾