ISO(国际标准化组织)---》网络体系结构标准 OSI模型

OSI 七层模型

  • 应用层 :提供用户服务,具体内容由特定程序规定
  • 表示层 :提供数据的压缩解压和加密等
  • 会话层 :建立程序级的连接,决定使用什么样的传输服务
  • 传输层 :提供合适的通信服务,流量控制
  • 网络层 : 路由选择,网络互联,分组传输
  • 链路层 : 提供链路交换,具体消息发送
  • 物理层 : 物理硬件,接口

OSI 模型优点 : 将功能分开,降低网路传输中的耦合度,每一部分完成自己的功能,开发更加清晰。

高内聚 :使模块功能单一,不混杂。

低耦合 :模块之间尽量减少相互的关联和影响

四层、五层模型

四层模型

  • 应用层 : 应用层 表示层 会话层
  • 传输层 : 传输层
  • 网络层 : 网络层
  • 物理链路层 : 链路层 物理层

五层模型(TCP/IP模型)

  • 应用层 : 应用层 表示层 会话层
  • 传输层 : 传输层
  • 网络层 : 网络层
  • 链路层 : 链路层
  • 物理层 : 物理层

什么是协议

网络协议 : 网络通信中,各方必须遵守的规定,包括建立什么连接,如何识别,消息结构等

应用层: TFTP HTTP SMTP DNS

传输层: TCP UDP

网络层: IP

网络概念

主机 : 计算机的名称 localhost

#获取主机名
In [3]: socket.gethostname()
Out[3]: 'tedu'
通过主机名解析IP
In [4]: socket.gethostbyname('tedu')
Out[4]: '127.0.1.1' In [5]: socket.gethostbyname('localhost')
Out[5]: '127.0.0.1'

IP

IPv4 : 192.168.1.2

点分是十进制:三个点分为四个部分,0--255

IPv6 : ip地址更多

127.0.0.1 : 本地测试ip

0.0.0.0 : 局域网可用IP

192.168.1.0 : 表示网段

192.168.1.1 : 网关

192.168.1.255 : 广播地址

2---254

ifconfig ping

#通过主机名获取地址
In [6]: socket.gethostbyaddr('www.baidu.com')
Out[6]: ('127.0.0.1', [], ['119.75.216.20'])
主机名 别名 IP 将IP地址转换为二进制
In [7]: socket.inet_aton('192.168.1.2')
Out[7]: b'\xc0\xa8\x01\x02' 将二进制转换为点分十进制
In [8]: socket.inet_ntoa(b'\xc0\xa8\x01\x02')
Out[8]: '192.168.1.2'

inet_pton inet_ntop 功能同上,只是第一个参数用

socket.AF_IENT表示IPv4 socket.AF_INET6--->IPv6

端口号

端口号是地址的组成部分,在一个系统中区分应用层程序

1--65535 : 1--255 众所周知的端口 256---1023 系统端口

10000 6666 7777 8888 9999

获取一个应用的端口
In [11]: socket.getservbyname('mysql')
Out[11]: 3306

子网掩码:和IP配合过滤网段

dns:域名解析

字节序

  • 大端序:高字节存在低地址
  • 小端序:低字节存在低地址

网络字节序 : 将字节序发送方式统一

传输层服务

tcp协议

面向连接 ,是一种可靠的数据传输

三次握手

  1. 客户端向服务器发起连接请求(问是否可以连接)
  2. 服务器接收到请求后进行确认(允许连接)返回报文
  3. 客户端收到许可,建立连接

四次挥手

  1. 主动方发送报文告知被动方要断开连接
  2. 被动方返回报文,告知受到请求,准备断开
  3. 被动方发送报文给主动方告知准备就绪可以断开
  4. 主动方发送报文确定断开

可靠传输 : 无失序 无差错 无丢失 无重复

应用情况 : 适用于传输内容较大,网络情况好,需要提供准确传输的情况

比如 : 聊天信息 ,文件传输,邮件

udp协议

面向无连接的服务是一种不可靠的数据传输发送时由发送端自主进行,不考虑接收端

  • 适用情况:网络较差,对传输准确性要求低,广播组播
  • 比如:视频会议, 广播数据

套接字编程

套接字: 进行网络通信的一种手段 socket

  • 流式套接字(SOCK_STREAM) :传输层基于tcp协议进行通信
  • 数据报套接字(SOCK_DGRAM) :传输层基于udp协议进行通信
  • 原始套接字(SOCK_RAW): 访问底层协议的套接字

TCP 服务端

from socket import *

1. 创建套接字

socket (socket_family = AF_INET,
socket_type = SOCK_STREAM,
proto = 0)
功能 : 创建套接字
参数 : socket_family:选择地址族种类 AF_INET (UNIX)
socket_type : 套接字类型
SOCK_STREAM 流式
SOCK_DGRAM 数据报
proto :子协议类型默认为0
返回值 : 返回创建的套接字

2. 绑定 IP 和端口号

sockfd.bind()
功能 : 绑定IP和端口
参数 : 是一个元组 ,第一项是字符串形式的IP
第二项是端口号
(‘192.168.1.2’,8888)

3. 让套接字具有监听功能

s

ockfd.listen(n)
功能 : 使套接字变为监听套接字,同时创建监听队列
参数 : n 监听队列大小

4. 等待客户端连接

sockfd.accept()
功能 : 阻塞等待客户端连接
返回值 : 第一个:返回一个新的套接字用来和客户端通信
第二个:返回连接的客户端的地址

5. 消息的收发

recv(buffer)
功能 : 接收消息
参数 : 一次接收消息的大小 字节
返回值: 接收到的内容 send(data)
功能: 发送消息
参数: 发送的内容 (byte)
返回值 : 发送了多少个字节
  • 当没有接收端的时候send操作会导致 broken pipe

6. 关闭套接字

close()

功能 : 关闭套接字

tcp客户端流程

  • 1.创建流式套接字
  • 2.发起连接请求
connect()
功能:发起连接
参数 : 一个元组 第一个元素 : 服务器的IP
第二个元素 : 服务器的port
  • 3.收发消息
  • 4.关闭套接字

Python网络通信 (一)的更多相关文章

  1. Python网络通信

    day26 网络通信 参考: http://www.cnblogs.com/yuanchenqi/articles/5692716.html 男生是client端,字条是socket(sk),通过sk ...

  2. FastNet C++/Python 网络通信库之 协议

    协议可以使用的基础数据类型: UInt8,UInt16,UInt32,UInt64Int8,Int16,Int32,Int64Float,Double,Bool,String [T]  数组,T代表元 ...

  3. Python—网络通信编程之tcp非阻塞通信(socketserver)

    服务端代码 import socketserver # 定义一个类 class MyServer(socketserver.BaseRequestHandler): # 如果handle方法出现报错, ...

  4. Python—网络通信编程之udp通信编程

    服务端代码 import socket # 1.创建实例,即数据报套接字 server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 2.绑 ...

  5. Python—网络通信编程之tcp通信编程

    服务端代码 import socket # 1.创建流式套接字实例 # server = socket.socket() server = socket.socket(socket.AF_INET, ...

  6. python中Socket的使用

    说明 前一段时间学习python网络编程,完成简单的通过python实现网络通信的功能.现在,将python中Socket 通信的基本实现过程做一个记录备份. Socket通信 python 中的so ...

  7. twisted是python实现的基于事件驱动的异步网络通信构架。

    网:https://twistedmatrix.com/trac/ http://www.cnblogs.com/wy-wangyan/p/5252271.html What is Twisted? ...

  8. 百万年薪python之路 -- 网络通信原理

    1. C/S B/S架构 C: Client 客户端 B: Browse 浏览器 S: Server 服务端 C/S架构: 基于客户端与服务端之间的通信 eg: QQ,微信,LOL,DNF等需要安装A ...

  9. python中的网络通信,socket、select、selectors、socketserver

    楔子 网络通信用于获取一个算法在本地运行所需的数据,还可以共享信息实现分布式处理,另外可以用来管理云服务. python的标准库提供了一些模块来创建网络服务以及访问现有服务ipaddress模块提供了 ...

随机推荐

  1. 1. Python3 环境搭建

    Python3 环境搭建 开门见山,其他关于Python发展史.语言类型.优缺点等等 可以自己去百度百度,这里就不多说了.其实基本想要学这门语言的时候,你已经了解差不多了!!! Python的运行环境 ...

  2. 四种遍历hashMap的方法及比较

    学习怎样遍历Java hashMap及不同方法的性能. // hashMap的遍历 public void testHashMap() { Map<String, String> map ...

  3. 【Alpha】第四次Scrum meeting

    今天任务一览: 姓名 今日完成任务 所耗时间 刘乾 配置好了所有物理实验的通配模板,为服务器配置了latex中文环境,设置了一些常用字体. Issue链接:https://github.com/bua ...

  4. Linux内核分析作业 NO.4

    扒开系统调用的三层皮(上) 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 ...

  5. Day Ten

    站立式会议 站立式会议内容总结 331 今天:话题单选对话框 遇到问题:无 442 今天:数据库交互,解决timepicker问题 遇到的问题:无 439 今天:测试模块功能 遇到问题:无 会议照片 ...

  6. PowerDesigner16工具学习笔记-建立CDM

    1.基本术语 1.1.实体和属性 实体(entity):指现实世界中客观存在,并可相互区别的事物或者事件. 属性(attribute):一组用来描述实体特征的属性. 实体集(entity set):具 ...

  7. 第一个sprint冲刺第一阶段

    会议地址:男生宿舍1栋B4014 会议内容:讨论如何完成产品 成员:李新,朱浩龙,陈俊金,叶煜稳,林德麟 困难:对于做成一个手机APP,尚未掌握:成员尚在学习中 master:陈俊金

  8. JS基础(二)数据类型

    一.标量类型 1.字符串string类型:字符串需要用定界符包裹.定界符:单引号(‘’),双引号(“”). 2.数字类型:1)整型:所有整数 2)浮点型:所有浮点数 3.boolean类型:返回tru ...

  9. swoole多进程

    <?php /** * Created by PhpStorm. * User: brady * Date: 2018/11/19 * Time: 16:29 */ $workers = []; ...

  10. idea打jar包没有MANIFEST文件坑

    看到横线处没有,将此处的main\java 删除掉 meta-inf文件夹必须在src文件夹下,才能打包成功, idea自动加了 main/java 会导致打包时,找不到该manifest文件,不会将 ...