OSI分层
- 物理层
- 数据链路层
- 网络层
- 传输层
- 会话层
- 表示层
- 应用层
浏览器输入url到页面展示过程
- DNS解析域名得到服务器ip地址
- TCP三次握手
- 第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)
- 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手;
- TCP四次挥手
- 第一次挥手:Client发送一个FIN,Seq=K,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态;
- 第二次挥手:Server收到FIN后,发送一个ACK(K+1)给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态;
- 第三次挥手:Server发送一个FIN,Seq=L,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态;
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK(L+1)给Server,确认序号为收到序号+1,
Server进入CLOSED状态,完成四次挥手;
- 客户端发送http请求
- 服务器响应请求
- 客户端渲染页面
传输层
传输层协议主要包括tcp和udp协议,tcp协议和udp协议区别如下:
- udp传输速度比tcp快
- TCP连接/如打电话
- UDP无连接/高速传输/实时性较高/微信发送消息
- tcp比udp安全可靠
- TCP可靠/无差错/不丢失/不重复/如校验、滑动窗口
- UDP不可靠/尽最大努力交付/会丢包
- 连接数量
- TCP只支持一对一连接
- UDP支持一对一/一对多/多对多连接/如微信群发