美文网首页
网络基础

网络基础

作者: 葡萄柚子茶 | 来源:发表于2018-09-12 19:32 被阅读0次

OSI参考模型

OSI参考模型是国际标准化组织分析计算机通信,把计算机通信进行的规范和标准化分成了7层:
1)应用层:所有能产生网络流量的程序(QQ,浏览器)
2)表示层:数据传输前的压缩,加密,确定编码方式等操作
3)会话层:查看木马(netstat -nb)只要需要网络请求,必定会建立会话
4)传输层:可靠传输,不可靠传输,流量控制
5)网络层:负责选择最佳路径,规划IP地址
6)数据链路层:帧的开始和结尾,透明传输,查看校验
7)物理层:接口标准,电器标准

TCP/IP协议
意为传输控制协议,由[网络层]的IP协议和[传输层]的TCP协议组成。
TCP协议
1)需要传输的文件分段传输
2)建立会话
3)可靠传输
4)流量控制
UDP协议
1)一个数据包就能完成数据通信
2)不需要建立会话
3)不可靠传输
4)不需要流量控制


image.png image.png
image.png
image.png
image.png

URL(Uniform Resource Locator)
统一资源定位符
通过一个URL,就能找到互联网上唯一的1个资源
URL就是资源的地址,位置,互联网上的每个资源都有一个唯一的URL

URL的基本格式=协议://主机地址/路径
http://www.1000phone.com/img/logo.png
协议:http 不同的协议代表不同的资源查找方式,资源传输方式
主机地址:www.1000phone.com存放资源的主机(服务器)的IP地址(域名)
路径:img/logo.png 资源在主机(服务器)中的具体位置

HTTP:超文本传输协议,访问的是远程的网络资源,格式是http://
http协议是在网络开发中最常用的协议
作用是规定客户端和服务器之间的数据传输格式,让客户端和服务器能有效地进行数据沟通


image.png

完整的http通信分为两步:
请求:客户端向服务器索要数据
响应:服务器返回客户端相应的数据

请求包括请求头(客户端的环境描述,客户端请求信息)
请求体:客户端发给服务器的具体数据
响应包含响应头(服务器的描述,对返回数据的描述)
响应体:服务器返回给客户端的具体数据,比如文件

常见响应状态码


image.png
image.png
image.png

一.socket 编程

socket又叫套接字,就是进行数据通信两端,分为服务端套接字和客户端套接字
套接字编程:自己写服务器和客户端,进行数据传输
python对socket编程的支持:提供一个socket的库(内置)

写一个服务器

import socket

def creat_server():
    """写一个服务器"""
    #1.创建套接字对象
    """
    socket(family,type)
    a.family:确定IP协议类型
    AF_INET:ipv4(默认)
    AF_INET6:ipv6
    b.type:传输协议类型
    SOCK_STREAM:TCP协议(默认)
    SOCK_DGRAM:UDP协议
    """
    server = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)

    #2.绑定IP地址和端口
    """
    bind((ip地址,端口))
    端口:一台电脑上一个端口标记一个唯一的服务.范围0-65535,0-1024是著名端口,专门用来标记特殊服务,一般不用
        但是,同一个端口同一时间只能绑定一个服务
    """

    server.bind(('10.7.153.122',8080))

    #3. 开始监听(监听的是客户端的请求)
    """
    listen(最大个数)
    同一时间能够连接的客户端的个数
    """
    server.listen(512)

    #4.让服务器处于运行状态
    while True:
        print('监听状态')
        #5.连接客户端(建立连接),返回连接对象和客户端地址
        #connect,addr = server.accept()这句代码会阻塞线程,直到有客户端来请求当前服务器为止
        connect,addr = server.accept()


        #6. 服务器给客户端发送消息
        """
        send(data)
        data:python3要求类型是bytes二进制,python2可以是字符串
        补:
        字符串(str)转二进制(bytes):
        字符串.encode(编码方式默认utf-8)
        bytes(字符串,encoding=)
     
        """
        while True:
            message=input('服务器:')
            connect.send(message.encode())
           
            #7.接受从客户端发送过来的消息
            #注意:recv方法也会阻塞线程
            """
            recv(bufsize)
            bufsize:每次能够接收的最大的字节数
            返回值:接收到的数据,类型是bytes
            
            2.二进制转字符串:
            二进制.decode()
            str(二进制,编码方式)
            """
            recv_data = connect.recv(1024)
            #print(recv_data.decode())
            print(str(recv_data,'utf-8'))


        #8.断开连接
        connect.close()

creat_server()

二.客户端套接字

import socket

def creat_client():
    #1.创建套接字对象
    client = socket.socket()

    #2.连接服务器
    """
    connect(服务器地址)
    """

    client.connect(('10.7.153.127',8080))
    while True:
        #3.接收服务器发送的消息

        data = client.recv(1024)
        print(data.decode(encoding='utf-8'))

        #4.给服务器发送消息
        message = input("客户端:")
        client.send(message.encode())

    #5.断开连接
    client.close()



creat_client()

三.图片传输

图片传输是一部分一部分接收的

import socket
# 1.创建套接字(创建一个座机)
server = socket.socket()
# 2.绑定地址(插电话线,绑定电话号码)
server.bind(('10.7.153.122',12345))
# 3.监听(人坐在电话旁)
server.listen(512)
#保证电话可以被打通(等电话)
while True:
    # 4.接收请求(接电话)
    connect,addr = server.accept()

    # 5.发送数据(讲电话)
    with open('./files/1.jpg','br') as f:
        data = f.read()

    connect.send(data)

    # 6.接收数据(听)
    #connect.recv(1024)

    # 7.关闭连接(挂)
    connect.close()
import socket

client = socket.socket()
client.connect(('10.7.153.122',12345))
#创建一个空的二进制数据
all_data = bytes()
#接收从服务器传回来的数据

data = client.recv(1024)
while data:
    print('接收到数据')
    all_data += data
    data = client.recv(1024)

with open('./files/new.jpg','wb')as f:
    f.write(all_data)

client.close()

四.http请求

import requests

#1.准备url
url = 'https://www.apiopen.top/satinApi?type=1&page=1'

#2.发送请求(GET请求)
"""
get(url,参数对应的字典)
post(url,参数对应的字典)
返回值是服务器返回的响应

"""
response = requests.get(url)
#requests.get('https://www.apiopen.top/satinApi',{'type':1,'page':1})
print(response)


#3.通过响应获取服务器返回的数据
#a.获取字符串类型的数据
print(response.text)

#b.获取json格式的数据
print(response.json()['msg'])
print(response.json())

#c.获取二进制格式的数据
print(response.content)

#{'Server': 'nginx', 'Date': 'Wed, 12 Sep 2018 09:06:56 GMT', 'Content-Type': 'application/json;charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, DELETE', 'Access-Control-Max-Age': '3600', 'Access-Control-Allow-Headers': 'x-requested-with'}
#4.获取响应头(了解)
print(response.headers)

相关文章

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

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

  • Linux网络基础

    Linux网络基础 这是Linux网络基础的笔记,首先介绍了计算机网络的基础知识,然后是Linux的网络设置 参考...

  • 网络基础

    分层 应用层-传输层-网络层-链接层-实体层 实体层 是电脑和电脑链接的物理手段,负责传送1、0的电信号 链接层 ...

  • 网络基础

    一、网络概论 1、何为网络? 网络的定义:网络就是一群通过一定形式连接起来的电脑。 什么是局域网?一个网络可以由两...

  • 网络基础

    一、什么是HTTP协议 答:hypertext transfer protocol(超文本传输协议),TCP/IP...

  • 网络基础

    OSI模型的七层结构 OSI参考模型中每个层的作用: TCP/IP协议分层模型 网络协议划分物理层:以太网 · 调...

  • 网络基础

    获取网络数据 python中使用第三方库requests来获取网络数据import requests 确定请求的地...

  • 网络基础

    3次握手 4次挥手 采用三次握手是为了防止失效的连接请求再次被接收,因而产生错误。如第一次连接请求SYN=1由于网...

  • 网络基础

    http三次握手 第一次握手:客户端发送了一个带有SYN(建立连接)的Tcp报文到服务器,表示客户端想要和服务端建...

  • 网络基础

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

网友评论

      本文标题:网络基础

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