Linux网络通信:网络通信基础

前言

网络就是利用物理链路将各个孤立的工作站或主机连接在一起组成的数据链路。

通信就是人与人之间通过某种介质实现信息的交互。

网络通信在Linux下简单理解其实就是不同主机的进程间通信。

一:IP地址

  • 概念:

IP地址(Internet Protocol Address):互联网协议地址(uint32_t无符号四个字节的整数)

  • 作用:

IP地址在网络中唯一标识一台主机, 每一台主机都有自己的IP地址来精确定位主机,从而实现不同主机间的精确通信(知道数据是从哪台主机发送到哪台主机上)。并且网络通信中的每条数据都包含有源IP地址目的IP地址

  • DHCP:动态主机配置协议

DHCP(Dynamic Host Configuration Protocol:动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率

当DHCP服务器接收到来自网络主机申请地址的信息时,才会向网络主机发送相关的地址配置等信息,以实现网络主机地址信息的动态配置。

  • NAT:网络地址转换

NAT(Network Address Translation:网络地址转换)我们一般使用私网IP 作为局域网内部的主机标识,使用公网IP 作为互联网上通信的标识。内部结点要与外部网络进行通信时,就在NAT网关将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接,通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭问题。

  • IPv6:互联网协议第六版

由于IPv4(地址长度为32位) 最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6(地址长度为128位) 的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍,但是ipv6不兼容ipv4因此目前发展并不是很好。

二:MAC地址

  • 概念:

MAC地址:也叫物理地址、硬件地址。(地址长度位42位)

  • 作用:

MAC地址在一定程度上与硬件一致,是基于物理的,能够标识具体的网络结点。数据链路层协议可以使数据通过MAC地址从一个节点传递到相同链路的另一个节点上

三:端口

  • 概念:

端口(port):uint16_t无符号两个字节的整数

  • 作用:

端口(port)在一台主机上唯一标识一个进程,操作系统接收到数据后会交给目标进程处理(数据从主机上的哪一个进程发出,并发送给另一台主机上的哪一个进程),网络通信中每条数据都必须包含源端口目的端口

注意:一个端口只能被一个进程占用,但一个进程可以使用多个端口(多个网络通信)。

四:网络通信协议

  • 概念:

网络通信协议就是网络通信中数据格式的约定, 遵循统一的通信协议,才能保证数据传输和接收的准确性,才能实现实质的网络互联。

网络通信中每条数据都会包含一个五元组(源IP地址/源端口/目的IP地址/目的端口/协议)。

4.1 协议分层

在网络通信环境中,有很多层面的通信协议,每个层面的协议应对的通信场景和提供的服务都有所不同。协议分层最大的好处在于封装,不需要关心下层的实现,降低各层之间的耦合度,并且通信环境也会更加清晰。

  • OSI七层开放系统互联参考模型

应用层 -> 表示层 -> 会话层 -> 传输层 -> 网络层 -> 链路层 -> 物理层

  • TCP / IP五层模型

应用层 -> 传输层 -> 网络层 -> 链路层 -> 物理层

1.应用层:负责应用程序之间的如何沟通(面对程序员:程序是程序员写的)典型协议:HTTP / DNS / DHCP
2.传输层:负责两台主机进程之间的数据传输(通过端口实现)典型协议:TCP / UDP
3.网络层:负责地址管理与路由选择(通过IP地址实现、典型设备:路由器)典型协议:IP
4.链路层:负责相邻设备之间的数据传输和识别 (典型设备:交换机)典型协议:Ethernet
5.物理层:负责物理光电信号的传输 (典型设备:集线器)典型协议:Ethernet

传输层的分组可称为报文段、网络层的分组可称为数据报、链路层的分组可称为帧。

4.2 数据的传输流程

发送数据时每一层都会在信息中加入类似结构体的东西对数据进行封装,接受数据时也会一层一层分用响应的结构体获取数据。
在这里插入图片描述

五:网络字节序

  • 字节序:

字节序就是CPU在内存中对数据进行存取的顺序,一个主机的字节序取决于CPU架构。

  • 网络通信中两个主机的字节序如果不相同:

网络通信中,数据的传输是以字节为单位的,若两个主机的字节序不同,则在数据的解析过程中可能会造成数据的二义性。

基于这个问题,无论主机字节序是大端还是小端,在网络通信的过程中统一把数据的存取顺序转换为网络字节序(网络字节序其实是大端字节序)。

  • 数据传输需要转换字节序的前题:

在内存中存储数据的时候,存储单位大于一个字节的数据类型(short、int、long、float、double)需要进行字节序的转换,uint8_t、char这种以字节为存储单元的数据不要转换。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值