1.网络通信原理与协议分层
- 数据封装与传输:从应用层到物理层,数据经历层层封装。以发送“hello”消息为例,应用层将其构造成应用层数据包,如包含发送者用户id、接收者用户id、消息发送时间、消息正文(如“1234,5678,2025 - 04 - 13 11:06:00,hello;” )。传输层(以UDP为例)在应用层数据包基础上添加UDP报头,形成UDP数据包。网络层添加IP报头,数据链路层添加以太网帧头和帧尾 ,最终在物理层将数据转换为光信号/电信号/电磁波传输 。接收方则是相反的解封装过程,从物理层接收到信号,逐层解析,提取出原始信息。
- 协议分层作用:网络协议分层是为了简化复杂问题。分层后每个协议只负责单一功能,比如应用层负责处理应用相关逻辑,传输层负责端到端的数据传输(如TCP保证可靠传输、UDP面向无连接快速传输 ),网络层负责路径规划(IP协议 ),数据链路层负责相邻节点通信,物理层负责信号传输。各层之间通过接口调用,上层调用下层服务,下层为上层提供支持,实现解耦,便于协议的替换和扩展。
- 五元组:进行一次通信需要源IP、源端口、目的IP、目的端口、协议类型这五个关键信息,类似于现实中寄快递需要发件人地址(源IP)、发件人电话(源端口)、收件人地址(目的IP)、收件人电话(目的端口)以及选择的快递公司(协议类型) 。
2.网络发展历程
- 早期通信与互联网起源:早期通信有有线电报、无线电等方式。互联网起源于上个世纪七十年代左右,最初是为应对冷战时期核战争威胁,设计具有冗余路径的通信网络,确保在部分节点受损时仍能通信 。
- 国内计算机与互联网发展:2000年左右国内计算机开始大规模出现,当时多为单机类游戏,如极品飞车、模拟人生等。2003年左右网吧兴起,出现局域网对战游戏,如星际争霸、流星蝴蝶剑、魔兽争霸、CS等 。后来随着网络发展,出现网游,如传奇是网游开山之作,盛大在当时是知名游戏公司,腾讯也在游戏领域不断发展,推出CF、QQ飞车、DNF、LOL等游戏 。2007年乔布斯发布苹果手机,开启移动互联网时代,2011年左右iPhone 4发布,Android系统崛起,带动移动应用发展,程序员薪资也随着移动开发需求增加而提高 。
3.网络编程相关
- 网络编程基础:网络编程旨在实现跨主机通信,主要关注传输层提供的API,即socket api(套接字 )。socket最初指主板上用于网络通信的特殊组件,现在是网络编程中抽象的接口。传输层的TCP和UDP协议提供了不同的socket api 。
- TCP与UDP协议
- TCP协议:有连接、可靠传输、面向字节流、全双工。建立连接类似结婚领证,通信双方保存对方关键信息,能保证数据尽可能被对方收到,适用于对数据准确性要求高的场景,如文件传输、网页浏览等 。
- UDP协议:无连接、不可靠传输、面向数据报、全双工。发送数据后不保证对方收到,适用于对实时性要求高、能容忍少量丢包的场景,如视频直播、在线游戏等 。
4.网络设备与分层对应
- 物理层设备:包括网线、光纤、天线等,是网络通信依赖的硬件设施,与通信专业关联较大 。
- 数据链路层:负责相邻节点通信,常见协议如以太网协议,通过网线、光纤等直接相连的设备在该层通信 。
- 网络层:负责任意两个节点间的路径规划,路由器是该层重要设备,通过IP协议确定数据传输路径 。
- 传输层:关注传输的起点和终点,不关心中间过程,常见协议TCP和UDP 。
- 应用层:数据如何使用由程序员决定,涉及各种应用层协议,如HTTP、SMTP等 。
5.网络编程基础概念
- 网络通信数据单位
- 段(segment) :是TCP协议传输数据的基本单位 。在TCP通信中,数据会被分割成若干段进行传输,接收方再按顺序重组这些段以还原数据。
- 报(datagram) :对应UDP协议 。UDP以数据报的形式发送数据,每个数据报相对独立,发送后不保证对方一定能收到。
- 包(packet) :IP协议使用 。IP协议负责将数据报或段封装成包,进行网络层的传输,通过IP地址寻找路径。
- 帧(frame) :数据链路层的协议数据单元 。在数据链路层,会将网络层传来的包封装成帧,添加帧头和帧尾信息,以便在相邻节点间传输。
- Socket API :传输层提供的网络通信API,称为socket api(网络编程套接字) 。其名称源于主板上用于网络通信的特殊组件,通过这个接口,应用层程序能调用系统功能,把数据交给传输层进行网络传输。
6.TCP协议特点
- 有连接 :通信前需通过三次握手建立虚拟、抽象的连接,就像结婚领证确定双方关系,双方保存对方关键信息,通信结束后通过四次挥手释放连接 。
- 可靠传输 :通过确认应答、重传机制等应对丢包问题,尽力保证数据按序、完整到达对端 。比如发送方发送数据后,等待接收方确认,没收到确认就重发。
- 面向字节流 :把数据当作字节流处理,读写基本单位是字节,类似文件操作按字节读写 。
- 全双工 :通信双方可同时在两个方向上进行数据传输,有两个独立信道 。
7.UDP协议特点
- 无连接 :通信前无需建立连接,直接发送数据报,就像直接寄信,不事先确认对方是否准备好接收 。
- 不可靠传输 :发送数据后不保证数据能到达对端,也不保证顺序,对丢包不处理 。
- 面向数据报 :读写数据以数据报为基本单位,每个数据报是独立的结构化数据 。
- 全双工 :和TCP一样,通信双方可同时双向通信 。