文章目录
- 第二章 计算机网络体系结构
- 2.5 运输层
- 2.5.1 运输层概述
- 2.5.2 端口号
- 2.5.3 传输控制协议TCP
- 2.5.4 TCP可靠传输的实现
- 2.5.5 用户数据报协议UDP
- 2.5.6 TCP和UDP的区别
- 2.6 wireshark
- 2.6.1 wireshark的安装
- 2.6.2 界面介绍
- 2.6.3 wireshark过滤器
- 2.6.4 使用wireshark分析TCP三次握手
- 2.6.5 使用wireshark分析TCP数据包
- 2.7 应用层
- 2.7.1 应用层概述
- 2.7.2 万维网
- 2.7.3 HTTP协议
个人主页:道友老李
欢迎加入社区:道友老李的学习社区
第二章 计算机网络体系结构
2.5 运输层
2.5.1 运输层概述
之前课程所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信。两个主机进行通信实际上就是两个主机中的应用进程互相通信,应用进程之间的通信又称为端到端的通信。
当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务。
运输层提供的是应用进程间的逻辑通信,“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。
根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP。
2.5.2 端口号
1、思考
主机A使用QQ向PC发送了一组数据,数据在网络中经过传输后到达主机B,主机B对数据进行解包以后又是如何知道该数据是发送给哪个进程的呢?
TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程。
2、端口号的值
- 端口号使用16比特表示,取值范围0~65535
- 熟知端口号:0~1023,IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如:FTP使用21/20,HTTP使用80,DNS使用53。
- 登记端口号:1024~49151,为没有熟知端口号的应用程序使用。使用这类端口号必须在IANA按照规定的手续登记,以防止重复。例如:Microsoft RDP微软远程桌面使用的端口是3389。
- 短暂端口号:49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
- 常用端口号及对应的网络应用程序表格如下:
- 在Linux中/etc/service文件中保存了知名的服务器端口号
- 端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程,在因特网中,不同计算机中的相同端口号是没有联系的。
2.5.3 传输控制协议TCP
传输控制协议 TCP (Transmission Control Protocol)一种基于连接的可靠的稳定的无重复的传输协议。
1、TCP头部信息
TCP协议头部信息如下:
- 16位源端口号(Source Port):发送主机中进程的端口号
- 16位目的端口号(Destination Port):接收主机中进程的端口号
- 32位序列号(Sequence Number):每一个包中都包含序列号,序列号被系统初始化为某个随机值ISN。后续的TCP报文段中序号加上该报文段所携带数据的第一个字节在整个字节流中的偏移。例如,某个TCP报文段传送的数据是字节流中的第1025~2048字节,那么该报文段的序号值就是ISN+1025
- 32位确认号(Acknowledgment Number):目的主机返回确认号,使源主机知道某个或几个报文段已被接收
- 四位首部长度(Header Length):由于TCP首部包含一个长度可变的选项部分,所以需要这么一个值来指定这个TCP报文段到底有多长
- URG标志:表示紧急指针(urgent pointer)是否有效
- ACK标志:表示确认号是否有效。我们称携带ACK标识的TCP报文段为确认报文段
- PSH标志:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间(如果应用程序不将接收到的数据读走,它们就会一直停留在TCP接收缓冲区中)
- RST标志:表示要求对方重新建立连接。我们称携带RST标志的TCP报文段为复位报文段
- SYN标志:表示请求建立一个连接。我们称携带SYN标志的TCP报文段为同步报文段
- FIN标志:表示通知对方本端要关闭连接了。我们称携带FIN标志的TCP报文段为结束报文段
- 16位窗口大小(window size) :是TCP流量控制的一个手段。这里说的窗口,指的是接收通告窗口(Receiver Window,RWND)。它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度
- 16位校验和(TCP check sum): 由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。注意,这个校验不仅包括TCP头部,也包括数据部分。这也是TCP可靠传输的一个重要保障。
- 16位紧急指针(urgent pointer) :是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。因此,确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移。TCP的紧急指针是发送端向接收端发送紧急数据的方法。
- TCP头部选项 :TCP头部的最后一个选项字段(options)是可变长的可选信息。这部分最多包含40字节
2、TCP运输连接的阶段
- 建立TCP连接
- 数据传输
- 释放TCP连接
注意:三报文握手我们也称之为三次握手或者三路握手,四报文挥手我们也称之为四次挥手或者四路挥手
3、TCP连接的建立
TCP连接的建立需要解决以下三个问题:
- 使TCP双方能够确知对方的存在
- 使TCP双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)
- 使TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配
三次握手过程:
- 由客户端的某个进程主动发起TCP连接建立,最初两端的TCP进程都处于关闭状态
- TCP服务器被动等待客户进程的TCP请求,所以TCP服务器进入监听状态
- TCP客户进程向TCP服务器进程发送TCP建接请求报文段,并且进入同步已发送状态
- TCP连接请求报文段首部中的同步位SYN被设置为1,表明这是一个TCP连接请求报文段,32位序列号字段seq被设置了一个初始值x,作为TCP客户进程所选择的初始序号。
- TCP服务器进程接收到TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并且进入同步已接收状态,该报文段首部中的同步位SYN和确认位ACK都设置为1,表明这是一个TCP连接请求确认报文段。序号字段seq被设置了一个初始值y,作为TCP服务器进进程选择的初始序号,确认号字段ack的值被设置成x+1,表明接收到了TCP客户进程序号为x的报文。
- TCP客户进程收到TCP连接请求确认报文段后,还要向TCP服务器进程发送一个普通的TCP确认报文段,并且进入连接已建立状态,报文段首部中的确认位ACK设置为1,表明这是一个普通的TCP确认报文段。序列号字段seq设置为x+1,确认号字段ack的值被设置成y+1,表明接收到了TCP服务进程序号为y的报文,TCP服务器进程收到该确认报文段后也进入连接已建立状态。
- 思考:假如TCP连接的建立使用两次握手而不是三次握手可以吗?
- 假设TCP客户进程发送了一个TCP请求报文段,但是该报文段在网络结点中被长时间滞留了,TCP客户采用超时重传机制重发TCP请求报文段并且被TCP服务进程接收,TCP服务进程发送一个TCP连接请求确认报文段,然后TCP服务进程和客户进程可以进行数据的传输,数据传输完成以后双方都处于关闭状态。
- 随后滞留在网络结点中的那个失效的TCP请求报文段被TCP服务进程接收,TCP服务进程又发送一个TCP连接请求确认报文段,并且进入连接已建立状态,由于TCP客户进程并没有发起新的TCP连接请求,并且已经处于关闭状态了,因此不会理会TCP服务器发送的报文段,但是TCP服务器进程已经进入了连接已建立状态,他认为新的TCP连接已经建立好了,就会一直等待TCP客户进程发来数据,将会浪费TCP服务器主机的很多资源。
- 因此:TCP连接的建立必须采用三次握手。
- 练习:
四次挥手过程:TCP通过四次挥手来释放连接,数据通信结束后,TCP双方都可以释放连接
- 假设由客户进程主动关闭TCP连接
- 客户进程发送连接释放报文段,并且进入终止等待1状态,该报文段中的首部终止位FIN设置位1,ACK设置为1,表明这是一个连接释放报文段,同时也对之前接收打报文段进行确认,seq=u表示TCP客户进程之前已发送过的数据的最后一个字节的序号+1,ack=v表示客户进程之前已收到的数据的最后一个字节的序号+1
- 服务器进程接收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段并且进入关闭等待状态,此时TCP客户进程到服务器进程这个方向的连接就释放了,这时的TCP连接属于半关闭状态,也就是TCP客户进程已经没有数据要发送了,但是TCP服务器进程如果还有数据需要发送,客户进程则还需要接收,这个状态可能会持续一段时间,直到TCP服务器进程将数据发送完毕。
- TCP客户进程收到TCP确认报文段后就进入终止等待2状态,等待TCP服务器进程发出的TCP连接释放报文段。
- 当TCP服务器进程的没有数据要发送了后,释放连接(被动关闭),TCP服务器进程发送TCP连接释放报文段并进入最后确认状态。FIN=1,ACK=1表明这是一个连接释放报文段,seq=w,ack=u+1同时也对之前收到的报文段进行确认。思考:为什么seq=w,而不是seq=v+1呢?
- TCP客户进程收到TCP连接释放报文段后,必须针对该报文段发送普通的TCP确认报文段,之后进入时间等待状态
- TCP服务器进程收到该报文段后就进入关闭状态
- 而TCP客户进程还需要经过2MSL后才能进入关闭状态。MSL(Maximum Segment Lifetime)意思是最长报文段寿命,RFC793建议为2分钟。
- 思考:为什么TCP客户进程还需要经过2MSL后才能进入关闭状态?
- 假设TCP客户进程收到TCP连接释放报文段,并且针对该报文段发送普通的TCP确认报文段后马上进入关闭状态,但是该确认报文段丢失了,TCP服务器进程无法收到该确认报文段,TCP服务器程序就会以为之前发送的TCP连接释放报文段TCP客户进程没有收到,然后TCP服务器进程会对之前所发送的TCP连接释放报文段超时重传,并仍处于最后确认状态。由于TCP客户进程已经处于关闭状态了,不会处理TCP服务器进程发送的连接释放报文段,这样就会造成TCP服务器反复发送TCP连接释放报文段,并且一直处于最后确认状态而无法进入关闭状态。因此客户端等待2MSL可以确保服务器进程收到最后一个TCP确认报文。
- 假设TCP客户进程收到TCP连接释放报文段,并且针对该报文段发送普通的TCP确认报文段后马上进入关闭状态,但是该确认报文段丢失了,TCP服务器进程无法收到该确认报文段,TCP服务器程序就会以为之前发送的TCP连接释放报文段TCP客户进程没有收到,然后TCP服务器进程会对之前所发送的TCP连接释放报文段超时重传,并仍处于最后确认状态。由于TCP客户进程已经处于关闭状态了,不会处理TCP服务器进程发送的连接释放报文段,这样就会造成TCP服务器反复发送TCP连接释放报文段,并且一直处于最后确认状态而无法进入关闭状态。因此客户端等待2MSL可以确保服务器进程收到最后一个TCP确认报文。
2.5.4 TCP可靠传输的实现
1、分段传输:应用数据根据MSS(Maxitum Segment Size 最大分段大小,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460 )值被分割成TCP认为最适合发送的数据段。
注意:在运输层的分段传输(分组传输)和网络层的IP数据报分片传输的区别:分段传输只有TCP协议才有的,并且分段的依据为MSS,分片传输的依据为MTU。
2、超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
3、CRC校验和:TCP将保持它首部和数据的检验和如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
4、流量控制:TCP 提供一种机制可以让「发送方」根据「接收方」的实际接收能力控制发送的数据量,这就是所谓的流量控制。TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。接收方有即时窗口(滑动窗口),随ACK报文发送。(TCP 利用滑动窗口实现流量控制)
5、滑动窗口:
- 应答机制:假如TCP 每发送一个数据报,都要进行一次确认应答。当上一个数据包收到了应答了, 再发送下一个,这个模式就有点像我和你面对面聊天,你一句我一句。这样的传输方式有一个缺点:数据包的往返时间越长,通信的效率就越低。为解决这个问题,我们可以使用累计应答。
- 累计应答:接收方在接收到多个数据包后再根据接收到的数据包进行应答,也称为累计确认。
- 窗口:窗口的实现实际上是操作系统开辟的一个缓存空间,接收方根据实际情况在应答数据包中告知自己的接收窗口大小。窗口大小就是指无需等待确认应答,而可以继续发送数据的最大值(以字节为单位)。发送方主机在等到确认应答返回之前,必须在缓冲区(发送窗口)中保留已发送的数据。如果按期收到确认应答,此时数据就可以从缓存区清除。
- 滑动窗口:如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。
- 假设主机A发送数据给主机B,在建立TCP连接时,主机B在确认报文中将自己的接收窗口rwnd告知主机A。(假设接收窗口大小为400)
- 主机A根据主机B的接收窗口大小创建自己的发送窗口(在内存上开辟一块空间缓存一个接收窗口大小的数据),并且假设每个数据包中载荷数据为100Bytes
- 主机A分别将第一组数据(为了方便讲解假设seq=1,实际上应该为seq=ISN+1), 第二组数据(seq=101)、第三组数据(seq=201)、第四组数据(seq=301)发送给主机B,中间不需要等待主机B的应答数据报(累计应答)
- 假设第三组数据(seq=201)在输出过程中被丢失了,尽管主机B接收到了第四组数据,但是因为累计应答时只应答最大连续报文,所以应答数据包中ack=201表示序号201之前的所有数据全部正确接收。假设主机B将接收窗口大小调整为300,在应答报文中rwnd=300
- 主机A接收到应答数据报后,将自己发送窗口中的序号1~200的数据删除,发送窗口往前(向右)移动并且将大小重新设置为300(开辟接收窗口大小的缓存序号为201-500的数据)
- 主机B将序号为201,301,401的数据报发送给主机B
- 假设以上三组数据报没有丢失,主机B在接收到所有数据后发送应答数据报,ack=501,并且将窗口调整为100,rwnd=100A
- 主机A接收到应答数据报后,将自己发送窗口中的序号201~500的数据删除,发送窗口往前(向右)移动并且将大小重新设置为100(开辟接收窗口大小的缓存序号为501-600的数据)
- 主机A将序号位600的数据报发送给主机B ,按照以上逻辑知道数据发送完毕。
- 接收窗口为0的处理:当发送窗口被调整为0后,发送方就不能再发送数据了,假如接收方的接收窗口调整为大于0了,如果不采取特殊措施发送方是不知道的,因为接收方不会主动告知发送方自己接收窗口的大小。这时就需要持续计数器了,当发送方接收到接收窗口为0的应答报文时马上启动一个持续计时器,当定时达到时主动向接收方发送一个零窗口探测报文,该报文只携带一个字节的数据,然后这种逻辑直到接收方回复的接收窗口大于0。
2.5.5 用户数据报协议UDP
1、UDP概述
UDP 是User Datagram Protocol的简称, 中文名是用户数据包协议。
UDP是一种无连接的不可靠的传输协议(不需要进行三次握手和四次挥手)。
UDP不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的,因此适合实时数据传输,例如:IP电话、网络视频会议等实时应用。
2、UDP的头部
3、UDP的应用
使用UDP运输协议可以进行单播、多播和广播。
-
单播应用:DNS域名解析,域名系统是因特网上作为域名和IP(Internet Protocol Address)地址相互映射的一个分布式数据库。
- 浏览器如何通过域名去查询URL对应的IP(对应服务器地址)呢?
- 浏览器缓存:浏览器会按照一定的频率缓存DNS记录。
- 操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中找。
- 路由缓存:路由器也有DNS缓存。
- ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求
- 根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询
- 当两个网络应用进程间需要快速传输大文件(音视频文件、图片文件等)时也可以使用UDP单播。
- 浏览器如何通过域名去查询URL对应的IP(对应服务器地址)呢?
-
多播应用:网络视频会议、教学,视频监控等。IP多播(也称多址广播或组播)技术,是一种允许一台或多台主机(多播源)发送单一数据包到多台主机(一次的,同时的)的TCP/IP网络技术。IP多播通信必须依赖于IP多播地址,在IPv4中它是一个D类IP地址,范围从224.0.0.0到239.255.255.255。
-
广播的应用:ARP数据报广播
注意:在进行UDP编程时,UDP包的大小可以达到64k,但实际上MTU大小只有1k多,如果直接发一个超过MTU大小的包,就会在网络层被分片,这样的问题是,如果只要有一个分片在传输中出错了即校验不正确(这是较容易发生的),整个传输的udp包就被丢弃。注意是整个而不是单个分片。这就是为什么发送UDP包通常也是1k多大小的原因。
2.5.6 TCP和UDP的区别
1、对比
除了上图所展示的区别外,使用TCP传输协议时,一旦建立好TCP连接后,系统需要实时的维护该连接,所以TCP所消耗的系统资源比UDP要多。
另外因为TCP的可靠性传输机制导致TCP传输数据时比UDP要慢的多。
2、TCP的长连接和短链接
- 长连接:TCP通信双方在建立好连接后,在较长一段时间内保持连接,直至某一方主动关闭连接。长连接多用于操作频繁,点对点的通讯,例如在物联网开发中某下位机需要定时地频繁向服务发送数据等。
- 短链接:通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接。短连接多用于操作不频繁,点对点的通讯,例如:在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
- 长连接短链接对比
3、UDP的灵活应用
应用项目:高压线覆冰监测系统。
监控中心为了较快显示工业摄像头采集到的高清照片,监控子站主机需要使用UDP与监控中心主机进行图像数据的传输,但是因为使用了UDP传输协议可能会导致某些数据报丢失。为了保证图像数据的完整性,我们需要在应用层设计私有协议保障丢失的数据报能够进行重传。
2.6 wireshark
2.6.1 wireshark的安装
2.6.2 界面介绍
1、网卡选择
2、首页
常用按钮从左到右的功能依次是:
- 列出可用接口。
- 抓包时需要设置的一些选项。一般会保留最后一次的设置结果。
- 开始新的一次抓包。
- 暂停抓包。
- 继续进行本次抓包。
- 打开抓包文件。可以打开之前抓包保存后的文件。不仅可以打开wireshark软件保存的文件,也可以打开tcpdump使用-w参数保存的文件。
- 保存文件。把本次抓包或者分析的结果进行保存。
- 关闭打开的文件。文件被关闭后,就会切换到初始界面。
- 重载抓包文件。
3、数据包列表, 显示捕获到的数据包,每个数据包编号,时间戳,源地址,目标地址,协议,长度,以及数据包信息。
4、数据包详细信息,在数据包列表中选择指定数据包,在数据包详细信息中会显示数据包的所有详细信息内容。数据包详细信息面板是最重要的,用来查看协议中的每一个字段。各行信息分别为
- Frame: 物理层的数据帧概况
- Ethernet II: 数据链路层以太网帧头部信息
- Internet Protocol Version 4: 互联网层IP包头部信息
- User Datagram Protocol: 传输层的数据段头部信息,此处是UDP
- Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议
5、我们可以在过滤器窗口筛选出http协议的相关数据包,并且查看TCP包的每个字段
2.6.3 wireshark过滤器
初学者使用wireshark时,将会得到大量的冗余数据包列表,以至于很难找到自己自己抓取的数据包部分。wireshar工具中自带了两种类型的过滤器,学会使用这两种过滤器会帮助我们在大量的数据中迅速找到我们需要的信息。
1、设置数据抓取选项
点击常用按钮中的设置按钮,就会弹出设置选项对话框。在这个对话框中我们可以选中需要监听的接口,设置混杂模式,设置抓取数据包的过滤条件。如下图:
首先,选中需要监听获取数据包的接口。接口列表区列出了所有可以使用的接口。如果接口前面的复选框被选中,说明对这个接口监听捕获数据包。
其次,设置混杂模式。设置混杂模式的作用是将网卡设置到混杂模式。如果不设置混杂模式,你的计算机只能获取数据包发往的目标是你计算机和从你计算机出去的数据包。如果设置了混杂模式,你就可以捕获局域网中所有的数据包。如果窗口中的 "Use promiscuous mode on all interfaces"前面的复选框被选中,说明对所有的接口使用混杂模式。如果想单独设置,可以双击接口列表中的接口,会弹出如下的对话框。然后选中或者去掉“Capture packets in promiscuous mode”前面复选框。然后点ok按钮。
2、显示过滤器
显示过滤器应用于捕获文件,用来告诉wireshark只显示那些符合过滤条件的数据包。显示过滤器比捕获过滤器更常用。他可以用来过滤不想看到的数据包,但是不会把数据删除。如果想恢复原状,只要把过滤条件删除即可。
过滤器表达式对话框,是的wireshark的可以很简单的设置过滤表达式。点击“Expression”按钮就可以打开这个对话框。如下图:
对话框分左中右三部分。左边为可以使用的所有协议域(过滤项)。右边为和协议域相关的条件值(过滤值)。中间为协议域与条件值之间的关系(过滤关系)。
一条基本的表达式由过滤项、过滤关系、过滤值三项组成。
比如:http contains baidu.com, http为过滤项, contains 为过滤关系, baidu.com 为过滤值,表示显示http协议包中包含关键词“baidu.com”的所有数据包
比如:ip.addr == 192.168.1.1,ip.addr是过滤项、==是过滤关系,192.168.1.1是过滤值(整条表达示的意思是找出所有ip协议中源或目标ip、等于、192.168.1.1的数据包)
3、过滤关系
过滤关系就是大于、小于、等于等几种等式关系,我们可以直接看官方表格,注意其中有“English”和“C-like”两个字段,这个意思是说“English”和“C-like”这两种写法在wireshark中是等价的、都是可用的。
4、复合过滤表达式
所谓复合过滤表达式,就是指由多条基本过滤表达式组合而成的表达示。基本过滤表达式的写法还是不变的,复合过滤表达示多出来的东西就只是基本过滤表达示的“连接词”。我们依然直接参照官方表格,同样“English”和“C-like”这两个字段还是说明这两种写法在wireshark中是等价的、都是可用的。
5、执行ping www.baidu.com获取的数据包列表如下
观察上述获取的数据包列表,含有大量的无效数据。这时可以通过设置显示器过滤条件进行提取分析信息。ip.addr == 14.215.177.39 and icmp。并进行过滤
6、常见用显示过滤需求及其对应表达式
- 数据链路层:
- 筛选mac地址为04:f9:38:ad:13:26的数据包:eth.src == 04:f9:38:ad:13:26
- 筛选源mac地址为04:f9:38:ad:13:26的数据包:eth.src == 04:f9:38:ad:13:26
- 网络层:
- 筛选ip地址为192.168.1.1的数据包:ip.addr == 192.168.1.1
- 筛选192.168.1.0网段的数据: ip contains 192.168.1
- 筛选192.168.1.1和192.168.1.2之间的数据包:ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2
- 筛选从192.168.1.1到192.168.1.2的数据包:ip.src == 192.168.1.1 && ip.dst == 192.168.1.2
- 传输层:
- 筛选tcp协议的数据包:tcp
- 筛选除tcp协议以外的数据包:!tcp
- 筛选端口为80的数据包:tcp.port == 80
- 筛选12345端口和80端口之间的数据包:tcp.port == 12345 && tcp.port == 80
- 筛选从12345端口到80端口的数据包:tcp.srcport == 12345 && tcp.dstport == 80
- 应用层:
- 特别说明:http中http.request表示请求头中的第一行(如GET index.jsp HTTP/1.1),http.response表示响应头中的第一行(如HTTP/1.1 200 OK),其他头部都用http.header_name形式。
- 筛选url中包含.php的http数据包:http.request.uri contains .php
- 筛选内容包含username的http数据包:http contains username
2.6.4 使用wireshark分析TCP三次握手
1、设置过滤阿里云服务器的IP地址:ip.addr == 47.104.157.132
2、使用TCP调试助手连接阿里云服务器上的TCP服务端
3、我们发现wireshark捕获到了3条TCP数据
- 第一次握手数据包:客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图
- 第二次握手:服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的seq加1以.即0+1=1, 如下图
- 第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1,如下图:
2.6.5 使用wireshark分析TCP数据包
1、使用tcp调试助手向阿里云服务器TCP服务端发送hello,并且接收到服务器返回的hello world
2、我们发现wireshark捕获到了四条TCP数据
2.7 应用层
2.7.1 应用层概述
应用层是网络体系结构中的最上层,所有的网络应用程序和服务都工作在应用层。
常见的网络应用程序:浏览器、手游、即时通信软件、网站的后台程序、网游的主程等。
常见的网络服务:telnet、FTP、ssh等。
2.7.2 万维网
1、万维网概述
万维网WWW (World Wide Web)并非某种特殊的计算机网络。它是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个分布式应用。
万维网利用网页之间的超链接将不同网站的网页链接成一张逻辑上的信息网。
万维网是欧洲粒子物理实验室的Tim Berners-Lee(蒂姆伯纳斯李)最初于1989年3月提出的。
1993年2月,第一个图形界面的浏览器Mosaic诞生,1995年著名的Netscape Navigator(网景)浏览器上市
目前流行的浏览器有以下几种:
2、统一资源定位符URL
当我们访问某个网页时,在浏览器的地址栏会出现一长串的字符,这一长串的字符我们称之为统一资源定位符URL。
我们所访问到的网页上的内容其实是服务器上的某个资源,每个资源在服务器上都对应着一个位置。
万维网使用统一资源定位符URL来指明因特网上任何种类“资源”的位置。
URL的一般形式由以下四个部分组成:
我们可以将某个网页另存为文件,存储后有一个html文件和一个文件夹。
文件夹中的内容如下:
万维网文档:由HTMLCSS、JavaSaript编写的方维网文档
2.7.3 HTTP协议
1、浏览器发送HTTP请求的过程
2、HTTP协议概述
超文本传输协议HTTP(HyperText Transfer Protocol)定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。是处理客户端和服务端之间的通信
3、HTTP/1.0
HTTP/1.0采用非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到响应后就立即关闭连接。每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引用对象(例如图片等)
那么请求每一个对象都需要花费2RTT的时间。
为了减小时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是,这会大量占用万维网服务器的资源,特别是万维网服务器往往要同时服务于大量客户的请求,这会使其负担很重。
4、HTTP/1.1
HTTP/1.1采用持续连接方式。在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同一个服务器上就行。
为了进一步提高效率,HTTP/1.1的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后,服务器就发回一个接一个的响应报文。这样就节省了很多个RTT时间,使TCP连接中的空闲时间减少,提高了下载文档的效率。
5、HTTP报文格式
HTTP是面向文本的,其报文中的每一个字段都是一些ASCII码串,并且每个字段的长度都是不确定的。
我们可以利用浏览器的开发者工具查看某个HTTP请求的报文:
HTTP协议支持的请求方法:
HTTP常见的请求头:
Connection:决定HTTP连接(不是TCP连接)是否在当前事务完成后关闭。
Keep-Alive:多次请求复用一个TCP连接。
Keep-Alive: timeout=5, max=1000
User-Agent:这个字段可以帮助统计客户端用了什么浏览器、操作系统等
Content-Type:请求的时候,告知服务端数据的媒体类(MediaType/MIME Type)。返回的时候告知客户端,数据的媒体类型。
Cookie:Cookie提供了一种机制使得万维网服务器能够“记住”用户,而无需用户主动提供用户标识信息。也就是说,Cookie是一种对无状态的HTTP进行状态化的技术。
HTTP是无状态的:协议对于事务处理没有记忆能力,对同一个url请求没有上下文关系,每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况
使用Cookie在服务器上记录用户信息:
状态码:web服务器告诉客户端请求的状态
常见的状态码为以下四类:
- 200状态码
- 3xx状态码
- 4xx状态码
- 5xx状态码