网络概念
网络就是几部计算机主机或者是网络打印机之类的接口设备,透过网络线或者是无线网络的技术,将这些主机与设备连接起来,使得数据可以透过网络媒体(网络线以及其他网络卡等硬件)来传输的一种方式。
TCP/IP的雏形:一个可以在不同的网络硬件上面运作的软件技术,使得不同公司的计算机或数据可以透过这个软件来达成数据沟通。
客户端(Client):在网络编程中,发起连接程序,也就是发送第一次请求的程序;
**服务器(Server):**等待其他程序连接的程序;
客户端程序可以在需要的时候启动,而服务器为了能够时刻相应连接,则需要一直启动。例如以打电话为例,首先拨号的人类似于客户端,接听电话的人必须保持电话畅通类似于服务器。
TCP/IP概念
简单点说就是:两台或者多台电脑通过物理设备联系在一起构成的网络
ping值什么意思?
所谓ping值其实说的就是就是网络的响应时间,这个时间是我们向服务器发送请求到到收到服务器应答的时间。也就是说如果你的ping越低,那么它从服务器上接收到信息的时间就越短。
网络分类
- 局域网:(范围逐渐变大),一个小型区域
- 城域网:一个城市
- 广域网:一个国家(典型代表是局域网)
局域网
城域网
广域网
以太网
互联网
网络编程的目的:通信,传输数据
网络编程的目的:直接或间接地通过网络协议与其他计算机实现数据交换进行通讯
要想实现网络编程,需要关注两个问题:
1.如何准确定位网络上的一台或多台主机,定位主机上的特定应用
2.找到主机以后怎么进行可靠高效的数据传输
IP地址:唯一标识符
要想让网络的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,而IP地址就是这个标识号。也就是设备的标识
IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
私有IP和公有IP:
公有IP:
组建一个企业级网络,需要去向“电信运营商ISP”申请一个接入Internet的宽带,同时ISP还会给我们分配一个或多个IP地址,这些IP地址可以供我们企业内部上网,这些ISP分配给我们的IP,就是公有IP。
公有地址(Public address,也可称为公网地址)由Internet NIC(Internet Network Information Center因特网信息中心)负责。这些IP地址分配给注册并向Internet NIC提出申请的组织机构。通过它直接访问因特网,它是广域网范畴内的。
私有IP:
我们企业或家庭内部组建局域网用的IP,一般都会用私有IP。
私有地址(Private address,也可称为专网地址)属于非注册地址,专门为组织机构内部使用,它是局域网范畴内的,私有IP禁止出现在Internet中,在ISP连接用户的地方,将来自于私有IP的流量全部都会阻止并丢掉。
IP地址,一共分成了5类,范围分别如下:
A类IP:从0.0.0.0 – 127.255.255.255,共有16777216个IP
B类IP:从128.0.0.0 – 191.255.255.255,共有65536个IP
C类IP:从192.0.0.0 – 223.255.255.255,共有256个IP
D类IP:从224.0.0.0 – 239.255.255.255
E类IP:从2240.0.0.0 – 255.255.255.255
能在Internet或被用户使用的A、B、C三类,而D类用作组播地址,E类作为科研保留地址段。
公有IP地址的范围:
A类的公有IP:
1.0.0.0~9.255.255.255
11.0.0.0~126.255.255.255
B类的公有IP:
128.0.0.0~172.15.255.255
172.32.0.0~191.255.255.255
C类的公有IP:
192.0.0.0~192.168.255.255
192.169.0.0~223.255.255.255
私有IP地址的范围:
A类私有IP地址:
10.0.0.0~10.255.255.255
B类私有IP地址:
172.16.0.0~172.31.255.255
C类私有IP地址:
192.168.0.0~192.168.255.255
IP地址的分类说明:
- A 类:前 8 位表示网络 ID,后 24 位表示主机 ID;该地址分配给政府机关单位使用。
- B 类:前 16 位表示网络 ID,后 16 位表示主机 ID;该地址分配给中等规模的企业使用。
- C 类:前 24 位表示网络 ID,后 8 位表示主机 ID;该地址分配给任何需要的人使用。
除了上述的 A、B、C 三类地址以外,还有两类隐藏地址,即 D 类地址和E类地址:
- D 类:不分网络 ID 和主机 ID;该地址用于多播。
- E 类:不分网络 ID 和主机 ID;该地址用于实验。
随着互联网设备的增加,全球43亿个IPV4地址已于2019年11月26日全部分配完毕,这意味着没有更多IPv4地址可以分配给互联网运营商。
NAT网络地址转换技术便派上了用场。举个例子,比如说你的设备需要访问广域网中的某个设备,设备中的数据需要通过网关,将设备的IP地址映射为网关的IP,再通过此IP访问广域网中的设备。你的所有设备原有IP地址都会被转换成网关的IP,以此IP来传输数据。
NAT网络地址转换技术
当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
另外,这种通过使用少量的全球IP地址(公网IP地址)代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC 2663中有对NAT的说明。
以下是我个人理解:
简单的来说,我们现在用的都是私有IP,在同一个局域网中使用是完全没有问题的,但是想要联网就不行了,我们必须使用NAT转换技术,将我们现在的IP转换成一个共有的IP,这个就是路由器的作用,但是现在说的这个路由器也不是我们家中自己的路由器,这个我现在也有点说不太清楚,总之就是就是需要将IP转换一下才可以联网;就像你家住在19号楼1单元1902;你直接这样说我们不知道你在哪一个城市,哪一个小区,但是你说我在郑州,这个郑州的名字在全国是唯一的,大家就知道你在哪了一样。19号楼一单元1902只能是在你们小区有效,出了小区那么谁也不知道你说的具体位置。
网卡
在说物理地址之前我们必须先说一下,网卡这个东西,我相信大部分人对网卡不陌生,但是你知道她到底是干什么的吗?我感觉不一定有人能说清楚,如果这时你大脑中就浮现出几个字“这不是用来上网的吗”,那你的理解就太肤浅了,因为我相信,这篇文章如果你能坚持看到现在,你应该是一个从事和网络相关工作的同志。
网卡定义:
网卡是工作在OSI的数据链路层的网络组件,是局域网中连接计算机和传输介质(网线或WIFI信号)的接口,不仅能实现与局域网传输介质之间的物理连接和电信号匹配,还涉及帧的发送与接收、帧的封装与拆封、介质访问控制、数据的编码与解码以及数据缓存的功能等。
网卡是连接计算机与外界局域网之间的接口,也叫通信适配器、网络适配器或网络接口卡NIC(Network Interface Card)。
网卡的组成:
网卡上面装有处理器和存储器(包括RAM和ROM)。网卡和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的。而网卡和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行。因此,网卡的一个重要功能就是要进行串行/并行转换。由于网络上的数据率和计算机总线上的数据率并不相同,因此在网卡中必须装有对数据进行缓存的存储芯片。
网卡分类:
A、按照网卡支持的计算机种类分为:标准以太网卡(用于台式计算机联网)和PCMCIA网卡(用于笔记本电脑联网)。
B、按照网卡支持的传输速率分为:10Mbps网卡、100Mbps网卡、10/100Mbps自适应网卡和1000Mbps网卡四类。
C、按网卡所支持的总线类型分为:ISA、EISA、PCI等。
D、按网络信号的传输介质分为:有线网卡和无线网卡(无线网卡的工作原理是微波射频技术,有WIFI、GPRS、CDMA等几种无线数据传输模式)。
物理地址
MAC地址(Media Access Control Address)的全称叫做媒体访问控制地址,也称作局域网地址,以太网地址或者物理地址。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。MAC地址共48位(6个字节)。前24位由IEEE(电气和电子工程师协会)决定如何分配,后24位由实际生产该网络设备的厂商自行制定。例广播地址:FF:FF:FF:FF:FF:FF
输入ipconfig /all可以查看
MAC 地址格式
硬件的 MAC 地址是厂家按照一定的规则,进行设置所产生的,因此,MAC 地址拥有自己的格式。
MAC 地址采用十六进制数表示,共 6 个字节(48 位),长度为 48bit(字节)。整个地址可以分为前 24 位和后 24 位,代表不同的含义。
- 前 24 位称为组织唯一标识符(Organizationally Unique Identifier,OUI),是由 IEEE 的注册管理机构给不同厂家分配的代码,区分了不同的厂家。
- 后 24 位是由厂家自己分配的,称为扩展标识符。同一个厂家生产的网卡中 MAC 地址后 24 位是不同的。
查询MAC厂商:
总结:IP地址,是我们电脑上网的唯一标识符
MAC地址,是我们电脑设备的标识符
OSI模型:
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
第一层:物理层(Physical Layer):它是提供物理链路,传递电信号或者光信号用的,在局域网上传输数据帧(data frame),它负责管理计算机通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等。
第二层:数据链路层(Data Link Layer):数据链路层负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成帧。而且此层还负责MAC地址。
第三层:网络层(Network Layer):决定数据的路径选择(数据选路)和转寄,将网络表头(NH)加至数据包,以形成分组。网络表头包含了网络数据,例如:IP地址。
第四层:传输层(Transport Layer):它会建立一个安全通道,以防数据丢失。端到端之间的连接建立。把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息,例如:传输控制协议(TCP)等。
第五层:会话层(Session Layer):负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。对会话的控制,保持数据的单向传输,一对一,一对多的控制。
第六层:表达层(Presentation Layer):将我们的信息数据进行加密,进行加密算法;以及数据的转化。信息数据加密、转换、压缩。把数据转换为能与接收者的系统格式兼容并适合传输的格式。
第七层:应用层(Application Layer):起到了调用的作用,提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3.HTML.等。
路由器
要解释路由器的概念,首先要介绍什么是 路由。所谓“路由”,是指把数据从一个地方传送到另一个地方的行为和动作,而路由器,正是执行这种行为动作的机器,它的英文名称为Router。是使用一种或者更多度量因素的网络层设备,它决定网络通信能够通过的最佳路径。路由器依据网络层信息将数据包从一个网络前向转发到另一个网络。偶尔也称为 网关(尽管网关的这个定义现在己经过时)。
关于网关
网关:一个网络通向其他网络的IP地址,具有路由功能,联网的话必须要网关;
网关(Gateway)就是一个网络连接到另一个网络的“关口”。也就是网络关卡。
网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。
默认网关
就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。现在主机使用的网关,一般指的是默认网关。
自动设置网络
自动设置就是利用DHCP(Dynamic Host Configuration Protocol, 动态主机配置协议)服务器来自动给网络中的电脑分配IP地址、子网掩码和默认网关 。这样做的好处是一旦网络的默认网关发生了变化时,只要更改了DHCP服务器中默认网关的设置,那么网络中所有的电脑均获得了新的默认网关的IP地址。这种方法适用于网络规模较大、TCP/IP参数有可能变动的网络。另外一种自动获得网关的办法是通过安装代理服务器软件(如MS Proxy)的客户端程序来自动获得,其原理和方法和DHCP有相似之处。
子网掩码
我们使用的一般为255.255.255.0
子网掩码是一个32位地址,是与IP地址结合使用的一种技术。它的主要作用有两个,一是用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。二是用于将一个大的IP网络划分为若干小的子网络。
使用子网是为了减少IP的浪费。因为随着互联网的发展,越来越多的网络产生,有的网络多则几百台,有的只有区区几台,这样就浪费了很多IP地址,所以要划分子网。使用子网可以提高网络应用的效率。
子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
子网掩码——屏蔽一个IP地址的网络部分的“全1”比特模式。对于A类地址来说,默认的子网掩码是255.0.0.0;对于B类地址来说默认的子网掩码是255.255.0.0;对于C类地址来说默认的子网掩码是255.255.255.0。
- 通过子网掩码,就可以判断两个IP在不在一个局域网内部。
- 子网掩码可以看出有多少位是网络号,有多少位是主机号
端口
思考一个问题
虽然以上内容我们搞懂了IP地址的概念,但是从互联网传输过来的数据,到达我们的电脑之后,数据到底是给钉钉 还是微信,还是QQ呢???
端口的概念
在网络技术中,端口包括逻辑端口和物理端口两种类型。物理端口是用于连接物理设备之间的接口,如ADSL Modem、集线器、交换机、路由器上用于连接其他网络设备的接口。逻辑端口是指逻辑意义上用于区分服务的端口,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。
端口的作用
端口号的主要作用是表示一台计算机中的特定进程所提供的服务。网络中的计算机是通过IP地址来代表其身份的,它只能表示某台特定的计算机,但是一台计算机上可以同时提供很多个服务,如数据库服务、FTP服务、Web服务等,我们就通过端口号来区别相同计算机所提供的这些不同的服务,如常见的端口号21表示的是FTP服务,端口号23表示的是Telnet服务,端口号25指的是SMTP服务等。
一个IP地址的端口通过16bit进行编号,最多可以有65536个端口
网络字节序,以及IP地址和端口号的转换
大小端的问题:
大端:
高字节存低地址
低字节存高地址
小端:
高字节存高地址
低字节存低地址
本地计算机存储方式:小端存储
网络通信上都是:大端存储
如何确定大小端:
#include <stdio.h>
union test{
int val;
char buf[4];
};
union test tmp;
int main(void)
{
tmp.val=0x12345678;
if(tmp.buf[0]==0x12)
{
printf("大端存储 \n");
}
else printf("小端存储 \n");
return 0;
}
我们的电脑都是小端存储,但是网络都是大端存储
为什么会有大小端???
在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在除了8bit的char之外,还有16bit的short型,32bit的long型等等。另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。
如何进行大小端转换
对于小于等于32位的数字来说,C语言有库进行转换,例如:
ntohl() 将一个无符号长整形数从网络字节顺序转换为主机字节顺序
htonl() 将一个32位数从主机字节顺序转换成网络字节顺序
小端转大端
linux系统 :#include <arpa/inet.h>
uint32_t ntohl(uint32_t netlong);
参数:netlong:一个以网络字节顺序表达的32位数。
返回值:ntohl()返回一个以主机字节顺序表达的数。
uint32_t htonl(uint32_t hostlong);
参数:hostlong:主机字节顺序表达的32位数。
返回值:htonl()返回一个网络字节顺序的值。
u_short PASCAL FAR htons( u_short hostshort);
hostshort:主机字节顺序表达的16位数。
返回值:htons()返回一个网络字节顺序的值。
uint16_t ntohs(uint16_t netshort);
netshort:一个以网络字节顺序表达的16位数。
返回值:ntohs()返回一个以主机字节顺序表达的数。
in_addr_t inet_addr(const char* strptr);
参数:strptr--点分十进制数(IP)
返回值:长整型数据
daddr.s_addr=inet_addr("192.168.1.60");
头文件:stdio.h
标准错误信息输出函数
void perror(const char *str);
str -- 这是 C 字符串,包含了一个自定义消息,将显示在原本的错误消息之前
dns
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
链接一台服务器:
需要什么:
IP地址和端口号
为什么我链接百度的时候
我只需要提供 [www.baidu.com](http://www.baidu.com)
首先 www.baidu.com 实际上是一个IP别名–域名
如果想把 www.baidu.com变换成 IP 就需要DNS解析器
NAT网络地址转换技术便派上了用场。举个例子,比如说你的设备需要访问广域网中的某个设备,设备中的数据需要通过网关,将设备的IP地址映射为网关的IP,再通过此IP访问广域网中的设备。你的所有设备原有IP地址都会被转换成网关的IP,以此IP来传输数据。