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要求头域:
Accept 用户代理能够处理的媒体类型(MIME)及媒体类型的相对优先级,“text/plain;q=0.3”
Accpet-Charset 关照做事器用户代理支持的字符集及字符集的相对优先顺序,“iso-8859-5”
Accept-Encoding 奉告做事器用户代理支持的内容编码及优先级顺序“gzip,deflate”
Accept-Language 奉告做事器用户代理能够处理的自然措辞集及优先级,“zh-cn,zh;q=0.7”
Authorization 用户代理的认证信息(证书值),“Basic dWVub3NlbjpwYNzd==”
Expect 期望涌现的某种特定行为,缺点时返回“417 Expectation Failed”,“100-continue”
From 用户的电子邮箱地址,为了显示搜索引擎等用户代理卖力人的联系办法,“info@ha.com”
Host 要求的资源所处的互联网主机名和端口号,必须包含在要求头中,“www.hh.com”
If-Match 条件要求,只有当If-Match字段值与ETag匹配才会接管要求,否则返回“412 Precondition Failed”
If-Modified-Since 若字段值早于资源的更新韶光(Last-Modified),资源未更新,返回“304 Not Modified”
If-None-Match 与If-Match相反
If-Range 字段值和要求资源的ETag或韶光同等时,作为范围要求处理,反之,返回全体资源
If-Unmodified-Since 与If-Modified-Since浸染相反
Max-Forwards 以十进制整数形式指定可经由的做事器最大数目。做事器转发一次,减少1,当为0就不进行转发
Proxy-Authorization 吸收从代理做事器发来的认证质询时,发送此字段,奉告做事器认证所须要的信息
Range 只需获取部分资源的范围要求,“5001-10000”从5001字节到10000字节的资源。
Referer 要求的原始资源的URI,也便是上一页
TE 客户端能够处理相应的传输编码办法及相对优先级,还可指定Trailer字段分块传输编码的办法。“gzip,deflate;q=0.5”
User-Agent 创建要求的浏览器和用户代理名称等信息
HTTP应答头域:
Accpet-Ranges 奉告客户端做事器是否能处理范围要求,以指定获取做事器端某个部分的资源。“bytes”
Age 源做事器在多久前创建了相应,字段值单位为秒
ETag 客户端实体标识,一种可以将资源以字符串形式做唯一标识的办法
Location 将相应吸收方勾引至某个与要求URI位置不同的资源,会配置3xx:Redirection的相应
Proxy-Authenticate 由代理做事器所哀求的认证信息发送给客户端
Retry-After 奉告客户端该当在多久(秒数或详细日期)之后再次发送要求,紧张合营“503 Service Unavailable”或“3xx Redirect”。
Server 当前做事器上安装的HTTP做事器运用程序的信息,包括版本号等。“Apache/2.2.6 (Unix) PHP/5.2.5”
Vary 对缓存进行掌握,设置“Accept-Language”,如果字段值相同,就从缓存返回相应。
WWW-Authenticate HTTP访问认证,奉告客户端适用于访问要求URI所指定资源的认证方案(Basic或Digest)和带参数提示的质询(challenge)
HTTP通用头域:
Cache-Control操作缓存的事情机制,多个指令用“,”分割,“private,max-age=0,no-cache”
Connection掌握不再转发给代理的首部字段与管理持久连接,“keep-alive”
DateHTTP报文的日期和韶光
PragemaHTTP1.1之前的遗留字段,作为向后兼容定义,只用在客户端发送的要求中。“no-cache”
Trailer解释在报文主体后记录了哪些首部字段,可运用在分块编码传输时。在报文末了写了主要信息
Transfer-Encoding传输报文主体时采取的编码办法,分块传输“chunked”
Upgrade检测HTTP协议及其他协议是否可利用更高版本进行通信
Via追踪客户端与做事器之间的要乞降相应报文的传输路径,各个代理做事器会往Via添加自己的做事器信息
Warning奉告用户一些与缓存干系问题的警告
HTTP实体头域:
Allow 奉告客户端能够支持Request-URI指定资源的所有HTTP方法,“GET,HEAD”。当不支持,会返回“405 Method Not Allowed”
Content-Encoding 做事器对实体的主体部分选用的内容编码办法,在不丢失内容的条件下进行压缩。“gzip”
Content-Language 实体主体利用的自然措辞(中文或英文等)
Content-Length 主体部分的大小(单位是byte)
Content-Location 给出与报文主体部分相对应的URI,与Location不同
Content-MD5 一串由MD5算法天生的值,目的在于检讨报文主体在传输过程中是否保持完全,以及确认传输到达
Content-Range 针对范围要求,作为相应返回的实体的哪个部分符合范围要求,单位为byte。“bytes 5001-10000/10000”
Content-Type 实体主体内工具的媒体类型,与Accpet一样,字段值用type/subtype形式赋值。“text/html; charset=UTF-8”
Expires 将资源失落效的日期奉告客户端。当首部字段Cache-Control有指定max-age指令时,优先处理max-age指令
Last-Modified 指明资源终极修正韶光,一样平常来说,这个值便是Request-URI指定资源被修正的韶光
详细信息可以参考MDN的《HTTP Headers》
MIME (Multipurpose Internet Mail Extensions) 是描述内容类型的因特网标准,一种关照客户端其吸收文件的多样性的机制,文件后缀名在网页上并没有明确的意义。
八、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哈希值来校验每一条是否被修改。