【计算机网络】—— 网络应用通信基本原理

🌟欢迎来到 我的博客 —— 探索技术的无限可能!


🌟博客的简介(文章目录)

系列文章目录

【计算机网络】—— 网络应用通信基本原理
【计算机网络】—— Socket通信编程与传输协议分析
【计算机网络】—— IP协议及动态路由算法
【计算机网络】—— 中小型网络构建与配置


原理

1、网络协议(network protocol)

       网络协议(network protocol)简称为协议,是为进行计算机网络中的数据交换而建立的规则、 标准或约定。协议规定了通信实体之间所交换的消息的格式、意义、顺序以及针对收到信息或发生事件所采取的“动作”(actions) 。

2、计算机网络体系结构

       计算机网络体系结构是指计算机网络层次结构模型,它是各层的协议以及层次之间的端口的集合。在计算机网络中实现通信必须依靠网络通信协议,当前主流的体系结构有三种,分别是OSI七层结构(广泛采用的是国际标准化组织(ISO)1997年提出的开放系统互联(Open System Interconnection,OSI)参考模型,习惯上称为ISO/OSI参考模型。),TCP/IP参考模型,以及Internet五层协议栈。

       开放系统互连(Open System Interconnect,OSI)参考模型是由国际标准化组织(ISO) 1984年提出的分层网络体系结构模型。目的是支持异构网络系统的互连互通,是理解网络系统的最佳模型或学习工具。分为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层七层,每层完成特定的网络功能。
开放系统互连
       OSI是一个理论上的网络通信模型,TCP/IP则是实际运行的网络协议;TCP/IP协议族分为四层,分别为应用层,传输层,网络层,网络接口层。
OSI  理论上的网络通信模型

       Internet五层协议栈综合了OSI七层模型和TCP/IP四层模型的优点,包括:应用层、运输层、网络层、数据链路层和物理层。
       应用层:是体系结构中的最高。直接为用户的应用进程(例如电子邮件、文件传输和终端仿真)提供服务。支持各种网络应用
       运输层:负责向两个主机中进程之间的通信提供服务。由于一个主机可同时运行多个进程,因此运输层有复用和分用的功能。【进程—进程的数据传输(TCP,UDP)
       网络层源主机到目的主机的数据分组与转发(IP 协议,路由协议等)。
       数据链路层:常简称为链路层,我们知道,两个主机之间的数据传输,总是在一段一段的链路上传送的,也就是说,在两个相邻结点之间传送数据是直接传送的(点对点),这时就需要使用专门的链路层的协议。【相邻网络元素的数据传输
       物理层:在物理层上所传数据的单位是比特。物理层的任务就是透明地传送比特流
Internet五层协议栈

3、Encapsulation 封装

       封装Encapsulation,由上到下在每一层数据增加控制信息(Header),构造协议数据单元(PDU),包括:地址(Address):标识发送端/接收端;差错检测编码(Error-detecting Code):用于差错检测或纠正
       协议控制(Protocol control):实现协议功能的附加信息。
       解封装,就是封装的逆过程,拆解协议包,由下到上去除报头,数据封装和解封装是一对逆过程。

       五层协议栈的封装和解封装过程如下:
       封装过程
       应用层:原始数据被转换成二进制数据
       传输层:二进制数据被分割成小的数据段,并封装TCP头部 (数据段)(TCP头部的关键信息–端口号)
       网络层:传输层传来的数据被封装上IP头部 (数据包)(IP头部的关键信息–IP地址)
       数据链路层:网络层传来的数据被封装上MAC头部 (数据帧)(MAC头部的关键信息–MAC地址)
       物理层:二进制数据组成的比特流转化为电信号在网络中传输 (比特流)
       解封装(封装的逆过程)

       五层协议栈的封装和解封装过程如下:
五层协议栈的封装和解封装过程

4、应用层协议

       应用层协议(application layer protocol)定义了运行在不同端系统上的应用程序进程如何相互传递报文。包含:消息的类型(type){请求消息,响应消息};消息的语法(Syntax)格式{消息中有哪些字段(field),每个字段如何描述};字段的语义(semantics){字段中信息的含义};规则(rules){进程何时发送/响应消息,进程如何发送/响应消息}
       典型网络应用服务与协议主要有:
       1)域名系统(Domain Name System,DNS):主要提供域名和IP地址之间映射。
       2)文件传输协议(File Transfer Protocol,FTP):在互联网的两个主机间实现文件互传的网络应用。
       3)超文本传输协议(HyperText Transfer Protocol,HTTP):用于实现WWW服务,也就是WEB服务。
       4)SMTP(Simple Mail Transfer Protocol), 使用TCP进行Email消息的可靠传输。
       5)POP3(Post Office Protocol 3), 提供从服务器获取邮件的服务。

5、DNS协议

       DNS协议是用来将域名解析到IP地址的一种协议,也可以用来将IP地址转换为域名。DNS协议是基于UDP和TCP的协议,使用53端口。只有在区域传输时才使用TCP协议,在其他时候使用的是UDP协议。

6、HTTP(超文本传输协议)

       HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。所有的HTTP报文都分为两类:请求报文和响应报文。

7、SMTP即简单邮件传输协议

       SMTP即简单邮件传输协议是一组由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议。运行在发送端邮件服务器主机上的SMTP客户,发起建立一个运行在接收端邮件服务器主机上的SMTP的服务器端口25号之间的TCP链接。

8、POP3协议

       POP3协议即“邮局协议版本3”,和SMTP一样属于TCP/IP协议。POP3协议主要用于支持使用客户端远程管理在服务器上的电子邮件。POP3协议还支持离线处理,不需要收件人同时在线。

9、Internet提供的传输服务TCP与UDP

       TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流、可进行流量控制的、提供拥塞控制的传输层通信协议。
       UDP (User Datagram Protocol数据报协议)一种无连接的传输层协议,提供简单不可靠信息传送服务。
       TCP与UDP在传输层为应用层服务和程序提供传输服务。

10、Socket

       网络上的程序进程间通信利用socket发送/接收消息实现,进程的标识符IP地址+端口号。

11、Port

       由于系统加载后服务与程序其进程号是按加载顺序排序的,因此通信的两台主机很难通过进程号找到对方,逻辑上提出了一个Port(端口)的概念(仅限于TCP与UDP传输过程),该概念将逻辑上同一类的服务和APP归结到一个通信出口,通信另一端通过一个随机选择大于 1024 以上(因为0-1023用作知名服务器的端口,如FTP21、HTTP80、SMTP25、TELNET23、SSH22)的端口向固定服务的端口(1024以下固定服务)发起通信请求。如:
源10.84.218.106通过63366向目的40.100.54.34的443发起加密https(443)请求
源10.84.218.106通过62850向目的182.250.178.82的80发起http(80端口)请求
在这里插入图片描述

主要内容以及使用的设备以及软件

       下面会根据以下内容进行实验
       1、使用wireshark、sniffer等捕捉工具捕捉应用层通信报文。
       2、对报文在每一层的封装进行分析,特别是DNS、HTTP、FTP与Email协议,对端口复用与分解、应用层服务与协议的通信过程进行分析。
       3、对HTTP协议的请求-响应过程及协议数据封装进行详细分析,编写一个页面,能够记录客户端User-Agent信息,并根据访问请求的User-Agent返回不同内容;并熟练使用session和cookie

验证

1、DNS\HTTP\SMTP\POP\SMTP报文捕捉截图

       ①DNS报文捕捉截图。

       首先打开wireshark选择正在上网的网卡,然后找到百度网站,然后便可以捕捉到DNS报文。
在这里插入图片描述

图1:DNS报文捕捉截图

       ②HTTP报文捕捉截图。

       在wireshark的应用显示过滤器中输入HTTP即可找到HTTP报文。
在这里插入图片描述

图2:HTTP报文捕捉截图

       ③SMTP报文捕捉截图。

       SMTP需要通过发送邮件来捕捉,所以需要安装Foxmail。进入Foxmail后选择邮箱的类型为POP3(如果邮箱类型不是POP3,点击左下角新建),并将两个SSL的勾去掉。
在这里插入图片描述

图3:设置邮箱类型

       先打开wireshark选择正在上网的网卡,然后在Foxmail上正常发送邮件,即可获取SMTP报文。
在这里插入图片描述

图4:SMTP报文捕捉截图

       ④POP报文捕捉截图。

       在Foxmail上发送邮件,并收取,就能捕捉到POP报文。
在这里插入图片描述

图5:POP报文捕捉截图

       ⑤FTP报文捕捉截图。

       在windows系统使用FTP Server搭建FTP服务器,下图所示为搭建FTP服务器后捕捉到的登陆和下载数据(使用ftp过滤)。
在这里插入图片描述

图6:FTP报文捕捉截图

2、Internet五层协议栈报文封装分析,字节计算。

在这里插入图片描述

图7:Internet五层协议

      如图7所示从上到下分别是,物理层,数据链路层,网络层,传输层,应用层。

在这里插入图片描述

图8:DNS query

在这里插入图片描述

图9:UDP头部

      传输层的UDP头部,长度8,包含了源端口,目的端口,长度,校验和。

在这里插入图片描述

图10:网络层头部

在这里插入图片描述

图11:以太帧头部

      数据总长度= 33(DNS query)+ 8(UDP头部)+ 20(网络层头部)+ 14(以太帧头部)=75Bytes=600bits

3、DNS query与qurey response过程分析,PDU封装分析(可以只分析query)。

在这里插入图片描述

图12:DNS query

      DNS query由source 10.225.150.102的port 55523发向destination 172.17.202.7的port 53,在应用层包含以下信息:

头部固定12bytes
Questions包含:(一共21bytes)
Name域名:15bytes
Label count三级域名:2bytes
Type类型A :2bytes
Class类别 in internet :2bytes
总长:12+15+2+2+2=33bytes

在这里插入图片描述

图13:DNS qurey response

      DNS qurey response由source 172.17.202.7的port 53发向destination 10.225.150.102的port 55523,在应用层包含以下信息:

头部固定12bytes
Questions包含:(一共21bytes)
Name域名:15bytes
Label count三级域名:2bytes
Type类型A :2bytes
Class类别 in internet :2bytes
Answers包含:(一共277bytes)

      第一条记录,域名为szmmsns.qpic.cn;Type为CNAME,即别名所对应的规范名称;Class(类型)为IN,即Internet;cname为cmmsns.qpic.cn。此条记录的含义是别名szmmsns.qpic.cn所对应的规范名称是cmmsns.qpic.cn。(21字节)
      第二条记录,域名为cmmsns.qpic.cn;Type(查询类型)为A,即由域名获得IPv4地址;Class(类型)为IN,即Internet;address的值为183.60.131.211。此条记录的含义是cmmsns.qpic.cn所对应的IP地址为183.60.131.211。(16字节)
第3到17条记录,每一条都给出cmmsns.qpic.cn所对应的一个IP地址,即cmmsns.qpic.cn共对应15个IP地址。因为szmmsns.qpic.cn是cmmsns.qpic.cn的别名,所以szmmsns.qpic.cn也对应15个IP地址。(16*15=240bytes)
      总长:12+21+277=310bytes

4、HTTP过程分析,HTTP request与response PDU封装分析。

      所有基于TCP传输的协议都会进行三次握手以确保面向连接的可靠性。
在这里插入图片描述

图14:TCP三次握手

在这里插入图片描述

图15:HTTP request

      验证HTTP request请求消息报文封装:

      1.HTTP请求方法,有GET、POST、HEAD等,图15所示的是POST请求方法。
      2.Connection 表示是否持久连接,其中close表示非持久,Keep-Alive表示为持久连接,要注意HTTP的持久连接Keep-Alive与TCP的长连接keepalive是有区别的。图15所示的是close表示非持久连接。
      3.User-Agent包含了客户端的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎等,图15所示的是浏览器类型。

在这里插入图片描述

图16:HTTP response

      验证http response 响应请求报文封装:

      1.状态行:HTTP/1.1 200 OK。HTTP 200 表示http请求成功。即正常的成功访问时响应的状态码。
      2.Connection 表示是否持久连接,图16所示的是close表示非持久连接。
      3.Content-Length是响应头部长度:1959。

5、SMTP过程及PDU封装分析(POP可不进行分析)

在这里插入图片描述

图17:新建邮件类型为pop的邮箱

由于早期的邮件系统不加密,所以可以捕抓到邮件内容。 TCP流可以看到有SMTP的邮件内容。

在这里插入图片描述

图18:三次握手

在这里插入图片描述

图19:SMTP报文

      通过图19可以看到SMTP过程,可以看到我通过新建的邮箱发出去的邮件,可以看到发送方和接收方的邮箱,同时通过250 OK表示服务器成功执行了客户端的命令,发生250应答,通知看不到可以发生下一个命令。

在这里插入图片描述

图20:POP报文

      通过图19可以看到POP过程,可以看到USER是建立连接后第一个一个执行的命令,用来告诉服务器用户名,图中的用户名是xxx@qq.com是我的QQ邮箱。

      PASS是紧跟在USER后面,用来告诉服务器用户的口令。LIST是告诉我我们邮件的基本信息,当不带参数时服务器会给出邮件的个数和每个邮件的大小。RETR是从服务器上获取邮件。

6、FTP过程分析,PDU封装分析

      通过FTP Server让用户能连接上一个远程计算机,但是先要获取远程计算机的IPv4地址(win+r打开运行窗口,通过在命令行中输入ipconfig即可查看电脑IPv4地址),接着在本机通过指令FTP 对应的IPv4地址即可连接FTP。
在这里插入图片描述

图21:同学的电脑的IPv4地址

在这里插入图片描述

图22:连接FTP

在这里插入图片描述

图23:FTP报文

7、针对User-Agent的网站编程

      User-Agent包含客户端操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎等。
      JSP获得user-agent:request.getHeader(“user-agent”);获得客户端IP地址:request.getRemoteAddr();获得连接端口:request.getRemotePort();可使用正则表达式判断设备:
      String iosReg = “ip(hone|od|ad)”; Pattern iosPat = Pattern.compile(iosReg, Pattern.CASE_INSENSITIVE);
      Matcher matcherIOS = iosPat.matcher(User-Agent);if (matcherIOS.find()) {return true; }
      ASP.NET获得user-agent: Request.ServerVariables[“HTTP_USER_AGENT”];获得客户端IP地址: Request.ServerVariables[“REMOTE_ADDR”];使用正则表达式判断设备:
      Regex apple = new Regex(“ipod|iphone|ipad”); Match isApple = apple.Match(user-agent);
      if (isApple.Success){deviceType = “Apple”;}
      ASP.NET也可使用GitHub的Nuget包----ToolBox.UserAgentParse。
      此外也可以使用JavaScript专业的 User-Agent 解析工具库UAParser.js进行解析
在这里插入图片描述

编写简单页面,通过局域网访问测试

代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>针对User-Agent的网站编程</title>
</head>
<body>
    <br>ZShiJ<br>
    <br>user-agent:<%=request.getHeader("user-agent")%>
    <br>客户端IP地址:<%=request.getRemoteAddr()%>
    <br>获得连接端口:<%=request.getRemotePort()%>
    <br>客户提交信息的方式:<%=request.getMethod()%>
    <br>使用的协议:<%=request.getProtocol()%>
    <br>返回除去host(域名或者ip)部分的路径:<%=request.getRequestURI()%>
    <br>返回全路径:<%=request.getRequestURL()%>
    <br>服务器端:<%=request.getServerPort()%>
    <br>服务器的名称:<%=request.getServerName()%>

</body>
</html>

在这里插入图片描述

图24:根据客户端访问请求获取信息

      通过编写JSP获得user-agent,客户端IP地址,连接端口,客户提交信息的方式,使用的协议,服务器端以及服务器的名字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZShiJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值