1.HTTP简介
1.HTTP请求及HTTPS
2.四层协议
3.TCP的理解
4.HTTP报文(超时代理等)
5.Window和Linux的抓包分析
1.1 HTTP协议
HTTP是超文本传输协议,用于从WWW服务器传输超文本(任意标签语言)到本地浏览器的传输协议。
HTTP是一个应用层协议由请求和响应构成是一个标准的客户端模型。
HTTP是无连接无状态的协议,即每次连接只处理一个请求并不对请求和响应之间的状态进行保存这样可以更快的处理大量的事务。在HTTP1.1虽然是无协议的但是为了实现期望的保持状态的功能引入了Cookies技术。 [truncated]Cookie: kg_mid=e4043b02bd353dcb39f5bba3f473189f;同时HTTP/1.1 在报文Connection:keep-alive 保持长连接请求,在这样的状态下HTTP的请求时间会比TCP慢启动下的少很多。
cookies.png
1.2 HTTP请求方式和状态码
请求方式
GET:从服务器获取一份文档。
POST:传输实体主体。POST和GET主要区别是get提交的数据主要放在URL后以?和&隔开而POST则是把数据放在HTTP的body中。相互比较于GET直接把参数放在URL中POST更加安全一点。
HEAD:获取报文首部。只是不返回报文的主体,可以用于确认URL的有效期以及资源的更新日期,看看某个对象是否存在资源是否被修改等。
PUT和DELETE:用于上传和删除服务器上的文件。由于这两种方法自身不带有认证机制所以不安全所以Web服务器都要求在执行PUT之前用密码登录。
状态码
100~199 —— 信息性状态码
200~299 —— 成功状态码。200:ok;202:Accept,请求已经被接受但服务器还未对其执行任何操作;
300~399 —— 重定向状态码。301:请求的url已经被移除。
400~499 —— 客户端错误。400:错误的请求;401:未认证;403:被拒绝;
500~599 —— 服务器错误。500:服务器遇到错误;502:代理或网关无法访问;510:Not Extended 获取资源所需要的策略并没有被满足。
1.3 HTTPS
HTTP在传输的过程中存在的问题
1.如果使用明文内容很有可能会被窃听
2.不验证通信方的身份有可能遭遇伪装 DoS攻击
3.无法证明报文的完整性所以有可能已经被篡改 中间人攻击
加密处理的方式主要有两种,一种方式就是讲通信加密这个是通过和SSL( Security Socket Layer 安全套接层 )组合使用加密通信内容。这种方式被称为HTTPS。另一种就是对HTTP报文内容进行加密这种方式如果用户对加密内容进行修改同样可能。
针对通信链路三种加密技术:共享秘钥加密,公开秘钥加密和混合秘钥加密。
证明公开秘钥正确性的证书:在客户端无法证明公开密钥本身就是货真价实的服务器秘钥的情况下,会由数字证书认证机构对公开秘钥做数字签名客户端在接受服务器的公开密钥之后会用数字认证机构的公开秘钥对证书上的认证签名进行认证。
HTTPS.png
1.客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL指版本,加密组件等。
2.服务器进行SSL通信时以Server Hello报文应答
3.服务器发送Certification报文。报文中含有公开密钥证书
4.最后Server 发送Server Hello Done结束
5.SSL第一次握手之后客户端以Client Key Exchange回应并提示Server 之后的报文采用的密钥加密方式
6.客户端发送Change Cipher Spec报文该报文提示服务器之后的通信采用的秘钥加密方式
7.服务器发送同样的报文
8.报文交换完毕SSL建立完成
2.WEB网络基础
2.1 TCP/IP 的分层管理
TCP/IP协议族按照层次分别分为以下几层:应用层,传输层,网络层和数据链路层。层次化之后设计相对变得简单每一层只需要负责上层给自己的任务就可以同时需要改变某一个部分的设计时只需要变动层更换就好了。
OSI七层模型是一个完整的、完善的宏观模型,他包括了硬件层(物理层),当然也包含了很多上面途中没有列出的协议(比如DNS解析协议等);而TCP/IP(参考)模型,更加侧重的是互联网通信核心(也是就是围绕TCP/IP协议展开的一系列通信协议)的分层,因此它不包括物理层,以及其他一些不想干的协议;其次,之所以说他是参考模型,是因为他本身也是OSI模型中的一部分,因此参考OSI模型对其分层。
其中各层次的主要作用如下:
数据链路层:用来处理网络连接的硬件部分。在物理层的上方确定了0和1的分组方式,以太网协议定义了一组电信号由标头和数据构成的帧。标头存放发送者和接受者的MAC地址利用广播的方式送向本网络的接收方。
网络层:用来处理在网络上流动的数据包。两台计算机之间的IP地址通过子网掩码判断是否在同一网络内如果不在则通过路由定义一条发送路径(只定义从一子网到另一子网)
传输层:提供处于网络连接中的两台计算机之间的数据传输。通过端口号建立端到端的连接方式。UDP和TCP协议都是传输层的协议他们的主要作用就是在应用层的数据包标头加上端口号(或者在IP协议的数据包中插入端口号)。UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。TCP协议可以近似认为是有确认机制的UDP协议。每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了
应用层:决定了向用户提供服务时通信的活动。
自上而下的数据包结构
本机的IP地址:192.168.1.100
子网掩码:255.255.255.0
网关的IP地址:192.168.1.1
DNS的IP地址:8.8.8.8
然后打开浏览器访问谷歌的网址:www.google.com 这意味着,浏览器要向Google发送一个网页请求的数据包。
第一步:
主机会像DNS服务器发送请求,已知DNS服务器为8.8.8.8,于是我们向这个地址发送一个DNS数据包(53端口);然后,DNS服务器做出响应,告诉我们Google的IP地址是172.194.72.105。于是,我们知道了对方的IP地址。
第二步:
接下来,我们要判断,这个IP地址是不是在同一个子网络,这就要用到子网掩码。已知子网掩码是255.255.255.0,本机用它对自己的IP地址192.168.1.100,做一个二进制的AND运算(两个数位都为1,结果为1,否则为0),计算结果为192.168.1.0;然后对Google的IP地址172.194.72.105也做一个AND运算,计算结果为172.194.72.0。这两个结果不相等,所以结论是,Google与本机不在同一个子网络。
第三步:
因此,我们要向Google发送数据包,必须通过网关192.168.1.1转发,也就是说,接收方的MAC地址将是网关的MAC地址。至此发送的各种必要参数已经基本确定了,数据包也可以发送了。
2.2 与HTTP关系密切的协议:IP,TCP和DNS
1.负责传输的IP协议
IP协议位于网络层,它的主要作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中最重要的就是IP地址和MAC地址。IP地址指明节点被分配到的地址MAC地址指的是网卡所属的固定地址。IP和MAC地址的这种映射关系由ARP协议完成,即根据通信方的IP地址就可以反查出对应的MAC地址。
image
2.确保可靠性的TCP地址
TCP位于传输层,提供可靠的字节流服务,为了方便传输把大块数据分割成报文段为单位的数据而且TCP能够确认最终的数据是否送达到对方。为了准确的发送给对方TCP协议采用了三次握手协议首先发送一个带有SYN请求连接标志的数据包给对方,对方收到后回传一个SYN/ACK标志的数据包确认。最后发送端回传一个ACK确认连接的标志。
3.负责域名解析的DNS服务
DNS服务和HTTP协议一样位于应用层。它提供域名到IP之间的域名解析服务。
image
3.HTTP报文和基本参数
1.HTTP报文
请求报文
image
返回报文
image
通用首部:Cache-Controller,Connection,Date...
请求首部:Accept, Accept-Encoding,Host,User-Agent
响应首部:
2.TCP报文
image
端口号:用来标识同一台计算机的不同的应用进程。
源端口:源端口和IP地址的作用是标识报文的返回地址。
目的端口:端口指明接收方计算机上的应用程序接口。
TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。
序号和确认号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0
控制位:URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能
1)URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。
2)ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
3)PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
4)RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
5)SYN:同步序号,用于建立连接过程,在连接请求中SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
滑动窗口
4.HTTP抓包
1.window抓包工具Wireshark
过滤规则
http.host=="www.baidu.com"
http.uri=="/img/logo-edu.gif"
http.request.method=="GET"
http.request.method=="POST"
Wireshark提示:TCP Previous segment not captured
2.数据分析
三次握手 / 四次挥手
三次握手之后报文含义
3.linux下抓包工具tcpdump
它是基于Unix系统的命令行式的数据包嗅探工具可以抓取流动在网卡上的数据包,默认情况下不会抓取本机内部通讯的报文如果要使用tcpdump抓取其他主机的MAC地址的数据包必须开启网卡混杂模式所谓网卡混杂模式就是让网卡抓取经过它的数据包不管这个数据包是不是发给它或者它发出的。
tcpdump常用命令
-i:指定网络接口(如eth0,eth1。网络接口使用ifconfig命令查看)
-n:不对IP地址进行DNS反解析
-nn:不对IP地址进行DNS反解析,并且不将端口转换为字符
-vv:详细输出数据包信息
-w:将捕获的结果存入指定文件,-w后接自定义文件名
-r:将存入文件的结果读取出来以便分析
type(类型):host / net / port / portrange
direction(数据包方向):src / dst / dst or src /
protocal(协议):ip / arp / tcp / udp / icmp
过滤主机:tcpdump -n -i eth0 host 192.168.1.1
过滤端口:tcpdump -i eth0 -n port 25
过滤协议:tcpdump -i eth1 -n ip
抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200;端口是80的TCP数据:tcpdump -i eth1 tcp and port 80 and (dst host 192.168.1.254 or dst host 192.168.1.200)
抓取并进行保存: tcpdump -i eth0 -w packets_file
读取 tcpdump -r packets_file
HTTP抓包:tcpdump -i eth0 -nn -vv 'tcp[20:2]=0x4745 or tcp[20:2]=0x4854'
解释: tcp[20:2]=0x4745 表示'GET'的'GE'
tcp[20:2]=0x4854 表示HTTP的 'HT'
网友评论