网络通讯和IP地址
-
两台主机通过网络来传输数据,称为网络通讯
-
一些术语
- 主机:Host,包含台式机、笔记本、手机等设备
- 网络:Internet
- 网络介质:Media,网线,光纤,无线局域网wifi,移动3G网络
- 数据:Data,一串字节
-
网络通讯的观测
- 安装Wireshark,即可对网络通讯进行观测
- 抓:capture
- 包:packet,数据包
-
IP地址:Internet Protocol Address
- 用于标识网络上的一台主机,IP地址用4字节表示,称为IPv4
- 用字符串表示时,10进制,以点号分开**(0-255)**
“192.168.1.1” - 用16进制表示
C0 A8 01 01(192.168.1.1)
-
ping命令:检测连通
-
不连通的三种可能性
(1) 对方关机、离线
(2) 己方没有连网
(3) 对方在线,但对方屏蔽了PING服务
-
-
查看自己的IP地址
- windows上,输入ipconfig
- linux下,输入ifconfig
Socket与复用技术
-
Socket概念
两台主机进行通讯,运行不同的程序,它们都在使用网络进行数据传输,如何区分?
Socket原意时“插座”,它形象的表示:用一根线连接两个插座,即形成一个数据通道
每个插口用一个数字标识**(0-65535),这个数字就称为端口(port)**
-
复用技术
-
待解决问题:
多个Socket,每个Socket上同时传输着不同的数据(视频流、文件流等),但是,网线只有一根,字节是串行传输的(一个字节一个字节地发送)
-
解决办法:
封包:将(IP,Port)放在包头,交替发送包
这种在一个信道内,交叉间隔地传输数据的方案,称为**“分时复用”**
发送方:复用Mux,将每个Socket上的数据,拆分成固定格式的小包,每个小包前面加上IP/Port,按照时间间隔,轮番发送到信道中
接收方:解复用Demux,从信道中接收到小包,根据包头的Port,将小包还原成原始数据,再分发给不同的Socket处理
分包目的:各Socket均匀占用网络
-
UDP基本用法
-
Socket的种类
- UDP
- TCP
-
UDP Socket
-
UDP(User Datagram Protocol),用户数据报文协议,适用于局域网的主机间的通信
-
UDP的单机测试
发送方
#include<iostream> #include"osapi/osapi.h" int main() { std::cout << "发送方:port=9000\n"; //创建Socket OS_SockAddr local("192.168.51.65", 9000); OS_UdpSocket sock; sock.Open(local, true); while (1) { //让用户输入一段文本 char buf[128]; std::cout << ">"; gets_s(buf); int n = strlen(buf); //发送 OS_SockAddr peer("192.168.51.65", 9001);//对方地址 sock.SendTo(buf, n, peer); //结束 if (strcmp("bye", buf) == 0) { break; } } //关闭Socket sock.Close(); return 0; }
接受方
#include<iostream> #include"osapi/osapi.h" int main() { std::cout << "接受方:port=9001\n"; //创建Socket OS_SockAddr local("192.168.51.65", 9001); OS_UdpSocket sock; sock.Open(local, true); while (1) { //接受 char buf[128]; OS_SockAddr peer;//对方的地址 int n = sock.RecvFrom(buf, 128, peer); if (n <= 0) { break; } buf[n] = 0; printf_s("Got:%s\n", buf); //结束 if (strcmp("bye", buf) == 0) { break; } } //关闭socket sock.Close(); return 0; }
-
UDP多机测试
-
使用虚拟机构造多机环境
本机环境:Microsoft Windows 10专业版 10.0.19041
虚拟机软件:Oracle VM VirtualBox-6.1.6
虚拟机系统:Ubuntu20.04
配置参照:
问题:通过ifconfig查看IP地址,若IP地址显示10.0.2.15
解决:将网络的连接方式改为桥接网卡
借鉴了以下内容
VirtualBox安装ubuntu系统ip地址显示10.0.2.15
出现虚拟机Ping主机失败
-
-