网络编程 day01
网络编程 day01
- 0. 网络编程课程介绍
- 1. 认识网络
- 1.网络发展史
- 2.局域网与广域网
- 局域网(LAN)
- 广域网(Wan)
- 3.光猫
- 4.路由器
- 5.交换机与路由器
- 6.网线
- 2. IP
- 1. 基本概念
- 2. 网络号/主机号(二级划分)
- 3. IP地址分类
- 整体分类
- 特殊地址
- 4.子网掩码(MASK)
- 5. 练习
- 6. 三级划分
- 3. 网络模型
- 网络的体系结构
- OSI模型
- TCP/IP
- OSI和TCP/IP的对应关系
- 常见协议
- DNS
- 网络调试命令
- ping
- netstat
- ifconfig
- 手机调试工具
- 4. socket
- 1. socket 发展
- 2. socket 介绍
- 3. 为什么需要socket?
- 4.socket类型
- 5. 位置
- 6. TCP/UDP
- 5. 端口号 port
- 6. 字节序
0. 网络编程课程介绍
- 网络基础:IP、子网掩码、端口号、网络基础模型(OS、TCP/IP)、传输协议
- socket:TCP、UDP模型、广播、组播、协议分析、抓包工具的使用、IO多路复用、并发服务器
- SQL数据库
- TCP实现FTP、电子词典
1. 认识网络
1.网络发展史
ARPnetA (阿帕网) ---- Internet (因特网) ---- 移动互联网 ---- 物联网
TCP/IP
用来检测网络传输中差错的传输控制协议--------TCP
专门负责对不同网络进行互联的互联网协议-----IP
2.局域网与广域网
局域网(LAN)
局域网的缩写是LAN,local area network,顾名思义,是个本地的网络,只能实现小范围短距离的网络通信。我们的家庭网络是典型的局域网。电脑、手机、电视、智能音箱、智能插座都连在路由器上,可以互相通信。局域网,就像是小区里的道路,分支多,连接了很多栋楼。
广域网(Wan)
广域网(Wide Area Network)是相对局域网来讲的,局域网的传输距离比较近,只能是一个小范围的。如果需要长距离的传输,比如某大型企业,总部在北京,分公司在长沙,局域网是无法架设的。广域网,就像是大马路,分支可能少,但类型多,像国道、省道、高速、小道等,连接了很多大的局域网。
怎么上网?
第一,通过因特网,只需要办一根宽带,就实现了通信,非常方便,现在的宽带价格也比较便宜。
第二,通过广域网专线。
所以为了数据安全,不能连接因特网,需要用一条自己的专用线路来传输数据,这条线路上只有自己人,不会有其他人接入,且距离很远,这个网络就叫 “广域网”。
3.光猫
光猫是一种类似于基带modem(数字调制解调器)的设备,和基带modem不同的是接入的是光纤专线,是光信号。用于广域网中光电信号的转换和接口协议的转换,接入路由器,是广域网接入。
猫的作用:将光(模拟)信号转化为数字信号
早期:电话线
现在:光纤
4.路由器
路由器:用于连接局域网和外网
路由器需要区分WAN口和LAN口,WAN口是接外网的(从Modem出来的或者从上一级路由器出来的),LAN口是接内网的,现在路由器都带无线功能,本质上无线接入就是LAN
5.交换机与路由器
交换机工作原理
交换机:用于局域网内网的数据转发
路由器:用于连接局域网和外网,也能进行数据转发
现在大部分路由器都有有交换机的功能;
但是交换机没有IP分配和IP寻址的功能,所以交换机没有路由器的功能。
6.网线
2. IP
1. 基本概念
- IP地址是Internet中主机的标识
- Internet中的主机要与别的机器通信必须具有一个IP地址
- IP地址为32位(IPv4 ,232)或者128位(IPv6,2128个)
NAT:公网转私网、私网转公网 - IPV4表示形式:常用点分十进制形式,如202.38.64.10,最后都会转换为一个32位的无符号整数。
NAT设备(网络地址转换)
功能:NAT设备的主要功能是将内部私有IP地址转换为公共IP地址,或反向操作,以便在局域网和外部网络(如互联网)之间进行通信。
工作原理:
当局域网内的设备访问互联网时,NAT设备记录设备的内部IP地址和源端口,并用公共IP地址替换。
响应的流量也会经过NAT设备,NAT通过记录的映射关系将数据包发送回正确的内部设备。
作用对象:NAT设备用于管理与外部网络(如互联网)的通信,通常作为路由器的一部分。
DHCP服务器(动态主机配置协议)
功能:DHCP服务器的主要任务是自动分配IP地址、子网掩码、默认网关和DNS服务器ip等网络配置给网络中的设备(客户端),简化网络管理。
工作原理:
当一个设备(如电脑或手机)首次连接到网络时,它会发送一个DHCP请求。
DHCP服务器接收到请求后,从预设的IP地址池中分配一个可用的IP地址,并返回给客户端。
作用对象:DHCP服务器专注于局域网内部的IP地址管理。
2. 网络号/主机号(二级划分)
IP地址 = 网络号+主机号
网络号:表示是否在同一个网段内(局域网)
主机号:表示在网段内的ID,同一网段内不重复
3. IP地址分类
整体分类
A类:(0.0.0.0 - 127.255.255.255)(默认子网掩码:255.0.0.0)
第一个字节为网络号,后三个字节为主机号(一个字节占8位)。该类IP地址的最前面为“0”,因为网络号是8位,所以地址的网络号取值于 0~127之间(0000 0000)(0111 1111)。一般用于大型网络,主机号取值在0 - 2 ^24之间。
B类:(128.0.0.0 - 191.255.255.255)(默认子网掩码:255.255.0.0)
前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为“10”,所以地址的网络号取值于128~191之间。一般用于中等规模网络。
C类:(192.0.0.0 - 223.255.255.255)(子网掩码:255.255.255.0)
前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。一般用于小型网络(一般教室使用的是C类)。
D类:(224.0.0.0 - 239.255.255.255),多播地址。
该类IP地址的最前面为“1110”,所以地址的范围取值于224~239之间。一般用于组播用户,组播通信。
E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的取值于240~247之间。一般是一些保密单位用得到,平时基本不会用到
特殊地址
0.0.0.0
在服务器中,0.0.0.0指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。
127.0.0.1
回环地址/环路地址,所有发往该类地址的数据包都应该被loop back。
网络地址
每一个网段主机号为0的地址; 如:192.168.50.0。它是网络中的一个特殊地址,不能被分配给任何具体的主机。
广播地址
主机号最大的地址是该网段的广播地址 如:192.168.50.255。如: b类IP 广播地址为: 130.223.255.255
全网广播地址 : 255.255.255.255, 该地址不能随便用,会影响这个网络
A类:1.0.0.1~126.255.255.254
B类:128.0.0.1~191.255.255.254
C类:192.0.0.1~223.255.255.254
D类(组播地址):224.0.0.1~~239.255.255.254
4.子网掩码(MASK)
- 子网掩码:是一个32位的整数,作用是将某一个IP划分成网络地址和主机地址;
- 子网掩码长度是和IP地址长度完全一样;
- 网络号全为1,主机号全为0;
- 公式:网络地址 = IP & MASK
主机地址 = IP& ~MASK
5. 练习
练习一:B类地址的子网掩码怎么写?
答:255.255.0.0
练习二:B类地址,同一网段最多可以连接多少个主机?
答:216 - 2 ;
网络地址和广播地址(.1一般是路由器登陆界面)
练习三:已知一个子网掩码号为255.255.255.192,问:最多可以连接多少台主机?
答:26 - 2;
子网掩码:网络号全为1,主机号全为0;192 : 1100 0000;主机号只有6位;主机数为26-2台
练习四:一个IP地址为192.168.3.183,计算其网络号与主机号
网络号:192.168.3.0
主机号:0.0.0.183
练习五: 如果有800台电脑, 在不浪费ip情况下, 选用哪个网段?
答:B类;C类同一网段只有28个,A类在同一网段会有224个主机
6. 三级划分
作用:重新划分网络号和主机号, 也就是重新组网 , 从而提高资源利用率
二级划分 IP :IP地址= 网络号 + 主机号
三级划分 IP :IP地址= 网络号 + 子网号 + 主机号
练习一:某公司有四个部门:行政、研发1、研发2、营销,每个部门各50台计算机接入公司局域网,如果要在192.168.1.0网段为每个部门划分子网,子网掩码应该怎么设置,每个子网的地址范围分别是什么?(4个部门之间不能通信)
答:C类(254台主机)主机号:0000 0000
行政:0000 0000 - 0011 1111=》
研发1:0100 0000 - 0111 1111=》
研发2:1000 0000 - 1011 1111=》
营销:1100 0000 - 1111 1111=》
子网掩码:255.255.255.1100 0000 =》255.255.255.192
练习二:有两台电脑主机,在最少浪费IP地址的情况下.将172.16.14.4与172.16.13.2划归为同一网段,则子网掩码应该设置为?
答:255.255.252.0
解析
- 同一网段内主机号不同,网络号相同
- 从二级划分中主机号中划分出相同部分作为子网号,子网号与网络号合称网络号
14.4:172.16.0000 1110.0000 0100
13.2:172.16.0000 1101.0000 0010
子网号:172.16.0000 11
主机号:10.0000 0100 和 01.0000 0010
子网掩码:255.255.1111 1100.0000 0000==》255.255.252.0
3. 网络模型
网络的体系结构
网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。
每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供的服务
网络体系结构即指网络的层次结构和每层所使用协议的集合
两类非常重要的体系结构:OSI与TCP/IP
OSI模型
TCP/IP
应用层:应用协议和应用程序的集合
传输层:决定数据交给机器的哪个任务(进程)去处理,通过端口寻址
进程一定有进程号,不一定有端口号,端口号只有在进行网络通信才有
网络层:提供设备到设备的传输,可以理解为通过IP寻址机器。
网络接口和物理层:屏蔽硬件差异(驱动),向上层提供统一的操作接口。
OSI和TCP/IP的对应关系
常见协议
网络接口和物理层:
ppp:拨号协议(老式电话线上网方式)
Ethernet:是一种常见的局域网技术,使用MAC地址进行帧的传输和接收
Wi-Fi:用于无线局域网的数据传输,通常基于IEEE 802.11标准
网络层:
IP(IPV4/IPV6):网间互连的协议
ICMP:网络控制管理协议,ping命令使用
IGMP:网络分组管理协议,广播和组播使用
ARP:地址解析协议 IP–>MAC
RARP:反向地址转换协议 MAC–>IP
(ARP;RARP在网络接口和物理层工作)
传输层:
TCP:传输控制协议
UDP:用户数据报协议
应用层:
SSH:加密协议
telnet:远程登录协议
FTP:文件传输协议
HTTP:超文本传输协议
DNS:域名解析协议 (将人类易于记忆的域名(如www.baidu.com)转换为计算机使用的IP地址(如192.0.2.1))
SMTP/POP3:邮件传输协议
DNS
由于使用IP地址来指定计算机不方便人们记忆,且输入时候容易出错,用字符标识网络中计算机名称方法。
域名(Domian Name )
域名服务器(Domain Name server):用来处理IP地址和域名之间的转换。
域名系统(Domain Name System,DNS):域名翻译成IP地址的软件DNS
域名结构
例如域名 www.baidu.com.cn 从右向左看
cn为高级域名,也叫一级域名,它通常分配给主干节点,取值为国家名,cn代表中国
com为网络名,属于二级域名,它通常表示组织或部门
中国互联网二级域名共40个,edu表示教育部门,com表示商业部门,gov表示政府,mil军队等等
baidu为机构名,在此为三级域名,表示百度
www:万维网world wide web,也叫环球信息网,是一种特殊的信息结构框架。
工作流程
网络调试命令
ping
测试网络连通性(ICMP)
作为平时网络连通检测使用最多的命令,它的作用主要为:
● 用来检测网络的连通情况和分析网络速度;
● 根据域名得到服务器IP;
● 根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量。
字节:数据包大小
时间:响应时间:时间越小证明链接地址的速度越快
TTL:time to live:从源到目的,每经过一个路由器,TTL减一。当TTL = 0 时,数据包丢失
netstat
netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP相关的统计数据,一般用于检验本机各端口的网络连接情况。
netstat -a //查看所有网络状态
netstat -at //查看tcp所有网络状态
netstat -au //查看udp所有网络状态
netstat -l //查看处于监听状态的链接
netstat -lt //查看处于监听状态的链接tcp
netstat -lu //查看处于监听状态的链接udp
netstat -lx //查看处于监听状态的链接unix
ifconfig
查看网络接口信息
ens33:网卡名称 en:Ethernet s:表示热插拔槽上的设备 33:插槽编号
lo:回环网卡
格式 | 含义 |
---|---|
ifconfig 具体网卡名称 | 只显示具体网卡的详细信息(无论是否启用) |
ifconfig -a | 表示显示所有网卡包括没有启动的网卡 |
ifconfig 网卡名称 | up/down 表示开启或关闭网卡 |
ifconfig 网络接口 IP地址[/子网掩码长度] | 新建临时IP地址(添加 一块虚拟网卡) |
ifconfig -s | 查看通讯情况 |
手机调试工具
全能调试
4. socket
1. socket 发展
- 1982 - Berkeley Software Distributions 操作系统引入了socket作为本地进程之间通信的接口
- 1986 - Berkeley 扩展了socket 接口,使之支持UNIX 下的TCP/IP 通信
- 现在很多应用 (FTP, Telnet) 都依赖这一接口
2. socket 介绍
- 是一个编程接口,函数
- 是一种特殊的文件描述符 (everything in Unix is a file)
- socket是一种通信机制,并不仅限于TCP/IP协议
- 面向连接 (Transmission Control Protocol - TCP/IP)
- 无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX)
3. 为什么需要socket?
- 普通的I/O操作过程 :打开文件->读/写操作->关闭文件
- TCP/IP协议被集成到操作系统的内核中,引入了新型的“I/O”操作:
进行网络通信的两个进程在不同的机器上,如何连接?
网络协议具有多样性,如何进行统一的操作?
需要一种通用的网络编程接口:Socket
4.socket类型
流式套接字(SOCK_STREAM) —> TCP
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。 内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流。
数据报套接字(SOCK_DGRAM) --> UDP
提供无连接服务。 数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送可能乱序接收。
原始套接字(SOCK_RAW)
可以对较低层次协议如IP、ICMP直接访问,还有一些ping命令
5. 位置
6. TCP/UDP
相同点:都存在于传输层,全双工通信
TCP:全双工通信、面向连接、可靠
TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。
高可靠原因
1. 三次握手、四次挥手
2. 序列号和应答机制
3. 超时,错误重传机制
4. 拥塞控制、流量控制(滑动窗口)
适用场景
适合于对传输质量要求较高的通信
在需要可靠数据传输的场合,通常使用TCP协议
MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议
UDP:全双工通信、面向无连接、不可靠
UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
适用场景
发送小尺寸数据(如对DNS服务器进行IP地址查询时)
适合于广播/组播式通信中。
MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议
5. 端口号 port
为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区分
TCP端口号与UDP端口号独立(UDP port为8888,TCP port也可为8888 )
端口号一般由IANA (Internet Assigned Numbers Authority) 管理
端口用两个字节来表示
众所周知端口(被占用:1 - 1023(1 - 255之间为众所周知端口,256 - 1023端口通常由UNIX系统占用))
已登记端口:1024 - 49151(可用来建立与其它主机的会话)
动态或私有端口:49152 - 65535 固定某些服务使用
6. 字节序
字节序: 不同类型的cpu主机,内存存储大于一个字节类型的数据在内存中的存放顺序。
小端序(little-endian)= 低序字节存储在低地址 = 主机字节序
大端序(big-endian)= 高序字节存储在低地址 = 网络字节序
网络中传输的数据必须使用网络字节序,即大端字节序
终端显示的数据必须是主机字节序,即小端字节序
网络传输中,需要将每个主机的主机字节序(CPU决定),转换为网络中统一顺序的网络字节序,才能供双方主机去识别。
只需要转换IP和port就可以,不需要转换传输的数据包的字节序,因为IP和port为 4个字节和2个字节, 而数据报一般都为char类型, 占一个字节,根据字节序的性质,内存存储大于一个字节类型的数据在内存中的存放顺序,所以char类型并不具有字节序的概念。
练习:写一个程序,判断当前主机的字节序?
union en
{
int in;
char ch;
};
int main()
{
int myend = 0x12345678;
// 指针
char *endp = (char *)&myend;
printf("%#x\n", *endp);
// 数据类型
char endch = (char)myend;
printf("%#x\n", endch);
// 共用体
union en endun;
endun.in = myend;
endun.ch = (char)endun.in;
printf("%#x", endun.ch);
}
int 类型的myend占满四个字节,强转成char类型的数据时会按照主机的大小端类型存储。如果强转之后打印出来的是“78”,说明低位字节存储在低地址位,是小端存储;如果强转之后打印出来的是“12”,说明高位字节存储在低地址位,是大端存储。