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

网络编程基础

时间:2019-01-09 23:32:10      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:概念   inf   消息发送   splay   三次   服务端   hide   系统   ipconfig   

网络编程(后端编程基础)

网络编程

   ISO(国际标准化组织)

提出OSI网络通信模型(七层模型)

技术分享图片

  应用层:提供应用服务,具体的功能由具体的程序体现
  表示层:数据的压缩,优化以及加密
  会话层:建立应用级连接,选择适当的传输服务
  传输层:数据的传输,网络控制
  网络层:路由选择,网络互联
  链路层:进行数据交互,控制具体消息发送
  物理层:提供数据传输硬件保证,网卡,接口设备

四层模型:(TCP/IP模型)

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

技术分享图片

                                    引用自linhaifeng老师的博客图片

通信模型优点:

  1、建立了统一的工作流程
  2、分层清晰,每一层各司其职
  3、降低了通信模块开发过程的耦合度


cookie
  高内聚:模块的功能尽可能单一,不要相互掺杂
  低耦合:模块之间的关联影响尽可能少

网络协议:网络通信中,双方都遵守的规定

  应用层:SMTP HTTP
  传输层:TCP UDP
  网络层:IP ARP
  链路层:PPP
  物理层:IEEE

网络编程概念:

网络主机:在网络当中标识一台目标计算机 host

本地使用:‘localhost‘   ip地址为:‘127.0.0.1‘

网络使用:

  ‘172.88.3.102‘ #即你的电脑本机的ip地址

  既可以本地,也可以网络:"0.0.0.0"

ip地址:网络上一台主机的网络路由位置

  IPv4:点分十进制 192.168.1.1 每一部分0-255

  IPv6: 128位
    格式为X:X:X:X:X:X:X:X,
    其中每个X表示地址中的16b,以十六进制表示(由于计算机只能识别二进制)

ip信息的查看

  ifconfig : linux ip信息的查看

  ipconfig: windows下ip地址的查看

  pingp[ip address]:测试网络连接

特殊的ip地址:

  127.0.0.1 本机测试ip
  0.0.0.0 自动选择合适的本机网卡ip
  192.168.1.0 表达一个局域网段
  192.168.1.1 通常表示网关地址
  192.168.1.255 广播地址

域名:

  端口号(port):网络地址的一部分,用于区分一台终端数不同的应用

  一个系统中,端口号不能重复使用
    取值范围:1 -- 65535
    1 -- 255 公共程序端口
    256 -- 1023 系统应用端口
    1024 -- 65535 自用端口

传输层服务:

1、面向连接的传输服务(TCP协议)

传输特征:
  提供可靠的数据传输,可靠性指数据传输过程,无失序,无差错,无重复

实现手段:
  在通信过程中需要发送端和接收端建立可靠的连接,通信结束要正常断开连接

连接过程:(即TCP三次握手)

技术分享图片

  1.客户端向服务端发送标志位变量请求连接
  2.服务端收到请求后,回复消息允许建立连接
  3.客户端收到回复,发送最终标志连接建立成功
  client server

断开连接过程(四次挥手)

技术分享图片

  1.主动方向被动方发起断开请求
  2.被动方收到请求后回复消息准备断开连接
  3.被动方准备就绪,再次发送标志位表示可以断开
  4.主动方发送最终断开标识

适用情况: 对数据准确性有明确的要求,数据传输文件大,需要确保可靠传输。

例如:文件下载,网页获取,邮件收发

面向无连接的传输服务(基于UDP协议)

  传输特征: 提供不可靠的传输服务,不保证传输过程数据的完整性

    适用特征:网络较差,对传输可靠性要求不高,或者传输不能建立连接,

    例如:视频,群聊,广播

网络编程: 程序运行原理

  套接字编程:实现网络编程,

    socket模块实现套接字编程

socket套接字分类

  流式套接字(tcp协议)SOCK_STRESM

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

数据报套接字(udp协议)SOCK_DGRAM

  phone = socket(socket_family = AF_INET,\
  socket_type = SOCK_STREAM,proto=0)

技术分享图片
#导入模块 
from socket import *
addr = (127.0.0.1,8888)
#创建套接字
phone=socket(AF_INET,SOCK_STREAM)
#绑定地址
phone.bind(addr)#addr以元祖的形式给出服务器地址
#设置监听套接字
phone.listen(5)
功能:设置监听套接字,建立监听队列
参数:监听队列大小

conn,addr=phone.accept()
#功能:阻塞等待处理客户端连接
#返回值:conn客户端连接套接字
#addr:客户端地址

#消息数据的收发
while True:
    data=conn.recv(buffersize=1024)
    #功能:阻塞等待接收客户端消息
    #buffersize一次最多接收多少字节消息
    print(server===>)
    print(data)#查看接收的数据
    x = conn.send(data.upper())
    #功能:发送数据
    #参数:要发送的内容(byte类型)
    #返回值x指实际发送数据的大小
conn.close()
phone.close()
#关闭套接字
服务器端流式套接字

客户端流程:
1.创建套接字:
phone = socket()
要求数据传输两端套接字类型必须相同
3.发起连接
phone.connect(addr)
#发起连接请求
#参数:元祖,服务端地址
3.消息的收发:
recv()/send()

技术分享图片
#客户端

from socket import *

add = (127.0.0.1,8888)
#创建套接字
phone = socket(AF_INET,SOCK_STREAM)

#发起连接请求
server_add = (add)
#连接服务端
phone.connect((server_add))
while True:

    data = input(输入>>>)

    phone.send(data.encode())
    data1 = phone.recv(1024)
    print(data1.decode())
客户端流式套接字

 

网络编程基础

标签:概念   inf   消息发送   splay   三次   服务端   hide   系统   ipconfig   

原文地址:https://www.cnblogs.com/bolt5225/p/10244028.html

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