网络编程(计算机网络基础)
认识网络
1.网络发展史
ARPnetA(阿帕网)->internet(因特网)->移动互联网->物联网
2.局域网与广域网
局域网
概念:的缩写是LAN(local area network),顾名思义,是个本地的网络,只能实现小范围短距离的网络通信。我们的家庭网络是典型的局域网。电脑、手机、电视、智能音箱、智能插座都连在路由器上,可以互相通信。
广域网
概念:广域网是相对于局域网来讲的,局域网传输距离比较近,只能是一个小范围的,如果需要长距离的传输,局域网是无法架设的。比如你在的公司总部在北京,三个分部分别在上海,深圳,成都,局域网明显是无法实现的。
实现方式:通过因特网(宽带连接,便宜)
通过广域专线(安全,使用一条自己的专用线路来传输数据,不允许别的设备接入)
3.光猫(了解)
概念:光猫是一种类似于基带modem(数字调制解调器)的设备,和基带modem不同的是接入的是光纤专线,是光信号。用于广域网中光电信号的转换和接口协议的转换,接入路由器,是广域网接入。
光猫的作用:将光(模拟)信号转化为数字信号
早期应用:电话线
现在应用:光纤
4.路由器
概念(作用):用于连接局域网和外网
前面说了你的设备可以连接路由器来通信,你在你家这个区域设备之间连接在一起,但是你还要和外界通信,路由器就是把你家庭这个区域的网络和外部网络连接,你就能通过路由器提供的网络和外部联系。
路由器需要区分WAN口和LAN口,WAN口是接外网的(从Modem出来的或者从上一级路由器出来的),LAN口是接内网的,现在路由器都带无线功能,本质上无线接入就是LAN。
5.交换机与路由器
交换机:用于局域网内网的数据转发(就是处理数据,像一个物流中心,管理货物(数据)运输)
路由器:用于连接局域网和外网,也能进行数据转发
注:现在大部分路由器都有有交换机的功能;
但是交换机没有IP分配和IP寻址的功能,所以交换机没有路由器的功能。
6.网线
网线就是数据传输的通路(就像道路一样)
IP地址
1.基本概念
什么是IP地址
(1)IP地址是Internet中主机的标识(主机的身份证,如果有人要我给你送一个苹果(数据),你没有身份证,你怎么证明你是我要找的人)
(2)Internet中的主机要与别的机器通信必须具有一个IP地址
(3)IP地址为32位(IPv4)或者128位(IPv6)
(4)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,同一局域网不能重复(相当于你的主机在这个局域网范围内的编号)
不同的局域网网络号是不一样的,主机号可能和别的局域网内的主机一样但是组合在一起的IP地址就不会一样,就像你的身份证,你的所属地编号可能有很多人和你一样,但是后面哈有出生年日期和男女标识以及分配顺序,这就决定了你的身份唯一性,但是又能找出很多同一性(所属地等等)。
3.IP地址分类
IP地址分类
各个类的范围:
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
E类:240.0.0.1~~247.255.255.254
特殊的IP地址
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(Loopback通常指网络或系统中的一种自我测试机制,允许信号或数据从输出端返回到输入端而不经过外部设备。常见于网络协议、音频接口、软件开发等领域)。
网络地址: 每一个网段主机号为0的地址; 如:192.168.50.222-->192.168.50.0 它是网络中的一个特殊地址,不能被分配给任何具体的主机(主机号为0)
广播地址: 主机号最大的地址是该网段的广播地址 如:192.168.50.222的广播地址是192.168.50.255
全网广播地址:255.255.255.255
终端输入ifconfig可以查看自己当前设备的网络配置信息(包含IPV4,子网掩码,广播地址等)
4 子网掩码
子网掩码:(1)是一个32位的整数,作用是将某一个IP划分成网络地址和主机地址;
(2)子网掩码长度是和IP地址长度完全一样;
特点:网络号全为1,主机号全为0;
公式:网络地址=IP & MASK(子网掩码)
主机地址= IP& ~MASK(子网掩码取反)
5.三级划分
作用: 重新划分网络号和主机号 , 也就是重新组网 , 从而提高资源利用率
二级划分 IP :IP地址= 网络号 + 主机号(把IP地址分为两个部分)
三级划分 IP :IP地址= 网络号 + 子网号 + 主机号(把IP地址分为三个部分,把主机号分为子网号和主机号)
练习:
1.B类地址的子网掩码怎么写? 255.255.0.0
2.一个IP地址为192.168.3.183,计算其网络号与主机号
子网掩码:255.255.255.0 网络号:192.168.3.0 主机号:0.0.0.183
3.B类地址,同一网段最多可以连接多少个主机? 2^16-2(去掉网络地址和广播地址)
4.如果有800台电脑, 在不浪费ip情况下, 选用哪个网段? B
5.某公司有四个部门:行政、研发1、研发2、营销,每个部门各50台计算机接入公司局域网,如果要在192.168.1.0网段为每个部门划分子网,子网掩码应该怎么设置,每个子网的地址范围分别是什么?
分析:首先确定使用第几类IP地址合适,要求能表示两百台计算机,资源利用率越高越好;这里还要求我们把主机号分为子网号和主机号,子网号来表示部门,主机号才表示各个电脑;再确定子网号应该使用几位,两位就够了,00,01,10,11,这个时候我们就确定了IP地址应该是网络号(已有)+子网号(四个部门)+主机号;A类主机号十六位,十六位减去两位子网号是14位,太多了,资源浪费,能不能再少点,B类八位主机号减去两位子网号是六位,2的六次方是64,可以容下一部门五十个人,所以选择B类IP地址。
确定格式:网络号(16位)+子网号(2位)+主机号(6位)
答案:
行政: 192.168.1.00 00 0000~00 11 1111 = 192.168.1.0~~192.168.1.63
研发一:192.168.1.01 00 0000~01 11 1111 = 192.168.1.64~~192.168.1.127
研发二:192.168.1.10 00 0000~10 11 1111 = 192.168.1.128~~192.168.1.191
营销: 192.168.1.11 00 0000~11 11 1111 = 192.168.1.192~~192.168.1.255
子网掩码:255.255.255.11 00 0000 = 255.255.255.192
网络模型
1.网络的体系结构
网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供的服务
网络体系结构即指网络的层次结构和每层所使用协议的集合
两类非常重要的体系结构:OSI与TCP/IP
2.OSI模型(ISO国际标准化组织)
OSI模型是最理想的模型,适用于教学和理解,一般不使用这种但是要记住。
应用层:指定特定应用的协议,文件传输,文件管理,电子邮件等。
表示层:确保一个系统应用层发送的消息可以被另一个系统的应用层读取,编码转换,数据解 析,管理数据加密,解密;
会话层:通信管理,负责建立或者断开通信连接
传输层:端口号,数据传输到具体那个进程程序(端到端)
网络层:路由器中是有算法的,ip,(主机到主机)(路由的转发)
链路层:格式变为帧(把数据分成包,一帧一帧的数据进行发送)
物理层:传输的是bit流(0与1一样的数据),物理信号,没有格式
3.TCP/IP模型(规范)
应用层:应用协议和应用程序的集合
传输层:决定数据交给机器的哪个任务(进程)去处理,通过端口寻址
(进程一定有进程号,不一定有端口号,端口号只有在进行网络通信才有)
网络层:提供设备到设备的传输,可以理解为通过IP寻址机器。
网络接口和物理层:屏蔽硬件差异(驱动),向上层提供统一的操作接口
OSI和TCP/IP模型对应关系图
4.常见协议
应用层:
SSH:加密协议
telnet:远程登录协议
FTP:文件传输协议
HTTP:超文本传输协议
DNS:域名解析协议 (将人类易于记忆的域名(如www.baidu.com)转换为计算机使用的IP地址(如192.0.2.1))
SMTP/POP3:邮件传输协议
传输层:
TCP:传输控制协议
UDP:用户数据报协议
网络层:
IP(IPV4/IPV6):网间互连的协议
ICMP:网络控制管理协议,ping命令使用
IGMP:网络分组管理协议,广播和组播使用
ARP:地址解析协议 IP-->MAC
RARP:反向地址转换协议 MAC-->IP
网络接口和物理层:
ppp:点对点协议
Ethernet:是一种常见的局域网技术,使用MAC地址进行帧的传输和接收
Wi-Fi:用于无线局域网的数据传输,通常基于IEEE 802.11标准
1.DNS
由于使用IP地址来指定计算机不方便人们记忆,且输入时候容易出错,用字符标识网络中计算机名称方法。
这种命名方法就像每个人的名字,这就是域名(Domian Name )
域名服务器(Domain Name server):用来处理IP地址和域名之间的转换。
域名系统(Domain Name System,DNS):域名翻译成IP地址的软件DNS
域名结构:
例如域名 www.baidu.com.cn 从右向左看:
1.cn为高级域名,也叫一级域名,它通常分配给主干节点,取值为国家名,cn代表中国
2.com为网络名,属于二级域名,它通常表示组织或部门
中国互联网二级域名共40个,edu表示教育部门,com表示商业部门,gov表示政府,军队mil等等
3.baidu为机构名,在此为三级域名,表示百度
4.www:万维网world wide web,也叫环球信息网,是一种特殊的信息结构框架。
DNS工作流程:
DNS黑客技术:
2.TPC与UDP:
相同点:
UDP TCP 协议都存在于传输层,全双工通信
不同点:
TPC(传输控制协议):
1.全双工通信、面向连接、可靠
2.是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。
3.适用场景:
(1)发送小尺寸数据(如对DNS服务器进行IP地址查询时)
(2)适合于广播/组播式通信中。
(3)MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议
4.高可靠原因:
(1) 三次握手、四次挥手
(2)序列号和应答机制
(3)超时,错误重传机制
(4)拥塞控制、流量控制(滑动窗口)
UDP(用户数据报协议):
1.全双工通信、面向无连接、不可靠;因为在数据发送前不需要进行连接,所以可以进行高效率的数据传输,但是容易丢失数据。
2.适用场景:
(1)发送小尺寸数据(如对DNS服务器进行IP地址查询时)
(2)适合于广播/组播式通信中。
(3)MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议
5.常用网络调试命令
1.ping:用来网络联通测试(使用多)
作用:
(1)用来检测网络的连通情况和分析网络速度;
(2)根据域名得到服务器IP;
(3)根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量。
参数:
字节:数据包大小
时间:响应时间,时间越小证明你链接这个地址的速度越快
TTL:Time To Live,从源到目的,每经过一个路由器,TTL减一,当TTL=0,包丢失
2.ifconfig:查看网络接口信息

参数:
ens33:网卡名称
en:Ethernet
s:表示热插拔插槽上的设备
33:插槽编号
lo:回环网卡
其他命令:
格式
含义
ifconfig 具体网卡名称
只显示具体网卡的详细信息(无论是否启用)
ifconfig -a
表示显示所有网卡包括没有启动的网卡
ifconfig 网卡名称 up/down
表示开启或关闭网卡
ifconfig 网络接口 IP地址[/子网掩码长度]
新建临时IP地址(添加 一块虚拟网卡)
ifconfig -s
查看通讯情况
手机调试工具
应用市场搜全能调试。
套接字:socket
1.什么是套接字
1.是一个编程接口
2.是一种特殊的文件描述符 (everything in Unix is a file)
3.socket是一种通信机制,并不仅限于TCP/IP协议
4.面向连接 (Transmission Control Protocol - TCP/IP)
5.无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX)
2.为什么需要socket?
1.普通的I/O操作过程 :打开文件->读/写操作->关闭文件
2.TCP/IP协议被集成到操作系统的内核中,引入了新型的“I/O”操作 ----->进行网络通信的两个进程在不同的机器上,如何连接? 网络协议具有多样性,如何进行统一的操作 ?
需要一种通用的网络编程接口:Socket(像一个插排线,将两个进程连接)
3. socket类型
1.流式套接字(SOCK_STREAM) ---> TCP
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流。
2.数据报套接字(SOCK_DGRAM) --> UDP
提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送可能乱序接收。
3.原始套接字(SOCK_RAW)
可以对较低层次协议如IP、ICMP直接访问,还有一些ping命令
4. 位置
在应用层和数字链路层与物理层之间
端口号
概念:
1.为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区分
2.TCP端口号与UDP端口号独立(UDP port为8888,TCP port也可为8888 )
3.端口号一般由IANA (Internet Assigned Numbers Authority) 管理
4.端口用两个字节来表示
分类:(1)众所周知端口:(被占用:1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用))
(2)已登记端口:1024~49151(可用来建立与其它主机的会话)
(3)动态或私有端口:49152~65535 (固定某些服务使用)
字节序
1.字节序: 不同类型的cpu主机,内存存储大于一个字节类型的数据在内存中的存放顺序。
2.浮点类型,字符类型,字符串没有字节序
3.分类:
小端序(little-endian) - 低序字节存储在低地址 (主机字节序)
大端序(big-endian)- 高序字节存储在低地址 (网络字节序)
网络中传输的数据必须使用网络字节序,即大端字节序
终端显示的数据必须是主机字节序,即小端字节序
大小端口转换
主机字节序转换为网络字节序 (小端序->大端序)
u_long htonl (u_long hostlong); //host to network long
u_short htons (u_short short); //掌握这个
网络字节序转换为主机字节序(大端序->小端序)
u_long ntohl (u_long hostlong);
u_short ntohs (u_short short);
主机字节序转换为网络字节序 (小端序->大端序)
in_addr_t inet_addr(const char *strptr); //该参数是字符串 typedef uint32_t in_addr_t; struct in_addr { in_addr_t s_addr; };
功能: 主机字节序转为网络字节序
参数: const char *strptr: 字符串
返回值: 返回一个无符号长整型数(无符号32位整数用十六进制表示), 否则NULL
网络字节序转换为主机字节序(大端序->小端序)
char *inet_ntoa(stuct in_addr inaddr);
功能: 将网络字节序二进制地址转换成主机字节序。
参数: stuct in_addr in addr : 只需传入一个结构体变量
返回值: 返回一个字符指针, 否则NULL;