HTTP封包
讲起网络,不免还是从OSI七层开始讲起
OSI七层协议从下到上分别为
实体层(Physical Layer),数据链结层(Data Link Layer),网络层(Network Layer),传输层(Transport Layer),会谈层(Session Layer),展现层(Presentation Layer),应用层(Application Layer)
在这里,我们只要管 TCP HTTP 在哪一层就行了
对应到我们抓到的HTTP封包
第一行,是个概览,这个封包总共收到几个Frame(讯框)等等
第二行,就是我们收到的Frame(讯框),可以看到我们用Ethernet协议传送,里面记录着最后传和目标传到的Mac地址....等等
第三行,就是TCP/IP中的IP协议(Internet Protocol),纪录着来源和目目标IP等等信息
第四行,Transmission Control Protocol缩写就是TCP协议啦,HTTP连线也是基于TCP协议的,可以看到来源和目的的port(连接埠)号
第五行,就是HTTP协议(Hypertext Transfer Protocol)啦
这里有展开,可以看到完整的HTTP标头,一个HTTP连线原来附着这么多的信息,也是等下要讲的重客人
第六行,没甚么特别的,就只是网页源代码
封包和传送原理
封包大概是这样子的
从程序的眼光来看好了,软件要送个数据到另一台电脑
除了 实体层(Physical Layer) 之外
会依序从上往下包
每往下一层就加一些东西上去,到别人的电脑也是这样,一层层拿掉标签
最后得到数据
HTTP(应用层)也是如此,HTTP是基于TCP(传输层)的
在连线的时候也是如此
要先有TCP先连线才会可以跑HTTP的协议
先解释TCP
看到一堆红线了吗
分成前三组和后三组
前三组,就是出名的三向交握 (3-way handshake 也有人翻译三次握手)
(天音:甚么三向交握都看拢无)
看英文比中文意思比较准,意思就是 握手寒暄 啦
请设想一个情况,想你打skype给朋友
刚接起来网络欠人打的时候有没有遇到这样的情况
[SYN] 我: 哈噜, 有没有听到声音?
[SYN, ACK] A: 有听到,那我呢?有没有听到声音
[ACK] 我: 有滴~
(.......然后开始聊天,喔不是,是传数据= =")
没错,三向交握就这么简单
标签看起来很复杂而已
另外这组
[FIN, ACK]
[ACK]
是四向交握协议Four-way Handshake,用来关闭连线的
引用一下文章的内容
1. (B) --> ACK/FIN --> (A)
2. (B) <-- ACK <-- (A)
3. (B) <-- ACK/FIN <-- (A)
4. (B) --> ACK --> (A)
理当要有四个,为何只有二个?我想是Keep-Alive的关系
所以连线没有断,保持连线,若有其他的要求就可以马上继续连线
而不用重新建立连线
HTTP标头
HTTP标头里面有很多信息,像是Server的信息,很明显是跟Apache做连线
这里也很清楚看到中间有Set-Coookie: 和PHPSESSID就是Session的ID啦
当Server使用Session时
虽然Session的数据是放在Server上没错〈Client看不到〉
为了分辨这个是那个Client连来的
所以会放一个Session ID给Client
(像是你去寄放物品的柜台寄放东西,柜台会交给你一把钥匙一样)
用钥匙认顾客
而且这个Session ID会随着你的连线,在下次要求的时候,放在标头里面
一起发送给Server
而在网页设计当中,Session往往都考试不及格成会员登陆等依据
当你在清理Cookie的时候,Session ID也一起被你清掉了
也理所当然的被登出了
但Session使用上有些限制
1. 他只能在同一个域名字下使用,不能跨域
2. Client端要开启Cookie (当然这项,一般的浏览器通常都是开启的)
3. 通常Session和Cookie一样,有Expires(失效时间)的
所以Facebook的认证上考虑到这些限制,才会采用OAuth 2.0
就是模拟Session的原理,只是把Session ID变成token的方式,用HTTP最简单的GET方式
挂在网址串上面,以做身分的识别
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
看看吧,大家都会支持你
我反复看了多遍,好文,得支持