学习网络编程的目的
为了开发一个CS架构或者BS架构的软件
客户端/服务器架构
1.硬件C/S架构(打印机)
2.软件C/S架构
互联网中处处是C/S架构
如百度网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种)
腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频)
C/S架构与套接字(socket)的关系:
学习套接字编程的目的式为了开发一个C/S或者B/S架构的软件
client --------------网络-------------- server
browser--------------网络--------------server
什么是网络
网络 = 物理连接设备 + 互联网通信协议(就是计算机界的统一语言)
网络通信原理
互联网的本质就是一系列的网络协议
然而internet为何物?
其实两台计算机之间通信与两个人打电话之间通信的原理是一样的(中国有很多地区,不同的地区有不同的方言,为了全中国人都可以听懂,大家统一讲普通话)
英语成为世界上所有人通信的统一标准,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列的协议,总称为‘互联网协议’(Internet Protocol Suite).
互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。
为何要有网络
网络:信息高速公路
为了方便数据传输
OSI七层协议
互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

每一层功能
1、物理层
物理层由来:孤立的计算机之间要想一起玩,就必须接入internet,言外之意就是计算机之间必须完成组网
物理层功能:主要负责发送电信号,用高低电平模拟二进制数0101,高电平对应数字1,低电平对应数字0
网线:--》1001000电信号--》从网线中传输电信号
8个比特位是一个字节
2、数据链路层
数据帧:一组电信号是一个数据帧,有头和数据部分
以太网协议Ethernet:要求连入网络的计算机必要要有一块网卡,并且规定全球每一块网卡的mac地址都不一样,用12位十六进制数表示,前六位表示生产厂商,后六位表示流水线号
以太网协议的数据传输部分分为报头和数据部分,报头有18个字节组成,前6个字节为自己的mac地址,中间6个字节是对方mac地址,后6个字节表示数据类型
网卡--》mac地址--》全球唯一的--》网卡出厂少在了网卡上。
48位二进制--》看到的都是16进制表示
广播:
局域网内通信,所有人都会接收到,通过mac地址确定给谁的数据报,如果不是自己的就不处理
广播风暴
3、网络层
跨局域网通信,需要经过网络层
网络层的由来:必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送,如果不是,就采用路由的方式(向不同广播域/子网分发数据包),mac地址是无法区分的,它只跟厂商有关
IP地址:0.0.0.0 - 255.255.255.255
子网掩码:配合IP地址进行二进制的与运算,算出两个IP地址是否属于同一个局域网
ARP协议:ip和mac的对照表,负责把ip解析成mac地址
4、传输层
传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。
传输层功能:建立端口到端口的通信
端口:0 - 65535 一个应用程序可以监听多个端口,但是一个端口只能属于一个应用程序
TCP协议:可靠传输
UDP协议:不可靠传输
5、应用层
http,ftp,websocket...
常用端口号
| 应用程序 |
FTP |
TFTP |
TELNET |
SMTP |
DNS |
HTTP |
SSH |
MYSQL |
| 熟知端口 |
21,20 |
69 |
23 |
25 |
53 |
80 |
22 |
3306 |
| 传输层协议 |
TCP |
UDP |
TCP |
TCP |
UDP |
TCP |
TCP |
TCP |
flask框架默认端口:5000
Django框架默认端口:8000
MySQL数据库默认端口:3306
redis数据库默认端口:6379
在一台计算机上,同一时间同一端口只能有一个应用程序占用
总结:IP能唯一的表示互联网中的某一台计算机,port能唯一的表示一台计算机上的一个应用程序
ip+port=》标识全世界范围内独一无二的一个基于网络通信的软件
ARP协议:通过IP地址解析成MAC地址
DNS
DNS:把网址转换成IP地址
从浏览器发送出去的数据,都是http协议,默认都是80端口
TCP三次握手四次挥手
1、tcp可靠传输:三次握手,四次回收保证数据可靠
2、三次握手
客户端想服务端发送链接请求
服务端回复可以建立,并且带着跟客户端建立连接的数据包
客户端收到后,链接建好了
3、这个过程后就剋有可靠传输数据
4、断开链接(4次挥手)
客户端告诉服务端,要断开
服务端收到,回复ok
服务端可能还有数据在传递,暂时还没断开,要等数据传完
服务端告诉客户端,我要断开链接
客户端收到,回复ok
Socket层
1、Socket抽象层,从osi七层抽象出去的,抽象了网络层和传输层,跟语言无关,任何语言都会有socket的封装
2、专门给开发人员用的

储备知识一:通信分为两大类
1、目标主机在局域网内
2、目标主机不在局域网内
储备知识二:ip地址与子网掩码
ip的作用有二:
1、arp歇一会根据ip地址解析成mac地址
2、ip+子网掩码按照位与运算会得到网络地址,以此来判断源于模板是否在一个局域网内
通信的前段是:先拿到目标的ip端口
arp协议的工作步骤:
1、根据自己的ip与子网掩码计算出自己的网络地址
2、根据对方的ip与子网掩码计算出对方的网络地址
3、判断1和2的网络地址是否一样
3.1、如果一样,证明源地址和目标地址在一个局域网内,只需要走交换机即可
发arp协议的广播包->拿到目标主机的mac地址
(自己的mac FF-FF-FF-FF-FF-FF) (自己的ip地址 对方的ip地址) 数据部分
发送真实的数据包
(自己的mac地址 目标主机的mac地址)(自己的ip地址 对方的ip地址) 数据部分
3.2、如果不一样,证明源与目标不在同一个局域网内,需要走交换机,再发给路由器,路由器再转发给运营商的环境
发arp协议的广播包-》拿到网关的mac地址
自己的mac FF-FF-FF-FF-FF-FF 自己的ip地址 网关的ip地址 数据部分
发送真实的数据包
自己的mac 网关的mac地址 自己的ip地址 对方的ip地址 源端口 目标端口 数据部分
交互机只有两种情况广播:
1、目标mac为FF-FF-FF-FF-FF-FF
2、目标mac地址不在mac地址表中