OSI七层模型:应用层,表示层,会话层,传输层,网络层,链路层,物理层。由于它既复杂又不实用所以提出了TCP/IP五层协议
1. 应用层:(OSI的应用层,表示层,会话层)
负责应用程序之间的数据沟通
协议就是通信双方的数据格式约定
-
知名协议:HTTP协议(超文本传输协议)ttp与https的主要区别:http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。http默认端口是80,https为443。
FTP(文件传输协议)、DNS(域名系统)、DHCP(动态主机配置协议) -
网址-URL(统一资源定位符): 端口有16位,也就是65535各个端口可供选择,但前1024个端口不建议使用(被很多有名协议使用)
URL编码和解码操作:
查询字符串是用户提交给服务器的数据信息,这些提交的数据如实出现特殊字符,则有可能与url中间间隔符产生歧义导致url解析失败,所以需要url解码和编码操作。
url解码:将特殊字符的每一个字节转换为16进制数字字符串,并且为了表明这两个字符是经过了url编码后的数据,需要在转换后的数据前加上%。
例:+ ——>%2b
url编码:当遇到%,则认为紧跟其后的两个字符需要转码,将第一个字符转换为数字左移4位与第二个字符转换后的数据进行相加,%2b ——>(‘2’- ‘0’)<<4 + ( ‘b’-‘a’ + 10)
HTTP协议格式:
-
首行:
1.1请求首行:
请求方法:GET/POST ,协议版本:0.9/1.0/1.1/2
GET:主要用于获取实体资源,但是并非不提交数据。
POST:传输实体主体,向服务端提交表单数据。
两者侧重点不同,GET更偏向于获取,POST更偏向于提交,最大的区别是GET没有正文,GET所提交的数据是在url的查询字符串中。
Get Post区别1
Get Post区别2
1.2响应首行:
协议版本,响应状态码
状态码描述信息1**/2**/3**/4**/5**
200成功,301永久重定向,302临时重定向,404找不到资源,502服务器网关错误
-
头部:以一个key:val组成的键值对,并且各个键值对之间以\r\n作为间隔
Content-length:正文长度/Transfer-Encoding:正文长度无法直接获取的话通过分块传输
Content-type:正文类型
3**/Location:表名重定向地址+· -
空行:\r\n 用于间隔头部与正文
-
正文:由具体情况决定
2. 传输层:
负责端与端之间的数据传输, 说白了就是两个进程之间的数据传输;TCP/UDP协议
- 端口:在一个主机上标识一个进程(标识接收到的数据应该交给哪个进程处理)
一个端口只能被一个进程处理,但是一个进程可以使用多个端口 ,端口可以理解为一个 先通道。
uint6_t 无符号16位整数:端口号0 ~ 65536,但是0 ~ 1023不推荐使用,因为这些端口都被一些知名协议使用。 - 五元组:在网络通信中每一条数据都必须带有一些关键信息(源地址IP/源端口/目的IP地址/目的端口/协议)用于网络中的一条通信。
- UDP协议:用户数据报协议:无连接,不可靠,面向数据报。
-
无连接,不可靠:不需要建立连接,只需要知道对端,就可以发送数据。(发短信)
-
面向数据报:数据只能一整条一整条向应用层交付。(既不会拆分也不会合并)
-
udp协议字段:16位源\目的端口(确定数据从哪个进程来到哪个进程去)、 16位数据报长度、16位校验和(校验接收的数据与发送的数据是否一样,二进制反码求和)
-
16位数据报长度决定的特性:
1.面向数据报。
2.udp每次传输的报文大小是有长度限制的64k(用户给定的传输数据长度不能大于64k - 8),因此当数据长度大于64k-8时,就需要用户在应用层进行数据分包,将数据分成一个个小于64k-8大小的数据段。 -
udp并不保证数据有序到达,需要用户在应用层进行包序管理。
-
用户每次调用发送接口发送数据的时候,udp会直接为这条数据封装udp头部信息,直接发送出去,为了防止用户接受半条数据,导致udp的剩余数据无法根据协议字段中的数据报长度确定数据长度,因此udp规定数据只能整条交付。
应用层在传输层上基于udp实现的协议:DNS/DHCP(动态地址分配协议,谁上网给谁分配地址)
**tcp(传输控制)协议:**面向连接、可靠传输、面向字节流
连接管理部分
3. 网络层:
负责地址管理与路由选择,路由选择需要依托于一个良好的地址管理,为网络中的每一条数据选择一个合适的路径。网络中每条数据都会包含两条信息:源端IP地址,目的端IP地址。
典型协议:IP
IP地址:在网络中唯一表示一台主机,无符号的32位整数(IPV4),表示成点分十进制的方式123.139.84.33。
网段划分:
把IP地址分为网络号和主机号,在同一个局域网中,网络号都相同,但是主机号不同。相邻的两个局域网,网络号不能相同,局域网之间是由路由器来连接的。
如何区分网络号和主机号,通过子网掩码来区分,子网掩码是一个32位的整数,同样也可以表示为点分10进制。要求高位必须为1低位必须为0。
将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号。
由于只有42亿9000多万,所以用DHCP(动态分配, 能够⾃动的给子网内新增主机节点分配IP地址),NAT(地址转换技术,组建局域网让局域网中的主机都使用同一个IP地址)来保证够用,最终的解决方法还是IPV6(无符号128位),但是IPV6与IPV4不兼容。
典型设备:
路由器,进行路由选择的设备
4. 链路层:
负责相邻设备之间的数据传输
典型协议:
Ether协议(以太网协议)
MTU:
MTU表示一个数据链路层的最大长度
以太网的MTU1500字节
MTU会导致IP数据分包
MTU对传输层没有影响
不同的数据链路层协议对于MTU的值是不同的
MAC地址:
存储网卡的物理地址,表示互联网上的唯一一个主机
MAC与IP的区别:
IP地址描述的是路途总体的 起点 和 终点;
MAC地址描述的是路途上的每⼀个区间的起点和终点;
典型设备:
交换机,意为“开关”是一种用于电(光)信号转发的网络设备,但是并不具备选择路径的功能,只是固定转发。
5. 物理层:
负责光电信号的传输
典型协议:
以太网协议
典型设备:
集线器:将信号集中转发,同时将信号放大