计算机知识图谱——计算机网络

计算机 ==>> 计算机网络

计算机网络

OSI七层网络体系

应用层

HTTP、FTP、DNS

为用户的应用进程提供网络通信服务

HTTP

cookie:服务器给客户端发送了一些状态信息,信息以后某种加密形式存储在Cookie中,借此维护用户跟服务器会话中的状态。

表示层

ASCII、SSL

数据的编码, 压缩和解压缩, 数据的加密和解密

会话层

RPC、SSL

用户应用程序和网络之间的接口, 负责在网络中的两节点之间的建立、维持和终止通信

传输层

TCP、UDP

源端与目的端之间提供可靠的透明数据传输,传输层协议为不同主机上运行的进程提供逻辑通信

TCP

三次握手

  1. client(SYN_SEND) ——SYN——> server

  2. client <——ACK SYN—— server(SYN_RCVD)

  3. clinet(ESTABLISHED) ——ACK——> server(ESTABLISHED)

四次挥手

  1. client(FINWAIT_1) ——FIN——> server

  2. client <——ACK—— server(CLOSEWAIT)

  3. client(TIME_WAIT) <——FIN—— server(LAST_ACK)

  4. client ——ACK——> server(CLOSED) ……TIMEWAIT FINISH……client(CLOSED)

TCP如何保证可靠性?

  1. 通过序列号和确认应答信号确保了数据不会重复发送和重复接收。

  2. 同时通过超时重发控制保证即使数据包在传输过程中丢失,也能重发保持数据完整。

  3. 通过三次握手,四次挥手建立和关闭连接的连接管理保证了端对端的通信可靠性。

  4. TCP还使用了滑动窗口控制提高了数据传输效率。

  5. 在数据传输的过程中,将发送的数据段都当做一个16位的整数。将这些整数加起来。并且前面的进位不能丢弃,补在后面,最后取反,得到校验和。

TCP拥塞控制如何实现?

  1. 拥塞窗口是任何时刻内确定能被发送出去的字节数的控制因素之一,是阻止发送方至接收方之间的链路变得拥塞的手段。

  2. 慢启动:初始启动时不完全的指数增长,达到慢启动的阈值后线性增长,出现丢失则降低速率。

网络层

IP、路由器

将网络地址翻译成对应的物理地址, 并通过路由选择算法选择最适当的路径,网络层协议为不同主机提供逻辑通信

数据链路层

MAC、网桥、交换机

通过差错控制、流量控制的方法, 使有差错的物理线路变为无差错的数据链路

物理层

中继器、集线器

实现了相邻计算机节点之间比特流的透明传送

一次HTTP请求

  1. HOST寻址。即通过 hosts 或者 DNS 查找主机名对应的 IP 地址。
  • 查找系统的 hosts 中配置的 DNS 映射

  • 查找系统自身的 DNS 缓存

  • 查找路由器中的 DNS 缓存

  • 查找 IPS 的 DNS 缓存

  1. IP寻址。通过 ARP 寻址查找主机对应的 MAC 地址。

  2. 建立TCP连接。

  • 客户端发送SYN, seq=x,进入 SYN_SEND 状态

  • 服务端回应SYN, ACK, seq=y, ack=x+1,进入 SYN_RCVD 状态

  • 客户端回应ACK, seq=x+1, ack=y+1,进入 ESTABLISHED 状态,服务端收到后进入 ESTABLISHED 状态

  1. 进行数据传输。
  • 客户端发送ACK, seq=x+1, ack=y+1, len=m

  • 服务端回应ACK, seq=y+1, ack=x+m+1, len=n

  • 客户端回应ACK, seq=x+m+1, ack=y+n+1

  1. 断开TCP连接。
  • 主机 A 发送FIN, ACK, seq=x+m+1, ack=y+n+1,进入 FINWAIT_1 状态

  • 主机 B 回应ACK, seq=y+n+1, ack=x+m+1,进入 CLOSEWAIT 状态,主机 A 收到后 进入 FINWAIT_2 状态

  • 主机 B 发送FIN, ACK, seq=y+n+1, ack=x+m+1,进入 LAST_ACK 状态

  • 主机 A 回应ACk, seq=x+m+1, ack=y+n+1,进入 TIME_WAIT 状态,等待主机 B 可能要求重传 ACK 包,主机 B 收到后关闭连接,进入 CLOSED 状态或者要求主机 A 重传 ACK,客户端在一定的时间内没收到主机 B 重传 ACK 包的要求后,断开连接进入 CLOSED 状态

  1. 基于 Socket 模拟了 HTTP 请求。

HTTP请求包括URL、请求头、包体,HTTP响应包括状态码、响应头、包体。

状态码段: 200段表示请求成功、300段表示重定向、400段表示客户端错误、500段表示服务端错误。

常见的头: Accept表示期望服务端返回的类型、Content-Type表示本次客户端请求的类型、Connection是否关闭连接、Content-Length表示内容的长度、Cookie服务端用来标记客户端。