网络学习笔记协议详情篇.docx
《网络学习笔记协议详情篇.docx》由会员分享,可在线阅读,更多相关《网络学习笔记协议详情篇.docx(15页珍藏版)》请在冰豆网上搜索。
网络学习笔记协议详情篇
网络学习笔记(协议篇)
协议概况:
TCP/IP协议簇
TCP/IP(TransmissionControlProtocol/InternetProtocol)已成为一个事实上的工业标准。
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层)。
TCP和IP是TCP/IP协议簇的中间两层,是整个协议簇的核心,起到了承上启下的作用。
1、接口层(物理层)
TCP/IP的最低层是接口层,常见的接口层协议有:
Ethernet802.3、TokenRing802.5、X.25、Framereley、HDLC、PPP等。
2、网络层
网络层包括:
IP(InternetProtocol)协议、ICMP(InternetControlMessageProtocol)控制报文协议、ARP(AddressResolutionProtocol)地址转换协议、RARP(ReverseARP)反向地址转换协议。
IP是网络层的核心,通过路由选择将下一跳IP封装后交给接口层。
IP数据报是无连接服务。
ICMP是网络层的补充,可以回送报文。
用来检测网络是否通畅。
Ping命令就是发送ICMP的echo包,通过回送的echorelay进行网络测试。
ARP是正向地址解析协议,通过已知的IP,寻找对应主机的MAC地址。
RARP是反向地址解析协议,通过MAC地址确定IP地址。
比如无盘工作站和DHCP服务。
3、传输层
传输层协议主要是:
传输控制协议TCP(TransmissionControlProtocol)和用户数据报协议UDP(UserDatagramrotocol)。
TCP是面向连接的通信协议,通过三次握手建立连接,通讯时完成时要拆除连接,由于TCP是面向连接的所以只能用于点对点的通讯。
TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。
TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出丢包现象,实际应用中要求在程序员编程验证。
4、应用层
应用层一般是面向用户的服务。
如FTP、TELNET、DNS、SMTP、POP3。
FTP(FileTransmisionProtocol)是文件传输协议,一般上传下载用FTP服务,数据端口是20H,控制端口是21H。
Telnet服务是用户远程登录服务,使用23H端口,使用明码传送,保密性差、简单方便。
DNS(DomainNameService)是域名解析服务,提供域名到IP地址之间的转换。
SMTP(SimpleMailTransferProtocol)是简单邮件传输协议,用来控制信件的发送、中转。
POP3(PostOfficeProtocol3)是邮局协议第3版本,用于接收邮件。
数据格式:
数据帧:
帧头+IP数据包+帧尾(帧头包括源和目标主机MAC地址及类型,帧尾是校验字)
IP数据包:
IP头部+TCP数据信息(IP头包括源和目标主机IP地址、类型、生存期等)
TCP数据信息:
TCP头部+实际数据(TCP头包括源和目标主机端口号、顺序号、确认号、校验字等)
一、ARP协议
ARP协议是“AddressResolutionProtocol”(地址解析协议)的缩写。
在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。
在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。
但这个目标MAC地址是如何获得的呢?
它就是通过地址解析协议获得的。
所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
二、ICMP协议
ICMP是(InternetControlMessageProtocol)Internet控制报文协议。
它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP协议是一种面向连接的协议,用于传输出错报告控制信息。
它是一个非常重要的协议,它对于网络安全具有极其重要的意义。
它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。
当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
ICMP原理
ICMP提供一致易懂的出错报告信息。
发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。
发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据报。
但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。
我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。
还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。
三、IP地址和掩码
Ip4规范用32位数字确定一个IP地址,分成4组,xxx.xxx.xxx.xxx
IP地址分成3类
A类:
8位网络地址,24位主机地址,A类地址的特征是IP地址第一组最高位为0(二进制表示),所以第一位为0-127(实际应用1-126)的IP地址为A类IP地址,A类IP的缺省掩码为255.0.0.0
B类:
16位网络地址,16位主机地址,B类地址的特征是IP地址第一组最高2位为10(二进制表示),所以第一组为128-191的IP地址为A类IP地址,A类IP的缺省掩码为255.255.0.0
C类:
16位网络地址,16位主机地址,B类地址的特征是IP地址第一组最高2位为110(二进制表示),所以第一组为192-223的IP地址为A类IP地址,A类IP的缺省掩码为255.255.255.0
还有不常用的D和E类地址
最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。
同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。
IP地址根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。
1.A类IP地址
一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,地址范围从1.0.0.0到126.0.0.0。
可用的A类网络有126个,每个网络能容纳1亿多个主机。
2.B类IP地址
一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。
可用的B类网络有16382个,每个网络能容纳6万多个主机。
3.C类IP地址
一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。
范围从192.0.0.0到223.255.255.255。
C类网络可达209万余个,每个网络能容纳254个主机。
4.D类地址用于多点广播(Multicast)。
D类IP地址第一个字节以“lll0”开始,它是一个专门保留的地址。
它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。
多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
5.E类IP地址
以“llll0”开始,为将来使用保留。
全零(“0.0.0.0”)地址对应于当前主机。
全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址。
在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下:
A类地址:
10.0.0.0~10.255.255.255
B类地址:
172.16.0.0~172.31.255.255
C类地址:
192.168.0.0~192.168.255.255
四、IP报格式
IP数据包的格式:
(1)版本(version):
包含IP地址的版本号,4个比特。
(2)首部长度(headerlength):
表示IP数据报头长度,4个比特。
(3)优先级与服务器类型(priorityandtypeofservice):
用于表示数据包的优先级和服务器类型,8个比特。
(4)总长度(totallength):
表示整个IP数据包的长度,16个比特(两个字节)。
(5)标识符(identification):
用于表示IP数据包的标识符,16个比特。
(6)标志(flags):
标志字段,3个比特。
(7)段偏移量(fragmentoffset):
用于表示段的偏移量。
(8)TTL(timetotime):
表示IP数据包的生命周期,8个比特。
当TTL为0时,该数据包将被丢弃。
TTL还对应一个数据报通过的路由器的数目。
一个数据报每经过一个路由器,TTL值就会减一。
(9)协议号:
(protocol):
协议字段,8个比特,表示IP数据段封装的协议,是TCP还是UDP,TCP的协议号是6,UDP的协议号是17.。
(10)首部校验和(headerchechsum):
用于表示校验和,16个比特。
(11)源地址(SA,sourceipaddress):
32比特位,表示数据包的源地址
(12)目的地址(DA,destinationipaddress),32个比特位,表示数据报道目的地址。
(13)可选项
圖三、乙太網路的MAC訊框
在這個MAC當中,最重要的就是那個6Bytes的目的與來源位址了!
事實上,在所有的乙太網路卡當中都有一個獨一無二的網路卡卡號,那就是上頭的『目的與來源位址』,這個位址是硬體位址(hardwareaddress),共有6bytes,分別由00:
00:
00:
00:
00:
00到FF:
FF:
FF:
FF:
FF:
FF,這6bytes當中,前3bytes為廠商的代碼,後3bytes則是該廠商自行設定的裝置碼了。
在Linux當中,你可以使用ifconfig這個指令來查閱你的網路卡卡號喔!
不過,由於MAC主要是與網路卡卡號有關,所以我們也常常將MAC作為網路卡卡號的代稱。
特別注意,在這個MAC的傳送中,他僅在區域網路內生效,如果跨過不同的網域(這個後面IP的部分時會介紹),那麼來源與目的的位址就會跟著改變了。
這是因為變成不同網路卡之間的交流了嘛!
所以卡號當然不同了!
如下所示:
圖四、在不同主機間持續傳送相同資料的MAC訊框變化
例如上面的圖示,我的資料要由電腦A通過B後才送達C,而B電腦有兩塊網路卡,其中MAC-2與A電腦的MAC-1互通,至於MAC-3則與C電腦的MAC-4互通。
但是MAC-1不能與MAC-3與MAC-4互通,為啥?
因為MAC-1這塊網路卡並沒有與MAC-3及MAC-4使用同樣的switch/hub相接嘛!
所以,資料的流通會變成:
先由MAC-1傳送到MAC-2,此時來源是MAC-1而目的地是MAC-2;
B電腦接收後,察看該訊框,發現目標其實是C電腦,而為了與C電腦溝通,所以他會將訊框內的來源MAC改為MAC-3,而目的改為MAC-4,如此就可以直接傳送到C電腦了。
也就是說,只要透過B(就是路由器)才將封包送到另一個網域(IP部分會講)去的時候,那麼訊框內的硬體位址就會被改變,然後才能夠在同一個網域裡面直接進行frame的流通啊!
MAC包大小:
旧为1900bytes,大为9000bytes
IP封包的表頭
現在我們知道IP這個資料封包(packet)是需要放置在MAC訊框裡面的,所以當然不能比MAC所能容許的最大資料量還大!
但是IP封包其實可以到65535bytes那麼大的吶!
那麼IP封包除了資料之外,他的表頭資料(head)是長怎樣呢?
在
圖三的MAC訊框表頭
裡面最重要的莫過於那個網路卡硬體位址,那麼在IP表頭裡面當然就以來源與目標的IP位址為最重要囉!
除此之外,IP表頭裡面還含有哪些重要資料呢?
如底下所示:
(下圖第一行為每個欄位的bit數)
4bits
4bits
8bits
3bits
13bits
Version
IHL
TypeofService
TotalLength
Identification
Flags
FragmentationOffset
TimeToLive
Protocol
HeaderChecksum
SourceAddress
DestinationAddress
Options
Padding
Data圖八、IP封包的表頭資料
在上面的圖示中有個地方要注意,那就是『每一行所佔用的位元數為32bits』,也就是說,IP封包的表頭資料是32bits的倍數喔!
那各個表頭的內容分別介紹如下:
∙Version(版本)
宣告這個IP封包的版本,例如目前慣用的還是IPv4這個版本,在這裡宣告的。
∙IHL(InternetHeaderLength,IP表頭的長度)
告知這個IP封包的表頭長度,單位為位元組(bytes)。
此IHL長度的範圍為5~15。
∙TypeofService(服務類型)
這個項目的內容為『PPPDTRUU』,表示這個IP封包的服務類型,主要分為:
PPP:
表示此IP封包的優先度;D:
若為0表示一般延遲(delay),若為1表示為低延遲;
T:
若為0表示為一般傳輸量(throughput),若為1表示為高傳輸量;
R:
若為0表示為一般可靠度(reliability),若為1表示高可靠度。
UU:
保留尚未被使用。
我們前面談到gigabit乙太網路時曾提到Jumboframe對吧!
可以提高MTU,由於gigabit乙太網路的種種相關規格可以讓這個IP封包加速且降低延遲,某些特殊的標誌就是在這裡說明的。
∙TotalLength(總長度)
指這個IP封包的總容量,包括表頭與內容(Data)部分。
最大可達65535bytes。
∙Identification(辨別碼)
我們前面提到IP袋子必須要放在MAC袋子當中。
不過,如果IP袋子太大的話,就得先要將IP再重組成較小的袋子然後再放到MAC當中。
而當IP被重組時,每個來自同一筆資料的小IP就得要有個識別碼以告知接收端這些小IP其實是來自同一個封包才行。
也就是說,假如IP封包其實是65536那麼大(前一個TotalLength有規定),那麼這個IP就得要再被分成更小的IP分段後才能塞進MAC訊框中。
那麼每個小IP分段是否來自同一個IP資料,呵呵!
這裡就是那個識別碼啦!
∙Flags(特殊旗標)
這個地方的內容為『0DM』,其意義為:
D:
若為0表示可以分段,若為1表示不可分段
M:
若為0表示此IP為最後分段,若為1表示非最後分段。
∙FragmentOffset(分段偏移)
表示目前這個IP分段在原始的IP封包中所佔的位置。
就有點像是序號啦,有這個序號才能將所有的小IP分段組合成為原本的IP封包大小嘛!
透過TotalLength,Identification,Flags以及這個FragmentOffset就能夠將小IP分段在收受端組合起來囉!
∙TimeToLive(TTL,存活時間)
表示這個IP封包的存活時間,範圍為0-255。
當這個IP封包通過一個路由器時,TTL就會減一,當TTL為0時,這個封包將會被直接丟棄。
說實在的,要讓IP封包通過255個路由器,還挺難的~^_^
∙ProtocolNumber(協定代碼)
由於網路上面的封包協定太多了,每個協定都是裝在IP當中的,所以IP當然就得在表頭上面告知收受端,這個IP內含有的資料是什麼協定才行。
一般常見的網路協定如下所示:
IP內的號碼
協定名稱(全名)
1
ICMP(InternetControlMessageProtocol)
2
IGMP(InternetGroupManagementProtocol)
3
GGP(Gateway-to-GatewayProtocol)
4
IP(IPinIPencapsulation)
6
TCP(TransmissionControlProtocol)
8
EGP(ExteriorGatewayProtocol)
17
UDP(UserDatagramProtocol)當然啦,我們比較常見到的還是那個TCP,UDP,ICMP說!
∙HeaderChecksum(表頭檢查碼)
用來檢查這個IP表頭的錯誤檢驗之用。
∙SourceAddress
還用講嗎?
當然是來源的IP位址,相關的IP我們之前提過囉!
∙DestinationAddress
有來源還需要有目標才能傳送,這裡就是目標的IP位址。
∙Options(其他參數)
這個是額外的功能,提供包括安全處理機制、路由紀錄、時間戳記、嚴格與寬鬆之來源路由等。
∙Padding(補齊項目)
由於Options的內容不一定有多大,但是我們知道IP每個資料都必須要是32bits,所以,若Options的資料不足32bits時,則由padding主動補齊。
你只要知道IP表頭裡面還含有:
TTL,Protocol,來源IP與目標IP也就夠了!
而這個IP表頭的來源與目標IP,以及那個判斷通過多少路由器的TTL,就能瞭解到這個IP將被如何傳送到目的端吶。
下一節我們將介紹一下那麼IP封包是如何被傳送到目的地?
TCP協定
在前幾個小節內談到的IP與路由的相關說明中,我們知道IP與路由僅能將資料封包傳送到正確的目標而已,但是這個目的地是否真的能夠收下來這個封包?
那可就不一定了。
要確認該資料能否正確的被目的端所接收,就必須要在資料封包上面多加一些參數來判斷才行。
在前面的OSI七層協定當中,在網路層的IP之上則是傳送層,而傳送層的資料打包成什麼?
最常見的就是TCP封包了。
這個TCP封包資料必須要能夠放到IP的資料袋當中才行喔!
所以,我們可以將MAC,IP與TCP的封包資料這樣看:
圖十一、各封包之間的相關性
所以說,IP除了表頭之外的Data內容其實就是TCP封包的表頭與內容;而MAC的Data內容,就是一個完整的IP封包資料!
這也是我們上頭提到的,最終還是得以MAC能夠支援的最大容許容量,才能夠決定IP與TCP封包是否需要再進行分段的工作。
那麼既然MAC與IP都有表頭資料,想當然爾,TCP也有表頭資料來記錄該封包的相關資訊囉?
?
沒錯啦~TCP封包的表頭是長這個樣子的:
4bits
6bits
6bits
8bits
8bits
SourcePort
DestinationPort
SequenceNumber
AcknowledgeNumber
Data
Offset
Reserved
Code
Window
Ckecksum
UrgentPointer
Options
Padding
Data圖十二、TCP封包的表頭資料
上圖就是一個TCP封包的表頭資料,各個項目以SourcePort,DestinationPort及Code算是比較重要的項目,底下我們就分別來談一談各個表頭資料的內容吧!
∙SourcePort&DestinationPort(來源埠口&目標埠口)
什麼是埠口(port)?
我們知道IP封包的傳送主要是藉由IP位址連接兩端,但是到底這個連線的通道是連接到哪裡去呢?
沒錯!
就是連接到port上頭啦!
舉例來說,鳥站(http:
//linux.vbird.org)有開放WWW伺服器,這表示鳥站的主機必須要啟動一個可以讓client端連接的端口,這個端口就是port,中文翻譯成為埠口。
同樣的,用戶端想要連接到鳥哥的鳥站時,就必須要在client主機上面啟動一個port,這樣這兩個主機才能夠利用這條『通道』來傳遞封包資料喔!
這個目標與來源port的紀錄,可以說是TCP封包上最重要的參數了!
下個小單元我們還會繼續介紹。
∙SequenceNumber(封包序號)
由於TCP封包必須要帶入IP封包當中,所以如果TCP資料太大時(大於IP封包的容許程度),就得要進行分段。
這個SequenceNumber就是記錄每個封包的序號,可以讓收受端重新將TCP的資料組合起來。
∙AcknowledgeNumber(回應序號)
為了確認主機端確實有收到我們client端所送出的封包資料,我們client端當然希望能夠收到主機方面的回應,那就是這個AcknowledgeNumber的用途了。
當client端收到這個確認碼時,就能夠確定之前傳遞的封包已經被正確的收下了。
∙DataOffset(資料補償)
在圖十二倒數第二行有個Options欄位對吧!
那個Options的欄位長度是非固定的,而為了要確認整個TCP封包的大小,就需要這個標誌來說明整個封包區段的起始位置。
∙Reserved(保留)
未使用的保留欄位。
∙Code(ControlFlag,控制標誌碼)
當我們在進行網路連線的時候,必須要說明這個連線的狀態,好讓接收端瞭解這個封包的主要動作。
這可是一個非常重要的控制碼喔!
這個欄位共有6個bits,分別代表6個控制碼,若為1則為啟動。
分別說明如下:
oURG(Urgent):
若為1則代表該封包為緊急封包,接收端應該要緊急處理,且圖十二當中的Urg