蛮早以前扫过一遍这个图片生动形象的《图解HTTP》一书。前段时间开始捣鼓Python,看别人写的爬虫,什么请求头都看不懂。。所以又看了一遍。为方便以后复习,摘一些我认为的重点出来。
什么是HTTP
HTTP(HyperText Transfer Protocol,超文本传输协议)是Web用来完成从客户端到服务器等一系列运作流程的协议。HTTP是Web通信的基础。
其实也就是可以理解为,HTTP其实就是一个约定好的通信协议,HTTP一开始只是一种简单的协议,随着技术的发展,需要携带的信息也越来越复杂,就衍生出许多种基于HTTP的附加协议来达成需求。但是基础都是HTTP。
TCP/IP
通常使用的网络(包括互联网)实在TCP/IP协议族的基础上运作的,所以说TCP/IP是网络基础。HTTP是属于他的一个子集。
还有不是基于TCP/IP的网络?
TCP/IP的作用其实就相当于人的语言,不同设备通过互联网交流信息,必须基于相同的方法来传输信息,这个方法一般称为协议(protocol)。
TCP/IP的分层管理
TCP/IP协议族按层次可以分为以下4层:应用层、传输层、网络层、数据链路层。
分层其实就是一个封装思想的体现,各个层实现并完成不同的功能,再传输给其他层,各层之间相对独立,需要替换掉某一层不需要整体替换,只需要实现该层应实现的功能即可。
#######应用层
应用层决定了向用户提供服务时通信的活动。TCP/IP协议族内预存了各类通信的应用服务,比如FTP和DNS。HTTP也处于该层。
#######传输层
#######网络层
#######链路层
TCP/IP通信传输流
通信流简单来说就是,为了保证数据的送达,发送端经过四层封装,接收端通过四层解析,最终得到消息本体。
书里以HTTP举了个栗子。
这里我觉得需要记一下经过各层之后的数据名称,HTTP报文-->TCP首部-->IP数据包-->网络架构。发送到网络上的数据包形式从外往内分别是以太网首部、IP首部、TCP首部、HTTP报文。
这种处理方式其实可以理解成古代的飞鸽传书。家书内容是HTTP报文,写在纸上是TCP首部,包上信封写上邮编啊地址啊(绑鸽子上那叫啥?)是IP首部,绑上对应的🕊啦送给对应的邮差是以太网首部。(虽然比喻不太合适,这样就好记多了。)
IP、TCP、DNS
#######IP
按层次分,IP(Internet Protocol)网际协议,属于网络层。
路由选择机制(routing),在到达通信目标前,网络设备只能知道粗略的传输设备。
虽然还是不明白为什么会有这样的机制产生。。后续再看?
大概理由是因为封装了多层,只有到对应位置解开封装之后才能知道??而且本身协议太过简单?
#######TCP
TCP位于传输层,提供可靠的字节服务,确保可靠性。
##########TCP的三次握手(three-way handshaking)
三次握手可以拆分这样三次:
1.发送端发送出带有SYN标识的数据包给接收端
2.接收端收到并返回带有SYN/ACK标识的数据包给发送端以传达收到消息。
3.发送端收到后,再传回ACK标识的数据包给接收端,表示知道送达了,握手结束。
如果握手过程中莫名中断失败了,发送端重启握手顺序发送数据。
说白了三次握手的方式其实就是发送端和接收端玩一个“间谍游戏”,发送端发出自己能是别的标识数据,接收端收到之后将发送来的标识和自己的标识发给发送端,发送端收到接收到的消息,识别到自己的标识,说明接收端确实收到了,然后再把接收端的标识单独发回去。两端其实都不需要知道对方的标识是什么意思,哪怕是一个shit,不用解析反正就是反手发回去就行。(至于是不是真的不需要解析,我还不知道。
TCP不止三次握手这种可靠性手段,应该还有其他手段,后续去了解。
#######DNS
DNS位于应用层,用于域名到IP地址之间的解析。
URI和URL区别?
URI是某个协议方案表示的资源定位标识符,用字符串标识某一互联网资源。
URL是统一资源定位符,用字符串表示资源的地点。
第二章HTTP
两台计算机使用HTTP进行通信时,必有客户端和服务端。发送请求为客户端,响应请求为服务端。
HTTP是有请求才会有响应,那么即时通信类的是怎么一个原理呢?肯定不是HTTP。socket的原理啦什么的后续去看看。
写到这里发现关于HTTP的需要多看几遍才能写的有条理。。先放着。。再多看几遍🤦♀️