网络基础(二)

1.局域网通信

        首先,我们要知道什么是报文?

报文是网络中交换与传输的数据单元,也是网络传输的单元

        报文=有效载荷+报头

现在知道报文了,我们就来模拟下局域网中两台主机之间的数据传输:

        数据在一台主机上再应用层添加协议报头和有效载荷形成request或response,然后将其传递到传输层,将该整体当作有效载荷,然后再添加TCP或UDP报头,形成数据段,再传输到网络层,同理,传递过来的数据段变成有效载荷,再添加上Ip(或其他协议)报头,形成数据报,再传输到链路层,将数据报看成有效载荷,添加上报头,形成数据帧,最后通过物理层传递到另一台主机上,另一台主机在不断解包,最终得到有效数据,这就是封装和解包的过程(宏观上)

根据这个我们可以提出以下问题:

为什么另一台主机可以正确解包???

这就是为什么有协议的原因,只有两个相同层次的协议相同,即相同的数据类型,这样就可以识别到从而解包

为什么数据可以正确找到目标主机???

如果你看过我的基础一的话,相信会明白,原因在于,在局域网中,mac地址可以查找(后面我们也会讲解跨局域网情况)

如果我们从底层来看:实际上封装和解包实际上就是将一个个数据类型对象放入一段内存中的过程。


2.IP地址于Mac地址

IP协议有两个版本, IPv4和IPv6. 
IP地址是在IP协议中, 用来标识网络中不同主机的地址;
对于IPv4来说, IP地址是一个4字节, 32位的整数;
我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)

 


3.源地址与目标地址

        我们知道路由器作为转发设备,一般要跨域不同的局域网,而不同的局域网的Mac地址不一样,所以路由器中存在多个Mac地址,这样当数据帧传递过来就可以知道从哪来到哪去,而在IP数据包头部中, 也有两个IP地址, 分别叫做源IP地址, 和目的IP地址,这样我们就可以清晰的知道目标与来源的位置了
 


4.port(端口)

        首先,我们从概念上讲解:

        端口号(port)是传输层协议的内容.
        端口号是一个2字节16位的整数;
        端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
        IP地址 + 端口号能够标识网络上的某一台主机的某一个进程;
        一个端口号只能被一个进程占用

上面一堆概念,实际上就是以下内容:

我们知道在OS中一个进程可以用一个pid表示,那么一个端口可以标识一个进程吗?很显然,是可以的,但是一个进程只能有一个pid,但是一个进程可以有多个端口号

例子:如果我们想要访问一个服务器进程,但是一台服务器有非常多的进程,如何正确找到目标进程呢?此时我们就可以在传输中加上port,这样就可以找到目标进程了

结论:

        互联网通信的本质就是进程间的通信,一台主机的ip+端口号就可以表示互联网中唯一的一个进程


5.UDP/TCP

TCP:

传输层协议
有连接
可靠传输
面向字节流

UDP:

传输层协议
无连接
不可靠传输
面向数据报

 


6.大小端

我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 那么如何定义网络数据流的地址呢?
发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出;
接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存;
因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址.
TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节.
不管这台主机是大端机还是小端机, 都会按照这个TCP/IP规定的网络字节序来发送/接收数据;
如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可
为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换

 

最后,感谢大家的支持!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiaofi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值