
计算机网络功能主要包括实现资源共享,实现数据信息的快速传递。

网络的普及需要标准。不同的国家和公司都建立自己的通信标准不利于网络互连,同时多种标准并行情况下不利于技术的发展融合。
而一个统一 的通信标准不仅可以实现万物互联,也可以降低开发难度。

于是OSI7层模型被提出,并且被行业接受。
索引 | 层名 | 说明 |
|---|---|---|
7 | 应用层 | 各种应用程序 |
6 | 表示层 | 数据格式化、数据加密解密、数据的压缩解压缩 |
5 | 会话层 | 建立、管理、终止应用之间的会话连接 |
4 | 传输层 | 提供端到端的数据服务(可靠或者不可靠) |
3 | 网络层 | 逻辑寻址;路由选择 |
2 | 数据链路层 | 将分组数据封装成帧 |
1 | 物理层 | 在介质上传输比特;提供物理的规约 |
OSI7层 模型因其每层功能明确,各司其职,也就是说实际规定了每一层的任务,该完成什么事情,可以很好的的降低开发难度。
之后随着技术的进步和互联网的发展,OSI7层的模型因为过于理想的结构(也就是说结构细节太复杂)、在实际工作中实践难度大等原因,在实际工作中慢慢被TP/IP模型取代。
索引 | 层名 | TCP/IP协议 | 说明 |
|---|---|---|---|
7 | 应用层 | 应用层 | Telnet、FTP、SMTP、DNS、HTTP以及其他应用协议 |
6 | 表示层 | ||
5 | 会话层 | ||
4 | 传输层 | 传输层 | TCP、UDP |
3 | 网络层 | 网络层 | IP、ARP、RARP、ICMP |
2 | 数据链路层 | 网络接口 | 各种通信网络接口(以太网等,物理网络) |
1 | 物理层 | ||
上表中提到,TCP/IP是一种网络协议。什么是网络协议呢?在网络数据传输中,都遵循的执行规则,网络协议实际上规定了每一层在完成自己的任务时应该遵循什么规范。
需要应用工程师做的工作有以下几个:编写应用工功能,明确对方地址,选择传输服务。

通信地址有两个部分:IP地址和端口号。
IP地址:网络中表示一台计算机的地址编号,下又分IPV4和IPV6两种。IPV6采用的地址格式可以解决IPV4地址紧缺的问题。IPV6号称可以给地球上每一粒沙子一个ip地址。
:: 省略中间的0端口号:网络地址的一部分,在一台计算机上,每个网络程序对应一个端口。

import socketsock = socket.socket(family,type)sock.bind(ip,port)localhost , 127.0.0.1172.40.91.185 (通过ifconfig查看,在没有分配公网ip时,本地网络地址是动态的。可以采用DDNS动态解析技术。)0.0.0.0,ipv6使用 ::
注:箭头意为访问。
data,addr = sock.recvfrom(buffersize)n = sock.sendto(data,addr)sock.close()


sock=socket.socket(family,type)
功能:创建套接字
参数:family 网络地址类型 AF_INET表示ipv4
type 套接字类型 SOCK_STREAM 表示tcp套接字 (也叫流式套接字)
返回值: 套接字对象sock.listen(n)
功能 : 将套接字设置为监听套接字,确定监听队列大小
参数 : 监听队列大小
conn,addr = sockfd.accept()
功能: 阻塞等待处理客户端请求
返回值: conn 客户端连接套接字
addr 连接的客户端地址data = conn.recv(buffersize)
功能 : 接受客户端消息
参数 :每次最多接收消息的大小
返回值: 接收到的内容
n = conn.send(data)
功能 : 发送消息
参数 :要发送的内容 bytes格式
返回值: 发送的字节数sock.connect(server_addr)
功能:连接服务器
参数:元组 服务器地址
tcp粘包问题

分类 | TCP | UDP | |
|---|---|---|---|
传输特征 | 提供可靠的数据传输 | 不保证传输的可靠性 | |
传输数据处理为字节流 | 处理为数据包形式 | ||
传输需要建立连接才能进行数据传,效率相对较低 | UDP 比较自由,无需连接,效率较高 | ||
套接字编程区别 | 会有粘包 | 有消息边界不会粘包 | |
依赖 listen accept 建立连接才能收发消息 | 不需要 listen accept | ||
使用 send,recv 收发消息 | 使用 sendto,recvfrom | ||
使用场景 | 适合对准确性要求高,传输数据较大的场景 | 适合对可靠性要求没有那么高,传输方式比较自由的场景 | |
文件传输:如下载电影,访问网页,上传照片。邮件收发,点对点数据传输:如点对点聊天,登录请求,远程访问,发红包 | 视频流的传输: 如部分直播,视频聊天等,广播:如网络广播,群发消息,实时传输:如游戏画面 | ||
在一个大型的项目中,可能既涉及到 TCP 网络又有 UDP 网络 | |||

