计算机网络
GPT摘要
这篇文章主要介绍了计算机网络通信的基础概念和技术原理,涵盖从物理层到应用层的各个层级,以及数据传输的相关机制。 1. 网络分层结构:从物理层(比特传输)、数据链路层(帧组装)、网络层(数据包路由)、传输层(可靠数据传输)到会话层、表示层和应用层(协议数据处理),逐层解释其功能和作用。 2. 数据传输机制: - HUB与交换机:HUB采用广播方式发送数据,半双工工作;交换机通过MAC地址表定向转发数据,支持全双工。 - MAC地址与IP路由:数据包传递过程中,IP地址不变,而MAC地址会根据不同网络节点(交换机、路由器)动态变化。 - ARP协议:负责IP地址到MAC地址的转换,使用缓存优化查询效率。 - 差错检测(CRC)、可靠传输(ARQ协议)及流量控制(滑动窗口、超时重传)。 3. 网络互联与路由: - 路由器负责不同子网间的数据转发,路由表包含目标网络、子网掩码、下一跳和接口信息。 - RIP协议(基于距离向量)和OSPF协议(基于链路状态)分别用于构建和优化路由表。 4. TCP/IP关键机制: - 三次握手(建立连接)和四次挥手(终止连接)确保通信可靠性。 - 拥塞控制(慢启动、拥塞避免、快重传、快恢复)和流量管理(接收窗口调节发送速度)。 5. 应用层协议:HTTP(TCP/80)、HTTPS(TCP/443,加密+认证)、DNS(UDP/53)、SMTP(TCP/25)等,对比TCP(可靠)与UDP(高效)的适用场景。 6. HTTPS安全机制:结合非对称加密(证书验证服务器身份)和对称加密(数据传输),依赖CA机构确保公钥真实性。 7. Web请求流程:DNS解析、TCP连接、HTTP请求、服务器处理、资源加载和页面渲染,涉及状态码(2xx成功、3xx重定向、4xx客户端错误、5xx服务器错误)的应用。 整体围绕网络架构、通信协议、路由优化及安全传输展开,系统梳理了数据从传输到应用的关键技术点。
层次结构
MAC首部 + IP首部 + TCP首部 + TCP数据
物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
数据链路层:将比特组装成帧和点到点的传递(帧Frame)
网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
会话层:建立、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

数据链路层
多台机器如何传输: 数据要有标识来源MAC地址(from to)
- HUB集线器:直接转发给全部机器,不能同时发送,需要CSMA/CD,半双工
- 交换机:有一张MAC地址和端口的表(自学习),定向转发。通过网线可以实现全双工
CSMA/CD
多址接入、载波监听、碰撞检测
往返时间为2t,每个数据包要大于2t发送时间(最短有效帧长)。所有小于等于2t的都丢弃。
1KM往返10us;10Mbit/s ,512bit(64B)最短帧长,总线不能超过5120m。考虑衰减:2500m
648/10^7^ >= 5120 * 2 / 210^8^
1 | |
ARP : IP-》MAC
差错检验: CRC
可靠传输:ARQ停止等待、回退N帧(可以发多个)、选择重传(可以不按序接收)
网络层
设备太多了交换机的表记录不下来。通过路由器构建多个网络间的连接,一个路由器有多个接口(ip)对应多个子网
通信方式
- 子网间通信:发给默认网关。由某路由器根据路由表转发
- 同一子网通信:直接通过交换机
路由表:目的网络地址、子网掩码、下一跳(下一个路由表ip地址)、接口
我想访问IP通过子网掩码后,如果于路由表的目的网络地址对应上了,则转发到下一跳
路由表如何构建: 单个目标网络可能有多个路径,如何选取最优
- RIP(小型网络)。额外维护一个距离信息。每30s邻居向自己发送(可达地址+距离),如果距离更短则更新下一条和距离。坏消息传得慢
- OSPF。每个路由搜集全部路由联络信息LSA,构建LSDB(Link State DataBase)掌握全网的拓扑结构,然后构建权重有向图,再计算最短路径
传输过程中,IP地址(4*8 )不变,但MAC地址一直在变
NAT:内网访问外网,分配临时IP
传输层
应用间通信
端口区分应用:FTP 21、TELNET 23、 SMTP 25、 DNS 53、 HTTP 80、 HTTPS 443
TCP可靠传输:发送需要确认 (滑动窗口)、超时重传
- TCP有拥塞控制机制,UDP没有。网络出现的拥塞不会使源主机的发送速率降低,这对某些实时应用是很重要的,比如媒体通信,游戏;
- 对某些实时性要求比较高的情况,选择UDP,比如游戏,媒体通信,实时视频流(直播),即使出现传输错误也可以容忍;其它大部分情况下,HTTP都是用TCP,因为要求传输的内容可靠,不出现丢失
建立连接
三次握手:防止假如a发了两次请求,第一次以为失败了,而b接受了两次请求,第二次一直在等a浪费时间。

四次挥手:1 a发出关闭请求,2 b发出响应确认,并半关闭状态不断发送信息, 3 最后发送关闭请求。a确认关闭请求

可靠传输
可靠传输通过发送需要确认(确认序号)和超时重传来实现,为提高效率使用滑动窗口
- 滑动窗口:以发送但未确认的最大字节数。接收方接受窗口如果接受到无序的数据先缓存
- 超时重传: 指数加权移动RTT,不考虑超时重传的报文
流量拥塞控制
流量控制: 不断回发接收方的窗口大小
拥塞控制(拥塞窗口大小):慢启动(指数)、拥塞避免(线性)、快重传 (3个ack后立即重发)、快恢复(对于快重传情况,拥塞后直接从新门限开始)
发送窗口 = min(接收窗口,拥塞窗口)
应用层
应用 应用层 运输层
电子邮箱 SMTP TCP
远程访问 TELNET TCP
万维网 HTTP TCP
文件传输 FTP TCP
域名解析 DNS UDP
IP电话 专用协议 UDP
问题
ARP协议 (Address Resolution Protocol)
封装成帧时,通过ARP将IP->MAC地址。ARP 高速缓存中有就拿,没有就广播询问
RIP (Routing Information Protocol, 距离矢量路由协议)
维护路由器一张表:目的网络 、距离、下一跳 坏消息传得慢
NAT (Network Address Translation, 网络地址转换)
将内网IP地址转化为临时外网IP地址,保持到NAT转换表中。
HTTP和HTTPS有什么区别?
- 端口不同:HTTP使用的是80端口,HTTPS使用443端口;
- HTTP(超文本传输协议)信息是明文传输,HTTPS运行在SSL(Secure Socket Layer)之上,添加了加密和认证机制,更加安全;
- HTTPS由于加密解密会带来更大的CPU和内存开销;
- 服务器发公钥给浏览器,浏览器随机数(传输密钥)加密后传给浏览器,浏览器再私钥解密得到 传输密钥(
非对称+对称加密、如果只非对称加密,浏览器的数据会被窃取) - 问题:如果中间人用窃取公钥并拦截,并生成自己的公钥发给浏览器,作为中间商,就会出问题
- 如何确定浏览器收到的公钥是服务器给的:(域名、第三方机构、服务器公钥)给CA,CA添加数字签名(内容->hash->私钥加密)后给浏览器。浏览器解密(CA的公钥,浏览器信任的CA机构)看是否和明文hash一致
Session与Cookie的区别?
Session是服务器端保持状态的方案,Cookie是客户端保持状态的方案
保存Sessionid的方式可以采用Cookie,请求时携带。如果禁用了Cookie,可以使用URL重写机制(把会话ID保存在URL中)。
从输入网址到获得页面的过程 (越详细越好)?
- 浏览器查询 DNS,获取IP
- 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;
- TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;
- 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
- 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;
- 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。
HTTP请求有哪些常见状态码?
- 2xx状态码:操作成功。200 OK
- 3xx状态码:重定向。301 永久重定向;302暂时重定向
- 4xx状态码:客户端错误。400 Bad Request;401 Unauthorized;403 Forbidden;404 Not Found;
- 5xx状态码:服务端错误。500服务器内部错误;501服务不可用