32 计算机网络

osi七层协议

  • 应用层 为计算机用户提供服务http
  • 表示层 数据处理,编解码,加密解密,压缩解压缩
  • 会话层 管理应用之间的会话建立,维护重连ssl rpc
  • 传输层 提供主机进程之间通话需要的数据传输服务
  • 网络层 路由和寻址,决定数据在网络的游走路径ip ipv6
  • 数据链路层 管理相邻节点的直接通信
  • 物理层 利用传输介质实现计算机节点之间比特流的传送
四层模型
  • 应用层 = 应用+表示+会话
  • 传输层 = 传输
  • 网络层 = 网络
  • 网络接口层 = 数据链路+ 物理
网络层
  • ARP:地址解析协议,把ip地址解析为硬件地址。
传输层
  • 端到端的通信,是应用进程之间的通信。tcp和udp。
tcp如何保证可靠
  • 应用数据被分割成数据块
  • 给每一个包编号,接收方按序重组,保证有序。
  • 校验和:保持首部和数据的校验和,保证数据未被篡改。
  • 丢弃重复数据
  • 流量控制:接收方来不及处理发送方发送的数据时,可提示发送方降低速率。
    • 可变大小的滑动窗口协议。窗口里面序号表示允许发送的序号,窗口后沿以后表示已经发送且已收到确认,窗口前沿以前表示不允许发送,当收到一个确认,窗口向前移一位。窗口大小字段由接收方控制,在接收方发给发送方的报文里。
  • 拥塞控制:网络阻塞时,减少数据的发送。
    • 拥塞是一个全局过程,涉及所有主机,所有路由器,以及与降低网络传输性有关的所有因素。
    • 发送方维护“拥塞窗口”,发送速率取拥塞窗口和接收窗口之间小的那个。
    • 四种拥塞控制算法
      • 慢开始:初始值为1,每轮次加倍
      • 拥塞避免:每经过一个往返时间窗口加大1
      • 快重传与快恢复:看不懂
  • ARQ协议:automatic repeat reQuest,
    • 停止等待ARQ协议
      • 发完一个分组就停止发送,设计时器等待,等对方确认后再发下一个分组,如果没收到确认就重发。
      • 接收方收到重复分组,说明发送方没有收到上一个确认,此时接收方丢弃重复分组,并再发确认消息。
      • 计时器时间应比数据往返时间稍长一点。
    • 连续ARQ协议
      • 发送方连续发送,接收方收到一堆包之后,把连续的最后一个包编号发回发送方。发送方从最后一个包下一个开始重传。
  • 超时重传:tcp发出一个段后,设定定时器等待对方确认收到,如果没有收到对方确认,重发这个段。
udp特点
无连接,尽最大努力交付,面向报文,无拥塞控制 ,支持一对一,一对多,多对一,多对多,首部开销小,只有四个字段,源端口,目的端口,长度和校验和。
tcp特点
  • 面向连接,一对以,提供可靠交付,全双工通信,面向字节流,首部最少20字节。
  • 发起三次握手的是客户端。但是客户端和服务端都可以发起四次挥手。
socket
tcp用主机的ip地址加上端口号作为tcp连接的端点,这样的端点就叫做套接字socket或插口,套接字用(IP地址:端口号)来表示,每一条tcp连接唯一被通信两端的两个端点所确定。
应用层 DNS(domain name system)
将人类可读域名转化为ip地址
url和uri
URI 统一资源标识符,像身份证一样
URL 统一资源定位符,像家庭住址一样
问题1 访问一个网站大致的过程 1.dns解析
dns(domain name system)域名系统-从域名解析出 IP 地址
先问本地域名服务器,看看缓存里有没 有。
没有就去问根域名服务器。
根域名服务器让去问com域名服务器。
com域名服务器让去问baidu.com域名服务器。
baidu.com域名服务器知道需要的主机地址。
本地域名服务器返回ip,并存入缓存。
dns优化 dns缓存
  • 浏览器缓存
  • 系统缓存(etc/hosts,改host文件梯子)
  • 负载均衡(CDN)
    根据机器负载量、地理位置等返回主机地址
2.tcp连接
3.发送http请求
请求头 可接受的字符串类型,可接受的编码类型,可接受的语言,内容类型(content-type:application/json),cookie,user-agent
响应报文 状态码:1开头:已接收。2开头:成功。3开头:重定向。4开头:客户端错误。5开头:服务端错误。
4.服务器处理请求并返回http报文
5.浏览器解析渲染页面
6.连接结束
7.各层协议的指责
从客户端发送请求开始:
  • http协议 生成针对目标web服务器的http请求报文
  • tcp协议 将http请求报文分割成报文段,把每个报文段可靠地传递给对方
  • ip协议 搜索对方的地址,一边中转一边传送
  • tcp协议 按序号重组接受到的报文段
  • http协议 处理请求的内容
问题2 三次握手和四次挥手 三次握手
32 计算机网络
文章图片

为什么要发送syn和ack?
synchronous建立连接,acknowledgement确认。
第二次发送回syn是为了告诉客户端“我收到的就是你发送的信息”,第三次发送回ack同理。
四次挥手
32 计算机网络
文章图片

注意time-wait阶段会等待两倍最大报文时长才关闭,因为如果服务端没有收到最后一次ack,会重发fin给客户端。
长连接短连接
  • 短连接:每次操作都建立一次连接。
    • 优点:所有存活的连接都是有用的连接。
  • 长链接:保持连接特性。
    • 使用长链接的http协议会在响应头加入connection:keep-alive
    • 如果客户端消失,服务端就会留下一个半开放的链接,服务器会定时、多次向客户端发送探测报文段,检查客户端状态。
    • 优点:省去tcp握手的成本
    • 缺点:半开放的链接需要管理并关闭。
cookie,session,token 【32 计算机网络】cookie用来保存用户信息,在客户端上。
token用来保存用户身份,通过token来证明我就是我。不需要查数据库或缓存。
session用来记录用户状态,在服务端上。
客户端通过cookie记录和携带token,通过token证明我是我,服务端通过session知道“我”是处在某态的。

    推荐阅读