网络编程
网络目的:数据传输
OSI七层模型:
应用层:提供用户服务,具体的内容由特定的程序规定
表示层:提供数据的加密和压缩优化
会话层:确定建立应用连接,选择传输服务
传输层:提供数据传输服务,进行流量控制
网络层:路由选择,网络互联
链路层:提供链路交换,具体消息的发送
物理层:物理硬件,接口,网卡的规定
四层:
应用层
传输层
网络层
物理链路层
五层:(TCP/IP模型)
应用层
传输层
网络层
链路层
物理层
OSI模型优点:将功能分开,降低网络传输中的耦合度。使开发流程更加清晰,每部分各司其职
高内聚:每个模块功能尽量单一,不会多个功能掺杂
低耦合:尽量降低每个模块之间的关联性
要求:
能够顺序说出七层模型、五层模型
知道每一层干什么事情
理解消息传输流程
网络协议:在网络通信中协议各方必须遵守的规定。如建立什么连接,消息结构如何解析等
网络相关概念
网络主机:在网络上确定一台主机
本地使用:'localhost' 127.0.0.1
网络地址:'0.0.0.0' '172.60.50.54'(本机网络IP)
IP地址
网络上确定一台主机的地址
IPv4:点分十进制 比如192.168.1.3 范围0-255
IPv6:128位
特殊IP
127.0.0.1 本地测试IP
0.0.0.0 自动使用本地可用网卡IP
192.168.1.0 代表当前网段
192.168.1.1 通常为网关地址
192.168.1.255 广播地址
域名:网络服务器地址在网络上的名称
端口号:端口号是地址的一部分,在一个系统中每个网络应用监听不同的端口,以获取对应端口传递的信息
端口取值范围:1-65535
1-255 是通用端口(牛逼的程序占用)
256-1023 系统端口
1024-65535 自用端口
获取应用程序的端口
import socket socket.getservbyname("mysql") #3306 socket.getservbyname("ssh") #22
传输层服务
一、面向连接的传输服务 =》 tcp协议
传输特征:
提供可靠的数据传输
可靠性:数据在传输中,无失序、无差错、无丢失、无重复
在数据传输前和传输结束后,需要建立连接和断开连接
三次握手:连接过程
(1、客户端向服务器发送连接请求)
(2、服务器接收到请求进行确认,返回确认报文)
(3、客户端收到服务器回复最终确认连接)
四次挥手:断开过程
(1、主动方发送报文,告知被动方要断开连接)
(2、被动方回复报文,表示已经接收到请求,准备断开)
(3、被动方再次发送报文,表示准备处理就绪,可以断开)
(4、主动方发送确认报文,断开连接)
适用于传输较大的内容或文件,网络良好,需要保证传输可靠性的情况
例:聊天信息 文件的上传下载 邮件处理 网页获取……
二、面向无连接的传输服务 =》 udp协议
传输特点:
不保证传输的可靠性;没有连接和断开的过程;数据的首发比较自由
适用情况:网络情况可能产生丢包,对传输可靠性要求低
例:网络视频 群聊 广播……
要求:
1、理解三次握手和四次挥手,能够描述过程
2、知道tcp传输和udp传输的区别
socket套接字编程
目的:通过编程语言提供的套接字编程接口,可以更简单的完成基于tcp和udp的编程
套接字:完成上述目标的一种编程手段
套接字类别
1、流式套接字(SOCK_STREAM):传输层基于tcp的协议通信
丨可靠的传输 丨 tcp传输 丨 流式套接字丨
2、数据报套接字(SOCK_DGRAM):传输层基于udp协议传输
丨面向无连接不可靠的传输 丨 udp传输 丨 数据报套接字丨
tcp粘包
产生原因:
1、tcp传输以字节流的方式发送消息,消息之间没有边界
2、发送比接收的速度快
影响:对每次发送的内容是一个独立的意思,需要单独识别
如何处理:
1、每次发送后加一个结尾标志
2、发送一个数据结构
3、每次发送有一个间隔