CS与BS架构
Client <<======>> Server
客户端与服务器
Browser <<======>> Server
浏览器与服务器
网络通信:
网络 --> 物理链接介质 + 互联网通信协议
跨地域数据传输 --> 通信
OSI七层协议
协议:规定数据的组织格式
格式:头部[打包] + 数据部分
每层打包/拆解一个头
OSI七层协议
应用层、表示层、会话层 浏览器应用采用http协议
socket套接字 封装传输层及以下的协议
传输层 一般采用tcp或udp协议
网络层 ip协议
数据链路层
物理层[二进制传输]
以太网协议
物理层:
负责发送光电信号
单纯的电信号毫无意义,必须对其进行分组
一组物理层数据称之为位
数据链路层:以太网协议:ethernet
规定:
1.一组数据称之为一个数据帧
2.数据帧分为头+数据两部分
头包含:源mac地址、目标mac地址
数据包含:网络层发来的整体的内容
3.网卡
接入互联网的主机必须有一块网卡
每块网卡在出厂时都会烧制好一个全世界独一无二的地址
FF:FF:FF:FF:FF:FF: 十二位16进制数
以太网协议的工作方式是广播[靠吼]
存在局限性,无法将全球的电脑放进一个屋子,会导致广播爆炸
ip协议与arp协议
网络层:
划分出多个广播域,同一广播域/局域网内,信息传播靠吼
网关:网络的出口
一个连接到公网的地址 一个局域网的地址
网关与外界通讯走的是路由协议
IP协议:
1.一组数据称之为一个数据包
2.数据帧分成两部分:头 + 数据
头包含:原地址与目标地址,该地址是IP地址
数据包含:传输层发来的整体的内容
3.IP地址
ipv4:
32位二进制数
4,294,967,296
子网掩码
32位二进制数
1-24位都为1
合法的ip地址:
172.12.10.1/24
根据ipv4与子网掩码,计算网关地址,判断是否在同一个局域网
ARP协议:
将ip地址解析成mac地址
计算两个ip地址是否在同一局域网内,如果在,则可基于mac传输
如果不在,则需要获取网关的mac地址,通过网关进行数据传输
发送端:
FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24
tcp协议
传输层:应用程序端口
端口范围:16位二进制数 0-65535,0-1023为系统占用端口
ip + port --> 标识全球范围内独一无二的一个基于网络通信的应用程序
ethernet头 + ip头 + tcp头 + 应用层的头 + 应用层数据
tcp协议特点:
传输层会将数据分段
头部固定为20个字节
tcp协议的工作方式:
双向通信链接:
三次握手机制建立链接:
1.客户端向服务端发送请求
2.服务端同意请求,并向客户端发送请求
3.客户端同意请求
四次挥手机制断开链接:
由于管道内有数据,因此第二步不可合并
SYN = 1, 建立链接请求
ACK = 1, 同意链接请求
FIN = 1, 终止链接请求
谁建立的请求,谁就可以向对方传输数据
可靠传输:
发送的数据必须等待对方确认接收后,才会将自己内存中的数据清理掉
传输效率会降低,但稳定性更高
nagle算法:将多次间隔较小、且数据量较小的数据,合并成一个较大的数据,一起传输
客户端状态:
SYN_SENT ESTABLISHED FIN_WAIT_1 FIN_WAIT_2 TIME_WAIT
服务端状态:
LISTEN SYN_RCVD ESTABLISHED CLOSE_WAIT LAST_ACK
当客户端大量处于TIME_WAIT状态时,意味着服务端正在经历着高并发
半链接池:
高并发时,过多的请求先存入接待室,避免请求过多而导致服务端崩溃
udp协议
udp协议的工作方式
不需要建立链接、不会等待对方确认接收
传输速度快,但是不稳定
在发送时,就会将每份数据按边界打包,因此不会出现粘包问题
1个sendto,对应1个recvfrom
如果第1个recvfrom没有接收全第1个sendto,则会导致数据丢失,但不会粘包
其他协议
Socket抽象层 套接字
导入该类,获取其接口
将传输层及以下的数据封装
应用层:
HTTP通信:浏览器
自定义:客户端
自定义协议注意事项:
1.头部:放对数据的描述信息 例如:数据的接收者、类型、长度等...
2.头部的长度必须固定,否则在读取时会出错
dns:域名解析 将域名指向对应的ip地址



