第六章 - 网络编程 - 计算机基础
1.计算机基础:
学python 写程序软件 eg:
暴风 qq word ... 应用软件 间接控制硬件
操作系统windows/linux... 系统软件 控制程序 让硬盘 内存 cpu 运转起来
计算机硬件 硬件 硬盘 内存 cpu 网卡
2.c/s架构
客户端 服务端
Client Server
操作系统 操作系统
硬件 硬件
网卡(网线)-交换机-路由器-...(网络)网卡
3.网络是什么?
网络:底层的物理链接介质+ 互联网协议(计算机界的英语)
1.连网线
2.标准 全球用 互联网协议 互联网协议就是计算机界得英语 所有计算机都能通信
OSI七层:(Open System Interconnection)
1.应用层 ...
2.表示层 ...
3.会话层 作文
4.传输层 语法
5.网络层 单词
6.数据链路层 字母
7.物理层 英标
TCP/IP五层 四层
1.应用层 1.应用层
2.传输层 2.传输层
3.网络层 3.网络层
4.数据链路层 4.接口层
5.网络层
4.五层协议详解:
物理层 电信号:01010101101 a - 97
数据链路层 对电信号 分组 使数字有意义 分组协议 = Ethernet协议 = 以太网协议 -> 网卡 mac地址(唯一的) mac(同一个子网)
head(18字节 = 6 源地址(mac) 6 目标地址(mac) 6 数据的描述) + data mac_head + ip_head + data
以太网的工作模式: 广播 --> 以太网基于mac地址的广播的方式来完成数据的传递 --> 只能在局域网完成 局域网才能找对对方
网络层: IPv4 IPv6 head(IP头 源地址+目的地址) + data iphead+data ip(哪一个子网) iphead + heac(tcp/udp) + data
ip + mac 就能找到全世界中唯一的计算机 ip->找到哪一个子网 mac->找到具体哪一台机器
ARP 协议 把ip地址解析成mac地址
传输层 tcp + udp 格式: head(tcp/udp) + data tcp/udp 基于端口工作的 端口:0 - 65535 一个软件一个端口 0-1024给操作系统使用的
ip+端口 就能找到全世界范围内的唯一一个软件 head(tcp) + head(应用头) + data
服务端最好一直对外提供 服务端的端口和ip要捆绑固定 不能随便变 客户端的端口可随便变
应用层 暴风 qq ... 软件 格式: head(应用头)+data 应用协议:http/ftp...
五层串起来:--->: 应用层产生数据head(固定长度)+data -> 传输层 -> 网络层 - > 数据链路层 -> 物理层
5.传输层详解:
tcp: 流式协议; 像水流一样 发数据 管道流数据 双向管道 c--->s c<---s 没有数据前 就先建管道
挖管道:
1.client 发个请求 要挖了 c--->s # syv=1 发请求 icq=x 序列号 数据包的编号
2.server 回应了 可以 并且我也要挖一条 确认+ 请求 s-->c # ack=1 + x 确认 syv=1 发请求 icq = y
3.client 回应了 可以 c-->s s-->c 成功 三次握手 # ack=1 + y 确认
tcp是可靠传输 s得到包之后回应收到 c没收到确认信息 就在传一遍 所以叫可靠传输
断开链接:
1.client 发请求 要断开了 fin=1
2.server ack=1 确认 注:这里不能发请求要断开 因为不确定s->c数据是否传完了
3.server 发请求 要断开了 fin=1
4.client ack=1 确认
udp: 没通道 client 一直发数据 不需要 对方回应 一直发 断电了或者网络出问题 client 不管 所以不可靠
tcp: 可靠 对方给了确认收到信息,才发下一个,如果没收到确认信息就重发
效率: tcp 可靠 效率低
udp 不可靠 效率高 不需要建管道 不需要等待对方回应
6.网络编程/scoket 编程:
参考: http://www.cnblogs.com/linhaifeng/articles/6129246.html
socket 是什么?
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,
它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。
socket 就是 == 片面说: ip + 端口
socket两大家族(两种套接字的类型):
1.基于文件类型的套接字家族 AF_UNIX 一台机器上 两个软件通信
2.基于网络类型的套接字家族 AF_INET 基于网络通信
socket工作流程: