python TCP协议与UDP协议
1. TCP协议 / UDP协议
1.1 TCP协议
1.可靠、慢、全双工通信
2.建立连接的时候 : 三次握手
3.断开连接的时候 : 四次挥手
4.在建立起连接之后
发送的每一条信息都有回执
为了保证数据的完整性,还有重传机制
5.长连接 :会一直占用双方的端口
6.IO(input,output)操作,输入和输出是相对内存来说的
write / send -----> 输出 output
read / recv ------> 输入 input
7.能够传递的数据长度几乎没有限制
1.2 UDP协议
- 1.无连接的 速度快
- 2.可能会丢消息
- 3.能够传递的数据的长度是有限的,是根据数据传递设备的设置有关系
1.3 应用场景
- TCP 文件的上传下载(发送邮件、网盘、缓存电影)
- UDP 即时通信类的(qq、微信、飞秋)
2. osi七层模型 /osi五层协议
| osi七层模型 | osi五层协议 | 协议 | 物理设备 | |
|---|---|---|---|---|
| 应用层 表示层 会话层 (三层总结成一层) |
五层 | 应用层 | http / https / ftp / smtp 协议 python代码:hello |
|
| 传输层 | 四层 | 传输层 | tcp协议 / udp协议 端口 | 四层路由器、四层交换机 |
| 网络层 | 三层 | 网络层 | ipv4 / ipv6 协议 | (三层)路由器、三层交换机 |
| 数据链路层 | 二层 | 数据链路层 | mac地址 arp协议 | 网卡、(二层)交换机 |
| 物理层 | 一层 | 物理层 |
3. socket(套接字)
socket 是一个工作在应用层和传输层之间的抽象层。
- 帮助我们完成了所有信息的组织和拼接
- sokcet对于程序员来说 已经是网络操作的底层了
socket历史:
- (初期)基于文件通信 -------- 完成同一台机器上的两个服务之间的通信的
- (现在)基于网路通信 -------- 完成了多台机器之间的多个服务通信
3.1 socket用于TCP协议
# server.py 服务端
import socket
sk = socket.socket()
# socket()参数中:family(基于……通信)=AF_INET(网络通信), type(协议)=SOCK_STREAM(TCP协议),TCP协议默认不用写,如果想要写协议必须是:type=socket.SOCK_STREAM
sk.bind(('192.168.12.25',9000))
sk.listen()
while True:
conn,addr = sk.accept()
while True:
msg = conn.recv(1024)
if msg.decode('utf-8').upper() == 'Q':
break
print(msg.decode('utf-8'))
cont = input('内容(输入Q断开):')
conn.send(cont.encode('utf-8'))
if cont.upper() == 'Q':
break
conn.close()
sk.close()
# client.py 客户端
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',9000))
while True:
msg = sk.recv(1024)
if msg.decode('utf-8').upper() == 'Q':
break
print(msg.decode('utf-8'))
cont = input('内容(输入Q断开):')
sk.send(cont.encode('utf-8'))
if cont.upper() == 'Q':
break
sk.close()
sk.accept() 与 sk.connect() 是建立三次握手的过程
3.2 socket用于UDP协议
# server.py 服务端
import socket
sk = socket.socket(type = socket.SOCK_DGRAM) # UDP协议必须加上 type=socket.SOCK_DGRAM
sk.bind(('127.0.0.1',9000))
while True:
msg,client_addr = sk.recvfrom(1024) # recvfrom用于不知道对方ip时,获取到ip给client_addr
msg = msg.decode('utf-8')
print(msg)
msg1 = input('>>>').encode('utf-8')
sk.sendto(msg1,client_addr)
sk.close()
# client.py 客户端
import socket
sk = socket.socket(type = socket.SOCK_DGRAM)
while True:
inp = input('>>>').encode('utf-8')
sk.sendto(inp,('127.0.0.1',9000))
msg = sk.recv(1024).decode('utf-8') # 这里不需要使用recvfrom,因为知道对方ip地址
print(msg)
sk.close()
python TCP协议与UDP协议的更多相关文章
- python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)
先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...
- python基础-TCP协议和UDP协议
TCP协议是一种流式协议,UDP协议是一种数据包协议. TCP和UDP是OSI模型中传输层的协议.TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输. TCP和UDP区别总 ...
- python语法基础-网络编程-TCP协议和UDP协议
############### 网络编程 ############## """ 网络编程 学习了Python基础之后,包括函数,面向对象等,你就可以开发了,你 ...
- 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法
网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...
- TCP协议与UDP协议的区别
TCP协议与UDP协议的区别(转) 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...
- TCP协议和UDP协议的区别
1. TCP协议面向连接. UDP协议面向非连接 (有无链接)2. TCP协议传输速度慢. UDP协议传输速度快 (传输速度)3. TCP协议保证数据顺序. UDP协议不保证 (数据的有序性. 在IP ...
- (转)TCP协议与UDP协议的区别
TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...
- IP地址、端口、TCP协议、UDP协议
最近在看<疯狂java讲义>,第17章网络编程里提到IP地址.端口.TCP协议.UDP协议这几个概念.以前上课时学过,现在重温了一遍.在这里,用自己的语言简单的讲解一下吧. IP地址:每一 ...
- TCP/IP协议、UDP协议、 Http协议
开放式系统互联通信参考模型(Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化 ...
- TCP协议和UDP协议基础介绍
TCP协议和UDP协议区别 标签(空格分隔): TCP,udp TCP的三次握手 TCP被称为可靠的数据传输协议,主要是通过许多机制来实现的其中最主要的就是三次握手的功能,当然,TCP传送数据的机制非 ...
随机推荐
- 51nod 1100 斜率最大
可以用三个点简单证明斜率最大的直线两个点! #include <bits/stdc++.h> #define MAXN 10010 using namespace std; struct ...
- Linux环境下MySQL5.7安装记录
参考文档 <Installing MySQL on Unix/Linux Using Generic Binaries> https://dev.mysql.com/doc/refman/ ...
- Matlab实现图像分割 分类: 图像处理 2014-06-14 21:31 662人阅读 评论(1) 收藏
下面使用极小值点阈值选取方法,编写MATLAB程序实现图像分割的功能. 极小值点阈值选取法即从原图像的直方图的包络线中选取出极小值点, 并以极小值点为阈值将图像转为二值图像 clear all; cl ...
- tabBar隐藏方式
如果是从A push到B,并且把A的一个东西传到B,那么在push时就要隐藏tabBar,并且要在B ViewController设置一个接收A传到的属性. 这种方式一般用在表格点选,要把表格点选的内 ...
- 转 pygame学习笔记(1)——安装及矩形、圆型画图
http://www.cnblogs.com/xiaowuyi/archive/2012/06/06/2538921.html
- 配置maven环境变量cmd控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件
配置maven环境变量cmd控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件 首先maven环境变量: 变量名:MAVEN_HOME 变量值:E:\apache-maven-3.2 ...
- cloudera-scm-server启动出现Error creating bean with name 'entityManagerFactoryBean'与HHH010003: JDBC Driver class not found: com.mysql.jdbc.Driver错误解决办法(图文详解)
不多说,直接上干货! 问题详情 -- ::, INFO main:com.cloudera.server.cmf.Main: Starting SCM Server. JVM Args: [-Dlog ...
- 老式浏览器支持html5和css3
在IE页面的head标签里面加入 <!-[if IE]> <script src="http://html5shiv.googlecode.com/svn/trunk/ ...
- 关于 user agent ua
1.ua介绍: ua查询参考网址:http://www.atool.org/useragent.php(也可以自己制作html查询) js 属性:navigator.userAgent 使用方法:将网 ...
- JS中的逻辑运算符&&、||,位运算符|,&
1.JS中的||符号: 运算方法: 只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值. 只要“||”前面为true,不管“||”后面是true还是fals ...