网络编程

1. URL

1.1 定义

  • Uniform Resource Locator的缩写,统一资源定位符
  • 协议(HTTPS加密,http,ftp)+域名(www.baidu.com)+资源路径+查询参数(?page=1)

1.2 组成

  • 协议(Protocol)
  • IP地址/域名(Internet Protocol)
  • 端口(Port)
  • 路径(Path)
  • 参数(Params)

2. Protocol

2.1 定义

  • 网络协议,计算机设备在网络中的唯一标识,地址,编号。

2.2 分类

1. TCP协议

1.1 定义
  • 传输控制协议,是Transmission Control Protocol的缩写,是一种面向连接的,可靠的,基于字节流的传输层通信协议,能保证数据的准确性和有效性。
1.2 特点
  • 面向连接:
1. 创建连接
2. 传输数据
3. 关闭连接(双方必须断开连接,释放资源)
举例:打电话
  • 可靠传输:
    • 发送应答机制
    • 超时重发机制
    • 错误校验机制(校验码)
    • 流量控制和阻塞控制机制(有缓冲)
  • 基于字节流
  • 一对一

2. HTTP协议

2.1 定义
  • 超文本传输协议(Hyper Text Transfer Protocol)
2.2 特点
  • 基于TCP协议,TCP协议规定可靠的传输方式
2.3 作用
  • HTTP协议规定浏览器和Web服务器传输的数据格式

  • 浏览器访问web服务器的通信过程

访问web服务器的通信过程

1.4 查看HTTP协议的通信过程
  • windows和Linux:f12
  • macOS:右键检查(开发者工具)
1.network
2.输入URL,刷新浏览器
3.每一项都是一次请求和响应
1.5 http报文格式

请求报文组成

1.请求行: GET / HTTP/1.1\r\n
GET:请求方式     /:URL(请求资源路径)  HTTP/1.1:协议版本
POST:提交
2.请求头:Host:www.baidu.com  key:value\r\n
3.空行(\r\n回车和换行):分割请求头和请求体 
4.请求体:GET请求没有请求体,POST请求有请求体\r\n
HTTP状态码:
200:请求成功
307:重定向http-->https(跳转)
404:请求错误
500:服务器错误

** 响应报文格式&**

1.响应(状态)行: HTTP/1.1 200 OK     协议版本 状态码  状态描述
2.响应头:key:vaule
3.空行
4.请求体:web服务器返回的资源数据

2. UDP协议(User Datagram Protocol)

2.1 定义
  • 用户数据报协议,是User Datagram Protocol的缩写,是一个简单地面向数据报的传输层协议, 不能保证数据的准确性和有效性。
  • 数据报:是通过网络传输的数据的基本单元
  • udp实现基础发送接收数据
2.2 特点
  • 面向无连接
  • 不可靠
  • 面向报文
  • 速度快
  • 一对多
2.3 操作步骤
 1. 导包
 2. 创建流对象(ipv4,udp)
 3. 发送(二进制字符串,元组ip和端口)
 4. 关闭流对象
#coding=utf-8

from socket import *

# 1. 创建udp套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)

# 2. 准备接收方的地址
dest_addr = ('192.168.236.129', 8080)

# 3. 从键盘获取数据
send_data = input("请输入要发送的数据:")

# 4. 发送数据到指定的电脑上
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)

# 5. 等待接收对方发送的数据
recv_data = udp_socket.recvfrom(1024)  # 1024表示本次接收的最大字节数

# 6. 显示对方发送的数据
# 接收到的数据recv_data是一个元组
# 第1个元素是对方发送的数据
# 第2个元素是对方的ip和端口
print(recv_data[0].decode('gbk'))
print(recv_data[1])

# 7. 关闭套接字
udp_socket.close()
2.4 应用场景
  • 广播,短息,音视频

2.3 tcp和udp不同点

  1. 面向连接(确认有创建三方交握,连接已创建才做传输)
  2. 有序数据传输
  3. 舍弃重复的数据包
  4. 无差错的数据传输
  5. 阻塞/流量控制
    面向连接:双方建立连接,同时需要分配内核资源,来管理连接状态和连接上的传输,完成数据交换之后,双方必须断开连接,已释放系统源,这种是一对一的连接可靠地传输:
    1. tcp采用了应答发送机制,在得到双方的应答后才认为tcp报文传输成功
    2. 超时重传:发送报文之后启动定时器,没收到应答就重发
    3. 错误校验:tcp用一个校验和函数来校验数据是否有错误,在发送和接收是都要计算校验和
    4. 流量控制与阻塞管理,流量控制用来避免主机发送的过快而是接收方来不及完全收下
  • 同udp协议一样,都是依靠socket技术

2.4 TCP网络应用开发程序

1. 简介

1. socket创建一个套接字
2. blind绑定ip和port
3. listen使套接字变为可以被动连接
4. accept等待客户端的连接
5. recv/send接收发送数据

2. 分类

  • TCP客户端程序开发
  • TCP服务端程序开发

3. TCP客户端程序开发模型

1.创建客户端socket对象:s1 = socket()(AF_INET,SOCK_STREAM)·

2.建立连接:sd.connect()(IP地址,端口号)

3.数据传输:s1.encode('utf-8)s1.send(),s1.decode(utf-8)s2.recv(1024)

4.关闭连接:s1.close()

4. TCP服务端程序开发模型

1.穿件服务端socket对象(客户端服务socket):s1 = socket(AF_INET,SOCK_STREAM)

2.绑定端口号:blind(ip地址,端口号)
0
3.设置监听模式listen(n):n为等待连接的最大个数(128)(被动socket)

4.等待客户端连接accept() --->生成一个新的socket对象(服务器socket,客户端端口client_ip_port) 拆包

5.数据传输recv(1024),解码decode(),send(),编码encode()

6.关闭连接close()(关闭服务器socket,关闭客户端服务socket)
  • 当服务端程序退出后端口号不会立即释放,要等1~2分钟

  • 解决办法:

# 在绑定端口号之前启动端口复用
tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket_SO_REUSEADDER,True)
  • 注意点:
    • 服务器如果关闭,新的客户端不能连接,旧的还能连接

3. IP(Internet Protocol)

3.1 定义

  • Internet Protocol,也称IP地址,相当于自己家里地址,计算机在网络中的地址

3.2 分类

1. IPv4(4228250625):点分十进制

2. IPv6

  • 格式:255.255.255.255:冒号分十六进制
  • 查看IP地址:
    • windows:ipconfig
    • macos和linux:ifconfig
    • 以太网适配器en inet
  • 测试网络是否连通:ping ip地址(局域网)/域名(外网)
  • 测试停止: ctr+c

4. Port

4.1 定义

  • 网络数据传输的通道,相当于自己家里的门牌号,或者计算机上的QQ或者微信
    端口号:65536个,端口的编号

4.2 分类

1. 知名端口号

  • 0~1023众所周知的端口号ssh:22http:80ftp:21

2. 动态端口号

  • 操作系统随机生成的,1024~65535
  • port:端口除了固定的之外,其他的有主机随机分配需求使用
    • 查看端口:netstat -an
    • 查看具体某个端口:netstat -an lsof -i [tcp/udp]:2425

5. Socket

5.1 定义

  • 套接字,接口,流对象,是进程之间的网络数据传输的工具。就是具体实现tcp和udp的底层技术(不是在网络七层协议之列,因为技术不是协议)
  • socket有两个参数:
    • Address Family(可以选择AF_INET(用于internet进程间通信)或者AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET).
    • Type(套接字类型,可以是SOCK_STREAM(流式套接字,主要用于TCP协议)或者SOCK_DGRAM(数据报套接字,主要用于UDP协议)

5.2 使用步骤

1. 流程

1. 创建套接字
2. 使用套接字收/发数据
3. 关闭套接字

2. 注意事项

1. 创建套接字后,会有send缓冲区和recv缓冲区(粘包)
2. send-->send缓冲区-->网卡
3. 网卡-->recv缓冲区-->recv

5.3 应用场景

  • 所有网络应用程序

5.4 socket的send和recv原理剖析

  • send原理
    • send->发送缓冲区–>网卡–>网卡–>接收缓冲区–>recv
  • recv原理
    • send原理反过来
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值