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

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

原理

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协议族分为四层,分别为应用层,传输层,网络层,网络接口层。

      Internet五层协议栈综合了OSI七层模型和TCP/IP四层模型的优点,包括:应用层、运输层、网络层、数据链路层和物理层。

      应用层:是体系结构中的最高。直接为用户的应用进程(例如电子邮件、文件传输和终端仿真)提供服务。支持各种网络应用

      运输层:负责向两个主机中进程之间的通信提供服务。由于一个主机可同时运行多个进程,因此运输层有复用和分用的功能。【进程—进程的数据传输(TCP,UDP)

      网络层源主机到目的主机的数据分组与转发(IP 协议,路由协议等)。

      数据链路层:常简称为链路层,我们知道,两个主机之间的数据传输,总是在一段一段的链路上传送的,也就是说,在两个相邻结点之间传送数据是直接传送的(点对点),这时就需要使用专门的链路层的协议。【相邻网络元素的数据传输

      物理层:在物理层上所传数据的单位是比特。物理层的任务就是透明地传送比特流

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五层协议栈报文封装分析,字节计算。

image.png

图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地址,连接端口,客户提交信息的方式,使用的协议,服务器端以及服务器的名字。


相关文章
|
1天前
|
存储 网络协议 网络架构
网络协议与层次划分:探索计算机网络体系结构
网络协议与层次划分:探索计算机网络体系结构
10 0
|
2天前
|
网络协议 前端开发 Java
网络原理 - HTTP / HTTPS(4)——构造http请求
网络原理 - HTTP / HTTPS(4)——构造http请求
7 1
|
2天前
|
JSON 缓存 前端开发
网络原理 - HTTP / HTTPS(3)——http响应
网络原理 - HTTP / HTTPS(3)——http响应
5 0
|
2天前
|
存储 JSON 安全
网络原理 - HTTP / HTTPS(2)——http请求
网络原理 - HTTP / HTTPS(2)——http请求
7 1
|
2天前
|
前端开发 网络协议 JavaScript
网络原理 - HTTP / HTTPS(1)——http请求
网络原理 - HTTP / HTTPS(1)——http请求
5 0
|
2天前
|
域名解析 网络协议 程序员
网络原理(7)——以太网数据帧和DNS协议(数据链路层和应用层)
网络原理(7)——以太网数据帧和DNS协议(数据链路层和应用层)
10 0
|
2天前
|
网络协议 程序员 定位技术
网络原理(6)——IP协议
网络原理(6)——IP协议
12 0
|
2天前
|
存储 网络协议 网络架构
网络原理(5)——IP协议(网络层)
网络原理(5)——IP协议(网络层)
8 0
|
22天前
|
算法 网络协议 数据建模
【计算机网络】—— IP协议及动态路由算法(下)
【计算机网络】—— IP协议及动态路由算法(下)
|
22天前
|
算法 网络协议 数据建模
【计算机网络】—— IP协议及动态路由算法(上)
【计算机网络】—— IP协议及动态路由算法(上)