七层体系结构: 对应部分协议|工具
- 应用层
- 表示层
- 会话层
- 运输层 tcp udp
- 网络层 ip icmp arp rip ospf 路由器
- 数据链路层 ppp csma|cd mac 网桥 交换机
- 物理层 rj45 ieee802.3 中继器 网关
五层体系结构(tcp/ip)
- 应用层
- 运输层
- 网络层
- 数据链路层
- 物理层
- 物理层
主要任务:确定于传输媒介的接口有关的一些特性。向上为数据链路层提供物理链路,实现透明的比特流传输服务,向下与物理媒体相连
- 数据链路层(协议数据单元-帧)
主要任务:传送帧数据在不可靠的物理链路实现数据可靠。
- 三个基本问题:封装成帧、透明传输、差错检测
封装成帧:一段数据的前后添加收尾部,构成一个帧
透明传输:不管输入什么字符都可以放进一个帧中进行传输
差错检测:使用crc检验(循环冗余检验),实现无比特差错传输,但并不意味着是可靠的
- ppp点对点协议(点对点信道的检测)
组成:1.支持异步·同步链路 2.链路控制协议LCP 3.网络控制协议
- CSMA|CD协议(广播信道使用的检测)
载波监听多点接入|碰撞检测
- 网络层(协议数据单元-Ip数据包|包|分组|数据报)
主要任务:在物理网络间传送分组,负责将源端口主机的报文通过中间转发节点传送到目的端口
特点:只提供简单灵活、无连接、尽最大可能交付的数据服务,发送时不需要连接(不提供数据的质量保证)
- 国际协议ip
A类(1.0.0.0~126.255.255.255)
B类(128.0.0.0~191.255.255.255)
C类(192.0.0.0~223.255.255.255)
ip地址=<网络号,主机号>
- ARP地址解析协议
作用:根据ip地址,找出对应的硬件地址(物理地址)
(注意 在通信过程中,ip数据报的源地址和目的地址始终不变,mac地址随链路改变而改变)
ARP高速缓存:保存着局域网内各主机和路由器的ip地址到硬件地址的映射表
ARP请求:主机收到ARP数据包(源ip 目的ip 源mac),检查目的ip是否是自己的ip地址,不是则忽略;是,提取源ip 源mac写入到自己的ARP缓存中->多播
ARP响应:将自己的mac地址写入到ARP响应包中,告诉源主机自己是它想要的mac地址->单播
- RARP逆地址解析协议
物理地址转为为ip地址
- ICMP国际报文控制协议
用于在主机和路由器之间传递控制信息,装在ip数据报中的数据部分->为更有效的转发ip数据报和提高交付的机会
应用实例:ping (没有通过tcp|udp)检测两端主机连通
- 运输层(协议数据单元:udp报文|tcp报文)
主要任务:提供端到端的可靠报文传递和错误检查
复用:发送方不同的应用进程使用同一运输层协议传送数据
分用:接收方去除首部后能正确交付到目的应用进程
常见协议端口号,功能以及基于UDP/TCP
Telnet 专司终端模拟 23 Tcp 23 它为用户提供了在本地计算机上完成远程主机工作的能力
SMTP 简单邮件传输协议25 Tcp 25 它帮助每台计算机在发送或中转信件时找到下一个目的地
HTTP 超文本传输协议 80 Tcp 80 超文本传输协议,是我们浏览网页、看在线视频、听在线音乐等必须遵循的规则
FTP 文件传输协议 20、21 Tcp 20和Tcp21 文件传输协议 FTP [ File Transfer Protocol ]使得主机间可以共享文件
DNS 域名系统 53 Tcp 53 因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串
HTTPS 超文本传输安全协议443 Tcp 443 HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版
SSH 安全壳协议 22 Tcp 22 SSH 为建立在应用层和传输层基础上的安全协议
POP3 邮局协议版本3 110 Tcp 110 本协议主要用于支持使用客户端远程管理在服务器上的电子邮件
NTP 网络时间协议 123 Tcp 123 它是用来同步网络中各个计算机时间的协议
IMAP4 第四版因特网信息存取协议 143 Tcp 143 I
SNMP 简单网络管理协议 161 UDP 161 该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况
TFTP 简单文件传输协议 69 UDP 69 TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务
DNS 域名系统 53 UDP 53 因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串
BooTPS/DHCP 动态主机配置协议 67 UDP 67 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段
- tcp与udp区别
tcp有连接 udp则没有
tcp仅支持一对一通信,udp则所有都支持
tcp面向字节刘,udp面向报文
tcp有拥塞控制,udp没有
tcp首部开销最小20字节 udp则是8字节
- UDP(用户数据报协议)
- 无连接的,减少了开销和发送数据之前的延迟
- 尽最大努力交付,即不保证可靠交付
- 面向报文的(应用层下来的报文直接发送加上一个首部)
- 没有拥塞控制,以恒定的速率发送数据,允许网络拥堵时丢弃一些数据
- 支持一对一,一对多,多对一,多对多的通信
- udp首部开销小(8字节),tcp由20字节
- TCP(传输控制协议)
- 面向连接的运输层协议
- 一对一的连接通信
- 提供可靠交付的服务
- 支持全双工通信:允许双发任何时候都能发送数据(两端都有发送和接收缓存)
- 面向字节流:数据看成一连串的无结构的字节流,发送和接收都要看双方的缓存大小
- 首部最小长度是20字节
确认ACK ACK=1 才有效 =0无效.建立连接后所有传送报文ACK置
同步SYN 当SYN=1而ACK=0表明这是一个连接请求报文
终止FIN 释放一个连接 FIN=1 表明发送方数据已发完,要求释放连接
序号seq 本报文段所发送的数据的第一个字节的序号
确认号ack 期望收到对方下一个报文段的第一个数据字节的序号
- tcp三次握手连接
- 客户端向服务端发送连接请求ACK=1 seq=x
- 服务端收到连接请求,向客户端发送确认 ACK=1 SYN=1 ack=x+1 seq =y
- 客户端收到服务端的确认后还要再向客户端发送确认 ACK=1 seq=x+1 ack=y+1
问题:为什么两次建立连接请求不可以,一定要进行三次
防止已经失效的请求报文传送到服务端而产生错误
解释: A发出请求,但丢失B未收到确认.A再次发送B后来收到了确认建立了连接,并在传输完毕后断开了连接。此时第一次发出的请求并没有丢失而是在网络上滞留了,再一次发送给了B 误认为是新的连接请求,于是再一次建立两端的连接,造成了资源的浪费
- tcp四次挥手
- 客户端主动关闭tcp连接,FIN=1 seq=u 等待B的确认
- 服务器收到释放连接的信号,ACK=1 seq=v ack=u+1
- 此时客户端到服务端的连接已经断开 但是服务端到客户端的连接还存在 服务端仍然可以给客户端发送数据
- 服务端也要关闭tcp连接 FIN=1 seq=w ack=u+1
- 客户端收到信号确认后 ACK=1 seq=u+1 ack=w+1
- 服务端进入closed状态 客户端等待2msl后进入closed状态
msl是在线路上的最大报文存活时间 约2分钟
问题:为什要等待2msl
- 保证客户端的最后一个ACK报文能到达服务端。因为可能会丢失,所以服务端要重传断开的连接请求报文,就可以在2msl内重新提出断开连接的请求
- 防止已经失效的连接请求报文出现在下一次的连接请求报文段中,服务端的结束时间要比客户端的早。(保证下一个新的连接不会出现旧的连接请求报文)
-
tcp保证传输可靠的原因
- 数据包校验
- 对失序的数据包重排序
- 丢弃重复数据
- 应答机制
- 超时重发
- 流量控制
-
tcp拥塞控制:防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载,是一个全局性的过程。
(流量控制是点对点通信量的控制,是一个端到端的问题,主要就是抑制发送端发送数据的速率,以便接收端来得及接收)
四个主要实现算法
- 慢启动 拥塞窗口由小到大逐渐增大(2幂n次方)直指ssthresh阈值
- 拥塞避免 拥塞窗口缓慢增长(n) ssthresh==拥塞窗口最大值
- 快重传 接受方收到一个失序的报文立刻发出重复确认,发送方一连收到三个重复确认,应当立即重传对方未收到的报文。
- 快恢复 在快重传后,把ssthresh=cwnd/2
拥塞控制的代价:需要获得网络内部流量分布的信息,结点之间会交换信息,会多出额外的开销
问题:TCP的拥塞控制机制是什么
TCP通过一个定时器(timer)采样了RTT并计算RTO,但是,如果网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,然而重传会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这就导致了恶性循环,最终形成“网络风暴” —— TCP的拥塞控制机制就是用于应对这种情况。
首先需要了解一个概念,为了在发送端调节所要发送的数据量,定义了一个“拥塞窗口”(Congestion Window),在发送数据时,将拥塞窗口的大小与接收端ack的窗口大小做比较,取较小者作为发送数据量的上限。
- TCP滑动窗口
窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。
发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。
接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31} 按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。
- 流量控制
是点对点通信的控制,是端对端的问题- tcp提供了一种机制可以让发送端根据接收端的实际接收能力来控制发送的速率,具体的操作是接收端主机向发送端主机通知自己可以接收数据的大小,于是发送会发送不超过这个限度的数据,该限度大小就被称为窗口大小。
- TCP首部中专门有个字段用来通知窗口大小,接收主机将自己可以接收缓冲区的大小放入这个字段通知发送端。这个字段越大说明网络的吞吐量越大。
- 接收端缓冲区一旦面临溢出,窗口大小也会随之被设置为一个更小的值发送给发送端,从而控制发送的数据量,也就说发送端主机会根据接收端主机的缓冲区大小来对发送数据的大小进行控制。
- 应用层
主要任务:解决某一类应用问题,而问题的解决必须通过位于不同主机之间的多个应用进程之间的通信和协同工作完成
- 域名系统
- DNS域名系统是一个分布式数据库,提供了主机名和ip地址之间相互转换的服务。这里的分布式数据库是指每个站点上只保留自己的那部分数据.域名具有层次结构从上到下依次为:根域名、顶级域名、二级域名
- DNS解析过程:进程要把主机名解析成ip地址时。应用进程调用解析程序,把待解析域名放进dns的请求报文中,以udp发送给本地域名服务器如果成功,对应的ip地址会在返回的报文中
- DNS可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种情况下会使用 TCP 进行传输:
- DNS域名系统是一个分布式数据库,提供了主机名和ip地址之间相互转换的服务。这里的分布式数据库是指每个站点上只保留自己的那部分数据.域名具有层次结构从上到下依次为:根域名、顶级域名、二级域名
如果返回的响应超过的 512 字节(UDP 最大只支持 512 字节的数据)。
区域传送(区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据)。
- 远程登录协议
TELNET 用于登录到远程主机上,并且远程主机上的输出也会返回。
TELNET 可以适应许多计算机和操作系统的差异,例如不同操作系统系统的换行符定义。
- 动态主机配置协议
DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息。DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。
HTTP 超文本传送协议
- 请求报文
请求行 :方法 url http版本
请求体 :accpet(可接受的文件格式) useragent(客户浏览器信息) host(主机域名) connect(连接状态长or短)
实体主体: 可能没有
- 响应报文
状态行 http版本 响应代码
响应体
- http请求方法
- get 请求指定页面信息,返回实体主体
- post 向服务器提交数据进行处理
- head 获取报头
- put 将从客户到服务端的数据取代制定文档内容
- delete 请求服务器删除指定页面
- options 允许客户查看服务器性能
- trace 服务器会将通信路径返回给客户端
Get与POST区别
功能-get获取资源 post提交资源
请求参数-get请求数据在url上 post则在报文中
安全性-post大于get
请求大小-get受限于url长度 post则没有
结果-get请求多次返回同样的结果 post对资源改变不同
- HTTP状态吗
服务器返回的 响应报文 中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求的结果。
状态码 类别 含义
- 1XX Informational(信息性状态码) 接收的请求正在处理
(100Continue:表明到目前为止都正常) - 2XX Success(成功状态码) 请求正常处理完毕
(200OK 204 No Content 返回的响应报文不包含实体部分) - 3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
(301 永久重定向 302 临时重定向 ) - 4XX Client Error(客户端错误状态码) 服务器无法处理请求
(400 请求报文语法错误 403 请求被拒绝 404 notfound 请求资源不存在) - 5XX Server Error(服务器错误状态码) 服务器处理请求出错
(500 服务器正在执行请求时发生错误 503 服务器无法处理请求)
HTTPS 超文本传输安全协议
HTTP 有以下安全性问题:
- 使用明文进行通信,内容可能会被窃听;
- 不验证通信方的身份,通信方的身份有可能遭遇伪装;
- 无法证明报文的完整性,报文有可能遭篡改。
HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPS 使用了隧道进行通信。
通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。
两者不同
- 端口http80 https443
- 资源消耗https要加减密操作,消耗更多的cpu资源
- 开销 https通信需要证书
- Cookie
Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。由于之后每次请求都会需要携带 Cookie 数据,因此会带来额外的性能开销(尤其是在移动环境下)。
- Session
Session 可以存储在服务器上的文件、数据库或者内存中。也可以将 Session 存储在 Redis 这种内存型数据库中,效率会更高。
两者不同
- session是保存在服务器上的状态,cookie是保存客户端上的状态
- session依赖于cookie机制,通过cookie回传sessionid
- cookie有大小限制(4k)且每个站点最多20个cookie而session则没有这些限制
- cookie保存在本地上有安全隐患,可以进行拦截攻击 session则不会
- session会加大服务器上的消耗
- 短连接与长连接
长连接只需要建立一次 TCP 连接就能进行多次 HTTP 通信。(默认长连接 connection)
当浏览器访问一个包含多张图片的 HTML 页面时,除了请求访问的 HTML 页面资源,还会请求图片资源。如果每进行一次 HTTP 通信就要新建一个 TCP 连接,那么开销会很大。
- 输入网址到获得页面的整个过程
- 输入url地址
- 浏览器查询域名的ip地址
(dns域名系统:浏览器自身dns-操作系统dns-本地host(提供了一个域名到ip的映射)-本地dns服务器 )
递归查询(查询浏览器dns 计算机dns 路由器dns 服务上dns 根域名-顶级域名-二级域名) - 浏览器与服务器建立tcp连接
- 发送http请求
- 服务器返回http响应
- 获取解析页面上的静态资源
- tcp连接释放
- 浏览器显示页面