网络编程基础

网络编程基础

一、网络发展背景

独立模式:每台计算机相对独立。无法共同处理任务。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zw0Nhh0h-1643076473322)(C:\Users\han\AppData\Roaming\Typora\typora-user-images\image-20211209133519381.png)]

网络互联:多台计算机连接在一起,完成数据共享。共享数据由一个主机完成管理。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-khhQM7nm-1643076473324)(C:\Users\han\AppData\Roaming\Typora\typora-user-images\image-20211209133840932.png)]

局域网:连接的终端越来越多,通过交换机和路由器将更多台计算机连接在一起。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p6udA4ld-1643076473325)(C:\Users\han\AppData\Roaming\Typora\typora-user-images\image-20211209134128930.png)]

广域网:将远隔千里的计算机全部连接在一起(把各个局域网连接在一起)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LMyfNNXu-1643076473325)(C:\Users\han\AppData\Roaming\Typora\typora-user-images\image-20211209134413595.png)]

二、IP地址

IP地址是每一台计算机在网络中的唯一标识。

**ipv4:**uint32_t类型的整数,不到43亿。也就是说地球上如果每个人一个计算机,IP地址根本不够分配。

  • DHCP - 动态地址分配,谁上网就给谁分配IP地址。
  • NAT - 地址转换技术,用于组建私网,私网内所有计算机都公用一个IP地址。

上面两种方法用于解决ipv4IP地址不够分配的问题。

**ipv6:**uint8_t ip[16], IP地址有128位,但是并不向前兼容ipv4,更换成ipv6的成本很大,所以并没有完全更换为ipv6。

网络中的每一条数据都包含两个关键信息,源端IP,对端IP,这两个信息描述了数据从哪来和到哪去。

三、端口

port,主机上一个网络通信进程的标识,表示这个网络数据应该被计算机的哪个进程处理。

端口号是一个uint16_t类型的数据:0~65535,所以一个计算机中最多可以有65535个处理网络通信的进程。

一个端口只能被一个进程占用,但是一个进程可以占用多个端口。

网络中的每一条数据还包含两个关键信息,源端端口,对端端口。


也就是说,一条完整的网络通信数据中,包含了源端IP,对端IP,源端端口,对端端口,才算是完整的描述了数据从哪来,到哪去,应该被谁处理。


四、协议

网络通信协议:就是网络通信中的数据格式约定。网络通信中的主机必须遵循同一种标准的协议才能够完成网络互联。

计算机生产厂商有很多,计算机操作系统, 也有很多,计算机网络硬件设备, 还是有很多,如何让这些不同厂商之间生产的计算机能够相互 顺畅的通信? 就需要有人站出来,,约定一个共同的标准,大家都来遵守, 这就是 网络协议

协议分层

1、OSI七层模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OWwNnLoM-1643076473326)(C:\Users\han\AppData\Roaming\Typora\typora-user-images\image-20211209145959781.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aDsCqC1h-1643076473326)(C:\Users\han\AppData\Roaming\Typora\typora-user-images\image-20211209150100222.png)]

OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范,把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机。

OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输,它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,但是, 它既复杂又不实用; 所以还有TCP/IP五层模型。

2、TCP/IP五层模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8GFM90Vk-1643076473327)(C:\Users\han\AppData\Roaming\Typora\typora-user-images\image-20211209151804765.png)]

应用层:负责应用程序之间的沟通。

传输层:负责进程之间的传输,TCP和UDP协议描述了端口的信息。描述了哪两段在进行通信。

网络层:负责IP地址的管理,与数据在网络中传输的路由路径规划选择。IP协议描述了IP信息。路由器就是在网络层工作的设备。

数据链路层:负责相邻设备之间的数据传输。ETH(以太网协议)。交换机就是在数据链路层工作的设备,负责相邻网络之间的数据发。

物理层:负责物理光电信号的传输。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决 定了最大传输速率、传输距离、抗干扰性等。 集线器(Hub)工作在物理层。集线器的作用:信号放大,使信号传送的更远。

五、网络传输基本流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-elqzHPlX-1643076473327)(C:\Users\han\AppData\Roaming\Typora\typora-user-images\image-20211211142422213.png)]

数据的封装和分用

不同的协议层对数据包有不同的称谓,在应用层被称为请求和相应,在传输层叫做数据段(segment),在网络层叫做数据报 (datagram),在数据链路层叫做数据帧(frame)。

应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息。

  • 数据包 = 报头 + 数据(有效载荷)

数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理,称为分用。

  • 几句所有的协议都要解决报头和有效载荷的分界问题。
  • 几乎所有协议都要解决分离报头后,要将自己的有效载荷交给上层的哪个协议。
  • 局域网中,所有的主机都可以直接通讯。在数据链路层,有一个mac地址(网卡硬件地址),这个序列号是全球唯一的。同一局域网内,一台计算机要和另一台计算机通信,所有的计算机都会收到,在数据链路层先进行解包,如果mac地址不是自己的地址,就进行数据丢弃,如果mac地址是自己的,就把解包后的数据发送给网络层再进行首部分离。所以在用户的角度看来数据就是从一台计算机只发给了另一台计算机,其他计算机并没有收到,原因是在数据链路层判断mac地址不是自己的之后,就讲数据丢弃了,网络层、传输层、应用层根本不知道。

跨网络传输时,以太网帧结构的内容(通过路由器跨局域网通信,要不停的改变目标mac地址)一定在不断变化。

六、网络字节序

字节序:CPU对于内存中的数据进行存取的顺序。

内存中是有高低地址之分的,一块儿内存的起始地址就是低地址。对于二进制数据来说0x01020304,左面是高位,右面是低位。

主机字节序的分类

  • 大端:低地址存高位,在内存的低地址处存储数据的高比特位。
  • 小端:低地址存低位,在内存的低地址处存储数据的低比特位。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FcmHbaS5-1643076473327)(C:\Users\han\AppData\Roaming\Typora\typora-user-images\image-20211211144030522.png)]

字节序对于网络通信的影响

字节序取决于CPU,不同结构的CPU字节序可能不同,如果不同的计算机使用了不同架构的CPU,也就是不同字节序的主机进行网络通信就有可能会出问题。

X86架构 ——> 小端字节序; MIPS ——> 大端字节序。

因为字节序会对网络通信产生影响,所以在网络通信中订立了网络字节序标准,在网络通信中必须使用大端字节序。 这样的话不管发送方是什么字节序,能够确保网络中都是大端字节序,接收方只需要根据自己主机的字节序进行转换就可以。

字节序针对的数据类型

存储单元大于一个字节的数据类型:short;int;float;double以及对应的无符号类型。

char arr[10]:本身不涉及字节序,因为本身就是单字节存储。

int arr[10]:只需要考虑内部单个int类型的字节序,数组元素本身就是单个存储。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值