网络Socket

网络Socket


1认识网络通讯和IP地址

网络通讯
两台主机通过网络来传输数据,称为网络通讯。。

主机A 主机B
交换机

网络通讯
一些术语:
主机:Host,包含台式机、笔记本、手机等设备
网络:Internet
网络介质:Media: 网线Cable,光纤,无线网域网 Wifi, 移动3G网络,。。。
数据:Data, 一串字节。。。

网络通讯的观测
安装Wireshark,即可对网络通讯进行观测
通常称Wireshark为“抓包”工具,
抓,capture
包,packet, 数据包
抓包演示。。。

IP地址
IP地址:Internet Protocol Address
用于标识网络上的一台主机。

打个比方,你想发一封纸质邮件给朋友,总是要写 上对方的地址的。。。

IP地址
传统上,IP地址用4字节表示,称为IPv4。
用字符串表示时,10进制,以点号分开:
0-255
“192.168.1.1”
“123.57.248.214”

用16进制表示
C0 A8 01 01 (192.168.1.1)
7B 39 F8 D6 (123.57.248.214)

http://123.57.248.214
在Wireshark中观察…

ping: 检测连通
在windows/linux下都有一个ping命令,它可以检查对方主机是否 能够连通。。。
ping 123.57.248.214

如果能连通,说明对方主机在线
来自 123.57.248.214 的回复: 字节=32 时间=5ms TTL=54

如果不能连通,有三种可能性:

请求超时。
①对方关机、离线
②己方没有连网
③对方在线,但对方屏蔽了PING服务

查看自己的IP地址
在windows上,输入ipconfig
> ipconfig
在linux下,输入 ifconfig

ifconfig

2Socket与复用技术

Socket的概念
两台主机进行通讯,运行不同的程序,它们都在使用网 络进行数据传输。。。

Host A Host B
优酷客户端 视频服务
IE 网页服务

Socket的概念
一台主机上的多个程序同时使用网络,如何区分它 们?

引入Socket的概念,Socket原意为“插座”,它形 象的表示:用一根线连接两个插座,即形成一个数 据通道。

每个插口用一个数字标识(0-65535),这个数字就 称为端口(Port)。

Socket的概念
两个程序要进行通讯,就要各自选择一个插口,然 后连接起来。
程序1: 在192.168.1.100上运行,使用端口9001
程序2: 在192.168.1.101上运行,使用端口9002

连接上来,就形成了一个数据通道,它们俩之间可 以交流数据了。(只是一个逻辑上的通道)

复用技术
多个socket,每个socket上同时传输着不同的数据
(youku视频流、qq传输文件、ie下载网页。。。)

但是,网线只有一根,字节是串行传输的(一个字 节一个字节地发送)。。。

复用技术
解决办法:封包:将(IP,Port)放在包头
例如,在同一个物理传输信道上要同时输送一个文 件和一个视频: (通过两个Socket传输)
蓝色包: 携带文件数据 socket A (port 9000)
橙色包:携带视频数据 socket B (port 9001)

复用技术
这种在一个信道内,交叉间隔地传输数据的方案, 叫“分时复用”
复用:Mux, 重复利用地意思

复用技术
发送方:复用Mux
将每个Socket上的数据,拆分成固定格式的小包, 每个小包前面加上IP/Port,按照时间间隔,轮翻发 送到信道里。

接收方:解复用Demux
从信道里接收到小包,根据包头里的Port,将小 包还原成原始数据,再分发给不同的Socket处理。

复用技术
大包拆分为小包:

例如,Socket A要发送16M的数据,Socket B只发送16K的数 据,显然,不是说要等A发送完所有数据之后,再让B发送, 而是大家要要轮番使用信道。。。

解决方案:
A: 将16M数据分解成16000个小包,每份1500字节
B: 将16K数据分解成16个小包,每份1500字节
每个包的包头加上一些标识,如Port,以便接收方恢复数据

分包的目的:各Socket均匀占用网络

小结
本节的重点:理解Socket和Port
Socket就是我们使用的编程模型,像插座一样工作。 Port就是对端口的编号。
两个Socket之间建立起一个逻辑通道,可以传输数 据。
物理信道只有一个(网线),使用复用技术可以将 多个Socket通道上的数据混在一个信道里传输。

3UDP Socket (1) - 基本用法

Socket
Socket为两种:UDP 和TCP
本篇先从UDP讲起

UDP Socket
UDP: User Datagram Protocol(UDP)
用户数据报文协议
适用于局域网的主机间通信。两台主机上的程序, 在知道了对方Socket的地址之后,就可以使用UDP传 输数据。

UdpSocket sock; sock.SendTo(…)
UdpSocket sock; sock.RecvFrom(…)
UDP数据
发送方接收方
使用方法

发送方:
①创建Socket
OS_SockAddr local(“127.0.0.1”, 9000);
OS_UdpSocket sock;
sock.Open(local);
②发送
OS_SockAddr peer(“127.0.0.1”, 9001);
sock.SendTo(buf, n, peer);
③销毁Socket
sock.Close();

使用方法
接收方:
①创建Socket
OS_SockAddr local(“127.0.0.1”, 9001);
OS_UdpSocket sock;
sock.Open(local, true);
②接收
char buf[128];
OS_SockAddr peer; // 对方的地址
int n = sock.RecvFrom(buf, 128, peer);
③销毁Socket
sock.Close();

单机测试
正常情况下,Socket编程的目的是将数据传送到另 一台主机,因此需要两台主机才可以完成测试。
例如:
192.168.1.100 -> 192.168.1.101

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值