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协议的更多相关文章

  1. python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)

    先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...

  2. python基础-TCP协议和UDP协议

    TCP协议是一种流式协议,UDP协议是一种数据包协议. TCP和UDP是OSI模型中传输层的协议.TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输. TCP和UDP区别总 ...

  3. python语法基础-网络编程-TCP协议和UDP协议

    ###############    网络编程    ############## """ 网络编程 学习了Python基础之后,包括函数,面向对象等,你就可以开发了,你 ...

  4. 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法

    网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) ​ 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...

  5. TCP协议与UDP协议的区别

    TCP协议与UDP协议的区别(转) 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  6. TCP协议和UDP协议的区别

    1. TCP协议面向连接. UDP协议面向非连接 (有无链接)2. TCP协议传输速度慢. UDP协议传输速度快 (传输速度)3. TCP协议保证数据顺序. UDP协议不保证 (数据的有序性. 在IP ...

  7. (转)TCP协议与UDP协议的区别

    TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  8. IP地址、端口、TCP协议、UDP协议

    最近在看<疯狂java讲义>,第17章网络编程里提到IP地址.端口.TCP协议.UDP协议这几个概念.以前上课时学过,现在重温了一遍.在这里,用自己的语言简单的讲解一下吧. IP地址:每一 ...

  9. TCP/IP协议、UDP协议、 Http协议

    开放式系统互联通信参考模型(Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),一种概念模型,由国际标准化 ...

  10. TCP协议和UDP协议基础介绍

    TCP协议和UDP协议区别 标签(空格分隔): TCP,udp TCP的三次握手 TCP被称为可靠的数据传输协议,主要是通过许多机制来实现的其中最主要的就是三次握手的功能,当然,TCP传送数据的机制非 ...

随机推荐

  1. 「vijos」lxhgww的奇思妙想(长链剖分)

    传送门 长链剖分的板子(又是乱搞优化暴力) 对于每一个点,我们定义它深度最深的子节点为它的重儿子(为什么不叫长儿子……),他们之间的连边为重边 然后长链剖分有几个性质 1.总链长为$O(n)$ 2.一 ...

  2. ES6 我的总结学习

    1 let 和 const let 的作用域与 const 命令相同:只在声明所在的块级作用域内有效.且不存在变量提升 . 1.1 let let 所声明的变量,可以改变. let a = 123 a ...

  3. Luogu P3619 魔法 【贪心/微扰证明】

    题目描述 cjwssb知道是误会之后,跟你道了歉.你为了逗笑他,准备和他一起开始魔法.不过你的时间不多了,但是更惨的是你还需要完成n个魔法任务.假设你当前的时间为T,每个任务需要有一定的限制ti表示只 ...

  4. failed to push some refs to 'https://gitee.com/ftl_663/java-shop.git'

    1.git init 2.git add . 3.git commit  -m "init" 4.git remote add origin  https://gitee.com/ ...

  5. Windows 程序设计 笔记

    知识点 双字节字符集和Unicode字符集有何区别?采用双字节字符集有何问题 双字节字符集(DBCS)编码是0-255,DBCS含有1字节代码与2字节代码,而Unicode是统一的16位系统,这样就允 ...

  6. [POI2007]石头花园SKA

    Description Blue Mary是一个有名的石头收藏家.迄今为止,他把他的藏品全部放在他的宫殿的地窖中.现在,他想将他的藏品陈列在他的花园中.皇家花园是一个边长为1000000000单位的平 ...

  7. ACM_折线中点

    折线中点 Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一 ...

  8. 【小程序】基于.NET CORE2.1 的 微信开放平台 第三方平台开发 教程一 准备工作

    微信第三方平台概述 公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务,开放给所有通过开发者资质认 ...

  9. python的des和3des加解密

    1.加密: pyDes.des(key, [mode], [IV], [pad], [padmode]) pyDes.triple_des(key, [mode], [IV], [pad], [pad ...

  10. jacaScript数组

    1.var arr=['1','2','3'] typeof arr (判断数组类型)    print(arr)打印数组内容 2.arr[100]='x',  数组中间自动添加,alert(arr. ...