网络通信需要了解的前情知识----IP,PORT,协议(TCP/IP五层),网络字节序


网络发展背景


根据记录所连接的计算机mac(物理网卡地址)地址,进行数据交换。
但是交换机无法进行动态的数据交换-----无法智能的识别,无法实现想发送给谁就发送给谁

在这里插入图片描述

路由器在数据交换的技术上增加了一个功能—进行网络识别,为每一条数据在网络中,选择一条合适的路径,发送到目标主机上,已经实现了想给谁发就给谁发的功能,路由器会识别这个给谁发的目的主机的网络选择

网络的划分

局域网(1000m)/城域网(低于20km)/广域网(大于20km)
互联网/因特网–更大的国际性的广域网
互联网是一种复杂的星形网络----容灾性更强

IP地址:一台主机在网络中的唯一标识

uint32_t —无符号4个字节的整数
在网络中作为主机的唯一标识----网络中主机之间的定位(哪个主机与哪个主机之间进行通信)–通过IP地址进行标识
网络中的每条数据中都会包含有 源端的IP地址/对端的IP地址
4G —不到43亿----不够用
ipv4: uint32_t —DHCP/NAT
ipv6:uint8_t addr[16]—四个43亿相乘大小—但是推广程度还很低

端口号:一台主机唯一标识的进程

uint16_t—无符号2个字节的整数
在一台主机上唯一标识一个进程—编写通信程序的时候,必须告诉计算机,发往哪个端口的数据交给我来处理
一个端口只能被一个进程占用,然而一个进程可以使用多个端口

在网络通信的每条数据中,都会包含有 源端端口/对端端口 --标识了这个数据从哪个进程发送出来,要交给哪个进程处理。

源端IP+源端端口+对端IP+对端端口:表示这条数据是从哪个主机上的哪个进程发往哪个主机上的哪个进程

网络通信协议

网络通信协议:网络通信中的数据格式约定(协议-约定)----遵循统一通信协议标准,才能实现实质通信,实现网络互联.在整个网络通信环境中有非常多的通信协议–每一个协议应对的通信场景都有所不同
协议分层:根据通信场景不同,提供的服务不同,使用的协议不同进行的层次划分
典型协议分层:OSI七层参考模型 / TCP/IP 五层模型
OSI七层参考模型:应用层/表示层/会话层/传输层/网络层/链路层/物理层
TCP/IP 五层模型:应用层/传输层/网络层/链路层/物理层

应用层:负责应用程序之间如何沟通----通信数据格式的约定;HTTP/FTP/DNS/DHCP…
传输层:负责进程之间的数据传输—端与端的描述;TCP/UDP
网络层: 负责地址管理与路由选择—主机IP地址的描述;IP;路由器
链路层:负责相邻设备之间的数据传输----网卡硬件地址的描述;以太网协议ETH;交换机
物理层:负责物理光电信号的传输;以太网协议;集线器

网络通信数据的封装与分用流程
在这里插入图片描述

网络字节序—大端字节序

网络通信中的字节序标准(将自己的数据的字节序转换成标准字节序之后再进行传输)—避免出现二义性
字节序:cpu对数据在内存中以字节为单位的存取顺序
主机字节序:一个主机字节序的大小端取决于cpu架构
在这里插入图片描述
两种判断大小端方法:
在这里插入图片描述

大端字节序:低地址存高位
小端字节序:低地址存低位

主机字节序跟网络通信有什么关系:不同主机字节序的主机进行通信容易造成数据二义
在这里插入图片描述

网络通信中,哪些数据需要进行网络字节序的转换----存储单元大于一个字节的数据类型

存储单元大于一个字节的数据类型:int16_t int32_t int64 _t ---整数类型需要转换
uint8_t char --这种以单字节为存储单元的数据是不需要转换---字符串就不需要转换

#include<arpa/inet.h>
uint32_t htonl(uint32_t hostlong);   主机->网络
uint16_t htons(uint16_t hostshort);   主机->网络
uint32_t ntohl(uint32_t netlong);   网路->主机
uint16_t ntohs(uint16_t netshort);   网路->主机
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值