1.TCP/IP五层架构
从上到下依次是:应用层,传输层,网络层,数据链路层,物理层
2.五层架构的功能
1.应用层:
通过进程间的交互来完成特定的网络应用。对于不同的网络有不同的应用层协议,包含DNS、HTTP、FTP等协议,这些协议定义的是应用进程间的通信规则。应用层的数据单元称为报文。
2.运输层
主机之间的进程通信是通过运输层来提供数据传输服务。并且运输层还提供复用和分用、提供可靠的传输服务,流浪控制和差错检测功能。
复用和分用:在发送方,不同的应用进程可以使用同一个运输层来发送数据,实现数据的复用。在接收方,运输层能够正确地将接收到的数据分发给正确的应用进程,这一过程称为分用
可靠的传输服务:TCP和UDP协议
3.网络层
负责给分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段封装成分组进行传输。
网络层还有一个作用是:选择合适的路由,使源主机运输层所传下来的分组,能够通过网络中的路由器找到目的主机。
4.数据链路层
将网络层交付下来的IP数据报封装成帧,在两个相邻节点上进行发送数据。数据链路层上的三个问题就是:封装成帧、差错检测和透明传输。
5.物理层
作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。
3.为什么要进行分层
1.各层之间相互独立,某一层不需要知道他的下一层是怎样实现的,只需要知道层间的接口所提供的服务即可。
2.灵活性好。当某一层发生变化时,只要层间接口不变,就不会受到影响
3.结构上可分割
4.易于实现和维护
4.每层的协议
1.应用层:
HTTP:超文本传输协议
FTP:文本传输协议
DNS:域名解析
2.传输层:
TCP:传输控制协议
UDP:用户数据报文协议
3.网络层:
IP:网际协议
ARP:地址转换协议
4.数据链路层:
ARQ:自动重传请求协议
一、网络层
1.分类的IP地址
1.概念:
ip地址是因特网为每一个主机或者路由器的每一个接口所分配的世界范围内唯一的32位标识符,可以方便在网上进行寻址
2.组成:
{<网络号>,<主机号>}
网络号是标注主机所连接的网络
主机号是标注主机在其面前的网络号中是唯一的
3.IP地址的类别
A类:网络号首位为0 B类:网络号首位为10 C类:网络号首位为110
4.主机号:
A类:3个字节(24位) B类:2个字节(16位) C类:1个字节(8位)
实例:
某单位申请到一个IP地址,只申请到了网络号,具体的主机号由单位自行分配
作用:
1.世界组织只需要对网络号进行管理
2.路由器仅根据目的主机所连接的网络号来进行分组,减少路由表中的内容,减少查找时间
5.常见的三类地址:
整个IP地址空间总共有2^32个地址
5.1 A类:占所有空间数量的50%(2^31)
网络号有:2^7-2个
去掉全0和全1,全0代表本网络,全1是127.0.0.1代表环回地址
主机号有:2^24-2个
去掉全0和全1,全0代表本网络,全1代表网络上的所有地址
B类:占所有空间数量的25%(2^30)
网络号有:2^14-1个
去掉全0,B的全0不用。
主机号有:2^16-2个
去掉全0和全1
C类:占所有空间数量的12.5%(2^29)
网络号有:2^21-1个
去掉全0,B的全0不用。
主机号有:2^8-2个
去掉全0和全1
2.ARP地址解析协议
网络层用的是IP地址,数据链路层用的是MAC地址,两者进行传输时,就用到ARP地址解析协议
问题:当我们知道一个机器的IP地址,如何获取到他的物理地址呢?
流程:
每台主机都有一个ARP高速缓存,在其中存放着一个从IP地址到MAC地址的动态映射表。
当主机A想要向本局域网中的主机B发送IP数据报时,先在本机的ARP缓存中查看有无主机B的IP地址,如果有的话,找到其对应的MAC地址,
然后将MAC地址封装到MAC帧中,通过局域网传送到目的硬件上。
如果ARP中没有B的MAC地址,A就会自动运行ARP:
1.ARP请求先在本局域网上进行广播,发送一个ARP请求分组,其中携带者本机的IP、MAC以及目的主机IP。
2.局域网上的所有主机都会受到该请求
3.主机B的IP地址和ARP请求中的目的IP相同,就会收下此报文,并且向A发送响应报文,其中携带着B的IP地址和MAC地址。同时也会将A的IP地址
和MAC记录到自己的ARP缓存中
4.主机A收到后,就会在自己的ARP缓存表中记录下来。
上面是针对局域网中的解析,当通信双方处于不同网络时,需要用到路由器
发送方H1想给其他网络中的主机H3或H4发送数据报。
1.H1发送ARP请求(在网1上广播),找到R1的目的MAC地址,接下来交给R1
2.发送方成R1,在网2上发送ARP请求,找到H3的目的MAC地址,完成H3的通信交付
3.发送方是R1,还需要发送ARP请求,找到R2的目的MAC地址,之后交给R2
4.发送方是R2,在网络3上进行广播,最终找到H4的MAC地址
3.分组转发
有四个A类网络通过三个路由器连接在一起。每一个网络上都可能有成千上万台主机。若路由表指出到每一台主机应怎样转发,则所得出的路由表就会
过于庞大。但若路由表指出到某个网络应如何转发,则每个路由器中的路由表就只包含4个项目(即只有4行,每一行对应于一个网络)。
以路由器R2的路由表为例。由于R₂同时连接在网络2和网络3上,因此只要目的主机在网络2或网络3上,都可通过接口0或1由路由器R2直接交付(当然
还要利用地址解析协议ARP才能找到这些主机相应的硬件地址)。若目的主机在网络1中,则下一跳路由器应为R1,其IP地址为20.0.0.7。路由器 R2和R1
由于同时连接在网络2 上,因此从路由器R2把分组转发到路由器R”是很容易的。同理,若目的主机在网络4中,则路由器R2应把分组转发给IP地址为
30.0.0.1的路由器R3。我们应当注意到,图中的 每一个路由器都有两个不同的IP地址。
可以把整个的网络拓扑简化为图4-16(b)所示的那样。在简化图中,网络变成了一条链路,但每一个路由器旁边都注明其IP地址。这样的简化图强调
了在互联网上转发分组时,是从一个路由器转发到下一个 路由器。
总之,在路由表中,对每一条路由最主要的是以下两个信息: (目的网络地址,下一跳地址)
4.划分子网
情景:有时情况紧急,一个单位需要在新的地点马上开通一个新的网络。但是在申请到一个新的IP地址之前,新增加的网络是不可能连接到互联网上工作的。
希望有一种方法,使一个单位能随时灵活地增加本单位的网络,而不必事先到互联网管理机构去申请新的网络号。原来的两级IP地址无法做到这一点
在IP地址中借用主机号的几位作为子网号,就会使IP地址从二级变为三级地址
IP地址={<网络号>,<子网号>,<主机号>}
现把上图的网络划分为三个子网。这里假定子网号占用8位,因此在增加 了子网号后,主机号就只有8位。所划分的三个子网分别是:145.13.3.0,
145.13.7.0和145.13.21.0。在划分子网后,整个网络对外部仍表现为一个网络,其网络地址仍为145.13.0.0。但网络145.13.0.0上的路由器R1
在收到外来的数据报后,再根据数据报的目的地址把它转发到响应的子网。
5.子网掩码
不管网络有没有划分子网,只需要用子网掩码和IP地址相与即可得出子网的网络地址。
6.CIDR
CIDR最主要的特点有两个:
(1)CIDR把32 位的IP地址划分为前后两个部分。前面部分是“网络前缀”(network-prefix)(或简称为“前缀”),用来指明网络,后面部分则用来指明
主机。因此CIDR使IP地址从三级编址 (使用子网掩码)又回到了两级编址,但这已是无分类的两级编址。
CIDR 还使用“斜线记法”(slash notation),或称为CIDR记法,即在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数。
(2)CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。我们只要知道 CIDR 地址块中的任何一个地址,就可以知道这个地址块的起始
地址(即最小地址)和最大地址,以及地址块中的地址数。
1.例如,已知IP地址128.14.35.7/20是某CIDR地址块中的一个地址,现在把它写成二进制表示,其中的前20位是网络前缀(用粗体和下划线表示
出),而前缀后面的12位是主机号: 128.14.35.7/20---10000000 00001110 00100011 00000111 这个地址所在的地址块中的最小地址
和最大地址可以很方便地得出:
最小地址: 128.14.32.0 10000000 00001110 00100000 00000000
最大地址: 128.14.47.255 10000000 00001110 00101111 11111111
可以用地址块中的最小地址和网络前缀的位数指明这个地址块。例如,上面的地址块可记为128.14.32.0/20
2.例如,地址192.199.170.82/27不仅表示IP地址是192.199.170.82,而且还表示这个地址 块的网络的前缀有27位(剩下的5位是主机号),
因此这个地址块包含32个IP地址(2^5=32)。通过简单的计算还可得出,这个地址块的最小地址是192.199.170.64,最大地址是
192.199.170.95。
7.VPN (Virtual Private Network)
前提:由于IP地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网
概念:利用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网VPN
例如,在大型商场或宾馆中,有很多用于营业和管理的计算机。显然这些计算机并不都需要和互联网相连,所以就不需要向互联网的管理机构申请全球唯一
的IP地址。但是有时机构内部的某台主机需要和互联网连接,那么这种仅在内部使用的本地地址就有可能和互联网中某个IP地址重合,专此时就用到了专用
地址(private address)。这些地址只能用于一个机构的内部通信,而不能用于和互联网上的主机通信
vpn通信流程:但如果场所A的主机X要和另一 个场所B的主机Y通信,那么就必须经过路由器R1和R2。主机X向主机Y发送的IP数据报的源地址是
10.1.0.1,而目的地址是10.2.0.3。这个数据报先作为本机构的内部数据报从X发送到与互联网连接的路由器R1。路由器R”收到内部数据报后,发现其目
的网络必须通过互联网才能到达,就把整个的内部数据报进行加密(这样就保证了内部数据报的安全),然后重新加上数据报的首部,封装成为在互联网上发
送的外部数据报,其源地址是路由器R的全球地址125.1.2.3,而目的地址是路由器R2的全球地址194.4.5.6。路由器R2收到数据报后将其数据部分取出进
行解密,恢复出原来的内部数据报(目的地址是10.2.0.3),交付主机Y
内联网:
由场所A和B的内部网络所构成的虚拟专用网VPN又称为内联网,A和B同属一个机构
外联网
有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来。这样的VPN 就称为外联网
远程接入vpn:
有的公司可能并没有分布在不同场所的部门,但却有很多流动员工在外地工作。公司需要和他们保持联系,有时还可能一起开电话会议或视频会议。远程
接入VPN可以满足这种需求。在外地工作的员工通过拨号接入互联网,而驻留在员工个人电脑中的VPN软件可以在员工的个人电脑和公司的主机之间建立VPN
隧道,因而外地员工与公司通信的内容也是保密的,员工 们感到好像就是使用公司内部的本地网络。
8.NAT (网络地址转换 Network Address Translation)
需要在专用网连接到互联网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和互联网连接。
NAT 路由器收到从专用网内部的主机A发往互联网上主机B的IP数据报:源IP地址是192.168.0.3,而目的IP地址是213.18.2.4。NAT路由器把IP数
据报的源IP地址·187· 192.168.0.3,转换为新的源IP地址(即NAT路由器的全球IP地址)172.38.1.5,然后转发 出去。因此,主机B收到这个IP数据
报时,以为A的IP地址是172.38.1.5。当B给A发送应答时,IP数据报的目的IP地址是NAT路由器的IP地址172.38.1.5。B并不知道A的专用地址
192.168.0.3。实际上,即使知道了,也不能使用,因为互联网上的路由器都不转发目的地址是专用网本地IP地址的IP数据报。当NAT路由器收到互联网上
的主机B发来的IP数据报时,还要进行一次IP地址的转换。
当NAT路由器具有n个全球IP地址时,专用网内最多可以同时有n台主机接入到互联网。这样就可以使专用网内较多数量的主机,轮流使用NAT路由器有限
数量的全球IP地址。
二、传输层
1.TCP和UDP
TPC | UDP |
---|---|
面向连接的 | 无连接的 |
只支持点到点的服务(一对一) | 支持一对一,一对多,多对一,多对多 |
TCP提供可靠的交付服务,通过TCP连接传送的数据是无差错、不丢失、不重复、按序到达 | UDP尽最大努力交付 |
TCP提供全双工通信 | UDP没有拥塞控制 |
TCP面向字节流 | 数据报文段 |
TCP 中的“流”(Stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
#### TCP的优点:TCP不关心应用进程一次把多长的报文发送到TCP缓存中,而是根据进程给的窗口和当前的拥塞程度来绝对一个报文段应该多少字节。如果应用进程传送到TCP缓存的数据块太长,TCP就可以将它分短一点再发送,如果数据块太短,TCP也可以等待积累到足够多的字节再发送出去
2.TCP和UDP对应的常见协议
TCP:FTP、Telnet、HTTP
UDP:DNS
3.TCP的三次握手
1.在客户端发送请求时,客户端会先开启SYN(即SYN=1,SYN指同步),客户端表示想和服务端进行数据同步,在同步
之后,也就是三次握手后,客户端就可以向服务端互相发送信息。
2.客户端随机生成一个seq初始序号(假设为6),作为初始值来进行后续判断依据,如果没有初始序号,服务端可能不
知道这是啥。
3.当服务器收到SYN后,会在TCP报文中将SYN和ACK(确认)开启(即SYN=1,ACK=1),并且服务器也生成自己的序号
seq序号(假设为3)和确认号ack(6+1,客户端的序号+1)。
服务端的确认号是客户端+1的好处:当客户端再收到服务端的确认号后-1就知道是不是自己发出的报文了
4.最后客户端再进行确认,开启确认号ACK=1,并且生成seq(6+1)序号和确认号ack(3+1)
4.TCP的四次挥手
客户端和服务端都可以进行关闭通信,下面以客户端为例:
1.客户端发起关闭请求,会在报文中开启FIN(Finish结束)和ACK两个控制位(FIN=1,ACK=1)。并且生成一个seq初始序号(假设为x)和确认号ack(假设为y)
2.服务端同意后,会在TCP报文中将ACK开启(ACK=1),并且让自己的序号seq=y,确认号ack=x+1发送给客户端。
3.服务端发送完后并没有结束,会等服务端将所有数据都发送结束后,再发送一个ACK和FIN(ACK=1,FIN=1)以及序号seq和确认号(确认号和序号不变)
4.客户端得到最后的结束报文后,会发送最后的ACK进行确认,此时seq=x+1,ack=y+1
三、应用层
1.HTTP状态码
1xx - 接受的请求正在处理
2xx - 请求正常处理完毕
200 - OK(请求成功)
204 - No Content(无内容):请求已经成功处理,但返回的响应报文不含实体的主体部分
3xx - 需要进行附加操作以完成请求
301 - Moved Permanently(永久重定向):请求的资源已经分配了新的URI,以后请求该资源应该访问新的URI
302 - Found(临时重定向):请求的资源已经被分配了新的URI,希望客户端本次能使用新的URI访问
4xx - 服务器无法处理请求
400 - Bad Request(错误请求):400 状态码表示请求报文中存在语法错误
401 - Unauthorized(未经授权):401 状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息
403 - Forbidden(拒绝请求):403 状态码表明对请求资源的访问被服务器拒绝,当未获得文件系统的访问授权,访问权限出现某些问题
404 - Not Found(无法找到):404 是我们最常见的状态码之一,它表示服务器上无法找到请求资源
5xx - 服务器处理请求出错
500 - Internal Server Error(内部服务器错误):500 状态码表明服务器端在执行请求时发生了错误。也有可能是 Web 应用存在的 bug 或某些临时的故障。
503 - Service Unavailable(服务不可用):503 状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
2.get和post区别
GET 和 POST 本质都是 HTTP 请求,只不过对它们的作用做了界定和适配,并且让他们适应各自的场景。
本质区别:GET 只是一次 HTTP请求,POST 先发请求头再发请求体,实际上是两次请求。
-
从功能上讲,GET 一般用来从服务器上获取资源,POST 一般用来更新服务器上的资源;
-
从 REST 服务角度上说,GET 是幂等的,即读取同一个资源,总是得到相同的数据,而 POST 不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET 不会改变服务器上的资源,而 POST 会对服务器资源进行改变;
-
从请求参数形式上看,GET 请求的数据会附在 URL 之后,即将请求数据放置在 HTTP 报文的 请求头 中,以 ? 分割 URL 和传输数据,参数之间以 & 相连。而 POST 请求会把提交的数据则放置在是 HTTP 请求报文的 请求体 中;
-
就安全性而言,POST 的安全性要比 GET 的安全性高,因为 GET 请求提交的数据将明文出现在 URL 上,而且 POST 请求参数则被包装到请求体中,相对更安全;
-
从请求的大小看,GET 请求的长度受限于浏览器或服务器对 URL 长度的限制,允许发送的数据量比较小,而 POST 请求则是没有大小限制的。
原文链接:https://blog.csdn.net/m0_51697147/article/details/134269911
3.在页面上输入url会发生什么
1.通过DNS解析URL中域名对应的服务器主机IP地址
2.与服务器主机三次握手建立TCP连接
3.发送HTTP请求 获取服务器返回的数据
4.浏览器解析HTML、CSS和JS等前端文件,渲染页面
4.DNS域名解析系统
域名到IP地址的解析是由分布在互联网上的许多域名服务器共同完成的。
解析流程:
当某一个进程需要将域名解析为IP地址时,就会调用DNS请求报文,DNS以UDP的方式发送给本地域名服务器。本地域名服务器找到对应的IP地址后,
会将IP地址放在响应报文中进行回复。DNS大多数域名在本地就可以进行解析,因此效率很高。
上图的流程:主机m.xyz.com的主机想知道另一台主机(y.abc.com)的IP地址。
1.主机m.xyz.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
解析方法:
1.主机向本地域名服务器的查询一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS用户
的身份,向其他根域名服务器连续发出查询请求报文,即代替主机进行询问。
2.本地域名服务器向根域名服务器的查询通常是迭代查询。当根域名服务器接收到本地域名服务器发出的迭代查询请求报文时,要么给出响应的IP地址,要
么告诉本地域名服务器下一步应该去哪一个域名服务器进行查询,让本地域名服务器进行之后的查询,而不是代替本地域名服务器