网络编程2_网络通讯协议, socket(tcp, udp)
?一. 網絡通訊協議
????互聯網協議的功能: 定義計算機如何接入internet, 以及接入internet的計算機的通信標準
????互聯網協議按照功能的不同分為osi七層或tcp/ip五層
????osi七層: 應用層, 表示層, 會話層, 傳輸層, 網絡層, 數據鏈接層, 物理層
????tcp/ip五層: 應用層, 傳輸層, 網絡層, 數據鏈接層, 物理層
????各層中涉及的協議的簡單解釋:
????1.?應用層?
???? · DHCP (Dynamic Host Configuration Protocol) 動態主機分配協議
???? · DNS (Domain Name System) 域名系統(域名解析)
???? · FTP(File Transfer Protocol)文件傳輸協議
???? · Gopher (英文原義:The Internet Gopher Protocol 中文釋義:(RFC-1436)網際Gopher協議)
???? · HTTP (Hypertext Transfer Protocol)超文本傳輸協議
???? · IMAP4 (Internet Message Access Protocol 4) 即 Internet信息訪問協議的第4版本
???? · IRC (Internet Relay Chat )網絡聊天協議
???? · NNTP (Network News Transport Protocol)RFC-977)網絡新聞傳輸協議
???? · XMPP 可擴展消息處理現場協議
???? · POP3 (Post Office Protocol 3)即郵局協議的第3個版本
???? · SIP 信令控制協議
???? · SMTP (Simple Mail Transfer Protocol)即簡單郵件傳輸協議
???? · SNMP (Simple Network Management Protocol,簡單網絡管理協議)
???? · SSH (Secure Shell)安全外殼協議
???? · TELNET 遠程登錄協議
???? · RPC (Remote Procedure Call Protocol)(RFC-1831)遠程過程調用協議
???? · RTCP (RTP Control Protocol)RTP 控制協議
???? · RTSP (Real Time Streaming Protocol)實時流傳輸協議
???? · TLS (Transport Layer Security Protocol)安全傳輸層協議
???? · SDP( Session Description Protocol)會話描述協議
???? · SOAP (Simple Object Access Protocol)簡單對象訪問協議
???? · GTP 通用數據傳輸平臺
???? · STUN (Simple Traversal of UDP over NATs,NAT 的UDP簡單穿越)是一種網絡協議
???? · NTP (Network Time Protocol)網絡校時協議
????2.?傳輸層
???? · TCP(Transmission Control Protocol)傳輸控制協議
???? · UDP (User Datagram Protocol)用戶數據報協議
???? · DCCP (Datagram Congestion Control Protocol)數據報擁塞控制協議
???? · SCTP(STREAM CONTROL TRANSMISSION PROTOCOL)流控制傳輸協議
???? · RTP(Real-time Transport Protocol或簡寫RTP)實時傳送協議
???? · RSVP (Resource ReSer Vation Protocol)資源預留協議
???? · PPTP ( Point to Point Tunneling Protocol)點對點隧道協議
????3.?網絡層
????????IP(IPv4 · IPv6) Internet Protocol(網絡之間互連的協議)
????????ARP : Address Resolution Protocol即地址解析協議,實現通過IP地址得知其物理地址。
????????RARP :Reverse Address Resolution Protocol 反向地址轉換協議允許局域網的物理機器從網關服務器的 ARP 表或者緩存上請求其 IP 地址。
????????ICMP :(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用于在IP主機、路由器之間傳遞控制消息。
????????ICMPv6:
????????IGMP :Internet 組管理協議(IGMP)是因特網協議家族中的一個組播協議,用于IP 主機向任一個直接相鄰的路由器報告他們的組成員情況。
????????RIP : 路由信息協議(RIP)是一種在網關與主機之間交換路由選擇信息的標準。
????????OSPF : (Open Shortest Path First開放式最短路徑優先).
????????BGP :(Border Gateway Protocol )邊界網關協議,用來連接Internet上獨立系統的路由選擇協議
????????IS-IS:(Intermediate System to Intermediate System Routing Protocol)中間系統到中間系統的路由選擇協議.
????????IPsec:“Internet 協議安全性”是一種開放標準的框架結構,通過使用加密的安全服務以確保在 Internet 協議 (IP) 網絡上進行保密而安全的通訊。
????4.?數據鏈路層
???? 802.11 · 802.16 · Wi-Fi · WiMAX · ATM · DTM · 令牌環 · 以太網 · FDDI · 幀中繼 · GPRS · EVDO · HSPA · HDLC · PPP · L2TP · ISDN
????5.?物理層
???? 以太網物理層 · 調制解調器 · PLC · SONET/SDH · G.709 · 光導纖維 · 同軸電纜 · 雙絞線
二. tcp/ip五層模型詳解
????搞清楚了每層的協議, 就搞清楚了每層的主要協議
????每層都運行特定的協議, 越往上越靠近用戶, 越往下越靠近硬件
????1.?物理層
????物理層功能: 主要是基于電器特性發送高低電壓(電信號), 高電壓對應數字1, 低電壓對應數字0
????2.?數字鏈路層
????由來: 單純的電信號0和1沒有任何意義, 必須規定電信號多少位一組, 每組什么意思
????數據鏈路層功能: 定義了電信號的分組方式
????(1). 以太網(ethernet3)協議:??
????一組電信號構成一個數據包, 叫做幀, 每一數據幀分成: 報頭head 和 數據data兩部分
????head包括: (固定18個字節), 發送者(源地址)6個字節, 接受者(目標地址)6個字節, 數據類型6個字節
????data包括: 最短46個字節, 最長1500個字節
????數據包的具體內容: head長度 + data長度 = 最短64個字節, 最長1518個字節, 超過最大限制就分片發送
????(2). mac地址:
????head中包含的源和目標地址的由來: ethernet規定接入internet的設備都必須具備網卡, 發送端和接收端的地址便是指網卡的地址, 即mac地址
????mac地址: 每塊網卡出廠的時候都被燒制上一個世界上唯一的mac地址, 長度為48位2進制, 通常由12位16進制數表示(前6位是廠商編號, 后六位是流水線號)
????(3). 廣播:
????arp協議: 通過ip地址獲得mac地址
????以太網采用最簡單的方式, 廣播的方式進行通信, 即計算機基本靠吼
????3.?網絡層
????世界大網絡由一個個小的彼此隔離的局域網組成, 以太網包只能在一個局域網內發送, 一個局域網是一個廣播域, 以太網的廣播包只能在一個廣播域內發送, 跨廣播域的通信只能由路由轉發
????網絡層功能: 引入一套新的地址來區分不同的廣播域/子網, 這套地址即網絡地址
????(1). ip協議:
????規定網絡地址的協議, 它定義的地址叫ip地址, 廣泛采用的是ipv4, 它規定網絡地址由32位2進制表示
????范圍0.0.0.0 - 255.255.255.255 (4個點分十進制, 也就是4個8位二進制數)
????ipv6: 6個冒號分割的16進制數表示, 預防ipv4地址不夠用的情況, 但是ipv4目前還是夠用的, 因為我們一個公司一般就一個對外的ip地址, 我們所有的機器上網都走這一個ip出口
????ip地址分為兩部分: 網絡部分: 標識子網, 主機部分: 標識主機
????單純的ip地址段只是標識了ip地址的種類, 從網絡部分和主機部分都無法辨識一個ip所處的子網
????子網掩碼: 表示之網絡特征的一個參數, 它的形式上等同于ip地址, 一個一個32位二進制數, 它的網絡部分全部為1, 主機部分全部為0, 寫成十進制就是255.255.255.0, 利用子網掩碼就能判斷任意兩個ip地址是否處在同一個字網絡, 方法是將兩個ip地址和子網掩碼分別進行AND運算, 然后比較結果是否相同, 如果相同就在同一個之網絡中
????總結一下: ip地址的作用主要有兩個, 一個是為每一臺電腦分配ip地址, 另一個是確定哪些地址在同一個子網絡
????ip數據包:?
????ip數據包也分為head和data部分, 無需為ip包定義單獨的欄位, 直接放入以太網包的head部分
????head最長為20到60個字節, data最長為65515個字節, 因此, 如果ip數據包超過了1500個字節, 就要被分割成幾個以太網數據包分開發送
????(2). arp協議: 地址解析協議(Address Resolution Protocol)是根據IP地址獲取物理地址的一個TCP/IP協議
????以官廣播的形式發送數據包, 獲取到目標主機的mac地址
????4.?傳輸層
????傳輸層的功能: 建立端口到端口的通信(端對端通信)
????通過ip和mac找到了一臺特定的主機(網絡層的ip幫我們區分子網, 以太網層的mac幫我們找到主機碼), 但是如何標識這臺主機上的應用程序, 答案就是端口, 端口即應用程序與網卡關聯的編號
????端口范圍0-65535, 0-1023為系統占用端口
?????127.0.0.1就是本機程序之間進行通信的地址, 這叫本機的回環地址, 測試的時候模擬客戶端和服務端
????(1). tcp協議: 傳輸控制協議
????tcp把連接作為最基本的對象, 每一條tcp連接都有兩個端點, 這種端點叫做套接字(socket), 它的定義為端口號拼接到ip地址即構成了套接字,?
????面向連接, 可靠傳輸, 保證送達, 安全性高, 提供超時重發, 丟棄重復數據, 檢驗數據, 流量控制等功能?
????tcp數據包沒有長度限制, 理論上可以無限長, 但是為了保證網絡的效率, 通常tcp數據包的長度不會超過ip數據包的長度,
????(2). udp協議: 用戶數據包協議?
????面向數據包, 不可靠傳輸, 只負責發送, 不保證送達, 速度快, 安全性差?
????報頭部分一共只有8個字節, 總長度不超過65535個字節, 正好放進一個數據包
????(3). tcp三次握手和四次揮手
????ip協議雖然能把數據報文送到目的主機, 但是并沒有交付給主機的具體應用進程, 二端到端的通信才應該是應用進程之間的通信
????三次握手:
????① TCP服務器進程先創建傳輸控制塊TCB,時刻準備接受客戶進程的連接請求,此時服務器就進入了LISTEN(監聽)狀態;
????② TCP客戶進程也是先創建傳輸控制塊TCB,然后向服務器發出連接請求報文,這是報文首部中的同部位SYN=1,同時選擇一個初始序列號 seq=x ,此時,TCP客戶端進程進入了 SYN-SENT(同步已發送狀態)狀態。TCP規定,SYN報文段(SYN=1的報文段)不能攜帶數據,但需要消耗掉一個序號。
????③ TCP服務器收到請求報文后,如果同意連接,則發出確認報文。確認報文中應該 ACK=1,SYN=1,確認號是ack=x+1,同時也要為自己初始化一個序列號 seq=y,此時,TCP服務器進程進入了SYN-RCVD(同步收到)狀態。這個報文也不能攜帶數據,但是同樣要消耗一個序號。
????④ TCP客戶進程收到確認后,還要向服務器給出確認。確認報文的ACK=1,ack=y+1,自己的序列號seq=x+1,此時,TCP連接建立,客戶端進入ESTABLISHED(已建立連接)狀態。TCP規定,ACK報文段可以攜帶數據,但是如果不攜帶數據則不消耗序號。
????⑤ 當服務器收到客戶端的確認后也進入ESTABLISHED狀態,此后雙方就可以開始通信了。?
????四次揮手:
????數據傳輸完畢后,雙方都可釋放連接。最開始的時候,客戶端和服務器都是處于ESTABLISHED狀態,然后客戶端主動關閉,服務器被動關閉。服務端也可以主動關閉,一個流程。
????①. 客戶端進程發出連接釋放報文,并且停止發送數據。釋放數據報文首部,FIN=1,其序列號為seq=u(等于前面已經傳送過來的數據的最后一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。
????②. 服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,并且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處于半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。
????③. 客戶端收到服務器的確認請求后,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最后的數據)。
????④. 服務器將最后的數據發送完畢后,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由于在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號為seq=w,此時,服務器就進入了LAST-ACK(最后確認)狀態,等待客戶端的確認。
????⑤. 客戶端收到服務器的連接釋放報文后,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連接還沒有釋放,必須經過2??MSL(最長報文段壽命)的時間后,當客戶端撤銷相應的TCB后,才進入CLOSED狀態。
????⑥. 服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB后,就結束了這次的TCP連接??梢钥吹?#xff0c;服務器結束TCP連接的時間要比客戶端早一些。
????5.?應用層
????應用層功能: 規定應用程序的數據格式
????例:TCP協議可以為各種各樣的程序傳遞數據,比如Email、WWW、FTP等等。那么,必須有不同協議規定電子郵件、網頁、FTP數據的格式,這些應用程序協議就構成了”應用層”。
????6.?socket
????我們知道IP層的ip地址可以唯一標示主機,而TCP層協議和端口號可以唯一標示主機的一個進程,這樣我們可以利用ip地址+協議+端口號唯一標示網絡中的一個進程。
????能夠唯一標示網絡中的進程后,它們就可以利用socket進行通信了,什么是socket呢?我們經常把socket翻譯為套接字,socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用以實現進程在網絡中通信。
????socket起源于UNIX,在Unix一切皆文件哲學的思想下,socket是一種"打開—讀/寫—關閉"模式的實現,服務器和客戶端各自維護一個"文件",在建立連接打開后,可以向自己文件寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉文件。
三. 網絡通信實現
????想實現網絡通信, 每臺主機需具備四要素: 本機的ip地址, 子網掩碼, 網管的ip地址, dns的ip地址
????獲取這四要素有兩種方式: 1. 靜態獲取: 即手動配置, 2. 動態獲取: 通過dhcp獲取
四. 結合協議來看網絡通信流程
????1.本機獲取
????本機的IP地址:192.168.1.100
????子網掩碼:255.255.255.0
????網關的IP地址:192.168.1.1
????DNS的IP地址:8.8.8.8
????2.打開瀏覽器,想要訪問Google,在地址欄輸入了網址:www.google.com。
????3.dns協議(基于udp協議)
????域名定義:http://jingyan.baidu.com/article/1974b289a649daf4b1f774cb.html
????頂級域名:以.com,.net,.org,.cn等等屬于國際頂級域名,根據目前的國際互聯網域名體系,國際頂級域名分為兩類:類別頂級域名(gTLD)和地理頂級域名(ccTLD)兩種。類別頂級域名是 ????????????以"COM"、"NET"、"ORG"、"BIZ"、"INFO"等結尾的域名,均由國外公司負責管理。地理頂級域名是以國家或地區代碼為結尾的域名,如"CN"代表中國,"UK"代表英國。地理頂級域名一般由各個國家或地區負責管理。
????二級域名:二級域名是以頂級域名為基礎的地理域名,比喻中國的二級域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.
????一般來說,二級域名是域名的一條記錄,比如alidiedie.com是一個域名,www.alidiedie.com是其中比較常用的記錄,一般默認是用這個,但是類似*.alidiedie.com的域名全部稱作是alidiedie.com的二級
????4.HTTP部分的內容,類似于下面這樣:
????GET / HTTP/1.1
????Host: www.google.com
????Connection: keep-alive
????User-Agent: Mozilla/5.0 (Windows NT 6.1) ……
????Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
????Accept-Encoding: gzip,deflate,sdch
????Accept-Language: zh-CN,zh;q=0.8
????Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
????Cookie: … …
????我們假定這個部分的長度為4960字節,它會被嵌在TCP數據包之中。
????5.?TCP協議
????TCP數據包需要設置端口,接收方(Google)的HTTP端口默認是80,發送方(本機)的端口是一個隨機生成的1024-65535之間的整數,假定為51775。
????TCP數據包的標頭長度為20字節,加上嵌入HTTP的數據包,總長度變為4980字節。
6.?IP協議
????然后,TCP數據包再嵌入IP數據包。IP數據包需要設置雙方的IP地址,這是已知的,發送方是192.168.1.100(本機),接收方是172.194.72.105(Google)。
????IP數據包的標頭長度為20字節,加上嵌入的TCP數據包,總長度變為5000字節。
7.?以太網協議
????最后,IP數據包嵌入以太網數據包。以太網數據包需要設置雙方的MAC地址,發送方為本機的網卡MAC地址,接收方為網關192.168.1.1的MAC地址(通過ARP協議得到)。
????以太網數據包的數據部分,最大長度為1500字節,而現在的IP數據包長度為5000字節。因此,IP數據包必須分割成四個包。因為每個包都有自己的IP標頭(20字節),所以四個包的IP數據包的長度分別為1500、1500、1500、560。
8.?服務器端響應
????經過多個網關的轉發,Google的服務器172.194.72.105,收到了這四個以太網數據包。
????根據IP標頭的序號,Google將四個包拼起來,取出完整的TCP數據包,然后讀出里面的”HTTP請求”,接著做出”HTTP響應”,再用TCP協議發回來。
????本機收到HTTP響應以后,就可以將網頁顯示出來,完成一次網絡通信。
五. 基于TCP和UDP兩個協議下SOCKET的通訊流程
????1.?對比:?
????TCP(Transmission Control Protocol)可靠的、面向連接的協議(eg:打電話)、傳輸效率低全雙工通信(發送緩存&接收緩存)、面向字節流。使用TCP的應用:Web瀏覽器;文件傳輸程序。
????UDP(User Datagram Protocol)不可靠的、無連接的服務,傳輸效率高(發送前時延小),一對一、一對多、多對一、多對多、面向報文(數據包),盡最大努力服務,無擁塞控制。使用UDP的應用:域名系統 (DNS);視頻流;IP語音(VoIP)。
????2.?tcp協議下的socket
????先從服務器端說起。服務器端先初始化Socket,然后與端口綁定(bind),對端口進行監聽(listen),調用accept阻塞,等待客戶端連接。在這時如果有個客戶端初始化一個Socket,然后連接服務器(connect),如果連接成功,這時客戶端與服務器端的連接就建立了??蛻舳税l送數據請求,服務器端接收請求并處理請求,然后把回應數據發送給客戶端,客戶端讀取數據,最后關閉連接,一次交互結束
????但是socket綁定ip和端口時可能出現下面的問題: OSError: [Error 48] Address already in use
? ??
轉載于:https://www.cnblogs.com/guyannanfei/p/10217552.html
總結
以上是生活随笔為你收集整理的网络编程2_网络通讯协议, socket(tcp, udp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【前端词典】和媳妇讲代理后的意外收获
- 下一篇: Spring Cloud Stream