码迷,mamicode.com
首页 > 其他好文 > 详细

ptthon 网络编程

时间:2018-08-06 16:24:47      阅读:365      评论:0      收藏:0      [点我收藏+]

标签:物理链路   listen   1.0   编程语言   1.7   使用   ifconfig   udp   聊天   

网络编程

网络目的 : 数据的传输

网络数据传输是一个复杂的过程

ISO :国际标准化组织

OSI 七层模型 --》 网络通信标准化流程

应用层 : 提供用户服务,具体内容由特定程序规定
表示层 : 数据的压缩优化
会话层 : 建立应用连接,选择传输层服务
传输层 : 提供不同的传输服务,流量控制
网络层 : 路由选择,网络互连
链路层 : 提供链路交换,具体消息以帧发送
物理层 : 物理硬件,接口,网卡,线路

osi七层模型优点 : 将功能分开,降低了网络传输中的耦合性,每一部分完成自己的功能。可以在开发和实施的过程中各司其职。实现高内聚和低耦合的功能。

高内聚 : 单个模块功能尽量单一
低耦合 : 模块之间尽量减少关联和影响


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

五层(tcp/ip模型)
  应用层 : 应用层 表示层 会话层
  传输层 : 传输层
  网络层 : 网络层
  链路层 : 链路层
  物理层 : 物理层


协议(网络协议):在网络通信中,各方必须遵守的规定。包括建立什么样的连接,消息结构等

应用层 : TFTP HTTP DNS SMTP
传输层 : TCP UDP
网络层 : IP
物理层 : IEEE


网络基本概念

主机: "localhost" 表示本台计算机

网络上 : 只在本地测试使用
  ‘localhost‘ ‘127.0.0.1‘

如果想在网络上进行测试(自动使用本地可用网卡IP)
  ‘0.0.0.0‘ ‘‘ ‘172.60.50.93‘

查看 IP网络信息
  linux ifconfig
  win ipconfig

获取计算机名称
  socket.gethostname()
  ‘tedu‘

获取主机IP
  socket.gethostbyname(‘localhost‘)
  ‘127.0.0.1‘

IP地址
  在网络上用于区分一台计算机

IPv4 : 点分十进制 e.g. 192.168.1.72 0-255
  32位二进制表示

IPv6 : 128

网络连接测试命令: ping 172.60.50.92

特殊IP
  127.0.0.1 本地测试IP
  0.0.0.0 本地网卡通用IP
  192.168.1.0 表示当前网段
  192.168.1.1 表示网关
  192.168.1.255 广播地址

获取服务主机信息
  socket.gethostbyaddr("www.baidu.com")
  (‘127.0.0.1‘, [], [‘119.75.213.61‘])
    主机    别名    IP地址

将ip十进制转化为二进制
  socket.inet_aton("192.168.1.2")
  b‘\xc0\xa8\x01\x02‘

将ip二进制转化为十进制
  socket.inet_ntoa(b"\xc0\xa8\x01\x02")
  ‘192.168.1.2‘

域名 : 网络服务器IP地址的名称
url : 在网络上定位某个资源位置的字串

端口号 :端口号是网络地址的一部分,在一个系统中,在一个系统中每个网络应用监听不同的端口,以获取对应端口传输的信息

数字范围 : 1--65535

  1--255 : 一些众所周知的端口
  256--1023 : 系统应用
  1024---65535 : 自用
  推荐用  >10000 8888 9999 7777 6666


测试一个软件端口号
  socket.getservbyname(‘mysql‘)
  3306
  socket.getservbyname(‘http‘)
  80
  socket.getservbyname(‘ssh‘)
  22

传输层服务

面向连接的传输服务 ---》 tcp协议

传输特征:提供可靠的传输服务
可靠性表现: 数据在传输过程中,无失序,无差错,无重复,无丢失

* 传输过程中有建立和断开连接的过程
三次握手:建立数据传输两端的持续连接
  1. 客户端向服务器发起连接请求(我可以牵你手吗)
  2. 服务器收到连接请求进行确认,返回报文(可以\不可以)
  3. 客户端收到服务器确认进行连接创建(知道了,连接)

四次挥手断开连接的两端,保证数据的传输完整
  1.主动方发送报文,告知被动方要断开连接(我要断开连接了,你准备好)
  2.被动方返回报文,告知收到请求,准备断开(知道了)
  3.被动方再次发送报文,告知准备完毕可以断开(你断开吧)
  4.主动方发送报文完成断开(断开了)

适用情况:文件的上传下载,网络情况良好,需要必须保证可靠性的情况
比如 : 信息聊天,文件上传下载,邮件,网页获取

面向无连接的传输服务 ---》 udp协议

 传输特征 :
  * 保证传输的可靠性
  * 无需建立三次握手四次挥手的连接断开过程
  * 消息的收发比较自由,不受其他约束(请原谅我这一生放荡不羁爱自由)

适用情况 : 网络情况较差,对可靠性要求不高,收发消息的两端不适合建立固定连接
比如 :网络视频,群聊,发送广播

socket套接字编程

  套接字:通过编程语言提供的函数接口进行组合,更简单的完成基于tcp和udp通信的网络编程

套接字的分类

  流式套接字(SOCK_STREAM):传输层基于tcp的协议进行通信

  数据报套接字(SOCK_DGRAM):传输层基于udp的协议进行通信

  底层套接字(SOCK_RAM):访问底层协议的套接字

TCP套接字(服务端)

import socket

1、创建套接字

  socket.socket(socket_family = AF_INET,socket_type = SOCK_STREAM,proto = 0)

功能:创建一个套接字

参数:socket_family  地址族类型  AF_INET 表示IPv4网络通信

    socket_type  套接字类型  SOCK_STREAM 流式  SOCK_DGRAM  数据报

    proto     通常为0(选择子协议)

返回值:返回一个套接字对象

2、绑定IP端口

  sockfd.bind()

  功能:绑定IP和端口

  参数:二元元组

3、将套接字设置为可监听

  sockfd.listen(n)

  功能:将套接字设置为监听套接字,并设置监听队列

  参数:监听对象的大小  n为大于0的正整数

4、等待客户端的连接

  connfd,addr = sockfd.accept()

  功能:阻塞等待客户端连接

  返回值:connfd  一个新的套接字,用于和指定客户端通信

      addr  连接的客户端的地址

  阻塞函数:程序运行到阻塞函数位置,如果某种预期条件没有达成则暂停继续运行,直到条件达成在继续运行

5、消息收发

  data = connfd.recv(buffersize)

  功能:接受消息

  参数:每次最多接受的消息大小  bytes

  返回值:实际发送的字节数

6、关闭套接字

  close()

  功能:关闭套接字,tcp连接断开

  *telnnet ip port  表示连接tcp服务端

tcp客户端

1.创建套接字
  socket()
  * 通信的两端套接字类型相同

2. 发起连接
  connect()
  功能 : 发起连接请求
  参数 : 元组,服务器端的地址

3.发收消息
  send recv
  * 两端收发需要配合

4.关闭套接字
  close()

 

ptthon 网络编程

标签:物理链路   listen   1.0   编程语言   1.7   使用   ifconfig   udp   聊天   

原文地址:https://www.cnblogs.com/LXP-Never/p/9430753.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!