OSI模型(共七层)
1.物理层 2.数据链路层 3.网络层 4.运输层 5.会话层 6.表示层 7.应用层
TCP/IP协议模型
1.网络接口层(Network Access) 2.网际层(Internet)3.运输层(Transport)4.应用层(Application)
应用层 FTP,HTTP,SMTP,DNS,DHCP 报文,用户数据
运输层 TCP,UDP 段
网络层 IP,ARP,ICMP 包
数据链路层 CSMA/CD, PPP 帧
物理层 比特流
物理层通信模型
局域网模型:
PC——(网线,数字信号)——集线器/交换机——(网线,数字信号)——PC
广域网通信模型
PC——(网线,数字信号)——调制解调器——(电话线,模拟信号)——调制解调器——(网线,数字信号)——PC
PC——(网线,数字信号)——光电转换器——(光信号,光纤)——光电转换器——(网线,数字信号)——PC
数据链路层
Ethernet V2协议,使用CSMA/CD技术,(同轴电缆,集线器)
以太网帧的格式:
首部:源MAC(6字节)+目标MAC(6字节)+网络类型(2字节,IPV4还是IPV6)
以太网帧:首部+数据+FCS(4字节)
数据的长度46-1500字节
整个以太网帧的长度是64-1518字节
PPP协议(点对点协议)
网络层
网络层数据包由首部(至少20个字节,包含版本,首部长度,区分服务,总长度,标识,标志,片偏移,生存时间,协议,首部检验和,源IP地址,目标IP地址,可选字段(最多40个字节))+数据2部分组成
由于帧的数据不能超过1500字节,过大的IP数据包,需要分成片传输给数据链路层
每一片都有自己的网络层首部
传输层
TCP:面向连接,可靠传输,首部占用空间大(至少20个字节,最多60个字节),传输速率慢,资源消耗大,应用场景:浏览器,文件传输,邮件发送,对应的应用层协议:HTTP,HTTPS,FTP,SMTP,DNS
首部:源端口+目的端口+序号+确认号+数据偏移+保留+标志位+窗口+检验和+紧急指针+选项(长度可变)+填充
标志位
URG=1时,紧急指针字段才有效,表明前多少位的是紧急数据,应当尽快传输
ACK=1时,确认号才有效
PSH(push)
RST=1时,表明连接中出现问题,需要重连
SYN=1,ACK=0时,表明这是一个建立链接的请求
SYN=1,ACK=1时,服务器回复客户端可以建立连接
FIN=1时,表明数据已经发送完毕,要求释放连接
序号seq4 字节:建立连接后,序号代表这一次给对方的TCP数据部分的第一个字节的编号
确认号ack 4字节:建立连接后,期望下一次传过来的数据部分的第一个字节的编号
可靠传输:ARQ停止等待自动重传请求,连续ARQ+滑动窗口协议,SACK选择性确认
流量控制(点对点):通过确认报文中的窗口字段来控制发送方的发送速率
当窗口为0时,开始定时器询问最新窗口
拥塞控制:避免网路中的路由器或链路过载,涉及到所有的主机和路由器
发送窗口=min(拥塞窗口,接收窗口)
慢开始(慢启动):cwnd的初始值比较小,然后随着数据包被接收方确认(收到一个ACK),cwnd就成倍增长
拥塞避免:ssthresh:慢开始阈值,cwnd达到阈值后,以线性方式增加,丢包后网络可能出现拥塞,阈值乘法减小同时cwnd执行慢开始算法(老版本)
快速重传:
接收方:每收到一个失序的分组后就立即发出重复确认
发送方:只要连续收到三个重复确认(总共4个相同的确认),就应当立即重传对方尚未收到的报文段
快速恢复
当发送方连续三个重复确认后,执行乘法减小,把ssthres减半,cwnd不恢复初始值,直接开始执行拥塞避免算法
连接管理:3次握手,4次挥手
第一次握手:SYN=1,ACK=0 ,客户端的序号初始值
第二次握手:SYN=1,ACK=1,服务器的序号初始值
第三次握手:SYN=0,ACK=1
第一次挥手:主机1发出FIN报文,表示主机1已经没有数据要发送了,但是此时主机1还是可以接收来自主机2的的数据
第二次挥手:主机2返回ACK报文,表示主机2已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的
第三次挥手:主机2发送FIN报文,表示主机2已经没有数据要发送了
第四次挥手:主机1返回ACK报文,表示主机1已经知道主机2没有数据发送了,随后(一般为2倍的MSL,MSL建议为2分钟)正式断开整个TCP连接
UDP:无连接,不可靠传输,首部占用空间小(8个字节,源端口,目标端口,长度,检验和),传输速率快,资源消耗小,应用场景:音视频通话,直播,对应的应用层协议:DNS
应用层:
HTTP:
ABNF语言规定
请求行
request-line = method SP request-target SP HTTP-version CRLF
例:GET /hello/ HTTP/1.1
请求头:
head-field = field-name ":" OWS field-value OWS
User-Agent:浏览器身份标识字符串
Host:服务器的域名,端口号
Date:发送的时间
Referer:前一个链接
Content-Type:请求体的类型,application/x-www-form-urlencoded(表单提交),multipart/form-data(文件上传)
Content-Length:请求体的长度
Accept:能够接受的响应内容类型,text/plain
Accept-Charset:能够接受的字符集,utf-8
Accept-Encoding:能够接受的编码方式列表
Accept-Language:能够接受的响应内容的自然语言列表en-US
Range:仅请求某个实体的一部分,断点续传
Origin:发起一个针对跨域资源共享的请求
Cookie:之前通过服务器Set-Cookie发送的Cookie
Connection:该浏览器想要优先使用的链接类型
Cache-Control:用来指定在这次的请求/响应链中的所有缓存机制都必须遵守的指令
message-body = *OCTET
status-line = HTTP-version SP status-code SP reason-phrase CRLF
例:HTTP/1.1 200 或者 HTTP/1.1 200 OK
响应头
Date
Last-Modified
Server
Expires
Content-Type:text/html; charset=utf-8
Content-Encoding
Content-Length
Content-Disposition:一个可以让客户端下载文件并建议文件名的头部
Accept-Ranges:服务器支持哪些种类的部分内容范围:bytes
Content-Range:这部分消息是属于完整消息的哪部分
Range
Origin:跨域
Cookie:
Connection
Cache-Control
Accept
Accept-Charset
Accept-Encoding
Accept-Language
响应体
请求方法:
GET:常见于读取操作,参数直接拼接在URL的后面(URL长度有限制)
POST:常用于添加,修改,删除,请求参数放在请求体里面
HEAD:请求得到与GET请求相同的响应,但没有响应体,使用场景:在下载一个大文件前,先获取其大小,再决定是否下载
OPTIONS:获取服务器支持哪些方法
PUT:用于对存在的资源进行覆盖
PATCH:用于对资源进行部分修改,资源不存在会创建
DELETE:用于删除指定的资源
TRACE:环回测试,主要用于HTTP请求的测试或诊断
状态码分为5类:
信息响应:100-199
成功响应:200-299
重定向:300-399
客户端错误:400-499
服务器错误:500-500
常见状态码:
100:Continue,继续发送剩余请求
200:OK 成功
302:Found 请求的资源被暂时的移动到了由Location头部指定的URL上,重定向
304:Not Modified 可以使用缓存的内容
400:Bad Request 语法无效
401:缺乏目标资源要求的身份验证凭证
403:拒绝授权访问
404:无法找到请求资源
405:服务器禁止了使用当前HTTP方法的请求
406:服务器无法提供与Accept-Charset以及Accept-Language指定的值相匹配的响应
408:服务器想要将没有在使用的连接关闭
500:服务器出问题了
501:请求的方法不被服务器支持
503:服务器停机维护或超载