美文网首页
DAY18 networkBasis 网络基础2018-07-0

DAY18 networkBasis 网络基础2018-07-0

作者: 十二右 | 来源:发表于2018-07-07 10:28 被阅读0次

01-networkTransmission 网路传输

02-HTTPprotocol协议

03-accessNetworkData获取网络数据

04-socketServer套接字服务器端

05-socketClient套接字客户端


01-networkTransmission 网路传输

1.1 传输过程示意

网络传输过程示意.png

1.2 OSI参考模型

OSI模型是国际标准化组织分析计算机通信,把计算机通信进行的规范和标准化分成了7层:

  • 应用层:所有能产生网络流量的程序(QQ、浏览器等)
  • 表示层:数据传输前的压缩、加密、确定编码方式等操作
  • 会话层:查看木马(netstat-nb)
  • 传输层:可靠传输、不可靠传输、流量控制
  • 网络层:负责选择最佳路径、规划IP地址
  • 数据链路层:帧的开始和结尾、透明传输、查错校验
  • 物理层:接口标准、电器标准

1.3-TCP/IP协议栈(簇)

TCP/IP协议栈

a.数据封装

数据封装.png

b.数据解封

数据解封.png

c.通信过程示意

通信示意.jpg

d.传输层的协议TCP和UDP

  • TCP协议(Transmission Control Protocol,传输控制协议)
  1. 需要传输的文件分段传输
  2. 建立会话
  3. 可靠控制
  4. 流量控制
  • UDP协议(User Data Protocol,用户数据报协议)
  1. 一个数据包就能完成数据通信
    2.不需要建立会话
  2. 不可靠传输
  3. 不需要流量控制
    可靠传输示意.png

02-HTTP协议

![UX3(4C0AGH0[R{J%X~AH22.png
![XW$4L%R9IJPZF(JIWL66X7.png

2.1 URL中常见的协议

  1. HTTP
    超文本传输协议,访问的是远程的网络资源,格式是http://
    http协议是在网络开发中最常用的协议

2.file
访问的是本地计算机上的资源,格式是file://(不用加主机地址)

3.maito
访问的是电子邮件地址,格式是mailto:

4.FTP
访问的是共享主机的文件资源,格式是ftp://

2.2 HTTP协议简介

QQ图片20180706200903.png

a.HTTP协议的特点

  • 简单快速:因为HTTP协议简单,所以HTTP服务器的程序规模小,因而通信速度很快
  • 灵活:HTTP允许传输各种各样的数据
  • HTTP 0.9和1.0使用非持续连接
    限制每次连接只处理一个请求,服务器对客户端的请求做出响应后,马上断开连接,这种方式可以节省传输时间

b.

QQ图片20180706200903.png

c.请求

HTTP协议规定:1个完整的由客户端发给服务器的HTTP请求中包含以下内容

  • 请求头:包含对客户端的环境描述、客户端请求信息等
    GET/minion.png HTTP/1.1 -->包含了请求方法、请求资源路径、HTTP协议版本
    Host:120.25.226.186:32812 -->客户端想访问的服务器主机地址
    User-Agent:Mozilla/5.0 -->客户端的类型,客户端的软件环境
    Accept:text/html,/ -->客户端所能接收的数据类型
    Accept-Language:zh-cn -->客户端的语言环境
    Accept-Encoding:gzip -->客户端支持的数据压缩格式

  • 请求体:客户端发个服务器的具体数据,比如文件数据(POST请求才会有)

d.响应

客户端向服务器发送请求,服务器应当做出响应,即返回数据给客户端
HTTP协议规定:1个完整的HTTP响应中包含以下内容
*响应头:包含了对服务器的描述、对返回数据的描述
HTTP/1.1 200 OK // 包含了HTTP协议版本、状态码、状态英⽂名

Server: Apache-Coyote/1.1 // 服务器的类型
Content-Type: image/jpeg // 返回数据的类型
Content-Length: 56811 // 返回数据的⻓度
Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间

  • 响应体:服务器返回给客户端的具体数据,⽐如⽂件数据
状态码 英文名称 中文描述
200 OK 请求成功
400 Bad Request 客户端请求的语法错误,服务器无法解析
404 Not Found 服务器无法根据客户端的请求找到资源
500 Internal Server Error 服务器内部错误,无法完成请求

e.发送HTTP请求的方法

■ 在HTTP/1.1协议中,定义了8种发送http请求的⽅法
p GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、
PATCH
p根据HTTP协议的设计初衷,不同的⽅法对资源有不同的操作⽅式
✓ PUT :增
✓ DELETE :删
✓ POST:改
✓ GET:查
p最常⽤的是GET和POST(实际上GET和POST都能办到增删改查)
■ 要想使⽤GET和POST请求跟服务器进⾏交互,得先了解一个概念
参数:就是传递给服务器的具体数据,如登录时的帐号、密码

f.GET和POST对比

● GET和POST的主要区别表现在数据传递上
p GET
✓ 在请求URL后⾯以?的形式跟上发给服务器的参数,多个参数之间⽤&
隔开,⽐如
http://www.test.com/login?username=123&pwd=234&type=JSON
✓ 由于浏览器和服务器对URL⻓度有限制,因此在URL后⾯附带的参数
是有限制的,通常不能超过1KB
p POST
✓ 发给服务器的参数全部放在请求体中
✓ 理论上,POST传递的数据量没有限制(具体还得看服务器的处理能力)

选择GET和POST的建议:
如果要传递大量数据,比如文件上传,只能POST请求
GET的安全性比POST要差些,如果包含机密\敏感信息,建议POST
如果仅仅是索取数据(数据查询),建议使用GET
如果是增加、修改、删除数据,建议使用POST


03-accessNetworkData获取网络数据

python中使用第三方库requests来获取网络数据

import requests

3.1.确定请求的地址(url)

GET传参的两种方式:
a. 直接拼接在url后面(?参数=值&参数2=值2......)
b. 给get函数中的第二个参数传参({参数:值, 参数2:值, .....})

url = 'https://www.apiopen.top/satinApi'
  1. 通过GET方式请求数据,请求结束后会返回响应
response = requests.get(url, {'type':1, 'page':1})

3.3. 获取数据

print(type(response), response)

a.获取字符串形式的数据

print(type(response.text), response.text)

b.获取json格式的数据

result = response.json()
print(type(result), result)

c.获取二进制形式的数据

data = response.content
print(type(data), data)

04-socketServer套接字服务器端

socket又叫套接字,我们把进行网络通信的一端就叫一个套接字
socket编程,就是通过程序实现通信的两端(服务器和客户端)

python中支持socket有三种,分别是基于TCP/UCP和IP的,叫做TCP套接字/UDP套接字和原始套接字

import socket

基于TCP的服务器端

4.1.创建套接字对象,并且指定服务器类型

  • family:
    AF_INET --> ipv4
    AF_INET6 --> ipv6
  • type:
    SOCK_STREAM --> TCP
server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)

4.2.绑定ip地址和端口

  • 地址:(ip地址, 端口)
    ip地址:服务器所在的硬件的ip地址 cmd -->ipconfig/all
  • 端口:
    不同端口绑定不同的服务,同一时间同一个端口只能绑定一个服务
    端口的范围0-65535,但是小于等于1024的端口叫'著名端口',用于绑定著名服务(如http服务/邮件服务),一般不用
server.bind(('10.7.154.59', 12345))

4.3.监听访问

server.listen()
print('开始监听...')

让服务器一直运行,等待访问

while True:
    当有客户端访问当前服务器后就建立连接(会话)

    connect, addr = server.accept()   # 当有一个客户端来连接服务器的时候,才会执行
    print('====')

    # 通过会话给客户端发送消息
    # 发送的内容必须是二进制数

    字符串转二进制: 字符串.encode('utf-8')
    二进制转字符串: 二进制数据.decode('utf-8')
   
    message = input(':')
    connect.send(message.encode('utf-8'))

    #接收客户端发送给服务器的消息
    data = connect.recv(1024)
    print(data.decode('utf-8'))

    # 关闭连接
    # connect.close()

05-socketClient套接字客户端

import socket

5.1.创建套接字对象

client = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)

5.2.连接服务器

client.connect(('10.7.154.59', 12345))
while True:
    # 3.接收服务器返回的数据
    # 1024一次接收的数据大小
    data = client.recv(1024)
    print(data.decode('utf-8'))

    # 4.客户端给服务器发送数据
    message = input(':')
    client.send(message.encode('utf-8'))

相关文章

  • DAY18 networkBasis 网络基础2018-07-0

    01-networkTransmission 网路传输 02-HTTPprotocol协议 03-accessNe...

  • Day18—网络基础

    1 socket socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字。套接字编程:自己写...

  • day18网络基础

      socket又叫做套接字,就是进行数据通信两端,分为服务端套接字和客户端套接字。  python对socket...

  • Android_开发_Day18_网络

    Android_开发Day18网络 目的: 学会建立网络连接,使用网络传输数据。 技术: <1> 网络: 所谓的网...

  • 3/24day18_网络编程_ TCP

    day18 复习 今日内容 网络编程概念(网络通信协议, IP地址, 端口号) TCP 网络编程 综合案例(文件上...

  • 2018-09-12 Day18 网络基础

    01.socket编程 socket又叫套接字,就是进行数据通信两端。分为服务端套接字和客户端套接字。套接字编程:...

  • day18 网络编程

    socket编程 socket又叫套接字,指的就是实现通信过程的两个端。等待请求的一端叫服务端套接字,发送请求的一...

  • Day18 网络编程

    一.套接字Server 1.什么是socket编程 socket又叫套接字, 指的是实现通信的两个端; 这两个端又...

  • 卟弃丰盛日记Day18

    卟弃丰盛日记Day18 卟弃今日计划Day18 2020.11.18...

  • Linux学习第8周基础网络知识

    运维基础网络知识概述网络基础通讯原理介绍网络基础设备概念知识a 什么是交换机b 什么是路由器网络基础设备配置过程 ...

网友评论

      本文标题:DAY18 networkBasis 网络基础2018-07-0

      本文链接:https://www.haomeiwen.com/subject/ldbbuftx.html