引入
应用层是指应用程序,例如qq邮箱、浏览器、Xshell等等,为计算机网络中进行数据交换而建立的规则,浏览器是建立在HTTP(超文本传输协议)进行数据传输的、qq邮箱是建立在SMTP(电子邮件协议)进行数据传输的,在应用层上不同的功能对应着不同的应用层协议
应用层协议
- DNS(域名解析协议)
- 端口号是53
- .(根域名) com、cn(一级域名) baidu(二级域名)
- DNS域名大多是用UDP协议传输的
- 如果返回响应超过512字节和区域传送(主域名服务器向辅组域名服务器传送变化的那部分数据)需要使用TCP协议传输
- FTP(文件传输协议)
- FTP使用TCP进行连接,它需要两个连接来传送一个文件
- 控制连接:服务器打开端口号21等待客户端的连接,客户端主动建立连接后,可以传输命令给服务器,并传回服务器的应答
- 数据连接:数据连接有两种方式主动连接(服务器建立)、被动连接(客户机)
- DHCP(动态主机配置协议)
- SMTP(电子邮件协议)
- 一个电子邮件系统由3部分组成:用户代理、邮件服务器、邮件协议
- 邮件协议包括发送协议和读取协议,发送协议是SMTP,读取协议是POP3和IMAP
- SMTP只能发送ACSII码,邮件扩充MIME可以发送二进制文件,MIME并没有改动或者替代SMTP,只是增加了邮件主体的结构,定义了非ACSII码的编码规则
- POP3(邮局协议)
- IMAP(网际报文存取协议)
- TELNET(远程终端协议)
端口号是23 - HTTP(超文本传输协议)
- 端口号是80
DHCP
DHCP提供了即插即用的连网方式,用户不需要配置ip地址等信息。window使用的就是DHCP自动分配ip地址,当连上网后会给电脑分配一个ipv4或者ipv6的ip地址,当然DHCP配置内容不仅仅是ip地址,还包括子网掩码、网关ip地址
工作流程
- 客户端发送Discover报文给,该报文的目的地址为255.255.255.255:67,源地址是0.0.0.0:68,被放入UDP中,该报文以广播的形式发送到同一子网的所有主机上。如果客户端和DHCP服务器不在同一个子网,就需要使用中级代理(一般是同一网段下的一个路由器)
- DHCP服务器接收到Discover报文之后,发送Offer报文给客户端,会从配置的地址池中选择一个IP地址预分配给客户端,。offer报文内以广播形式发送给客户端
- DHCP Request:客户端会在收到的DHCP offer报文中选择一个IP,一般为第一个收到的DHCP offer报文,但此时客户端并不能使用该IP,需要以广播形式发送DHCP Request报文给DHCP服务器。
- DHCP Ack:DHCP服务器收到后会查看客户端选择的是否为自己分配的IP地址,如果不是,则将IP地址放回地址池,等待下一次的客户端的申请。如果选择的是自己分配的IP地址,则广播发送DHCP ACK报文给客户端,并在服务端将客户端的MAC地址和IP地址进行绑定。
- 客户端收到该报文后不会立即使用,而是利用ARP进行探测该地址是否被其他客户端所使用,如果在超时时间内没有得到回应,则客户端使用该IP地址,如果得到ARP回应,则发送DHCP DECLINE包给DHCP服务器,然后重复上述流程,向DHCP服务器申请IP地址。
- DHCP客户端重新启动后不需要再发送DHCP Discover报文进行地址申请,它进行和续约类似的操作。
Web页面请求过程
路由器(router)是互联网的枢纽,是连接英特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送数据。
DHCP为主机分配ip地址
- 主机发送Discover以广播形式发送报文给DHCP服务器,如果服务器与主机没有在一个子网下需要借助中继代理
- DHCP服务器接收到主机请求之后,发送一个未使用的ip地址以offer报文广播的形式发送给主机
- 主机接手到offer报文,会发送一个Request请求以广播的的形式发送给DHCP服务器
- DHCP服务器接收到Request请求,会判断主机是否使用了它分配的ip地址,如果使用了就发送ACK报文给,在服务端就主机的ip地址和mac地址绑定起来,如果没有使用就等待下一次请求
ARP地址转换协议
- 我们已经知道了主机的IP地址,web使用的Http协议,所以我们需要直到web服务器的ip地址,但是现在只知道web服务器的域名,将域名转为ip地址需要用到DNS(域名解析协议),现在只要去访问该IP就好,但是在这之前我们需要先走出我们所处的局域网,这就需要局域网默认网关路由器的MAC地址。
- 主机生成一个 ARP 查询报文,目的 IP 是默认网关路由器,这个报文最终被封装成以太网帧,帧的目的MAC是 FF:FF:FF:FF:FF:FF(广播地址),然后把帧发给交换机,交换机看到是广播地址就给广播出去
- 默认网关路由器接收到了这个帧,经过层层提取得到 ARP 报文,发现其中的目的 IP 跟他自己某个接口的 IP 匹配,就发送回去一个 ARP 应答报文给主机,这里包含他自己的 MAC
DNS域名解析
- 知道默认网关路由器的mac地址后,我们就可以进行域名解析了,主机发送DNS报文,层层封装成以太网帧,帧的目的mac地址是默认网关路由器的mac地址
- 默认网关路由器接收到该帧之后,提取出IP数据报,并根据路由表进行转发,因为路由器具有内部网关协议*(RIP路由信息协议、OSPF开放最短路径优先协议)和外部网关协议(BGP边界网关协议)*,因此路由表中已经配置了可以从路由器到达 DNS 服务器的路由表项
- DNS 服务器接收到帧后,层层提取出 DNS 查询报文,并在 DNS 数据库中查找待解析域名对应的 IP,找到之后发送 DNS 应答报文,封装成 UDP 报文段,再放入 IP 数据报,最后通过路由器转回给源主机的默认网关路由器,再经由交换机转发给源主机。
HTTP请求页面
- 有了Http服务器的ip地址后,主机就能够生产TCP套接字,该套接字将用于向web服务器发送HTTP GET报文
- TCP三次握手
(第一次握手)主机向目的服务器发送连接请求报文段,SYN=1,ACK=0,选择一个初始的序号 x。
(第二次握手)目的服务器收到连接请求报文段后,如果同意建立连接,则向主机发送连接确认报文段,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
(第三次握手)主机收到目的服务器的连接确认报文段后,还要向目的服务器发出确认,确认号为 y+1,序号为 x+1。 - 连接建立之后,浏览器生成HTTP GET报文,并交付给HTTP服务器
- Http服务器从TCP套接字读取HTTP GET报文,生成一个HTTP响应报文,将web页面放入到报文主体里面,发回给主机
- 浏览器收到HTTP响应报文之后,抽取出web页面内容,之后进行渲染,显示Web页面