3000字长文预警~html
做为科班生,先分享我在OS课堂上听过的,印象最深的的说法:进程是资源分配的最小单位;线程是任务调度的最小单位。算法
个人理解是:OSI 是更偏重于规范性的体系结构,而 TCP/IP 则是目前网络环境中的最佳实践。浏览器
实际上在本科的课本中是抽象为五层模型来说的:缓存
应用层(应用层+表示层+会话层)=> 传输层=> 网络层=> 链路层=> 物理层安全
可见具体的分层方式并非关键,关键的是上图中间列对应的重要功能是否获得了实现。服务器
这是每一个本科老师都很是擅长讲的故事。当时听课的我并无因这个故事而很快理解计算机网络的基本运做,但时至今日,这个例子却很好地指导了我对于计算机网络的理解。网络
DNS的查询方式分为两种:迭代 / 递归;多线程
HTTPS (http secure)= HTTP + 混合加密 + 权威认证 + 完整性保证架构
因为网络中对于HTTPS的详尽介绍很是丰富,此处不进行详细地叙述了,直接奔向结论。并发
网络上包含两种说法(3个随机数生成密钥 or 2个随机数生成密钥),但大同小异,都采用了对称加密+非对称加密的方式:
面向链接,可靠的传输层协议。
三次握手过程:
Client与Server都明确自身的发送和接受能力正常,须要肯定对方的发送和接收能力。
Server确认Client的发送能力正常:Client发送了SYN报文。
Client确认Server的发送和接收能力正常:由于Server正确地接收并响应了Client。
Server确认Client的接收能力正常:Server接收到了Client的ACK。
假设舍弃最后一次握手,则Server端没法明确Client的接收能力是否正常。
四次挥手过程:
FIN=1,seq=x
AKC=1,seq=y,ack=x+1
期间Server能够继续向Client发送数据,此时处于TCP的半链接状态;
Client还须要继续监听Server发送来的报文。
FIN=1,seq=z,ack=x+1
ACK=1,seq=x+1,ack=z+1
。同时等待2MSL,若此期间没有接收到报文,则TCP链接顺利断开。这是由于服务端在LISTEN(监听)状态下,收到创建链接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭链接时,当收到对方的FIN报文时,仅仅表示对方再也不发送数据了可是还能接收数据,己方是否如今关闭发送数据通道,须要上层应用来决定,所以,己方ACK和FIN通常都会分开发送。
为何要等待2MSL?
由浏览器判断地址栏中的字符串是否符合url命名规则。若不符合则将该字符串交由搜索引擎处理;若合理则进入第二步。
GET url HTTP/1.1
主进程将该报文经过IPC交给网络进程处理。
若浏览器曾经请求过该资源且资源并未过时,则网络进程将缓存文件返回并拦截HTTP请求。若查找缓存未命中,则进入第4步。
详情见第二关DNS;
获得的ip最终返回到浏览器的网络进程中。
Chrome浏览器有对于TCP链接的限制(同个域名最多维持6个TCP链接),若超过6个则须要放入TCP队列中等待。
详情见上文HTTPS相关内容。
详情见第四关TCP协议
一次除去以太网头和IP头部,提交到传输层
若须要重定向则返回301(永久重定向)或302(暂时重定向)状态码,并在响应报文首部Location字段写入重定向的地址。
若为更新返回304状态码,表示资源未更新。
若须要浏览器更新,则设定cache-control:max-age=2000(以2000秒为例)
过程与上述无异。
查看是否处于长链接
这部份内容十分复杂(包括了浏览器的渲染过程和 Javascript的执行机制)
请看下次博客分享~