计算机 ==>> 计算机网络
计算机网络
OSI七层网络体系
应用层
HTTP、FTP、DNS
为用户的应用进程提供网络通信服务
HTTP
cookie:服务器给客户端发送了一些状态信息,信息以后某种加密形式存储在Cookie中,借此维护用户跟服务器会话中的状态。
表示层
ASCII、SSL
数据的编码, 压缩和解压缩, 数据的加密和解密
会话层
RPC、SSL
用户应用程序和网络之间的接口, 负责在网络中的两节点之间的建立、维持和终止通信
传输层
TCP、UDP
源端与目的端之间提供可靠的透明数据传输,传输层协议为不同主机上运行的进程提供逻辑通信
TCP
三次握手
client(SYN_SEND) ——SYN——> server
client <——ACK SYN—— server(SYN_RCVD)
clinet(ESTABLISHED) ——ACK——> server(ESTABLISHED)
四次挥手
client(FINWAIT_1) ——FIN——> server
client <——ACK—— server(CLOSEWAIT)
client(TIME_WAIT) <——FIN—— server(LAST_ACK)
client ——ACK——> server(CLOSED) ……TIMEWAIT FINISH……client(CLOSED)
TCP如何保证可靠性?
通过序列号和确认应答信号确保了数据不会重复发送和重复接收。
同时通过超时重发控制保证即使数据包在传输过程中丢失,也能重发保持数据完整。
通过三次握手,四次挥手建立和关闭连接的连接管理保证了端对端的通信可靠性。
TCP还使用了滑动窗口控制提高了数据传输效率。
在数据传输的过程中,将发送的数据段都当做一个16位的整数。将这些整数加起来。并且前面的进位不能丢弃,补在后面,最后取反,得到校验和。
TCP拥塞控制如何实现?
拥塞窗口是任何时刻内确定能被发送出去的字节数的控制因素之一,是阻止发送方至接收方之间的链路变得拥塞的手段。
慢启动:初始启动时不完全的指数增长,达到慢启动的阈值后线性增长,出现丢失则降低速率。
网络层
IP、路由器
将网络地址翻译成对应的物理地址, 并通过路由选择算法选择最适当的路径,网络层协议为不同主机提供逻辑通信
数据链路层
MAC、网桥、交换机
通过差错控制、流量控制的方法, 使有差错的物理线路变为无差错的数据链路
物理层
中继器、集线器
实现了相邻计算机节点之间比特流的透明传送
一次HTTP请求
- HOST寻址。即通过 hosts 或者 DNS 查找主机名对应的 IP 地址。
查找系统的 hosts 中配置的 DNS 映射
查找系统自身的 DNS 缓存
查找路由器中的 DNS 缓存
查找 IPS 的 DNS 缓存
IP寻址。通过 ARP 寻址查找主机对应的 MAC 地址。
建立TCP连接。
客户端发送SYN, seq=x,进入 SYN_SEND 状态
服务端回应SYN, ACK, seq=y, ack=x+1,进入 SYN_RCVD 状态
客户端回应ACK, seq=x+1, ack=y+1,进入 ESTABLISHED 状态,服务端收到后进入 ESTABLISHED 状态
- 进行数据传输。
客户端发送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
- 断开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 状态
- 基于 Socket 模拟了 HTTP 请求。
HTTP请求包括URL、请求头、包体,HTTP响应包括状态码、响应头、包体。
状态码段: 200段表示请求成功、300段表示重定向、400段表示客户端错误、500段表示服务端错误。
常见的头: Accept表示期望服务端返回的类型、Content-Type表示本次客户端请求的类型、Connection是否关闭连接、Content-Length表示内容的长度、Cookie服务端用来标记客户端。