网络协议是设备间通信的标准化规则集,定义数据封装、寻址、传输、校验与处理,确保异厂商 / 异系统互联互通。互联网以 TCP/IP 为核心栈,按分层分工协作,兼顾可靠、高效与安全。
osi模型
- 应用层:为网络用户提供各种服务,例如电子邮件、文件传输等。
- 表示层:为不同主机间的通信提供统一的数据表示形式。
- 会话层:负责信息传输的组织和协调,管理进程会话过程。
- 传输层:管理网络通信两端的数据传输,提供可靠或不可靠的传输服务。
- 网络层:负责数据传输的路由选择和网际互连。
- 数据链路层,负责物理相邻(通过网络介质相连)的主机间的数据传输,主要作用包括物理地址寻址、数据帧封装、差错控制等。该层可分为逻辑链路控制子层(LLC)和介质访问控制子层(MAC)。
- 物理层,负责把主机中的数据转换成电信号,再通过网络介质(双绞线、光纤、无线信道等)来传输。该层描述了通信设备的机械、电气、功能等特性
TCP/IP 四层模型(实际工业模型)
- 物理层 / 数据链路层:以太网(帧、MAC)、Wi-Fi(802.11)、PPP、VLAN(802.1Q)、ARP(IP→MAC)。
- 网络层:IP(IPv4/IPv6,核心寻址)、ICMP(ping/traceroute)、OSPF/BGP(路由)。
- 传输层:TCP(面向连接、可靠、流控 / 拥塞控制,适合文件 / 网页);UDP(无连接、低延迟,适合直播 / 游戏 / 物联网)。
- 应用层:HTTP(80)/HTTPS(443,TLS 加密)、DNS(域名→IP)、SMTP/POP3/IMAP(邮件)、FTP/SFTP(文件传输)、SSH(远程管理)、NTP(时间同步)。
TCP/IP 五层模型(教学简化模型)
- 应用层(对应 OSI 应用层 + 表示层 + 会话层)
- 传输层(对应 OSI 传输层)
- 网络层(对应 OSI 网络层)
- 数据链路层(对应 OSI 数据链路层)
- 物理层(对应 OSI 物理层)
关键区别
- OSI 七层:理论模型,分层清晰但复杂,未完全落地;
- TCP/IP 四层:实践模型,简洁高效,是互联网的实际标准;
- 五层模型:教学模型,平衡理论与实践,便于理解和学习。
| OSI 7 层 | TCP/IP 4 层 | 核心职责 | 典型协议 / 技术 |
| 应用层(L7) | 应用层 | 面向用户服务 | HTTP/HTTPS、DNS、SMTP/POP3/IMAP、FTP/SFTP、WebSocket |
| 表示层(L6) | 并入应用层 | 加密、编码、格式转换 | TLS/SSL、MIME、Base64 |
| 会话层(L5) | 并入应用层 | 会话建立 / 维护 / 终止 | NetBIOS、RPC |
| 传输层(L4) | 传输层 | 端到端可靠 / 实时传输 | TCP、UDP、SCTP |
| 网络层(L3) | 网络层 | 跨网寻址与路由 | IP(IPv4/IPv6)、ICMP、ARP、OSPF、BGP |
| 数据链路层(L2) | 网络接口层 | 局域网帧传输与 MAC 寻址 | 以太网、Wi-Fi(802.11)、PPP、VLAN(802.1Q) |
| 物理层(L1) | 网络接口层 | 比特流与物理介质 | 以太网物理层、Wi-Fi 射频、光纤 / 双绞线电气特性 |
ip的组成
相关网络配置
- ifconfig查看网络相关配置。 主要查看本机的ip
- ifconfig ens33 192.168.0.13/24 up临时设置本机ip地址,重启后失效。
- 测试:pingwww.baidu.com测试本机是否可以正常上网
- netstat -anp查本本机上所有的网络通信有那些
- sudo vim /etc/network/interfaces虚拟机网络配置文件 ,设置ip(手动分配,或自动分配)。ip地址,永久生效。
- sudo /etc/init.d/networking restart进行网络设置的加载
名词解释
- socket套接字,打开本地网络设备后,获得的文件描述符。方便后续进行网络收发。
- ip+port地址+端口===》地址用来识别主机, 端口用来识别应用程序
- 端口号的范围:1-65535
- 网络字节序===》大端存储网络设备使用的字节序
- 主机字节序---》 小端存储intel,amd,arm目前主流CPU都是小端。
udp(用户数据报协议)
- 数据与数据之间有边界
- 发送和接收的次数要对应
- 没有写阻塞。发送太快,会导致数据丢失。
- 读阻塞。
- 无连接
- 低延迟,
- 网络资源使用率低
函数调用步骤
函数调用关系
相关函数
int socket(int domain, int type, int protocol);
- domain地址族,PF_INET == AF_INET ==>互联网程序
- PF_UNIX == AF_UNIX ==>单机程序
- SOCK_STREAM流式套接字===》TCP
- SOCK_DGRAM用户数据报套接字===>UDP
- SOCK_RAW原始套接字===》IP
- 成功 返回申请的套接字id
- 失败-1;
2、int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
- 成功0
- 失败-1;
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
- sockfd本地的套接字id
- buff本地的数据存储,一般是要发送的数据。
- len要发送的数据长度
- flags要发送数据方式,0表示阻塞发送。
- dest_addr:必选,表示要发送到的目标主机信息结构体。
- addrlen:目标地址长度。
- 成功 发送的数据长度
- 失败-1;
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
- sockfd本地的套接字id
- buff要存储数据的内存区,一般是数组或者动态内存。
- len要获取的数据长度,一般是buff的大小。
- flags获取方式,0阻塞
- src_addr可选,表示对方的地址信息结构体,如果为NULL,表示不关心对方地址。
- addrlen对方地址信息结构体大小。如果对方地址是NULL,则该值也为NULL。
- 成功 接收到的数据长度
- 失败-1;