计算机网络

最常见的网络分层模型

OSI七层模型

国际标准化组织提出的网络分层模型

  • 应用层: 为计算机用户提供服务
  • 表示层: 数据处理
  • 会话层: 管理应用程序之间的会话
  • 传输层: 为两台主机之间的通信提供通用的数据传输服务
  • 网络层: 路由和寻址
  • 数据链路层: 帧编码和误差纠正控制
  • 物理层: 原始比特流

理论与实践之间的差距,最后让这个分层显得不是很完美,tcp/ip的大受欢迎

osi

TCP/IP四层模型

广泛使用的一种模型,对osi的模型进行一定程度上的精简,分层和对应关系如下:

  • 应用层: 对应会话层、表示层、应用层
  • 传输层: 对应传输层
  • 网络层: 对应网络层
  • 网络接口层: 对应数据链路层、物理层

应用层

  1. 位于传输层之上,是应用之间传输数据的服务,定义了信息交换的格式,并将消息交给下层的传输层来传输
  2. 应用层有许多不同的协议,用于指定不同的传输规范,常见的有: htt、ssh、smtp

传输层

  1. 接受应用层的消息,并负责两台终端之间的消息传输
  2. 主要有两种协议:
    1. tcp: 提供面向连接的,可靠的数据传输服务
    2. udp: 提供无连接的,不保证数据传输的可靠性

网络层

  1. 负责把传输层数据进行分组,并通过网络的路由器找到对应的主机

  2. 常见协议:

    • ip: 网络层最重要的协议之一,IP协议的作用包括寻址规约、定义数据包的格式等等,是网络层信息传输的主力协议。目前IP协议主要分为两种,一种是过去的IPv4,另一种是较新的IPv6,目前这两种协议都在使用,但后者已经被提议来取代前者。
    • arp: ARP协议,全称地址解析协议(Address Resolution Protocol),它解决的是网络层地址和链路层地址之间的转换问题。

    网络接口层

  3. 这层是数据链路层和物理层的合体

  4. 数据链路层的作用: 将网络层传输的ip数据组装成帧,在两个相邻节点上的链路上传送帧。每一帧都包含数据和必要的控制信息

  5. 物理层的作用: 实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异

TCP与UDP

TCP与的UDP区别

TCP UDP
是否面向链接
是否有状态
是否可靠
首部长度 20-60bytes 8bytes
传输效率较慢 较快
是否提供广播或多播

http是基于什么

http3.0之前是基于tcp协议,但是,3.0之后,就是基于UDP的QUIC协议。这个变换是为了解决http/2中存在的头部阻塞问题

使用tcp的协议有哪些?

  1. http2.0
  2. https
  3. ftp
  4. smtp
  5. ssh
  6. telnet

使用UDP的协议有哪些

  1. dhcp
  2. dns

TCP的三次握手和四次挥手

建立链接-三次握手
  1. 一次握手: 客户端发送带有syn(seq=x)标志的数据包给服务器,客户端进入SYC_SEND状态,等待服务端确认
  2. 二次握手: 服务端发送带有syn+ack(seq=x,ack=x+1)标志的数据包给客户端,服务端进入SYN_RECV状态
  3. 三次握手: 客户端发送带有ack(ack=y+1)标志的数据包给服务端,客户端和服务端进入ESTABLISHED状态,完成三次握手。之后就可以正常传输数据了。
为什么要三次握手

最终原因就是了保证发送方与接收方是正常的

  1. 一次握手: 服务端确认了对方是正常的
  2. 二次握手: 客户端确认自己了发送、接受正常,服务端发送、接受正常。服务端确认了对方发送正常,自己接受正常
  3. 三次握手: 客户端确认自己了发送、接受正常,服务端发送、接受正常。服务端确认了自己发送、接受正常,对方也发送、接受正常
断开链接-四次挥手
  1. 第一次挥手: 客户端发送fin(seq=x)标志给服务端,用来关闭客户端到服务端的数据传输。客户端进入fin-wait-1状态
  2. 第二次挥手: 服务端收到客户端fin(seq=x)标志并发送**ack(seq=x+1)**给客户端。服务端进入close-wait状态,客户端进入fin-wait-2状态
  3. 第三次挥手: 服务端关闭与客户的链接,并发送一fin(seq=y)标志的数据包。客户端请求关闭链接,然后,服务端进入last-ack状态
  4. 第四次挥手: 客户端发送ack(seq=y+1)标志的数据包,服务器收到ack(seq=y+1)标志的数据包进入close状态。此时,客户端带动2msl之后没有收到回复,就证明服务端关闭,客户端也关闭链接
2msl
  1. msl: 一个片段在网络中最大的存活时间。2msl就是一个发送和一个回复所需的最大时间。
  2. 服务器如果没有收到ack,就会重新发送fin,然后在等待2msl,之后双方都确认,才会关闭链接
为什么要四次挥手

TCP是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

TCP如何保证传输的可靠性

  1. 基于数据块传输
  2. 对失序数据包重新排序以及去重
  3. 校验和
  4. 超时重传
  5. 流量控制
  6. 拥塞控制

HTTP

HTTP: 超文本传输协议。无状态协议

优点

跨平台、速度快,扩展性强

常见的HTTP状态码

  • 1xx: 信息性状态码,接收的请求正在处理
  • 2xx: 成功状态码,请求正常处理完成
  • 3xx: 重定向状态码
  • 4xx: 客户端错误状态码
  • 5xx: 服务端错误状态码