网络通信标准---网络协议

互联网协议--osi七层协议

五层协议:应用层:应用层、表示层、会话层
          传输层:传输层
    网络层:网络层
    数据链路层:数据链路层
    物理层:物理层
物理层就是用来发送电信号的
数据链路层跑协议,分组标准。 ethernet以太网协议,规定电信号如何分组
电信号拿来后是一堆数据,只要规定了怎么分组才能拿到正确数据

ethernet规定

一组电信号构成一个数据报,叫做帧
每一数据帧分成:报头head和数据data两部分
但凡接入互联网必须要有网卡
每个网卡出厂都有自己的MAC地址   前六位厂商地址后几位自己地址
MAC是全世界独一无二的
以通讯角度来说,以太网协议有物理层和数据链路层已经可以实现通讯了
以太网有广播的工作方式
广播包只能在局域网里面传,要不数据量太大会造成网络的故障
网络层---ip协议  ipv4/ipv6
ip数据包也分成head和data部分 ip头的意思和以太网差不多
ip地址和ip子网掩码中间的运算得出一个地址,是网段地址
按位与运算   两个同时是1才是1  二进制的ip地址和子网掩码进行计算
按照这个网段地址找到范围,然后再找到这个机器
ipv4/ipv6网关是用来帮助跨过子网的关口
跨子网,要用网关和网关进行通讯
用以太网的广播方式将数据交给网关,但是得先获得网关的MAC地址
但是我们知道的只有网关的IP地址
所以需要ARP协议,局域网内,用IP地址解析成MAC地址。这样用网关的IP地址获取MAC地址
才能将数据交给网关
如果发送端主机发送了目标MAC地址为FF.FF.FF.FF.FF.FF那么它就知道发送端需要获取MAC
但是接受数据的主机不知道是不是向它要MAC地址,所以还需要发送一个IP地址,让他知道是自己需要的
ARP协议里面的
同一子网地址内都用以太网的广播方式
IP地址和MAC地址可以确定一个机器在什么位置

-------------------------------------------------------------------------------------------------------------------------------------------

传输层跑两种协议:tcp协议和udp协议得到端口    确定要传输的是这个机器的哪个软件
ip加端口确定了全世界独一无二的软件
软件用机器的哪个端口,65536个端口前1024是操作系统用,后面全是自己的软件用
应用层:httpp ftp mai  协议   可以自己定协议
数据前一般都要加头  然后是数据
DHCP :自动分配IP地址
DNS:域名服务   将网址域名地址解析成IP地址

tcp协议

建立双向连接,用来进行数据的交互相互发送。
工作方式:c传给s一个请求,然后s再发送一个确认和一个请求,然后c再发送一个确认
所以一共发送了三次,三次握手
为了确认是否以我发送的那个数据,你俩进行回应,所以我的数据要加一个序列
如果你发送回来的时候我的序列+1证明是用我的数据进行回应
tcp协议又称为可靠协议,发送完包一定要等待对方确认收到了我的包进行了回应,才算发成功
如果没有回应过一段时间再发一次,所以是可靠协议。
可靠在发送完数据并不清空内存,直到对方回应确认收到后才收到
udp协议不用建立连接,被称为不可靠协议,发送完数据就清空内存,不等对方的确认信息。
tcp有断开连接,udp没有
谁最后确认数据收到谁先断,四次挥手断链接

socket编程

应用层与运输层之间多了一个socket抽象层
将传输协议都封装好直接用
基于应用层与传输层之间的抽象层
用基于网络的套接字:AF——INET
服务器端:先初始化socket(),然后与端口绑定bind()服务端的固定地址,对端口进行监听listen()看谁来链接了
accept()阻塞直到有客户端链接  和connect()组成一队进行链接

import socket
socket.socket(socket.AF_INET,socket.SOCK_STREAM)
服务端:
import socket
#买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 打开了这个服务端最后要关闭
#绑定手机卡
phone.bind(('127.0.0.1',8080))#127.0.0.1指的就是自己这台机器的IP地址
#开机
phone.listen(5)#5代表最大挂起的链接数
#等电话链接
conn,addr=phone.accept() 等待建立链接accept()等待建立
print('客户端IP:%s,客户端端口:%s'%(addr[0],addr[1]))
data=conn.recv(1024) #最大收1024 recv()接受数据,括号内最大接收量
print(data.decode('utf-8'))
conn.send(data.upper()) send()发送数据
#6、挂电话
conn.close() 建立的链接要关闭
#7.关机
phone.close() 客户端:
import socket
#买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 一样打开这个端口
#绑定手机卡 客户端没必要绑定所以不用了
#开机 也不用监听了 phone.connect(('127.0.0.1',8080)) 主动建立链接,前面IP地址后面是端口
phone.send('hello'.encode('utf-8')) 发送数据 data=phone.recv(1024)
print(data.decode('utf-8'))
#关机
phone.close() #同样要关机

持续性数据的交互,还有排队的进行链接:
服务端:

import socket
#买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定手机卡
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
phone.bind(('192.168.11.52',8080))#127.0.0.1指的就是自己这台机器的IP地址
#开机
phone.listen(5)#5代表最大挂起的链接数
#等电话链接
print('starting...')
while True: #链接循环
conn,addr=phone.accept()
print('客户端IP:%s,客户端端口:%s'%(addr[0],addr[1]))
while True: #通信循环
try: #用到try是因为有时候会发生但无法预知的错误
data=conn.recv(1024) #最大收1024
if not data:break #针对linux
print(data.decode('utf-8'))
conn.send(data.upper())
except ConnectionResetError:
break
#6、挂电话
conn.close() #断开连接
#7.关机
phone.close() 客户端: import socket
#买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定手机卡 客户端没必要绑定所以不用了
#开机 也不用监听了
#等电话链接
phone.connect(('192.168.11.52',8080))
while True:
msg=input('请输入:').strip()
phone.send(msg.encode('utf-8'))
data=phone.recv(1024)
print(data.decode('utf-8'))
#关机
phone.close() #客户端向服务端发送空消息的话 服务端的接收会卡住

python--网络编程--socket的更多相关文章

  1. Day07 - Python 网络编程 Socket

    1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...

  2. Python网络编程socket

    网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...

  3. python网络编程-socket编程

     一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...

  4. python网络编程socket /socketserver

    提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...

  5. python --- 网络编程Socket

    网络编程 定义:所为网络编程即是对信息的发送和接收. 主要工作: (1)发送端:将信息以规定的协议组装成数据包. (2)接收端:对收到的数据包解析,以提取所需要的信息. Socket:两个在网络上的程 ...

  6. Python网络编程-Socket简单通信(及python实现远程文件发送)

    学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅. 先介绍下TCP的三次握手: 1,简单的发送消息: 服务器端: i ...

  7. Day10 Python网络编程 Socket编程

    一.客户端/服务器架构 1.C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务)[QQ,SSH,MySQL,FTP] 2.C/S架构与socket的关系: 我们学习soc ...

  8. python网络编程——socket基础篇

    python的网络编程比c语言简单许多, 封装许多底层的实现细节, 方便程序员使用的同时, 也使程序员比较难了解一些底层的东西. 1 TCP/IP 要想理解socket,首先得熟悉一下TCP/IP协议 ...

  9. Python 网络编程——socket

    一 客户端/服务器架构 客户端(Client)服务器(Server)架构,即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 理想/目标状态—— 最常用的软件服务器是 ...

  10. Python网络编程—socket(二)

    http://www.cnblogs.com/phennry/p/5645369.html 接着上篇博客我们继续介绍socket网络编程,今天主要介绍的内容:IO多路复用.多线程.补充知识点. 一.I ...

随机推荐

  1. 【Luogu】P3232游走(高斯消元解概率)

    题目链接 参见远航之曲dalao的题解,我再写一遍的话就没啥意思了. #include<cstdio> #include<cstring> #include<algori ...

  2. Node.js 文件输入

    最近在尝试用 JavaScript (Node.js) 写题.为此,特地看了 ECMAScript 2017 Language Specification(大雾).写题一般是从文件输入,确切地说是,将 ...

  3. outline:0与outline:none区别

    outline:0与outline:none的效果完全一样,用哪个都行,为了少写几个字,提倡用outline:0.具体区别如下: 出处: https://stackoverflow.com/quest ...

  4. [ZJOI2007]最大半连通子图 (Tarjan缩点,拓扑排序,DP)

    题目链接 Solution 大概是个裸题. 可以考虑到,如果原图是一个有向无环图,那么其最大半联通子图就是最长的一条路. 于是直接 \(Tarjan\) 缩完点之后跑拓扑序 DP就好了. 同时由于是拓 ...

  5. Java面试题之HashMap如何有效减少碰撞

    1.扰动函数算法,促使元素位置分布均匀,减少碰撞几率: 2.使用final对象,并采用合适的equals方法和hashCode方法:

  6. Java语言编码规范 - Java语言编码规范(中文版)(http://doc.javanb.com/code-conventions-for-the-java-programming-language-zh/index.html)

      目录 1 介绍 1.1 为什么要有编码规范 1.2 版权声明 2 文件名 2.1 文件后缀 2.2 常用文件名 3 文件组织 3.1 Java源文件 3.1.1 开头注释 3.1.2 包和引入语句 ...

  7. 微信JSSDK分享功能详解

    本文以微信分享到朋友圈,分享给微信好友为例为参考,进行调用测试,想添加其他的功能,自行查看开发人员文档即可 工欲善其事,必先利其器,好好利用下边的帮助工具,都是腾讯给开发人员的工具 1.微信开发者说明 ...

  8. TStringList,快速解析 查找测试。。。很有用,再也不用 FOR 循环了

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABKAAAALHCAIAAAA2Gq0zAAAgAElEQVR4nOydeVgUV76wK5OZb5JJZi

  9. Oracle 实例名/服务名 请问SID和Service_Name有什么区别

    可以简单的这样理解:一个公司比喻成一台服务器,数据库是这个公司中的一个部门. 1.SID:一个数据库可以有多个实例(如RAC),SID是用来标识这个数据库内部每个实例的名字, 就好像一个部门里,每个人 ...

  10. mysql 数据库查询优化

    从上图可以看出,计算机系统硬件性能从高到代依次为: CPU——Cache(L1-L2-L3)——内存——SSD硬盘——网络——硬盘 由于SSD硬盘还处于快速发展阶段,所以本文的内容不涉及SSD相关应用 ...