TCP是面向连接的、可靠的,基于字节流的传输层通信协议
将应用层的数据流分割成报文段并发送给目标节点的TCP层
数据包都有序号,对方收到则发送ACK确认,未收到则进行重传
使用校验和来检验数据在传输过程中是否有损失
SYN:同步序号,用于建立连接
3. 三次握手,握手为了你我之间的联系
第一次握手:建立连接时,用户端发送SYN包到服务器,等待服务器确认
第二次握手:服务器收到SYN包,必须确认客户的SYN,同时发送SYN+ACK包给客户端
第三次握手:客户端收到SYN+ACK包后,向服务器发送确认包ACK,此包发送完毕,服务器接收,进入连接状态
3.1 为什么需要三次握手才能建立连接?
为了初始化Sequence Number的初始值,如图上的seq,要进行互相通知,作为以后数据通信的序号,保证以后传输的数据正确性,防止乱序
3.2 建立连接后,client出现故障怎么办?
由服务器向客户端发送保活探测报文,如果未收到响应则继续发送,直到达到保活探测次数仍未收到回应,则会中断连接
第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传输
第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认需要为收到的序号+1
第三次挥手:服务器发送一个FIN,用来关闭服务器到客户端的数据传输
第四次挥手:客户端在收到服务器发送的FIN后,发送一个ACK给服务器,确认序号为收到的序号+1,与服务器的连接进入关闭状态,完成四次挥手
4.1 为什么第四次挥手后,客户端再等待2MSL才能关闭连接?
确保有足够的时间让服务器收到ACK包
4.2 为什么四次挥手才能断开连接?
因为客户端和服务器是全双工通信,发送方和接收方都需要发送FIN包和接受ACK包才能断开连接,由一端先发起断开连接的请求,所以看起来像四次挥手。
全双工通信:又称为双向同时通信,即通信的双方可以同时发送和接收信息的信息交互方式。
面向非连接,不维护连接状态,支持同时向多个客户端传输相同的信息
数据包报头只有8字节,额外开销较小,
吞吐量只受限于数据生成速率,传输速率以及计算机的性能
尽最大努力交付,不保证数据的可达
面向报文,不对应用程序提交的报文信息进行拆分或者合并
面向连接VS面向无连接
可靠性VS不保证可靠性
数据有序性VS数据无序性
速度慢VS速度快(UDP应用于视频、广播等)
RTT:发送一个数据包到收到一个ACK所需的时间
TCP利用滑动窗口实现流量控制,并保证TCP的可靠性
在窗口较大,又出现报文段丢失的情况下,同一个序号的确认应答将会被重复不断地返回(比如第数据丢失,那么接受端会不断地返回下一个数据是1001的应答),而发送端主机接收到连续3次同一个应答,就会对其进行重发。
如果接收端将本该接收到的数据丢弃的话,就会引起重发机制,从而导致流量的浪费。接收端向发送端主机通知自己能够接收数据的大小,于是发送端会发送不超过该数据大小的数据。该数据大小限度就是窗口的大小,是由接收端主机决定的。TCP首部报文中包含窗口大小的数据。
无状态,对事务处理没有记录
7.2 请求和响应的步骤
客户端连接到web服务器
服务器接收请求并返回http响应
客户端浏览器解析HTML内容
7.3 在浏览器输入URL地址,按下回车键之后发生了什么?
DNS解析(将对应的地址解析为IP地址)
TCP连接(三次握手)
服务器处理请求并返回HTTP报文
403 Forbidden:服务器收到请求,但是拒绝访问
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
Http报文层面:Get请求放在URL地址上;Post放在报文体内
数据库层面:Get是查询操作;Post会改变数据库的数据
Get可以被缓存,被存储;Post不能
是由服务器发给客户端的特殊信息,以文本的形式存放在客户端
客户端再次请求的时候,会把Cookie回发
服务器接收到后,会解析Cookie生成相应的内容
服务器端的机制,在服务器上保存信息
解析客户端请求并依据Session Id返回信息
Cookie数据存放在客户端的浏览器上,Session数据存放在服务器上
(若考虑减轻服务器负担,应当使用Cookie)
为网络通信提供安全及数据完整性的一种安全协议
是操作系统对外的API,SSL3.0后更名为TLS
身份验证和数据加密,保证网络通信的安全和数据的完整性
对称加密:加密和解密都使用同一个密钥
非对称加密:加密和解密使用不同的密钥(公钥和私钥,安全,但是效率低)
哈希算法:将任意长度的信息转换为固定长度的值,算法不可逆转
数字签名:证明某个消息和文件是某人发出的/认同的
浏览器将支持的加密算法发送给服务器
服务器选择一套浏览器支持的加密算法,以证书的形式发给浏览器
浏览器验证证书的合法性,并结合证书公钥加密信息发送给服务器
服务器使用私钥解密信息,验证哈希,加密相应消息后回发浏览器
浏览器解密相应消息,并对消息进行验证,之后进行加密加护数据
连接方式不同,HTTPS默认使用443端口,HTTP使用80端口
浏览器默认填充http://,请求需要进行跳转,有被劫持的风险