ISO/OSI 模型 | 各层功能 |
---|---|
物理层 | 透明比特流传输 |
数据链路层 | 提供介质访问和链路管理 封装成帧,透明传输和差错控制 |
网络层 | IP 选址和路由选择 |
传输层 | 建立、管理和维护端到端的连接 |
会话层 | 建立、管理和维护会话 |
表现层 | 数据格式转换、数据加密 |
应用层 | 为应⽤程序提供服务 |
TCP/IP 模型 | 对应协议 |
---|---|
⽹络接⼝层 | ppp |
⽹络层 | IP、ICMP、ARP、IGMP、RARP |
传输层 | TCP、UDP |
应⽤层 | DNS、HTTP、HTTPS、Telnet、FTP |
五层模型 | 对应协议 | 对应功能 |
---|---|---|
物理层 | — | 透明比特流传输 |
数据链路层 | ppp | 将⽹络层的IP数据报封装成帧,并在两个相邻节点进⾏无差错传输数据 封装成帧,透明传输和差错控制 |
⽹络层 | IP、ICMP、ARP、IGMP、RARP | 确定数据交换双⽅的IP地址,并将传输层的数据分组传输 |
传输层 | TCP、UDP | 确定数据交换双⽅的进程,并提供通⽤单位数据传输 |
应⽤层 | DNS、HTTP、HTTPS、Telnet、FTP | 通过应⽤进程间的交互来完成特定的⽹络应⽤ |
封装过程:
首先用户发送一个请求,传给应用层,应用层—;传给传输层,传输层将数据加上 TCP或 UDP 报头;传给网络层,网络层将数据加上 IP 报头;传给数据链路层,数据链路层添加 mac 的头部和尾部;
最后传给物理层,通过透明比特流传出。
解封装过程:
解封装与封装过程相反,封装是从应⽤层到物理层⼀层层加报头,解封装是在物理层到应⽤层的过程
⼀层层去报头。
⽹路进⾏分层是为了简化⽹络设计时的复杂性,通信协议采⽤分层的结构,各层协议相互独⽴且能⾼
效的协调⼯作,更加灵活,当⼀层发⽣变化时,只要接⼝不发⽣改变就不会影响其它层。
数据链路层⾸部为mac帧,这⼀层解决三个基本问题:封装成帧,透明传输和差错控制
封装成帧就是在⼀段数据的前后分别添加⼿部和尾部,然后构成⼀个数据帧,在数据发送时如
A->B, 若B未收到帧⾸或者帧尾,那此帧作废
发送⽅:若数据部分出现帧开始符或者帧结束符,会在前⽅加转义字符在发送,防⽌接收⽅接收错误
接收⽅:当识别出字节填充或者字符填充,接收端的数据链路层在将数据送往⽹络层前删除插⼊的转义字符
差错控制是由循环冗余检验—CRC差错检测技术实现。
PPP协议:点对点协议(Point to Point Protocol)
CSMA/CD :载波侦听多路访问/冲突检测,是⼴播型信道中采⽤⼀种随机访问技术的竞争型访问⽅
法,具有多⽬标地址的特点。
数据传输特点:先听后发 边听边发冲突停⽌随机延时后发
⽹络层的任务就是选择合适的⽹间路由和交换结点,确保数据及时传送。
在计算机⽹络中进⾏通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信⼦⽹。⽹络层的任务就是选择合适的⽹间路由和交换结点,确保数据及时传送。在发送数据时,⽹络层把运输层产⽣的报⽂段或⽤户数据报封装成分组和包进⾏传送。在 TCP/IP 体系结构中,由于⽹络层使⽤IP 协议(⽹际协议),因此分组也叫 IP 数据报 ,简称数据报。
(1)IP地址
IP地址是⼀个32位的⼆进制数,通常被分割为4个“8位⼆进制数”(也就是4个字节)。IP地址通常⽤
“点分⼗进制”表示成(a.b.c.d)的形式。
地址类型 | 网络号 | 子网号 | 主机号 |
---|---|---|---|
A 类地址(0-127) | |||
B 类地址(128-191) | |||
C 类地址(192-223) |
在同⼀⽹络中,不同主机⽹络号相同,主机号不同
网络地址:代表⼀个⽹络的所有IP地址(表示:⽹络号相同,主机号全0)
广播地址:专⻔⽤于向⼀个⽹络中每⼀台主机发送数据(表示:⽹络号形同,主机号全为1)
回送地址:代表本主机 127.0.0.1----->127.255.255.254
(2)子网划分
将⼀个⽹络地址划分为多个⼦⽹使⽤,此时的IP地址分为 ⽹络号 ⼦⽹号 主机号
借⽤规则:向主机号最少借⼀位,最多借到主机号剩两位
⼦⽹掩码:⼦⽹掩码是⼀个32bit的值,其中值为1的⽐特留给⽹络号和⼦⽹号,值为0的⽐特留给主机号,如C类地址192.168.1.1分成两个⼦⽹,则⼦⽹掩码的值为:
(11111111.11111111.11111111.1000000) —>255.255.255.128
(3)⽆分类编址CIDR
消除了传统的A类、B类和C类地址以及划分⼦⽹的概念,因⽽可以更加有效地分配IPv4的地址空间。它可以将好⼏个IP⽹络结合在⼀起,使⽤⼀种⽆类别的域际路由选择算法,使它们合并成⼀条路由从⽽较少路由表中的路由条⽬减轻Internet路由器的负担。
CIDR结构:⽹络前缀+⽹络后缀。 如128.110.35.7/20 (20代表⽹络前缀位数)
地址掩码:⽹络前缀的值全为1,后缀全为0
ARP (Address Resolution Protocol)地址解析协议,可以通过 IP 地址解析出mac地址。
ARP协议过程:
(1)当主机PC0想向下⼀跳(默认⽹关)发送IP分组时,就先在其ARP⾼速缓存中查看有⽆下⼀跳的地址
(2)有则查出⽬标的MAC地址写⼊到MAC帧中,然后发送此硬件地址
(3)⽆则进⼊ARP请求(⼴播)和应答(单播)阶段
ICMP(Internet Control Message Protocol)协议:⽹际控制报⽂协议。在信息传输过程中出现某种
错误时,设备会向⼼愿返回⼀条ICMP信息,告诉它发⽣的错误类型。
ping命令使⽤了ICMP回送请求和回送应答报⽂,是应⽤层直接使⽤ICMP的例⼦,未经过TCP/UDP协
议.
(1)静态路由:
静态路由是原始的配置路由方式,纯手工,易管理,但是耗时,不能反映网络拓扑,当网络拓扑发生变化时,管理员必须手动更改路由表,限号资源少,安全,静态路由是单向的。
(2)默认路由:
当路由器在路由表中找不到目标网络时,路由器会将请求转发到默认接口路由,掩码长度为0,表明此路由匹配全部 IP 地址。
(3)动态路由和 RIP 协议
动态路由是指路由器能够自动的建立自己的路由表,并且能够根据是实际情况适应调整。
RIP 协议:动态路由协议,可以维护路由信息,建立路由表,决定最佳路径。
RIP 协议周期性(30s)更新,最大跳数为15跳,每经过一个路由器跳数+1,跳数最⼩的为最佳路由
优点:⾃动适应⽹络状态的变化
缺点:占⽤宽带,安全性不如静态路由
传输层的主要任务是负责 向两台主机之间的通信提供数据传输服务。应用进程利用该服务传送应用报文。传输层主要使用以下两种协议:
首部报文:
主要特点:
(1)无连接(在发送数据前不需要建立连接)
(2)不可靠(不保证数据的可靠交付)
(3)UDP 面向报文传输
(4)⽀持⼀对⼀,⼀对多,多对多的通信⽅式
(5)UDP ⾸部开销⼩,只有⼋个字节
首部报文:
TCP⾸部各字段解释:
源端⼝:发送⽅端⼝号
⽬的端⼝:接收⽅端⼝号
序列号:发送⽅数据的起始位置
确认号:确认接收的数据位置
⾸部⻓度:表示TCP报⽂段扩充到了多少字节
标志⽐特:
URG:置1时表示紧急指针有效,此数据为加急数据,优先传输
ACK:置1时表示确认号有效
PSH:置1时表示此数据接收⽅需要优先处理
RST:置1时表示重建连接
SYN:置1时表示建⽴连接
FIN:置1时表示断开连接
窗⼝⼤⼩:表示作为接收端的TCP缓冲⼤⼩,要求发送端的TCP 发送缓存置为相同⼤⼩
⾃动重传请求(Automatic Repeat-reQuest,ARQ),ARQ协议分为停⽌等待ARQ协议和连续ARQ
协议。它通过使⽤确认和超时重传两个机制,就可以在不可靠的⽹络上实现可靠的通信。
停止等待ARQ协议:
停⽌等待协议的基本原理就是每发完⼀个分组就停⽌发送,等待对⽅确认(回复ACK)。如果过了⼀段时间(超时时间后),还是没有收到 ACK 确认,说明没有发送成功,需要重新发送,直到收到确认后再发下⼀个分组。若接收⽅收到重复分组,就丢弃该分组,但同时还要发送确认。
超时重传的时间选择
TCP没发送⼀个报⽂段,就对这个报⽂段设置⼀次计数器,只要这个计时器的重传时间还没有确认,则重传这⼀报⽂段。超时重传时间要略⼤于RTT(平均往返时间)
停⽌等待ARQ协议实现简单 但是信道利⽤率低,等待时间⻓。
连续ARQ协议:
连续 ARQ 协议可提⾼信道利⽤率。发送⽅维持⼀个发送窗⼝,凡位于发送窗⼝内的分组可以连续发送出去,⽽不需要等待对⽅确认。接收⽅⼀般采⽤累计确认,对按序到达的最后⼀个分组发送确认,表明到这个分组为⽌的所有分组都已经正确收到了。
优点: 信道利⽤率⾼,容易实现,即使确认丢失,也不必重传。
缺点: 不能向发送⽅反映出接收⽅已经正确收到的所有分组的信息。 ⽐如:发送⽅发送了 5条 消息,中间第三条丢失(3号),这时接收⽅只能对前两个发送确认。发送⽅⽆法知道后三个分组的下落,⽽只好把后三个全部重传⼀次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。
如果发送⽅把数据发送的过快,接收⽅可能会来不及接收,这样就会造成数据的丢失,所谓流量控制就是让发送发的发送速率不要太快,以便于让接收⽅来得及接收数据(接收⽅控制发送⽅)。流量控制是利⽤滑动窗⼝实现的,具体原理就是⽤接收⽅设置TCP⾸部报⽂的窗⼝⼤⼩来控制发送⽅的窗⼝⼤⼩。发送的发送窗⼝不可以⼤于接收⽅的接收窗⼝⼤⼩。如果接收⽅没有⾜够的缓存来接收数据,发送⽅就会收到⼀个零窗⼝的通知。此时发送⽅停⽌发送。并且定时发送⼀个窗⼝探测报⽂来探测接收⽅的接收能⼒。
出现拥塞的条件:
对资源需求的总和 > 可⽤资源 (⽐如带宽为50Mb,但是所有计算机的资源请求加起来⼤50Mb)
与流量控制的不同
拥塞控制是⼀个全局性的过程,涉及所有的主机,路由器以及降低⽹络传输性能有关的因素。流量控制只是⼀个发送端到接收端点对点通信量的控制,⽽拥塞控制是整个⽹络全局性的过程。TCP的传输速率需要流量控制和拥塞控制共同调整发送⽅的敞⼝,所以最终的发送窗⼝上限值为MAX(rwnd,cwnd)。
【流量控制是接收⽅的流量控制,⽽拥塞避免是发送⽅的流量控制】
拥塞控制算法
慢启动
cwnd----->发送⽅的窗⼝⼤⼩ ssthresh----->慢开始⻔限
当发送⽅与接收⽅建⽴TCP 连接时,cwnd置为1,之后收到ACK后,将cwnd * 2(1,2,4,8,16),若cwnd >= ssthresh后,开始拥塞避免算法。
拥塞避免
让拥塞窗⼝cwnd缓慢增⼤,即每经过⼀个往返时间RTT就把发送放的cwnd加1。当拥塞发⽣时,ssthresh置为当前cwnd的⼀半,cwnd置为1,重新启动慢开始算法
快重传和快恢复
如果⼀连串收到三个或者三个以上的重复ACK,就⾮常可能只是⼀个报⽂段丢失了,于是就可以只重传丢失的报⽂段,⽆需等待超时定时器的溢出,这就是快重传算法。⼀旦开始快重传算法,则判断不是拥塞,不启动慢启动算法,⽽是使⽤快恢复算法:将ssthresh和cwnd都调整为当前cwnd的⼀半。
seq:客户端序列号
三次握手最主要的目的就是确认接收方和发送方的发送和接受状态正常。
如果是两次握手的话,可能会产生服务端与一个早已失效的 SYN 报文建立连接,从而造成资源浪费。如果是四次握手的话,SYN与ACK分开发送,则会浪费资源,因为握⼿时不需要传输其他数据,服务端的SYN与ACK可以同时发送。
四次挥手的目的是为了保证通信双方的数据传送全都结束后在释放连接。
如果是三次挥手的话,在第⼀个FIN报⽂发出后,另⼀⽅可能还有未发送完的数据⽆法直接释放连接,所以FIN和ACK要分开发送,这也是为什么不能三次挥⼿的原因。
1MSL是⼀个段在⽹络上的最⼤⽣存时间,2MSL正好是数据往返的时间,若2MSL的时间内服务器还没
重发FIN,则推测服务端已经接收到ACK,可以释放连接。如果不等待,并且服务器未收到客户端的ACK,则服务器会重发FIN报⽂段,造成永远不会释放连接的结果。【为了防⽌最后⼀个ACK丢失】
TCP | UDP |
---|---|
面向连接 | 无连接 |
可靠传输协议,有流量控制和拥塞控制 | 不可靠传输协议 |
面向字节流 | 面向数据报 |
点对点通信 | 广播型,可一对多,也可多对多 |
消耗资源多(⾸部20字节,最⼤到60),较慢 | 消耗资源少(⾸部为8字节),较快 |
主要应⽤在⽂件传输,邮件接发,远程登录等场景 | 主要应⽤于视频/语⾳通话等对数据确定性不⾼的等场景下,还有⼴播通信 |
应⽤层的任务是通过应⽤进程间的交互来完成特定⽹络应⽤。应⽤层协议定义的是应⽤进程间的通信和交互的规则。对于不同的⽹络应⽤需要不同的应⽤层协议。
DNS协议,域名解析协议,在DNS中由域名服务器完成域名向IP地址间的转换。【 UDP/TCP+53端⼝】
根域名服务器:指的是⼀个www.baidu.com. 的com后省略的.
顶级域名服务器:管理该顶级域名服务器下注册的所有⼆级域名(com、net、org)
权限域名服务器:负责⼀个区域的域名服务器(baidu.com)
本地域名服务器:当⼀个主机发送DNS查询请求时,这个查询请求就会发送给本地域名服务器。
DNS两种查询流程:递归查询和迭代查询
主机与本地域名服务器递归查询,本地域名服务器迭代查询。真实DNS实现上⼀般都采⽤⾼速缓存技术,各级域名服务器缓存⼀段时间查询结果。
查询过程:
1、主机m.abc.com先向本地服务器dns.xyz.com进⾏递归查询。
2、本地服务器采⽤迭代查询。它先向⼀个根域名服务器查询。
3、根域名服务器告诉本地服务器,下⼀次应查询的顶级域名服务器dns.com的IP地址。
4、本地域名服务器向顶级域名服务器dns.com进⾏查询。
5、顶级域名服务器dns.com告诉本地域名服务器,下⼀步应查询的权限服务器dns.abc.com的IP地址。
6、本地域名服务器向权限域名服务器dns.abc.com进⾏查询。
7、权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
8、本地域名服务器最后把查询结果告诉m.xyz.com。
说明:当访问⼀个url时如 www.github.com,会先查询浏览器的DNS缓存,未命中会查询OS中的缓
存**(在OS的hosts⽂件中),如果还未命中则会**查询路由器缓存(即本地域名服务器)
DNS协议⼤多使⽤的为UDP协议,因为UDP不⽤三次握⼿,对于DNS服务器的负载较低,在出现以下情况时会使⽤TCP协议:(1)响应报⽂⼤于512字节,此时UDP仅返回前512字节的内容,并设置报⽂⾸部为截断位,就客户收到响应后,会使⽤TCP重新发送原来的请求。(2)若⼀次查询的名字很多,则可能直接使⽤TCP。(3)DNS区域传输时使⽤TCP协议。
1.浏览器经过DNS查出IP地址(DNS缓存 host⽂件 路由器缓存)
2.建⽴TCP连接
3.发送HTTP请求(HTTP->TCP->IP->ARP)
4.返回HTTP报⽂
5.浏览器解析渲染
HTTP (Hyper Text Transfer Protocol),超文本传输协议【TCP+80端口】
请求行:
请求方法 | 解释 |
---|---|
GET | 对资源进行请求 |
POST | 对数据进行提交 |
PUT | 向指定资源上传最新内容 |
DELEDE | 请求服务器删除 URL 中所标示的资源 |
HEAD | 像GET,但是只发送请求头,可以⽤来查询某⻚⾯的状态,效率⾼ |
TRACE | 回显服务器收到的请求,主要⽤于测试和诊断 |
CONNECT | HTTP1.1中将连接改为管道⽅式的代理服务器 |
OPTIONS | 可查看服务器的性能 |
GET不安全,在传输过程中,数据被放在URL中,POST放在Request body中,不可⻅
GET传送数据的⻓度受到URL 限制
GET⽀持的字符集为ASSII,不如POST⼤
GET是发⼀次请求,执⾏效率更⾼,POST发送两次请求,先发送Header,等服务器返回100时再
发送data
URL:<协议>://<域名>:<端⼝>/请求路径
URI(Uniform Resource Identifier) 是统⼀资源标志符,可以唯⼀标识⼀个资源。
URL(Uniform Resource Location) 是统⼀资源定位符,可以提供该资源的路径。它是⼀种具体的
URI,即 URL 可以⽤来标识⼀个资源,⽽且还指明了如何 locate 这个资源。(是URI的⼦集)
HTTP1.0 和 HTTP1.1 的区别:
HTTP1.X 和 HTTP2.0 的区别:
1.x中的解析基于⽂本,2.0的基于⼆进制,2.0会更加健壮
2.0服务端可以向客户端主动推送资源
1.x中的header中带有⼤量信息,每次都要重复发送,在2.0中压缩了头部信息,避免了header的
重复传输
部会标识⾃⼰属于哪⼀个TCP流,所以这些帧是可以交错传输。
状态行:
状态码 | 解释 |
---|---|
1xx | 临时响应,请求已接受,需要继续处理 |
2xx | 代表已经成功接收请求 |
3xx | 需要客户端附加操作才能完成请求(常⽤于重定位) |
4xx | 客户端错误 |
5xx | 服务端错误 |
常见状态码:
200:请求成功
400:bad request 请求报⽂中存在语法错误
403:服务器拒绝此次访问
404:服务器⽆法找到客户端要请求的资源
500:服务器错误
503:服务器超负载或者停机维护,⽆法处理该请求
HTTP 是一种不保存状态,即(seateless)无状态协议。
HTTP 协议自身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求和响应不做持久化处理。
HTTP1.1 虽然是无状态协议,但是为了实现保存状态的功能,于是引入 Cookie 技术。
Cookie 用来保存用户信息,用户首次登陆网站时 Cookie 会记录用户信息,第二次登陆自动填入。
Session 的主要作⽤就是通过服务端记录⽤户的状态,服务端给特定的⽤户创建特定的 Session 之后就可以标识这个⽤户并且跟踪这个⽤户。
Cookie 和 Session都是⽤来跟踪浏览器⽤户身份的会话⽅式,但是两者的应⽤场景不太⼀样。
区别:Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。相对来说 Session 安全性更⾼。如果要在 Cookie 中存储⼀些敏感信息,不要直接写⼊ Cookie 中,最好能将 Cookie 信息加密然后使⽤到的时候再去服务器端解密。
最常⽤的就是利⽤URL 重写把 Session ID 直接附加在URL路径的后⾯。
HTTPS 协议在 HTTP 的基础上增加了 SSL 层,通过传输加密和身份认证保证传输过程中的安全性。
【TCP+443端口】
—通常,HTTP 直接和 TCP 通信。当使⽤ SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简⾔之,所谓 HTTPS,其实就是身披 SSL 协议这层外壳的 HTTP。
HTTPS使⽤对称加密(不安全)和⾮对称加密(复杂,效率低)的混合加密⽅式。
在以上第四步加密报⽂⽣成密匙,第五步服务端解密拿到密匙后,双⽅之后使⽤密匙加密数据进⾏数据传输。
端口:HTTP 默认使用80端口,HTTPS 是443端口。
安全性和资源消耗方面:
HTTP 运行在 TCP 之上,所有的传输都是明文传输,客户端和服务端都无法验证用户的身份。
HTTPS 运行在 SSL/TLS 之上,SSL/TSL在运行在 TCP 之上,所以的传输都采用 加密传输,加密采用对称加密,但对称加密的密钥采用服务方的证书进行非对称加密,所以说,HTTPS 安全性比 HTTP 更高,但是 HTTPS 相比 HTTP 也更消耗资源。
HTTPS 需要到 CA 机构申请证书,需要一定的花销。
HTTPS 可以防止运营商劫持