一、ARP协议
ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址。
IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信;
在通过以太网发生IP数据包时,先封装第三层(32位IP地址)和第二层(48位MAC地址)的报头;
但由于发送数据包时只知道目标IP地址,不知道其Mac地址,且不能跨越第二、三层,所以需要使用地址解析协议。
ARP工作流程分请求和响应:
在dos窗口内“ping”某个域名抓取到的包:
二、IP协议
IP(Internet Protocol)互联网协议,主要目的是使得网络间能够互相通信,位于OSI第三层,负责跨网络通信的地址。
当以广播方式发送数据包的时候,是以MAC地址定位,并且需要电脑在同一子网络。
当不在同一子网络就需要路由发送,这时候就需要IP地址来定位。
同样在dos窗口内“ping”某个域名抓取到的包:
三、TCP协议
TCP(Transmission Control Protocol)传输控制协议,一种面向连接、可靠、基于IP的传输层协议,主要目的是为数据提供可靠的端到端传输。
在OSI模型的第四层工作,能够处理数据的顺序和错误恢复,最终保证数据能够到达其应到达的地方。
1)标志位
SYN: 同步,在建立连接时用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。
FIN: 终止,FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。
ACK: 确认,ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包。
DUP ACK:重复,重复确认报文,有重复报文,一般是是丢包或延迟引起的,从这个报文看应该是丢包了。
URG:紧急,当URG=1时,表示报文段中有紧急数据,应尽快传送
PSH:推送,当发送端PSH=1时,接收端尽快的交付给应用进程
RST:复位,当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接
2)端口
客户端与不同服务器建立连接时,源端口和目标端口可不同。
3)TCP三次握手
4)TCP四次挥手
TCP四次断开,例如关闭页面的时候就会断开连接。
5)TCP概念
1. 发送窗口
无法简单的看出发送窗口的大小,发送窗口会由网络因素决定。发送窗口定义了一次发的字节,而MSS定义了这些字节通过多少个包发送。
2. 拥塞窗口(cwnd)
描述源端在拥塞控制情况下一次最多能发送的数据包的数量。
在发送方维护一个虚拟的拥塞窗口,并利用各种算法使它尽可能接近真实的拥塞点。
网络对发送窗口的限制,就是通过拥塞窗口实现的。
3. 在途字节数(bytes in flight)
已经发送出去,但尚未被确认的字节数。
在途字节数 = Seq + Len - Ack
其中Seq和Len来自上一个数据发送方的包,而Ack来自上一个数据接收方的包。
4. 拥塞点(congestion point)
发生拥塞时候的在途字节数就是该时刻的网络拥塞点。
先从Wireshark中找到一连串重传包中的第一个,再根据该Seq找到原始包最后计算该原始包发送时刻的在途字节数。
5. 慢启动
RFC建议初始拥塞窗口发送2、3、或4个MSS,如果发出去的包都能得到确认,则表明还没到拥塞点,可以收到n个确认增加n个MSS
6. 拥塞避免
慢启动持续一段时间后,拥塞窗口达到一个较大的值,就得放慢RFC建议在每个往返时间增加1个MSS,比如发了16个MSS全部确认,那么就增加到17个MSS
7. 超时重传
发出去的包在等待一段时间(RTO)后,没有收到确认,就只能重传了
8. 快速重传(Fast Retransmit)
不以时间驱动,而以数据驱动重传。如果包没有连续到达,就ACK最后那个可能被丢了的包,如果发送方连续收到3次相同的ACK,就重传。
9. SACK(Selective Acknowledgment)
选择性确认重传,ACK还是Fast Retransmit的ACK,SACK则是汇报收到的数据,在发送端就可以根据回传的SACK来知道哪些数据到了,哪些没有到。
10. 延迟确认(Delayed ACK)
如果收到一个包后暂时没什么数据发给对方,那就延迟一段时间再确认。假如这段时间恰好有数据要发送,那数据和确认信息可以在一个包中发送。
11. LSO
LSO拯救CPU而出的创意,为了缓解CPU的压力,把它的一部分工作外包给了网卡,比如TCP的分段。
启用LSO之后,TCP层就可以把大于MSS的数据块直接传给网卡,让网卡负责分段。
比如“Seq=348586,Len=2776”,被网卡分为“Seq=348586,Len=1388”和“Seq=349974,Len=1388”两个包。
在发送端抓包相当于站在CPU角度,只看到一个分段前的大包,而接收端就可以看到两个包。
所以才会出现只见重传包,不见原始包的情况。
12. Nagle算法
在发出去的数据还没有被确认之前,假如又有小数据生成,那就把小数据收集起来,凑满一个MSS或等收到确认后再发送。
13. Vegas算法
通过监控网络状态来调整发包速度。
当网络状态良好时,数据包的RTT比较稳定,这时可以增大拥塞窗口;
当网络开始繁忙时,数据包开始排队,RTT就会变大,这时就减小拥塞窗口。
6)选项字段
PTR(Pointer Record):指针记录,PTR记录解析IP地址到域名
TTL(Time to live):
存活时间,限制数据包在网络中存在的时间,防止数据包不断的在IP互联网络上循环,初始值一般为64,每经过一个路由减去1。
通过TTL过滤运营商劫持包,假的包是抢先应答的,所以和真实包的TTL可能不同(例如ip.ttl == 54)
Seq:数据段的序号,当接收端收到乱序的包,就能根据此序号重新排序,当前Seq等上一个Seq号与长度相加获取到
Len:数据段的长度,这个长度不包括TCP头
Ack:确认号,接收方向发送方确认已经收到了哪些字节
RTT(Round Trip Time):也就是一个数据包从发出去到回来的时间
RTO(Retransmission TimeOut):超时重传计数器,描述数据包从发送到失效的时间间隔,是判断数据包丢失与否及网络是否拥塞的重要参数
MTU(Maximum Transmit Unit):最大传输单元
MSS(Maximum Segment Size):最长报文段,TCP包所能携带的最大数据量,不包含TCP头和Option。一般为MTU值减去IPv4头部(至少20字节)和TCP头部(至少20字节)得到。
Win(Window Size):声明自己的接收窗口
TCP Window Scale:窗口扩张,放在TCP头之外的Option,向对方声明一个shift count,作为2的指数,再乘以TCP定义的接收窗口,得到真正的TCP窗口
DF(Don‘t fragment):在网络层中,如果带了就丢弃没带就分片
MF(More fragments):0表示最后一个分片,1表示不是最后一片
7)过滤表达式
握手请求被对方拒绝:tcp.flags.reset === 1 && tcp.seq === 1
重传的握手请求:tcp.flags.syn === 1 && tcp.analysis.retransmission
过滤延迟确认:tcp.analysis.ack_rtt > 0.2 and tcp.len == 0
四、UDP协议
UDP(User Datagram Protocol)用户数据报协议,提供面向事务的简单不可靠信息传送服务。
将网络数据流压缩成数据包的形式。每一个数据包的前8个字节保存包头信息,剩余的包含具体的传输数据。
虽然UDP是不可靠的传输协议,但它是分发信息的理想协议,例如在屏幕上报告股票市场、显示航空信息;
在路由信息协议RIP(Routing Information Protocol)中修改路由表、QQ聊天、迅雷、网络电话等。
TCP的效率不一定比UDP低,只要窗口足够大,TCP也可以不受往返时间的约束而源源不断地传数据。
1)UDP的优势
1. UDP 协议的头长度不到TCP头的一半,所以同样大小的包里UDP携带的净数据比TCP包多,
2. 没有Seq和Ack等概念,省去了建立连接的开销,DNS解析就使用UDP协议。
2)UDP的劣势
1. 超过MTU的时候,发送方的网络层负责分片,接收方收到分片后再组装起来,这个过程会消耗资源,降低性能。
2. 没有重传机制,丢包由应用层处理,某个写操作有6个包,当有一个丢失的时候,就要将6个包重新发送。
3. 分片机制存在弱点,接收方是根据包中的“More fragments”的flag来判断是否包已接收完,1表示还有分片,0表示最后一个分片,可以组装了。
如果持续发送flag为1的UDP,接收方无法组装,就有可能耗尽内存。
五、ICMP协议
ICMP(Internet Control Message Protocol)网际报文控制协议,用于传输错误报告控制信息,对网络安全有极其重要的意义。
例如请求的服务不可用、主机或路由不可达,ICMP协议依靠IP协议来完成任务,是IP协议的一个集成部分。
通常不被用户网络程序直接使用,多用于ping和tracert等这样的诊断程序。
六、DNS协议
DNS(Domain Name System)域名系统,DNS就是进行域名解析的服务器。
DNS协议运行在UDP协议之上,端口为53,工作原理如下:
DNS的解析过程:
DNS客户机向本地域名服务器A发送查询,如果A中没有保存IP地址记录,A就会发请求给根域名服务器B
如果B中也没有,A就发请求给C,再没有就发请求给D,然后是E,找到后将地址发给DNS客户机。
域名解析过程涉及到递归查询和迭代查询。
客户机再与Web服务器连接。
七、HTTP协议
HTTP(HyperText Transfer Protocol)超文本传输协议,HTTP是一个应用层协议,无状态,由请求和响应构成,是一个标准的客户端服务器模型。
HTTP工作流程如下:
HTTP请求头域:
HTTP应答头域:
HTTP通用头域:
HTTP实体头域:
八、HTTPS协议
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)基于SSL的HTTP协议,HTTP的安全版。
使用端口43,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输和身份认证的网络协议。
1)HTTPS工作流程
2)SSL
SSL(Secure Sockets Layer)安全套接层,TLS(Transport Layer Security)传输层安全是其继任者。
SSL和TLS在传输层对网络连接进行加密。
SSL协议分为两层,SSL记录协议(SSL Record Protocol)和SSL握手协议(SSL Handshake Protocol)。
SSL记录协议建立在TCP之上,提供数据封装、压缩加密基本功能的支持。
SSL握手协议建立在SSL记录协议之上,在数据传输之前,通信双方进行身份认证、协商加密算法和交换加密秘钥等。
SSL工作分为两个阶段,服务器认证和用户认证。
SSL协议既用到了公钥加密(非对称加密)又用到了对称加密技术。
3)数据包
客户端与服务器之间的通信:
1.客户端发出请求(Client Hello)
2.服务器响应(Server Hello)
3)证书信息
3.密钥交换
4.应用层信息通信
用户可以发送通过TLS层使用RC4的写实例加密过的普通HTTP消息,也可以解密服务端RC4写实例发过来的消息。
此外,TLS层通过计算消息内容的HMAC_MD5哈希值来校验每一条消息是否被篡改。
参考资料:
理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)
TCP segment of a reassembled PDU
如何通过Wireshark查看HTTPS、HTTP/2网络包(解码TLS、SSL)