Socket編程

本文主要介紹項目使用的TCP/IP通信。
TCP/IP協議族,四個抽象層

應用層:TFTP,HTTP,SNMP,FTP,SMIP,DNS,Telnet等;
傳輸層:TCP,UDP;
網絡層:IP,ICMP,OSPF,EIGRP,IGMP,
數據鏈路層:SLIP,CSLIP,PPP,MTU

Socket:
網絡層的IP地址可以唯一標識網絡中的主機,而傳輸層的“協議+端口”可以唯一標識主機中的
應用程序(進程)。
這樣利用三元組(ip地址,協議,端口)就可以標識網絡的進程了,網絡中的進程通
信就可以利用這個標誌與其它進程進行交互。
socket在TCP/IP抽象層中的位置圖
socket位於應用層與傳輸層之間。四個抽象層:
四個抽象層

socket通信流程:
socket通信流程

1服務器根據地址類型(ipv4,ipv6)、socket類型、協議創建socket
2服務器爲socket綁定ip地址和端口號
3服務器socket監聽端口號請求,隨時準備接收客戶端發來的連接,這時 候服務器的socket並沒有被打開
4客戶端創建socket
5客戶端打開socket,根據服務器ip地址和端口號試圖連接服務器socket
6服務器socket接收到客戶端socket請求,被動打開,開始接收客戶端請求,直到客戶端返回連接信息。這時
候socket進入阻塞狀態,所謂阻塞即accept()方法一直到客戶端返回連接信息後才返回,開始接收下一個客戶端
連接請求
9客戶端連接成功,向服務器發送連接狀態信息
10服務器accept方法返回,連接成功
11客戶端向socket寫入信息
12服務器讀取信息
13客戶端關閉
14服務器端關閉

Socket中TCP三次握手建立連接:
• 客戶端向服務器發送一個SYN J
• 服務器向客戶端響應一個SYN K,並對SYN J進行確認ACK J+1
• 客戶端再向服務器發一個確認ACK K+1

三次握手建立連接示意圖
三次握手

客戶端的connect在三次握手的第二次返回,而服務器段的accept在三次握手中的第三次返回。

socket中TCP四次握手釋放連接:
• 某個應用進程首先調用close主動關閉連接,這時TCP發送一個FIN M;
• 另一端接收到FIN M之後,執行被動關閉,對這個FIN進行確認。它的接收也作爲文件結束符傳遞給
應用進程,因爲FIN的接收意味着應用進程在相應的連接上再也接收不到額外數據;
• 一段時間之後,接收到文件結束符的應用進程調用close關閉它的socket。這導致它的TCP也發送一
個FIN N;
• 接收到這個FIN的源發送端TCP對它進行確認。
這樣每個方向上都有一個FIN和ACK。

四次握手釋放連接示意圖
四次握手釋放

http://www.cnblogs.com/codingmengmeng/p/5916598.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章