赞
踩
文章收录于 CS Wiki : (力图构建计算机/软件工程的完善知识体系),欢迎前来学习交流~https://veal98.gitee.io/cs-wiki/#/veal98.gitee.io
---
一、网络模型
⚠ 把下图中标黄的五层参考模型 改为 七层参考模型
TCP/IP 与 OSI 七层模型相比: 简化了高层的协议,将会话层和表示层融进了应用层,使得系统的层次减少,提高了通信的效率。
一般我们学习的都是五层参考模型:
在物理层上所传送的数据单位是比特。 物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。 使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。
作用:扩大信号的传输距离
功能概述:
CSMA 载波监听多路访问协议
:先听再说CSMA/CD 载波监听多点接入/碰撞检测
:先听再说,边听边说(一边发送一边检测其他站是否也在发送数据),冲突停发、随机重发CSMA/CD 协议用于有线局域网CSMA/CA 载波监听多点接入/碰撞避免
:先听再说,监听到信道空闲时不立即发送数据,而是先发送一个小的RTS帧,告知对方将要发送的数据长度和频段选择,如果收到最近结点返回的CTS,再发送数据。接收端如果正确收到此数据帧,则经过一段时间间隔后,向发送端发送确认帧ACK。 发送端收到ACK帧,确定数据正确传输,再经历一段时间间隔后,再发送数据。CSMA/CA 协议用于无线局域网,因为无线传输的信号波动较大,实时检测碰撞对硬件要求较高PPP点对点协议
:目前使用最广泛的数据链路层协议,用户使用拨号电话接入因特网时一般都使用PPP协议。面向字节; 不需要的功能:纠错(PPP协议只负责检错)、流量控制(由TCP 负责)、序号(PPP协议是不可靠传输协议,故不需要对帧进行编号)、多点线路(PPP协议是点对点 的通信方式)、半双工或单工(PPP只支持全双工链路)ARQ 停等协议
(详细见下文)频分复用要求总频率宽度大于各个子信道频率之和,同时为了保证各子信道中所传输的信号互不干扰,应在各子信道之间设立隔离带(也就是保护频带,即插入一些空白的频段 ),这样就保证了各路信号互不干扰。
停止等待协议是数据链路层(有些书说是传输层)为保证可靠传输,以流量控制为目的的一个协议。通过滑动窗口来限制发送方的发送速度
有些书中将这个协议放在运输层
以下三种协议都包含 自动重传请求(Automatic Repeat Request)ARQ,所以也称 ARQ 协议
传统自动重传请求分成为三种,即停等式(stop-and-wait)ARQ,回退n帧(go-back-n)ARQ,以及选择性重传(selective repeat)ARQ。后两种协议是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大时,帧在线路上可以连续地流动,因此又称其为连续ARQ协议。三者的区别在于对于出错的数据报文的处理机制不同。三种ARQ协议中,复杂性递增,效率也递增。
① 停等协议(停等式ARQ)
发送窗口和接收窗口大小均为1
,发送方每发送一帧之后就必须停下来等待接收方的确认返回,仅当接收方确认正确接收后再继续发送下一帧。该方法所需要的缓冲存储空间最小,缺点是信道效率很低。② 后退N帧协议 GBN(后退N帧的ARQ)
发送窗口 >= 1,接收窗口 = 1
, 发信侧不用等待收信侧的应答,持续的发送多个帧,假如发现已发送的帧中有错误发生,那么从那个发生错误的帧开始及其之后所有的帧全部再重新发送。③ 选择重传协议 SR(选择性重传ARQ)
发送窗口 >= 1,接收窗口 >= 1
, 发信侧不用等待收信侧的应答,持续的发送多个帧,假如发现已发送的帧中有错误发生,那么发信侧将只重新发送那个发生错误的帧。功能:根据MAC帧的目的地址对帧进行转发和过滤。当网桥/交换机 收到一个帧的时候,并不向所有接口转发此帧(集线器),而是先检查此帧的目的MAC地址,然后再确定该帧转发到哪一个接口,或者是把他丢弃
网桥/交换机 的功能在延长网络跨度上类似于中继器/集线器,然而它能提供智能化连接服务,即根据帧的终点地址处于哪一网段来进行转发和滤除
连接两个局域网,即连接两个同类型网络,需要使用网桥或者交换机,工作在数据链路层。
连接两个不同类型的网络,比如局域网和互联网,使用路由器,工作在网络层。
⚠ 下图思维导图有个错误:DHCP协议是应用层协议
在 计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。
网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。
在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报 ,简称 数据报。
网络层功能概述:
IP 协议
:提供无连接的、不可靠的、尽力的数据报投递服务,IP 协议屏蔽下层物理网络的差异,为上层提供统一的 IP 数据报ICMP 网际报文控制协议
:IP 数据包的丢失,由路由器发送 ICMP 报文告知(ICMP报文由路由器产生, 被封装在IP数据报的数据区中进行传输)ARP 地址解析协议
:ARP 实现由 IP 地址得到 MAC 地址RARP 反向地址解析协议
:RARP 实现由 MAC 地址得到 IP 地址RIP 路由信息协议
:仅和邻居交换信息,且交换的是整个路由表,适用于小规模网络,传输层使用UDPOSPF 开放最短路由协议
:向自治域中所有路由器发送信息,且发送的是链路状态表,根据代价选择最佳路由,基于IP协议外部网关协议:
BGP 外部网关协议
:不同AS的路由器之间交换路由信息的协议为什么要数据交换:交换是通过某些交换中心将数据进行集中和传送,传输线路为各个用户共用,从而大大节省通信线路,降低系统费用
电路交换:类似打电话,独占这条线路,其他人无法参加,需要建立连接,比特流直达,速度快(电路交换传bit流,发生在物理层)
报文交换:报文是应用层传输单位,即站点一次性要发送的数据块,无须建立连接,采用存储转发的方式,速度较慢(报文交换传报文,发生在应用层)
分组交换:是将较大的数据分割成小块,无须建立连接,采取存储转发的方式,速度比报文交换快,比电路交换慢,可能产生分组丢失,乱序的情况(分组交换传分组/IP数据报,发生在网络层)
与报文交换相比较,分组交换的优点和缺点如下。
优点:
缺点:
NAT 网络地址转换
:根据NAT转换表,NAT路由器将 专用网上的IP地址 和 因特网上的外部全球唯一IP地址 进行转化子网划分
:将传统的二级 IP 地址划分为 三级 IP 地址,二级 IP 地址中的 网络号 分为网络号 + 子网号,缩小地址分配空间动态分配 IP 地址(应用层 DHCP 协议)
:由于IP地址资源很宝贵,因此大部分用户上网都是使用动态IP地址的,在需要的时候才进行IP地址分配32位的IPV4地址空间已分配殆尽,以上方式只能是治标不治本,启用 IPV6 才能从根本上解决地址耗尽问题
IPV4 向 IPV6 过渡的策略:
双栈协议
:同时启用 IPV4 和 IPV6 协议栈隧道技术
:将其他协议的数据帧或包重新封装然后通过隧道发送ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。
工作原理:
路由器从功能上可以划分为:路由选择和分组转发。
路由 route, 将一个URL路径和一个函数进行映射
路由器是 router, 可以理解为一个容器,或者说一种机制,它管理了一组 route, 进行相应的路由转发
总结一句话:The router routes you to a route
运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。
由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。
主要功能总结如下:
用户数据报协议 UDP(User Datagram Protocol)
UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 传输控制协议 TCP(Transmission Control Protocol)
SYN
:连接请求/接收 报文段seq
:发送的第一个字节的序号ACK
:确认报文段ack
:希望收到的下一个数据的第一个字节的序号具体流程:
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
所以三次握手就能确认双发收发功能都正常,缺一不可。
接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。
SYN 是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK响应,表示确认发来的数据已经接受无误。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
SYN洪泛攻击:攻击者发送大量的TCP SYN,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态(半连接状态),服务器收不到再确认的话,还会重复ACK给攻击者,这样更加浪费服务器的资源。
双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。
FIN
:连接终止位具体过程:
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
举个例子:
A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。
流量控制是为了控制发送方发送速率,保证接收方来得及接收。
TCP实现流量控制主要是 滑动窗口协议, 使用这种方法的时候,发送方和接收方向外通信各使用一个窗口。窗口大小取决于下面两个数:接收窗口(rwnd)和拥塞窗口(cwnd)。
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段 rwnd 设置为 0,则发送方不能发送数据。
(接收方根据自己接收缓存的大小,即接收窗口rwnd
,动态的调整发送方的发送窗口大小,发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值)
滑动窗口协议的实际应用:数据链路层的三个ARQ协议
流量控制就是要控制发送方数据传输的速率,使接收方来得及接收
传输层
数据链路层/传输层
网络中存在太多的数据包导致数据包被延迟或丢失,从而降低了整个网络的传输性能,这种情况叫做拥塞。 如果产生网络拥塞,则网络的性能明显下降,整个网络的吞吐量将随着输入负荷的增大而下降。
流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度,防止过多的数据注入到网络中。
拥塞控制的4种算法:
⛔ 应用层的思维导图中应加入DHCP协议
应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。
应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。我们把应用层交互的数据单元称为报文。
主要功能总结如下:
DNS
将域名解析成IP地址DHCP
使主机动态获取IP地址HTTP
超文本传输协议,所有的 WWW(万维网) 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。FTP(文件传输协议)
:FTP 协议需要建立两个 TCP 连接,需要使用两个端口号,建立连接使用 21 端口,数据传输使用 20 端口SMTP 邮件发送协议
POP3、IMAP 邮件接收协议
打开一个网页网络通信过程:
应用层
:首先通过DNS协议进行域名解析,获得IP地址,具体过程如下:
至此,浏览器已经得到了域名对应的IP地址。
传输层
,TCP三次握手建立连接;网络层
,建立TCP连接时需要传送数据,传送数据在网络层使用IP协议,通过IP协议将IP地址封装为IP数据报;数据链路层
,把网络层交下来的IP数据报添加首部和尾部,封装为MAC帧,现在根据目的MAC地址开始建立TCP连接,三次握手,接收端在收到物理层上交的比特流后,根据首尾的标记,识别帧的开始和结束,将中间的数据部分上交给网络层,然后层层向上传递到应用层;总结以上过程,用到的协议依次为:
DNS ——> HTTP ——> TCP ——> IP ——> OSPF ——>ARP ——>HTTP
在HTTP/1.0
中默认使用非持久连接 close (短连接)
。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
也就是说每次请求都要重新建立一次连接。HTTP 是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用个长连接来发多个请求。
从HTTP/1.1
起,默认使用持久连接 keep-alive (长连接)
,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。
Cookie
一般用来保存用户信息 比如: ① 我们在 Cookie 中保存已经登录过得用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了; ② 一般的网站都会有保持登录也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑,重新登录一般要将 Token 重写); ③ 登录一次网站后访问网站其他页面不需要重新登录。Session
的主要作用就是通过服务端记录用户的状态。 典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。Cookie 存储在客户端(浏览器)中,而Session存储在服务器上,相对来说 Session 安全性更高。如果要在 Cookie 中存储一些敏感信息,不要直接写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。
HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说 HTTP 协议自身不对请求和响应之间的通信状态进行保存。那么我们保存用户状态呢?
Session 机制的存在就是为了解决这个问题,Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了(一般情况下,服务器会在一定时间内保存这个 Session,过了时间限制,就会销毁这个Session)。
在服务端保存 Session 的方法很多,最常用的就是内存和数据库。既然 Session 存放在服务器端,那么我们如何实现 Session 跟踪呢?大部分情况下,我们都是通过在 Cookie 中附加一个 Session ID 来方式来跟踪。
Cookie 被禁用怎么办?
最常用的就是利用 URL 重写把 Session ID 直接附加在URL路径的后面。
URI(Uniform Resource Identifier)
是统一资源标志符,可以唯一标识一个资源。URL(Uniform Resource Location)
是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何找到这个资源。URI 的作用像身份证号一样,URL 的作用更像家庭住址一样。
URL 是一种具体的 URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。
状态码是HTTP响应报文部分响应行中的内容
响应行包括
例如:
HTTP/1.1 200 OK
状态码:由3位数字组成,第一个数字定义了响应的类别。响应码详细如下。
概念:断点续传指的是下载传输文件可以中断,之后重新下载时可以接着中断的地方开始下载,而不必从头开始下载。断点续传需要客户端和服务端都支持。
原理:原理是客户端一块一块的请求数据,最后将下载回来的数据块拼接成完整的数据。其实就是在Http的请求上和一般的下载有所不同而已。
打个比方,浏览器请求服务器上的一个服务,所发出的请求如下:
假设服务器域名为 www.baidu.com,文件名为down.zip。
- GET /down.zip HTTP/1.1
- Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
- excel, application/msword, application/vnd.ms-powerpoint, */*
- Accept-Language: zh-cn
- Accept-Encoding: gzip, deflate
- User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
- Connection: Keep-Alive
服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:
- 200
- Content-Length=106786028
- Accept-Ranges=bytes
- Date=Mon, 30 Apr 2001 12:56:11 GMT
- ETag=W/"02ca57e173c11:95b"
- Content-Type=application/octet-stream
- Server=Microsoft-IIS/5.0
- Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给 Web服务器的时候要多加一条信息 -- 从哪里开始。 比如要求从2000070字节开始。
- GET /down.zip HTTP/1.0
- User-Agent: NetFox
- RANGE: bytes=2000070-
- Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
仔细看一下就会发现多了一行 RANGE: bytes=2000070-
这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。
服务器收到这个请求以后,返回的信息如下:
- 206
- Content-Length=106786028
- Content-Range=bytes 2000070-106786027/106786028
- Date=Mon, 30 Apr 2001 12:55:20 GMT
- ETag=W/"02ca57e173c11:95b"
- Content-Type=application/octet-stream
- Server=Microsoft-IIS/5.0
- Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT
和前面服务器返回的信息比较一下,就会发现增加了一行:
Content-Range=bytes 2000070-106786027/106786028
返回的代码也改为 206 (已完成部分get请求)了,而不再是 200 了。
HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:
“http://”
起始且默认使用端口80,而HTTPS的URL由“https://”
起始且默认使用端口443。对称加密
:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;非对称加密
:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。关于HTTPS加密的详细内容参见 HTTPS 协议
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。