计算机网络
计算机网络
三次握手 建立连接
- 第一次握手: 客户机TCP 向 服务器 TCP 发送 连接请求报文段
- SYN=1 ACK=0 seq=x
- 第二次握手: 服务器TCP 收到连接请求报文段后,如同意建立连接,就向客户机发回 确认报文段 并为该TCP 连接分配TCP 缓存和变量。
- SYN=ACK=1 ,ack=x+1,seq=y
- 第三次握手: 客户机收到确认报文段,再 向服务器发出确认 ,并给该连接分配 缓存和变量。 该报文可以携带数据
- SYN=ACK=1, seq=x+1,ack=y+1
- 经过三次握手后 建立了全双工通信
- seq 标记数据段的顺序
- ack 期待收到下一个报文段的第一个数据字节的序号
- ACK 确认
- SYN 同步
- FIN 终止
- 三次握手的原因:防止失效的连接请求到达服务器,让服务器错误打开连接,有三次握手之后客户端会忽略服务器之后发送的对滞留连接请求的确认,不进行三次握手
- 三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的
- 第一次握手 服务端确认了 自己接收正常 对方发送正常
- 第二次握手 客户端确认了自己收发正常 对方收发正常
- 第三次我搜 服务端确认了 自己和对方都收发正常
四次挥手 释放连接
- 第一次挥手: 客户机 向 服务器 发送 连接释放报文段 ,停止发送数据,关闭TCP 连接
- FIN=1, seq=u
- 第二次挥手: 服务器 收到 连接释放报文段 后,向客户机发送确认报文段,此时TCP 处于半关闭状态,服务器到客户机方向的连接未关闭。
- ACK=1 ,seq=v ,ack=u+1
- 第三次挥手: 若服务器 没有数据要发送了,向客户机发送 连接释放报文段
- FIN=1 ,ACK=1, seq=w ,ack=u+1
- 第四次挥手: 客户机收到连接释放报文后,发出确认报文段 ,此时连接还未释放,进入TIME_WAIT状态 等待计时器时间结束后(2MSL Maximum Segment Lifetime 2倍的片段最大存活时间)且期间不再收到服务器发来的FIN ,TCP 释放连接;否则将继续向服务器发送ACK
- ACK=1 seq=u+1 ack=w+1
- 出现场景 : 高并发 短连接(连接不持续)
四次挥手的两个原因:
1、确保客户机的最后一个确认报文段能到达。
2、让本次连接产生的所有报文从网络中消失,使得新的连接不会出现旧的连接请求,
出现三次挥手的情况:客户端没有数据要发送了 可以合并ACK FIN 一起发
OSI 协议栈
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
TCP/IP 协议栈
- 应用层 HTTP/FTP/DNS/SMTP 为特定应用程序传输数据
- 传输层 四层交换机 四层路由器 TCP UDP 为进程提供信息传输服务 (port)
- 网络层 路由器 三层交换机 NAT ARP DHCP IP 为主机提供信息传输服务;封装成分组 (添加IP地址)
- 数据链路层 网卡 网桥 PPP HDLC CSMA/CD 为同一链路的主机提供数据传输服务;(封装成帧)
- 物理层 电缆 光纤 尽可能屏蔽传输媒体通信手段的差异 使数据链路层感觉不到差异
ARP协议
- Address Resolution Protocol( 地址解析协议 )
- 通过目标设备的IP地址,查询目标设备的MAC地址(唯一),以保证通信的顺利进行。
TCP 和 IP
- TCP是传输层协议,面向连接,主要为进程提供传输服务,有具体的端口号
- IP是网络层协议,将TCP封装分组,为主机提供信息传输服务,有目标ip地址
TCP 和 UDP 的优劣
TCP 传输控制协议
- TCP 提供面向连接的服务,在传输数据之前必须建立连接,数据传送结束之后要释放连接。
- TCP 提供面向连接的 可靠传输服务
- 适用于可靠的重要场合 如FTP 文件传输协议 HTTP 超文本传输协议 TELENET 远程登录
UDP 用户数据报协议
- UDP 是一个无连接的 非可靠的传输层协议
- 它在IP 的基础上提供两个附加服务: 多路复用 和 对数据的错误检查
- 传输数据的时候 无需建立连接
- 适合实时传输协议 RTP
Http 应用层协议
- http 安全问题:
- 明文通信,内容可能被窃听
- 不验证通信方身份,身份可能被伪装
- 无法验证报文完整性,报文可能被篡改
- https=http+ ssl
- ssl=secure sockets layer 使用隧道进行通信
- https 具有加密(防窃听),认证(防伪装),完整性保护(防篡改)
-
加密
- 对称密钥加密RSA:加密解密同一密钥 运算速度快 但无法将密钥安全的传输给对方
- 非对称密钥加密: 加密和解密使用不同的密钥 公钥和私钥 安全的传递公钥 再用私钥解密,但运算速度慢
- https使用的是对称密钥与非对称密钥混合加密的形式,使用非对称加密方式传递 对称密钥方式所需要的secret key保证了安全性;双方都有secret key时 就可以使用对称加密方式进行通信 保证了效率
-
认证
- 数字证书认定机构CA: 对通信双方进行认证
-
完整性保护
- ssl 通过报文摘要功能进行完整性保护
从浏览器输入url 到页面显示
- 浏览器将url交给DNS做域名解析 找到真实的IP地址 向服务器发起请求
- 服务器接收请求 返回数据,浏览器接收数据
- 浏览器对接收到的数据进行解析,渲染页面
略详细版本
-
浏览器地址栏输入URL
-
浏览器查看请求资源是否在缓存中并且新鲜,若有缓存且新鲜则可以直接对缓存的数据进行解析,渲染页面
-
否则,解析URL获取协议、主机、端口等并组装一个http get请求报文
-
接着获取主机的ip地址,先在缓存中看是否缓存在该域名的ip地址,若无用DNS做域名解析
-
建立TCP链接 发送HTTP请求
-
服务器收到HTTP请求后 做查询等操作 将响应报文通过TCP连接 返回给浏览器
-
浏览器接收到HTTP响应后,可以关闭TCP或保留TCP重用
-
浏览器对接收到的数据进行解析 渲染
-
HTTP是无状态协议 需要cookies和section 缓存状态
HTTP 状态码
- 200 请求成功
- 301 资源被转移到其他URL
- 404 请求资源不存在
- 500 内部服务器错误