day28 网络编程
网络编程
什么是网络编程?
编写基于网络的应用程序的过程称之为网络编程
一.CS构架
C/S构架 服务器和客户端之间用网线连接 提供数据的计算机称为服务器,访问数据的计算机称为客户端
二.网络通讯的基本要素
两台计算机想要通讯,必须具备两个基本要素
1.物理连接介质,包括网线,无线电,光纤等
2.通讯协议
三.网络通讯协议
OSI七层模型
1.什么是OSI?
开放式系统互联网通讯参考模型
OSI把整个通讯过程划分为七层,简称OSI七层模型
①应用层②表示层③会话层④传输层⑤网络层⑥数据链路层⑦物理层
①②③统称为应用层
物理层
物理连接介质
物理层的功能:基于电子器件发送电流信号,根据电流的高低可以对应到数字0和1,也就是二进制数据
数据链路层
单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思
以太网协议:
一组电信号构成一个数据包,叫做帧
每一数据帧分成:报头head 和 data数据两部分
head包含:发送者/源地址(6字节),接受者/目的地址(6字节),数据类型(标签+以太类型)(6字节)
data包含:数据包的具体内容(56-1500字节)
MAC地址:源地址和目标地址
每个电脑必须由mac地址,它是全球唯一的
广播:有了mac地址同一网络内的两台主机就可以通讯了
广播太多会造成广播风暴 交换机会自动学习 会降低广播的次数
数据帧:head:源mac地址,目标mac地址 data:01001010
网络层
IP协议:规定网络地址的协议叫IP协议,它定义的地址称为IP地址 范围:0.0.0.0-255.255.255.255
一个IP地址通常写成四段十进制
子网掩码:任意两个IP地址是否属于同一子网络
ARP协议:通讯是基于mac的广播方式实现的.计算机在发包时,获取自身的mac是容易的,如何获取目标主机mac,就需要通过ARP协议.
数据报: 同一子网 :源IP 源MAC 目标的MAC 目标的IP 数据
不同子网 :源IP 源MAC 目标MAC 对方的网关地址 数据
传输层
工作在传输层的两个协议 TCP/UDP
网络层的IP帮我们区分了子网,以太网的mac帮我们找到了主机,如何识别主机上的应用程序,这就需要端口,端口即应用程序与网卡关联的编号.
传输层功能:建立端口与端口的通讯 端口范围:0-65535,0-1023为系统的占用端口
端口号在同一层计算机中不能重复
注意:不要使用常见的程序已经占用的端口 比如:apache 是8080,mysql是3306,FTP是21
这一堆网络协议 本质就是做两件事情:
1.如何找到对方
2.数据如何发送
Ip用来标识一个局域网中的一台电脑 端口用于标识某个应用程序 这样我们就可以准确定位到某个计算机中的某个程序
TCP是一种可靠的传输协议,可以保证数据传输是完整的
如何保证数据传输是完整的?
TCP在传输数据前 会经过一个三次握手的过程 来验证数据传输是否可靠
TCP三次握手解释:①客户端(client)先发一个数据syn=1 ②服务器(server)返回一个确认信息确信我收到了ack=2,然后给客户端发送一个数据syn=1 ③客户端返回一个确认信息 ack=2
连接是虚拟概念不实际存在
TCP四次挥手 断开连接:①客户端先发一个结束请求fin=1 ②服务器返回一个确认的信息表示我收到了ack=2 ③服务器思考了一段时间确认结束,给客户端发送一个结束请求fin=1 ③客户端返回一个确认信息表示我收到了ack=2
四次分手也是保证数据传输是完整的
在三次握手时,的确保证了数据传输是可靠,但是后续有可能由于种种原因例如网络中断,丢包等等,导致数据不完整
TCP的解决方案
每次发送数据报,都需要对方返回一个确认信息,如果一段时间后,对方没有返回,就重复发送,直到重试的次数超过某个指定的值,就判断连接已经丢失
TCP的优点: 可以保证数据完整性
缺点:由于需要接收确认信息,所以整体传输效率较低
四.socket
什么是socket?
socket是Python提供的一个模块,当然其他任何语言都有
用来处理网络传输相关的操作,其实就是封装了底层复杂,丑陋的TCP和UDP协议,对外提供简单优雅的使用接口
socket的作用:减少网络编程的工作量
如何使用?
默认使用的是TCP协议
cs构架的程序必然有客户端程序和服务端程序
为了同一方法,服务器和客户端使用的都是socket
socket服务器
import socket
#创建socket对象
server=socket.socket()
#作为服务器必须为socket指定ip和端口
server.bind(('192.168.12.207',4554))#明确饭店地址
server.listen() #监听端口,饭店们开了
#接受顾客的连接请求
client,address =server.accept()
#接受
data=client.recv(1024)
print(data.decode('utf-8'))
#发送
client.send('我是你的服务器'.encode('utf-8'))
#收发数据都是bytes类型,收发数据都是客户端的socket完成的,服务端的socket只做数据处理
#关闭socket 回收资源
server.close()
socket客户端
import socket
#创建socket对象
client=socket.socket()
#连接服务器 就是在做三次握手
client.connect(('192.168.12.207',4554))
#收发数据
client.send('你好'.encode('utf-8'))
data=client.recv(1024)
print(data.decode('utf-8'))
#关闭连接 就是在做四次挥手
client.close()
day28 网络编程的更多相关文章
- 8.7 day28 网络编程 socket套接字 半连接池 通信循环 粘包问题 struct模块
前置知识:不同计算机程序之间的数据传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...
- 《Python》网络编程之客户端/服务端框架、套接字(socket)初使用
一.软件开发的机构 我们了解的涉及到两个程序之间通讯的应用大致可以分为两种: 第一种是应用类:QQ.微信.网盘等这一类是属于需要安装的桌面应用 第二种是web类:比如百度.知乎.博客园等使用浏览器访问 ...
- 猫哥网络编程系列:HTTP PEM 万能调试法
注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...
- python select网络编程详细介绍
刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...
- Linux Socket 网络编程
Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...
- 猫哥网络编程系列:详解 BAT 面试题
从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...
- 浅谈C#网络编程(一)
阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...
- C++11网络编程
Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...
- Java - 网络编程
Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh. 参考:
随机推荐
- 在PHP5.3以上版本运行ecshop出现的问题及解决方案
ecshop 问题一:商城首页报错 Strict Standards: Only variables should be passed by reference in D:\wamp\ecshop\ ...
- UVa 202 Repeating Decimals(抽屉原理)
Repeating Decimals 紫书第3章,这哪是模拟啊,这是数论题啊 [题目链接]Repeating Decimals [题目类型]抽屉原理 &题解: n除以m的余数只能是0~m-1, ...
- VS2017
Visual Studio常用快捷键https://www.cnblogs.com/DonetRen/p/8182911.htmlVisual Studio 2017 Product Family S ...
- 《大话设计模式》c++实现 外观模式
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式在什么时候使用呢? 分为三个阶段: (1)首先,在设计初期阶段,应该要有意识的 ...
- copy on write,代理模式
StringBuilder 内部用了代理的技术实现, 是可变字符串的代理 .net设计模式实例之代理模式(Proxy Pattern) 一.代理模式简介(Brief Introduction) 代理模 ...
- 设计模式之模板方法模式:实现可扩展性设计(Java示例)
概述 在实际开发中,常常会遇到一项基本功能需要支撑不同业务的情况.比如订单发货,有普通的整包发货,有分销单的发货,采购单的发货,有多商品的整包或拆包发货等.要想支持这些业务的发货,显然不能在一个通用流 ...
- PYQT5学习笔记之各模块介绍
Qtwidgets模块包含创造经典桌面风格的用户界面提供了一套UI元素的类 Qtwidegts下还有以下常用对象,所以一般使用Qtwidegts时会使用面向对象式编程 QApplication: ap ...
- JustOj 1036: 习题6.11 迭代法求平方根
题目描述 用迭代法求 .求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001. 输出保留3位小数 输入 X 输出 X的平方根 样例输 ...
- ssh无秘钥登录
服务器1:172.16.20.136 服务器2:172.16.20.134 在服务器2上输入:ssh-keygen -t rsa (一路回车) scp /root/.ssh/id_ ...
- N-Gram的基本原理
1.N-Gram的介绍 N-Gram是基于一个假设:第n个词出现与前n-1个词相关,而与其他任何词不相关(这也是隐马尔可夫当中的假设).整个句子出现的概率就等于各个词出现的概率乘积.各个词的概率可以通 ...