net学习笔记1

学习流程
mysql
网络编程
进程线程
网络+进程线程
MongDB(非关系型数据库)
regex
project

OSI七层模型 —>网络通信的标准化流程

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

五层模型(TCP/IP)

应用层 (应用层 表示层 会话层)
传输层
网络层
链路层
物理层

OSI模型的优点:将功能分开,降低网络传输重的耦合度。使开发流程更加清晰,每个部分各司其职。

高内聚:每个模块功能尽量单一,不会多个功能惨杂
低耦合:尽量降低每个模块之间的关联性

要求:

  • 能够顺序说出七层模型,五层模型
  • 知道每一层干什么事
  • 理解消息传输流程

网络协议:在网络通信中协议各方必须遵守的规定,如建立什么链接,消息结构如何解析等

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

网络相关概念

网络主机:在网络上确定一台主机

本地使用:‘localhost’, 127.0.0.1
网络地址:‘0,0,0,0’ '192.168.0.106 '查看本机ip:ifconfig(ubuntu)、ipconfig(win)

ipython3 进入交互模式
获取本机计算机名
In [3]: socket.gethostname()
Out[3]: ‘zoulu-Aspire-5750G’

根据计算机名获取匹配IP
In [4]: socket.gethostbyname(‘zoulu-Aspire-5750G’)
Out[4]: ‘127.0.1.1’

IP地址 -->网络上确定一台的地址

IPv4:点分十进制 比如 192.168.1.3 0–255
IPv6:128位

网络链接测试:ping 192.168.0.106
特殊IP
127.0.0.1 本地测试
0.0.0.0 自动使用本地可用网卡IP
192.168.1.0 代表当前网段
192.168.1.1 通常为网关地址
192.168.1.255 广播地址

IP地址转换为16进制
In [3]: socket.inet_aton(‘192.168.1.2’)
Out[3]: b’\xc0\xa8\x01\x02’

In [4]: socket.inet_ntoa(b’\xc0\xa8\x01\x02’
…: )
Out[4]: ‘192.168.1.2’

域名:网络服务器地址在网络上的名称
端口号:端口号是地址的一部分,在一个系统中每个网络应用监听不同的端口,以获取对应端口传递的信息

取值范围:1-65535
1-255 一些通用端口(总所周知的程序占用)
256-1023 系统端口
1024-65535 自用端口 >10000

如何获取应用程序的端口
In [5]: socket.getservbyname(‘http’)
Out[5]: 80

In [6]: socket.getservbyname(‘https’)
Out[6]: 443

In [7]: socket.getservbyname(‘ssh’)
Out[7]: 22

In [8]: socket.getservbyname(‘mysql’)
Out[8]: 3306

传输层服务:

1.面向连接的传输服务 -->tcp协议

传输特征:
可靠性:数据在传输中,无失序 无差错 无丢失 无重复

在数据传输前后传输结束后需要建立链接和断开链接

三次握手:在面向连接的传输服务重建立连接的过程

  • 客户端向服务器发送连接请求
  • 服务器接受请求进行确认,返回确认报文
  • 客户端收到服务器的回复最终确认连接

四次挥手:在面向连接的传输服务中断开连接的过程

  • 主动方发送报文,告知被动方要断开连接
  • 被动发送回复报文,告知已经接受到请求,准备断开
  • 被动方再次发送报文,表示准备处理就绪,可以断开
  • 主动方发送确认报文,断开链接

应用情况:适用于传输较大的内容或文件,网络良好,需要保证传输可靠性的情况
e.g. 聊天信息 文件的上传下载 邮件处理
网页获取
2.面向无连接的传输服务 -->udp协议
传输特点:

  • 不保证传输的可靠性
  • 没有链接和断开的过程
  • 数据的收发比较自由

应用情况:网络情况可能产生丢包,对传输可靠性要求低

e.g. : 网络视频,群聊,广播等

要求:

    1. 理解三次握手四次挥手,能够描述
    1. 知道tcp传输和udp传输的区别

socket 套接字编程

目的:通过编程语言提供的套接字编程接口,可以更简单的完成基于tcp和udp的编程
套接字:完成上述目标的一种编程手段
套接字类别:
流式套接字(SOCK_STREAM):传输层基于tcp的协议通信
面向连接可靠的传输 tcp的传输 流式套接字
数据报套接字(SOCK_DGRAM):传输层基于upd协议传输
面向无链接不可靠的传输 udp的传输 数据报套接字
底层套接字(SOCK_RAM):访问底层协议套接字

TCP的服务端

import socket
1.创建套接字
socket.socket(sock_family = AF_INET,
sock_type = SOCK_STREAM,
proto = 0)
功能:创建套接字
参数:sock_family 地址族类型;AF_INET:ipv4网络通信
sock_type 套接字类型;SOCK_STREAM 流式
SOCK_DGRAM 数据报
proto 通常为0;选定子协议类型
返回值:返回一个套接字对象

2.绑定地址
sockbd.bind(addr)
功能:绑定地址
参数:addr --> 元组 (ip,port) (‘0.0.0.0’,1234)

3.设置监听套接字
sockbd.listen(n) linux下n已经由内核设置
功能:将套机字设置为监听套接字,创建监听队列
参数:监听队列大小

  • 一个监听套接字可以连接多个客户端
    4.等待接受客户端连接
    connfd,addr = sockbd.accept()
    功能:阻塞等待处理客户端连接
    返回值:connfd 新的套接字,用于和客户端通信
    addr 连接的客户端地址(ip,port)
  • 阻塞函数:当程序运行到阻塞函数位置,如果某种条件没有达成则暂停程序运行,知道条件达成结束阻塞
    5.消息的收发

data = confd.recv(buffersize)
功能:接受消息
参数:一次接受消息的大小,字节
返回值:返回接受到的内容

n = connfd.send(data)
功能:发送信息
参数:要发送的内容(bytes格式)
返回值:返回实际发送的字节数

6.关闭套接字
connfd.close()
sockbd.close()

TCP的客户端
1.创建套接字(与服务器套接字相同)
socket(sock_family = AF_INET,sock_type=SOCK_STREAM,propo = 0)
2.发起连接

  • connet(addr)
  • 功能:向服务端发起连接
  • 参数:客户端地址,元祖
    3.消息收发
    socket.send(message) -->message 类型byte
    4.关闭套接字
    socket.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值