1. 程式人生 > >python 網絡通信協議/TCP,UDP區別

python 網絡通信協議/TCP,UDP區別

conn ntp type time ges 終端 real 路由選擇 tcp特性

一.osi七層協議

互聯網協議按照功能不同分為osi七層或tcp/ip五層或tcp/ip四層

技術分享圖片

協議具體內容

技術分享圖片
各層的功能簡述:
    【1】物理層:主要定義物理設備標準,如網線的接口類型、光纖的接口類型、各種傳輸介質的傳輸速率等。它的主要作用是傳輸比特流(就是由1、0轉化為電流強弱來進行傳輸,到達目的地後在轉化為1、0,也就是我們常說的數模轉換與模數轉換),這一層的數據叫做比特。

  【2】數據鏈路層:定義了如何讓格式化數據以進行傳輸,以及如何讓控制對物理介質的訪問,這一層通常還提供錯誤檢測和糾正,以確保數據的可靠傳輸。

  【3】網絡層:在位於不同地理位置的網絡中的兩個主機系統之間提供連接和路徑選擇,Internet的發展使得從世界各站點訪問信息的用戶數大大增加,而網絡層正是管理這種連接的層。

  【
4】傳輸層:定義了一些傳輸數據的協議和端口號(WWW端口80等),如:TCP(傳輸控制協議,傳輸效率低,可靠性強,用於傳輸可靠性要求高,數據量大的數據),UDP(用戶數據報協議,與TCP特性恰恰相反,用於傳輸可靠性要求不高,數據量小的數據,如QQ聊天數據就是通過這種方式傳輸的), 主要是將從下層接收的數據進行分段和傳輸,到達目的地址後再進行重組,常常把這一層數據叫做段。   【5】會話層:通過傳輸層(端口號:傳輸端口與接收端口)建立數據傳輸的通路,主要在你的系統之間發起會話或者接受會話請求(設備之間需要互相認識可以是IP也可以是MAC或者是主機名)。   【6】表示層:可確保一個系統的應用層所發送的信息可以被另一個系統的應用層讀取。例如,PC程序與另一臺計算機進行通信,其中一臺計算機使用擴展二一十進制交換碼(EBCDIC),而另一臺則使用美國信息交換標準碼(ASCII)來表示相同的字符。如有必要,表示層會通過使用一種通格式來實現多種數據格式之間的轉換。   【
7】應用層: 是最靠近用戶的OSI層,這一層為用戶的應用程序(例如電子郵件、文件傳輸和終端仿真)提供網絡服務。 各層中涉及的協議的簡單解釋: 應用層   ·DHCP(動態主機分配協議)   · DNS (域名解析)   · 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)網絡校時協議 傳輸層   ·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)點對點隧道協議 網絡層 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) 網絡上進行保密而安全的通訊。 數據鏈路層   802.11 · 802.16 · Wi-Fi · WiMAX · ATM · DTM · 令牌環 · 以太網 · FDDI · 幀中繼 · GPRS · EVDO · HSPA · HDLC · PPP · L2TP · ISDN 物理層   以太網物理層 · 調制解調器 · PLC · SONET/SDH · G.709 · 光導纖維 · 同軸電纜 · 雙絞線 各層功能及協議的簡單解釋
各層功能及協議的簡單解釋

技術分享圖片

五層通信流程圖

技術分享圖片

二.TCP,UDP區別

1.TCP三次握手 四次揮手

技術分享圖片

2.TCP/UDP下的socket

TCP服務端(多人聊天版)

 1 import socket
 2 
 3 server = socket.socket()
 4 
 5 server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # 重用這個端口
 6 
 7 ip_port = (127.0.0.1,8001)
 8 
 9 server.bind(ip_port)
10 
11 server.listen(3)
12 
13 while 1:
14     conn, addr = server.accept()
15 
16     while 1:
17         from_client_msg = conn.recv(1024)
18         print(來自寶寶的消息:,from_client_msg.decode(utf-8))
19 
20         if from_client_msg.decode(utf-8) == byebye:
21             break
22 
23         to_client_msg = input(高望>>>)
24         conn.send(to_client_msg.encode(utf-8))
25 
26     conn.close()

TCP客戶端(多人聊天版)

 1 import socket
 2 
 3 client = socket.socket()  # 創建對象
 4 
 5 ip_port = 127.0.0.1, 8001  # 設置IP地址
 6 
 7 client.connect(ip_port)  # 綁定IP地址
 8 
 9 while 1:  # 循環
10     to_server_msg = input(寶寶說:)  # 輸入發給服務端要說的話
11 
12     client.send(to_server_msg.encode(utf-8))  # 發送上面輸入的話到服務端
13 
14     if to_server_msg == byebye:  # 判斷輸入的話如果是byebye 則跳出循環
15 
16         break
17 
18     from_server_msg = client.recv(1024)  # 獲取服務端發過來的內容
19 
20     print(來自高望的消息:,from_server_msg.decode(utf-8))  # 打印獲取到的服務端信息
21 
22 
23 client.close()

UDP服務端(多人聊天版)

import socket

udp_server = socket.socket(type = socket.SOCK_DGRAM)  # datagram

ip_port = (127.0.0.1, 8002)

udp_server.bind(ip_port)

while 1:
    from_client_msg, client_addr = udp_server.recvfrom(1024)

    print(from_client_msg.decode(utf-8),client_addr)


    to_client_msg = input(服務端說;)

    udp_server.sendto(to_client_msg.encode(utf-8), client_addr)

UDP客戶端(多人聊天版)

 1 import socket
 2 
 3 udp_client = socket.socket(type = socket.SOCK_DGRAM)
 4 
 5 ip_port = (127.0.0.1, 8002)
 6 
 7 while 1:
 8     to_server_msg = input(客戶端說:)
 9 
10     udp_client.sendto(to_server_msg.encode(utf-8), ip_port)
11 
12     from_server_msg, server_addr = udp_client.recvfrom(1024)
13 
14     print(from_server_msg.decode(utf-8), server_addr)

python 網絡通信協議/TCP,UDP區別