搜索一个URL,会用到计算机网络中的哪些层?每层是干什么的
1.应用层:
对于一个URL,可分为两部分:通信协议和域名地址。通信协议一般是HTTP或HTTPS协议。解析域名需要用DNS协议,域名系统(DNS)是一个将域名和IP地址相互映射的分布式数据库,用来将域名转换为IP地址。
2.传输层
得到一个IP地址后,浏览器要与服务器建立一个HTTP连接,HTTP生成一个GET请求报文,将该报文传给TCP处理,用到TCP协议。
3.网络层
TCP数据包传给网络层处理,会用到IP协议,IP协议通过路由选择,一跳一跳的发给目的地址,以太网需要知道目的IP的物理地址,需要用到ARP协议(地址解析协议,是根据IP地址获取物理地址的协议)。
4.链路层
MAC寻址
DNS协议
域名结构:层次结构命名方法。
每个域名都是一个标号序列,用字母,数字和连接符组成,总长度不超过255个字符。由点号分割成一个个标号,每个标号可看作一个层次的域名,级别低的域名写在左边,级别高的写在右边。域名服务器:装有域名系统的主机
由高到低进行层次划分:
根域名服务器:最高层次的域名服务器,也是最重要的域名服务器,本地域名服务器如果解析不了域名就会向根域名服务器求助。
顶级域名服务器:负责管理在该顶级域名服务器**册的二级域名。
权限域名服务器:负责一个区的域名解析工作
本地域名服务器:当一个主机发出DNS查询请求的时候,这个查询请求首先就是发给本地域名服务器的。
域名解析过程:两种方式:
递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机
迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询
IP协议
网络层协议,实现终端节点之间的通信,“点对点的通信”
主要有三大块:IP寻址,路由,IP分包和组包
IP地址
1.表示:IPv4地址32位,习惯性的每8位为一组,用“.”隔开,并将每组转为十进制数,如:172.20.1.1
由网络和主机两部分标识组成,
2.IP地址的分类:A类,B类,C类,D类
A 类 IP 地址是首位以 “0” 开头的地址:从第 1 位到第 8 位是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0 是 A 类的网络地址。A 类地址的后 24 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为16,777,214个。
B 类 IP 地址是前两位 “10” 的地址:从第 1 位到第 16 位是它的网络标识。用十进制表示的话,128.0.0.0~191.255.0.0 是 B 类的网络地址。B 类地址的后 16 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为65,534个。
C 类 IP 地址是前三位为 “110” 的地址:从第 1 位到第 24 位是它的网络标识。用十进制表示的话,192.0.0.0~223.255.255.0 是 C 类的网络地址。C 类地址的后 8 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为254个。
D 类 IP 地址是前四位为 “1110” 的地址:从第 1 位到第 32 位是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255 是 D 类的网络地址。D 类地址没有主机标识,常用于多播。
全为1:广播地址
3.子码掩码:网络标识和主机标识已不再受限于该地址的类别,而是由一个叫做“子网掩码”的识别码通过子网网络地址细分出比 A 类、B 类、C 类更小粒度的网络。
子网掩码用二进制方式表示的话,也是一个 32 位的数字。它对应 IP 地址网络标识部分的位全部为 “1”,对应 IP 地址主机标识的部分则全部为 “0”。
路由
由路由控制表控制,IP协议始终认为路由表是正确的,本身没有制作路由表的机制。
1.IP地址与路由控制
· IP地址的网络地址部分用于路由控制
· 路由控制表中记录着网络地址与下一步应该发送至路由器的地址。
· 在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。
2.路由协议
IP分包与组包
每种数据链路的传输单元(MTU)都不尽相同,因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的 MTU 也就不同。
任何一台主机都有必要对 IP 分片进行相应的处理。分片往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理。
经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行。路由器虽然做分片但不会进行重组。
IPv6
为了根本解决 IPv4 地址耗尽的问题而被标准化的网际协议,128位
特点:
性能提高:简化首部结构,减轻路由器负担,路由器不再做分片
支持即插即用
采用认证与加密功能
ARP协议
在任何时候,一台主机有IP数据报文发送给另一台主机,它都要知道接收方的逻辑(IP)地址。但是IP地址必须封装成帧才能通过物理网络。这就意味着发送方必须有接收方的物理(MAC)地址,因此需要完成逻辑地址到物理地址的映射。而ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。
1.ARP请求
发送一个ARP请求报文,这个报文包好了发送方的MAC地址和IP地址以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播。
2.ARP响应
局域网中的每一台主机都会接受并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址,只有验证成功的主机才会返回一个ARP响应报文,这个响应报文包含接收方的IP地址和物理地址。这个报文利用收到的ARP请求报文中的请求方物理地址以单播的方式直接发送给ARP请求报文的请求方。
路由协议
AS(Autonomous System,自治系统)指一个互连网络,就是把整个Internet划分为许多较小的网络单位,这些小的网络有权自主地决定在本系统中应采用何种路由协议
路由协议分为两类:
在一个AS内部的成为内部网关协议:RIP,OSPF,IS-IS等
AS之间的成为外部网关协议:BGP
RIP(Route Information Protocol)
最简单的路由协议,主要传递路由信息,通过每隔30秒广播一次路由表,维护相邻路由器的位置关系,同时根据收到的路由表信息计算自己的路由表信息。RIP是一个距离矢量路由协议,最大跳数为15跳,超过15跳的网络则认为目标网络不可达。此协议通常用在网络架构较为简单的小型网络环境。
OSPF(Open Shortest Path First)
开放式最短路径优先算法。OSPF利用所维护的链路状态数据库,通过最短路径优先算法(SPF算法)计算得到路由表。OSPF的收敛速度较快。由于其特有的开放性以及良好的扩展性,OSPF协议在各种网络中广泛部署。
链路层协议
网络层的任务是将运输层报文段从源主机端到端的传送到目的主机,而链路层协议的目的是将网络层数据报通过路径中的单段链路节点到节点的传送,路径上的不同链路可能由不同的链路层协议承载!
形象的理解:计划从南京大学到深圳大学,最便利的方案是先从南京大学坐地铁到机场,然后做飞机到深圳机场,再打车到深圳大学。这里面每两个相邻节点是直达的,而三段运输用了三种方式(三种协议)。而这个整体的路径规划就是选路协议的结果。
多路访问协议:
网络链路有两种类型:点对点链路和广播链路。
点对点链路:由链路一端单个发送方和另一端单个接收方组成(点对点协议PPP)
广播链路:允许多个发送和接收节点都连接到相同的单一的共享的广播信道上,(以太网,无线LAN),通常用于局域网中。
多路访问协议 - 通过协议规范节点在共享的广播信道上的传输行为。
三种类型
信道划分协议
时分多路复用(TDM):将时间划分为时间帧,并进一步划分每个时间帧为N个时隙,把每个时隙分给N个节点中的一个
频分多路复用(FDM):将R bps信道划分为不同的频段(每个频段有R/N的带宽),并把每个频段分给N个节点的一个。
码分多址(CDMA):为每个节点分配一种编码,然后每个节点用它唯一的编码对其数据编码。通过精心设计这些编码,可以使得不同节点能同时传输,而接收端仍能正确的接收发送方编码后的数据比特。
随机接入协议
一个节点总是以信道的全部速率进行发送,当有碰撞时,涉及碰撞的每个节点(等待一个随机延迟)反复重发,直到无碰撞的通过
ALOHA协议
时隙ALOHA:时间被划分为时隙(一个时隙等于传输一帧的时间),碰撞发生后每个时隙开始时以概率p重传
纯ALOHA:
载波侦听多路访问(CSMA):
说话之前先听,有人说话就等(载波侦听)。(CSMA)
如果和别人同时说话就停下来(碰撞检测)。(CSMA/CD)
轮流协议
轮询协议:一个主节点,轮询每个节点
令牌环
MAC地址
并不是节点(主机/路由器)具有MAC地址,而是节点的适配器具有链路层地址。
MAC地址长为6字节,用十六进制表示法,如:1A-23-F9-CD-06-9B
MAC地址是不变的,而随着主机移动,IP地址是改变的(网络部分+主机部分).
socket网络编程
TCP服务端通信常规步骤:
1.socket()创建TCP套接字
2.bind()将创建的套接字绑定到一个本地地址和端口上
3.listen(),将套接字设为监听模式,准备接受客户请求
4.accept()等用户请求到来时接受,返回一个对应此连接新套接字
5.用accept()返回的套接字和客户端进行通信,recv()/send() 接受/发送信息。
6.返回,等待另一个客户请求。
7.关闭套接字
TCP客户端通信常规步骤:
1.socket()创建TCP套接字。
2.connect()建立到达服务器的连接。
3.与客户端进行通信,recv()/send()接受/发送信息,write()/read() 子进程写入管道,父进程从管道中读取信息然后send给客户端
5. close() 关闭客户连接。