网络基础,tpc,udp
一 , 网络基础相关知识
1. 架构 (重点)
C / S 架构 : client 客户端(APP) 和 server 服务器端
能充分发挥pc机的性能
B / S 架构 : browser 浏览器 和 server 服务器 (延伸于c/s架构)
B / S 架构统一了应用的接口
2. 通信
同一台电脑上俩个py程序通信 : 打开一个文件
俩个电脑通信 : 连一个网线
多个电脑通信 : 借助于交换机
(1).网卡 : mac地址(具有唯一性) : 物理地址,可以唯一标示某一台电脑 ;
生产厂商遵循国际标准生产
(2).IP地址 : 标识计算机在网络地址中的地址 , 四位 , 以 . 分割 , 十进制
过程 : 机器1发送请求 : 自身ip和mac信息和目的机信息的ip地址(想通过ip地址查找
mac地址然后通信),单播发送给交换机,交换机在本地学习记录信息,交换机通过广
播的形式发送,目的机接收确认信息后,单播发送给交换机,交换机此时可以单播发送给
机器1,因为之前已经记录了及其地址信息,所以不需要广播,机器1和目的机相互知道
物理地址后便可以直接相互通信,不用经过交换机.
(3).arp协议 : 将IP地址获取目标mac地址的一个协议(过程)
(4).端口 : 操作系统为本机上每一个运行程序都随机分配一个端口,其他电脑上的程序可以
通过端口获取到这个程序
(5).IP地址+端口 能唯一找到某台电脑上的某一个服务程序
(6).路由器 : 连接不同网段,路由
(7).网关 : 类似于局域网的入口出口
(8).网段 : 一个局域网的IP地址范围
(9).子网掩码 : 子网掩码 & IP 地址 得到网段
(10). osi 五层模型
应用层 ; 传输层 ; 网络层 ; 数据链路层 ; 物理层
互联网协议与osi模型
每层运行常见物理设备
hattp协议:超文本传输协议 ; ftp协议 : 上传与下载协议
osi模型 (层层包装)
二 , socket模块
1,
用户运行通信类应用时调用socket模块,进行执行,通过选用tpc / udp 协议传输到目的通信类应用
2. socket又叫套接字,有很多类型,(只了解俩种)
1. 基于文件类型的套接字 AF_UNIX (早期socket是源自于unix系统而研发的一种功能,主要是
为了同一台脑上多个程序直接通信)
2. 基于网络类型的套接字 AF_INET
3. tpc协议和udp协议
tpc 双方相互知道地址(全双工) ; udp 只要知道对方地址就可以发送消息,不保证数据安全但是传输快
基于tpc协议 : SOCK_STRFAM 基于udp协议 : SDCK_DGRAM
服务器端 import socket sk = socket.socket() #创建对象 默认基于网络类型的TPC协议
sk.bind(('127.0.0.1',18080)) # 绑定一个'ip',端口 端口范围 0-65535 但是 0-1023 不能用
sk.listen() #同时能接受的连接(类似于手机中的开机) conn,addr = sk.accept() #等待接收客户端的连接 accept会接收客户端的俩个连接(等待等待)
#print(conn) #family,type等 服务端的地址信息 和客户端的地址信息
#print(addr ) #客户端的IP地址,和端口 元组类型 #相互通信
msg_r = conn.recv(1024) #接收数据大小 1024个字节
print(msg_r.decode('utf-8')) #同时也需要解码 conn.close() #关闭服务(类似于手机中的挂断电话)
sk.close() #关闭程序(类似于手机中的关机) 客户端
import socket sk = socket.socket() sk.connect(('127.0.0.1',18080)) #连接 服务器的地址
#sk.send(b'hello')
msg_s = input('>>')
sk.send(msg_s.encode('utf-8')) #若是中文需要转码 sk.close()
三次挥手,四次握手:
三次握手:
客户端首先发送请求连接服务器 ;
服务器返回收到的请求,并要求连接客户端 ;
客户端回复可以连接
四次挥手 :
(谁先发起断开连接的请求都可以)客户端发起断开连接的请求 ,但是还可以接受数据 ;
服务器回复接收到客户端的请求 ;
服务器发送准备断开连接 ;
客户端回复确认断开连接
重点 : arp协议 ;
路由器与交换机区别 ;
tcp协议和udp协议的特点,及tcp协议的编码 ;
osi五层模型;
挥手与握手.
udp协议
通信优势 : 允许一个服务器同时和多个客户端通信
#服务端 import socket
sk = socket.socket(type = socket.SOCK_DGRAM)#upd协议
sk.bind(('127.0.0.1',8090)) #绑定一个 ip 和端口 #收发 msg_r , addr = sk.recvfrom(1024)#接收来自哪里的消息 msg_r接收的信息,addr客户端地址
print(msg_r.decode('utf-8'))
msg_s = input(('>>')) #只有客户端向服务器先发送后,服务器才能向客户端发送,否则服务器不知道客户端地址 sk.sendto(msg_s.encode('utf-8'),addr)#发给谁的消息 sendto(发送的消息 , 发送的目的地址)
sk.close() #客户端 import socket
sk = socket.socket((type = socket.SOCK_DGRAM))
msg_s = input('>>')
sk.sendto(msg_s.encode('utf-8'),('127.0.0.1',8090))
msg_r , addr = sk.recvfrom(1024)
print(msg_r.decode('utf-8'))
sk.close
设置颜色
结构 : \033[ 字体颜色,背景颜色 数据 \033[ 0m (第一个\033为开始,第二个为恢复默认颜色)
#服务端 import socket
sk = socket.socket(type = socket.SOCK_DGRAM)#upd协议
sk.bind(('127.0.0.1',8090)) #绑定一个 ip 和端口
#根据每个客户端的名字加上颜色
dic = {'小红':'\033[32m','金老板':'\033[33m'} #收发 msg_r , addr = sk.recvfrom(1024)#接收来自哪里的消息 msg_r接收的信息,addr客户端地址
msg_r = msg_r.decode('utf-8')
name = msg_r.split(':')[0].strip()
color = dic.get(name,' ')#获取字典中key对应的value值,没有返回空
print('%s %s \033[0m' % (color,msg_r))#按照结构排列 msg_s = input(('>>')) #只有客户端向服务器先发送后,服务器才能向客户端发送,否则服务器不知道客户端地址 sk.sendto(msg_s.encode('utf-8'),addr)#发给谁的消息 sendto(发送的消息 , 发送的目的地址)
sk.close() #客户端 import socket
sk = socket.socket((type = socket.SOCK_DGRAM)) msg_s = input('>>')
sk.sendto(msg_s.encode('utf-8'),('127.0.0.1',8090))
msg_r , addr = sk.recvfrom(1024)
print(msg_r.decode('utf-8')) sk.close
网络基础,tpc,udp的更多相关文章
- 异常处理与网络基础中的tcp,udp协议
# 异常处理: # 什么是异常?异常和错误的区别 # Error 语法错误 比较明显的错误 在编译代码阶段就能检测出来 # Iteration 异常 在执行代码的过程中引发的异常 # 异常发生之后的效 ...
- 网络编程—网络基础概览、socket,TCP/UDP协议
网络基础概览 socket概览 socket模块—TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...
- 【Windows socket+IP+UDP+TCP】网络基础
Windows Socket+网络 Winsock是 Windows下套接字标准. Winsock 编程分为UDP[Windows socket + UDP],TCP[Wi ...
- Python服务器开发 -- 网络基础
Python服务器开发 -- 网络基础 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.... 网络由下 ...
- Python服务器开发二:Python网络基础
Python服务器开发二:Python网络基础 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.包括: ...
- 前端学HTTP之网络基础
× 目录 [1]网络 [2]OSI [3]TCP/IP 前面的话 HTTP协议对于前端工程师是非常重要的.我们在浏览网站时,访问的每一个WEB页面都需要使用HTTP协议实现.如果不了解HTTP协议,就 ...
- 网络基础知识、ASP.NET 核心知识(1)*
为什么要写网络? 我原本的计划是这样的,连续两天梳理ASP.NET开发的核心知识.说到这呢,有人问了.“不是说好了做ASP.NET笔记吗?为啥要写网络基础知识?是不是傻?” 原因是这样的.作为网站开发 ...
- Java 网络编程(一) 网络基础知识
链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951826.html 网络基础知识 网络编程的目的:直接或间接地通过网络协议与其他计算机 ...
- Linux网络服务01——Linux网络基础设置
Linux网络服务01--Linux网络基础设置 一.查看及测试网络 1.使用ifconfig命令查看网络接口 (1)查看活动的网络接口 ifconfig命令 [root@crushlinux ~]# ...
随机推荐
- vue v-on 带参事件
1.js代码 var list=[ //定义一个数组 {title:} ] var box=new Vue({ el:'.box', data:{ list:list }, methods:{ //d ...
- Scrum第一次冲刺
1.项目描述 为了长大学子的便捷,避免遭遇官网爆炸而无法查询成绩,课表等相关个人信息.我们决定开发长大Tips(分担官网的压力). 2.基本业务 用户可以通过学号加密码登入长大Tips 用户可以在在用 ...
- The Tao to Excellent 2
就算自己现在的技术水平很菜,就算自己现在写的代码还是很烂,但我们还是要一直坚持在最前线,一直向上,也许,在前方,就有不一样的风景在等着我们. 因为我深深明白到一件事:人之所以选择混吃等死,是因为他们根 ...
- ACM-ICPC(11/9)
今天看了一下黑书,感觉很刘汝佳,是他的风格,题目挺好的~~~ 枚举 P12翻硬币 二进制枚举每一列的情况2^9种. 在每一种情况下然后对于每一行就是翻与不翻的两种情况~~~ 贪心 P13钓鱼问题 PO ...
- Linux 进程状态标识 Process State Definition
From : http://www.linfo.org/process_state.html 译者:李秋豪 进程状态标识是指在进程描述符中状态位的值. 进程,也可被称为任务,是指一个程序运行的实例. ...
- 【转】不错的linux下通用的java程序启动脚本
虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的通用shell脚本. 只需要修改一些配置变量,就可以用 ...
- python-函数的使用
一.函数的定义 首先,我们来看一个简单的例子来定义函数: def test(): print('hello') 在其中 def : 关键字,用来告诉解释器,接下来的一段代码是一个函数 test : ...
- Android学习笔记_4_单元测试
在实际开发中,开发android软件的过程需要不断地进行测试.而使用Junit测试框架,侧是正规Android开发的必用技术,在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性. 1. ...
- jdbc连接各种数据库字符串
oracle driverClass:oracle.jdbc.driver.OracleDriver url:jdbc:oracle:thin:@127.0.0.1:1521:dbname mysql ...
- onsubmit校验表单时利用ajax的return false无效解决方法
代码: function checkNewEmail(){ var re_email=new RegExp("\\w+@\\w+\\.\\w+\\.?\\w*"); var new ...