python 网络通信协议/TCP,UDP区别
一.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)