1. 程式人生 > >網絡基礎之TCP/IP協議

網絡基礎之TCP/IP協議

rst 標誌位 自由 重新發送 選項 ket 格式 監聽 套接字

TCP/IP分層模型中,通信界定地址:
物理地址:在交換機中進行通信的,
以太網地址,MAC地址;
功能:真正的用於本地通信的地址;
使用範圍:本地局域網內部且不跨路由設備;

邏輯地址:(IP地址)
在TCP/IP協議棧中,邏輯地址被定義為IP地址;
功能:界定主機到主機的通信地址:點到點通信;邏輯地址僅用於主機定位,不用於真正的通信;
使用範圍:全球互聯網;

邏輯端口號:(確定每個進程的標識符)
在TCP/IP協議棧中
功能:界定進程到進程的通信;

邏輯端口號的組成:
16bits二進制構成:其表示範圍0-65535
0:特殊端口號,不做定義;
1-1023:固定服務端口(一般用於服務器端);
FTP:20/TCP,21/TCP
SSH:22/TCP
Telnet:23/TCP
SMTP:25/TCP
DNS:53/TCP,53/UDP
DHCP:
DHCPS:67/UDP
DHCPC:68/UDP
TFTP:69/UDP
HTTP: 80TCP
POP3: 110/TCP
IMAP4: 143/TCP
SNMP: 161/UDP,162/UDP
HTTPS: 443/TCP

1024-45121:半固定服務端口;也可以稱為註冊端口(一般用於本地);
mysql:3306/TCP
Tomcat:8080/TCP,8009/TCP,8005/TCP,8040/TCP
Memcached:11211/TCP

其余端口:可自由分配使用的端口號;

邏輯地址:邏輯端口號——套接字(Socket)
能夠界定特定主機上的特定應用程序服務進程:


TCP協議:
1.面向連接:
1)通信開始之前,必須先建立通信雙方主機之間的TCP通信連接;
2)在整個通信過程中,必須維持通信雙方主機之間的TCP通信連接的穩定性;
3)在通信結束之後,必須先拆除通信雙方主機之間已建立的TCP通信連接

TCP協議建立連接的過程:三次握手
a)通信請求發起方,創建一個無數據報文,將其中的SYN標誌位 置1;
b)接收方在收到建立連接的請求之後,根據該報文的目標端口號判斷本地是否有監聽此套接字的進程;如果有,即返回確認消息;創建一個無數據報文,將其中的ACK標誌位 置1,同時將SYNC標誌位 置1,用戶向對方請求建立同步連接;
c)通信請求發起方,在創建一個無數據報文,將其中的ACK標誌位 置1;

TCP協議拆除連接的過程:四次揮手
a)由任何一方,在數據傳輸結束之後,向另一方發送一個自己創建的無數據報文,其中FIN標誌位 置1;
b)收到連接斷開請求的一方,會對此請求信息予以確認,創建一個無數據報文,其中ACK標誌位 置1;
c)此前收到連接斷開請求的一方,會再次創建一個無數據報文,將其中的FIN標誌位 置1,向對方請求斷開連接;
d)對方在收到此請求報文之後,在創建一個無數據報文,將其中的ACK標誌位 置1;確認斷開連接的請求;

TCP協議的有限狀態機(TCP FSM)
客戶端:
客戶端的狀態可以用如下的流程來表示:

服務器:
服務器的狀態可以用如下的流程來表示:

TCP協議首部:
第一行:
第一字段:源端口號,16bits;
第二字段:目標端口號,16bits;可與手動指定,可以通過 /etc/services文件判斷自動解析應用層協議獲得;
第二行:
序列號:TCP協議將大數據報文分段的順序編號,取值範圍0~2^32-2;默認情況下,第一個數據段的序列號為隨機選擇,以後的數據段的序列號通過計算得到;
第一段:隨機產生
後續其他數據段:前一數據段的數據段序列號 + 前一數據段的數據部分大小 + 1;

第三行:
確認號(下一段的序列號):
接收到的最後一個數據段的下一個數據段的序列號;取值範圍1~2^32-1

第四行:
第一字段:4bits報文首部長度,通常報文首部長度為24Bytes-60Bytes;
第二字段:標誌位;12bits
前三位:保留位;
4-6位:特殊標誌位;
URG:緊急指針標誌位;優先轉發標誌位;URG置1,後面的16bits的緊急指針才能生效;
ACK:確認標誌位;保證數據傳輸可靠性;
PSH:推進標誌位;
RST:重置標誌位;
SYN:同步標誌位;三次握手建立連接時必選的標誌位;
FIN:結束標誌位;四次揮手拆除連接時必選的標誌位;
第三字段:窗口大小16bits;一次並發傳輸的數據段的數量;

第五行:
第一字段:數據段校驗和,16bits,保證數據的完整性;
第二字段:緊急指針,16bits,在URG標誌位 置1,那個數據段更緊急;
第六行:
選項:TCP協議分段的標準;TCP協議的數據分段時間戳;...

TCP協議的確認機制:
1.發送方在接受哦到接收方返回的確認數據之前,不會繼續發送後續的數據段;
2.在指定的時間內,發送方沒有接收到接收方返回的確認數據,則重新發送此前發送的數據段;

數據傳輸過程:
發送方打算把應用數據發送給接收方:
1.講給出的主機名解析為此次通信的目標主機ip地址:
2.將應用層協議解析為傳輸層協議+傳輸層端口號的組合(套接字),進而完成傳輸層封裝;
3.如果傳輸層使用TCP協議,則還需要為TCP協議通信建立通信連接;
4.如果需要建立TCP連接,必須能夠在網絡層正確封裝IP地址以及在數據鏈路層正確封裝MAC地址;
5.在ARP緩存中,如果麽沒有對應的目標IP地址條目信息,則需要廣播ARP解析目標主機地址;
6.解析獲得目標主機的MAC地址後,則可以通過三次握手建立TCP連接;
7.為應用層應用程序提供數據發送;
8.在數據傳輸完成之後,需要拆除TCP連接;

子網掩碼(Netmask)
組成:32bits二進制組成,與IPv4的地址位數相同;以點分十進制進行表示;
作用:標識IPv4地址中的網絡部分和主機部分各占多少個二進制位;凡是網絡部分就用"1"表示,
凡是主機部分,就用"0"表示;

A類地址的標準子網掩碼:255.0.0.0
B類地址的標準子網掩碼:255.255.0.0
C類地址的標準子網掩碼:255.255.255.0

將IPv4的地址與其相對應的子網掩碼做邏輯就與運算,得到的而結果時候:
該IPv4地址所屬的網絡範圍;

網絡地址:主機位全都是"0"的IP地址;也被稱為網絡名稱;也可以稱為邏輯網段;
定向廣播地址:主機位全都是"1"的IP地址;在特定的邏輯網段中能夠被應用的廣播地址;

以上兩個地址,通常是不能分配給主機使用的;

在一個邏輯網段中,主機位全"0"和主機位全"1"的地址,必須排除在可以使用地址範圍之外;

172.16.72.1 255.255.0.0 --> 172.16.0.0

子網掩碼的標識方法:
1.全掩碼表示:172.16.72.1/255.255.0.0
2.前綴表示法:172.16.72./16

192.168.0.1/16 CIDR,Classless Inter-Domain Routing,無類域間路由;
10.1.1.1/28 變長子網掩碼;

結論:
主機通過將自身的IP地址和目標主機的IP地址分別於自己的子網掩碼進行邏輯與運算,
最終得到的結果就是兩臺主機的邏輯網絡地址;
然後將此二結果進行比較,如果相同,則表示此二主機在同一邏輯網絡範圍之內,
因此可以直接使用ARP協議獲取對方的MAC地址,從而實現通信;如果不相同,
則意味著此二主機在不同的邏輯網絡範圍之中,於是必須借助於網關才能實現二主機的相同通信;

網關:可以理解為一個邏輯網絡的門戶,或者是出入口;現在多使用路由器充當網關設備;

註意:一旦數據傳輸經過網關等路由設備,則其數據鏈路層的封裝格式會徹底改變;
即:重新封裝數據的源MAC地址及目的MAC地址;

對於主機來說,在一次通信的過程中,
需要使用配置在自身網絡設備接口上的子網掩碼判斷主機與自身IP地址是否在同一邏輯網段;

對於路由器來說,需要利用路由表中路由條目上個所攜帶的子網掩碼,
來判斷目標主機所 在的網絡地址,是否存在於本地路由表中,
如果有,則按紮奧路由表指示進行轉發;否則直接丟棄不予轉發;

網絡基礎之TCP/IP協議