osi七层模型
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
osi五层模型
应用层(消息 ) 传输层(数据段)网络层(数据包)数据链路层(帧)物理层(比特)
tcp/ip四层网络模型
应用层 传输层 网络层 网络接口层
应用层
应用层是工作在操作系统里的用户态,其他层是在操作系统里的内核态
应用层协议(协议端口号是传输层的,是传输层给不同应用的标记)
tcp:http 80 https443 ftp20(数据传输)21(传输控制)ssh 22 telnet 23 dns 53 smtp 25 pop3 110
udp:dns 53 tftp69 server445
传输层
两个协议 TCP UDP
TCP叫做传输控制协议,特点是可靠传输 特性有流量控制,拥塞控制,超时重传
UDP只负责传输,特点是时效性和效率高
因为应用需要传输的数据非常打,所以当数据超过tcp最大报文段长度mss时,就会把数据包分为一个个数据TCP段,当某个分块丢失时,只需要重新发送这个数据段即可
网络层
传输层只需要作为应用间的传输媒介,实际传输功能是网络层实现
网络层协议 ip icmp arp
TCP段=TCP首部+数据部分
ICMP Internet控制消息协议
协议号是1
是依靠各种命令实现的,比如ping
ARP协议
在局域网内交换机是通过MAC地址通信的,ARP协议就是把一个一个已知的ip转化成MAC地址
当表内没有需要的MAC地址时,ARP会发送广播来寻找MAC地址
工作过程
1.PC1想要发送数据给PC2,查看缓存表里没有PC2的MAC地址
2.PC1发送(需要192.168.1.2的MAC地址)的广播。
3.所有主机收到ARP请求的广播,PC2回复ARP应答 ,其他主机丢弃
4.PC1将PC2的MAC地址保存到缓存表中,这时就可以和PC2发送数据了。
网络接口层
把数据包加上MAC头部封装成帧发送到网络上
分装格式
输入网址回车到显示页面网络发生了什么
1.先解析URL
http://www.ABC.com/a/index.html
http是协议
www.ABC.com是服务器名
/a/index.html是访问文件的路径
解析完毕后浏览器就会根据信息生成请求消息
2.查询真实地址-DNS
需要去查询目标服务器的IP地址
www.ABC.com.
.是根域
.com是顶级域
ABC.com是权威域
查询步骤是
客户端先在本机的host文件里查询有没有
www.ABC.com的ip
如果没有就去询问本地DNS服务器有没有www.ABC.com的ip(递归)
本地DNS服务器如果没有,那么它就会代替客户机向其他DNS服务器发起查询(迭代)
会先向根域名服务器查询 根域名服务器发现是.com,会给他.com服务器的地址
然后会向.com服务器进行查询,.com服务器发现是www.ABC.com权威服务器的地址,会给他权威服务器ip
然后向权威服务器查询,得到目标ip,然后发送给客户端。
3.协议栈分配任务
通过DNS找到ip后,就可以把http的请求分发给协议栈
应用程序通过调用socket库,委托了协议栈
- Socket库(套接字库)是计算机网络通信中的一个关键组件,它提供了一组函数或方法,用于在网络中的设备之间建立连接、发送和接收数据
协议栈上半部分是TCP和UDP协议,用于收发数据
下面是IP协议,包括ICMP和ARP
4.TCP进行可靠传输
源端口号和目的端口号是决定发给哪个应用
序号是对数据包排序避免乱序
确认号是为了确认对方是否收到,没有就重复发送避免丢包
确认号:用于确认已经成功接收的数据,同时也用于通知发送方下一个期望接收的数据的序列号。
状态为 FIN结束连接 SYN发起连接 RST重新连接 ACK回复
窗口 通过什么一个窗口来表明自己的缓存大小,避免数据传输太快或者太慢,TCP会进行流量控制和拥堵控制
TCP三次握手
1、ACK:确认序号位,当该位为1时,用于确认发送方的数据接收成功;
2、SYN:同步序列号,TCP建立连接时将该值设置为1;
3、FIN:发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1
最一开始服务器客户端都在close状态,然后服务器去主动监听某个端口进去listen状态
- 第一次握手:客户端发送一个SYN=1给服务器,请求建立连接,同时发送一个seq=x的序号,让服务器把seq的序号作为起始字段来回应它。
- 第二次握手:服务器收到客户端的SYN包后,会发送一个SYN-ACK包(同步序列号-确认包)给客户端作为响应。在这个包中,SYN=1代表建立连接,ACK=1代表接受数据成功,ack=x+1是对接受序号的回复,seq=y是希望客户端用y这个序号作为起始字段回复。
- 第三次握手:客户端收到服务器的SYN-ACK包后,会发送一个ACK包给服务器作为确认。在这个包中,ACK=1代表数据接受成功,ack=y+1代表接收数据成功,seq=x+1是希望服务器以x+1作为初始字段回复。至此,TCP连接建立完成。
三次握手目的是保证双方都有发送和接收的能力
ip
tcp在连接,断开等操作时,需要ip模块把数据分发给网络包发送给目的对象
ip报文里有源ip地址和目的ip地址
通过路由表来确认从哪发送到哪里
MAC
在生成ip头部后,网络包还会在前面添加MAC包头
MAC包头包括接受方MAC和发起方MAC
发起方只需要把网卡MAC写入就行,接送方需要查表,
如果表中没有,就通过ARP协议寻找
网卡
网卡在获得网络包后,会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。
转化成电信号通过网线发出。
交换机
路由器
HTTP
超文本传输协议
http就是在两个设备之间,传输文字,视频,图片的约定
常见状态码
1xx表示处于中间态
2xx标识成功
3xx标识重定向,资源位置改变,需要重新请求
4xx标识客户端问题,报文有误,服务器无法处理
5xx表示服务器问题
200 最常见的成功
204 成功,但响应头没有body数据
206表示响应返回的body数据是一部分
301 永久重定向,资源已经不再了,需要用新的URL访问
302临时重定向
会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。
304 缓存重定向
400表示请求报文错误
403表示1资源被禁止访问
404表示资源不存在
500服务器错误
501表示客户端请求功能不支持
502通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
503 表示服务器当前繁忙
GET POST
GET是从服务器获得指定的资源,请求参数一般是卸载URL里
POST是根据报文body对指定的资源作出处理
在RFC规范定义下
RFC(Request for Comments)规范是由互联网工程任务组(IETF)发布的一系列文档,用于描述和规范网络协议、服务和架构。
GET方法是安全且幂等的,可以对GET请求做缓存
POST方法由于新增或提交数据,是不安全的,多次提交数据会多次创建资源,是不等幂的
HTTP特性
HTTP/1.1的优点
1.简单 报文格式就是header +body 头部信息是key-value
2.灵活易扩展 请求方法,URL,状态码,头字段都允许开发人员自定义和扩充
同时HTTP由于是工作在应用层,它的下层可以随便变化
HTTPS就是在HTTP层和TCP层之间增加了SSL/STL安全传输层
HTTP/1.1 和 HTTP/2.0 传输协议使用的是 TCP 协议,而到了 HTTP/3.0 传输协议改用了 UDP 协议。