主机通信
先上一张计算机网络 osi 7层模型
osi7层模型
如图,两台主机进行通信:
- 数据发送方将从第7层应用层产生的数据逐层向下封装,每一层就像一个翻译官,把数据转换成下一层能够理解的格式;直到层层翻译后的数据在物理层以比特流的形式传送出去
- 数据接收方从物理层接收发过来的比特流,然后逐层向上一步步对数据进行解封装,相当于向上一层一层逆翻译,从而实现【发过来的时候数据在这层是什么样子,接收的时候数据来到对等层就还原回对应的样子】,一直到最顶层应用层拿到了发送方应用层发来的数据,从而实现主机间通信
7层体系结构详细图解(盗图)
osi7层对应功能和协议详解5层体系结构
层级 | 数据单位 | 常见协议 | 主要任务 |
---|---|---|---|
应用层 | 报文message | http,https,dns,ftp | 实现各种应用任务,如播放音乐、显示图片、数学计算等,【与用户通信】 |
传输层 | 报文message | tcp udp | 实现不同主机的【应用程序间的通信】 |
网络层 | 数据包packet | ip | 【主机间通信】,网络路径寻址,确保数据及时传送 |
数据链路层 | 帧frame | SDLC、HDLC、PPP、STP、帧中继 | 将网络层下送的 IP 数据包封装成帧,在两个相邻节点间的链路上传送。帧=网络层数据+控制信息。一旦比特流在传输过程中出错可以即时通过控制信息判断出来如通过校验和判断;另外也防止上层数据封装成帧时被错误转义 |
物理层 | 比特bit | 各种底层的通信协议吧 | 利用传输介质为数据提供真实的物理传输,向上屏蔽物理介质的差异,不管是网线传输还是无线电波传输,我上层数据链路层都不必考虑具体用什么介质传输数据,把数据给到物理层就行 |
茫茫机海中,如何寻找对的机
在广域网中,ip是主机的标识,自然是通过ip地址定位目标主机
定位主机还不够,还需要定位到底是和主机上的哪个应用程序进行通信,因此我们需要端口号,通过【ip:port】来明确通信的应用程序双方
但IP在OSI第三层封装,ip数据包还要继续往下走到第二层数据链路层,而MAC地址正是在这一层。因此,除了知道目的主机的ip,还得知道它的物理地址才能在发送数据的时候在数据链路层顺利地封装成帧
将ip地址映射成mac地址,需要用到地址解析协议ARP
ARP过程:
主机A要向主机B发送信息。具体的地址解析过程如下
-
假设主机A和B在同一个网段,
(1) 主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
(2) 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全1(FFFFFFFFFFFF表示广播)的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
(3) 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
(4) 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。 -
当主机A和主机B不在同一网段
主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B
addition notes:
http协议各状态码
http状态码数据链路和物理链路的区别
- 物理链路(物理线路):没有采用高层差错控制的最基本的物理传输介质与设备,如网线、无线电
- 数据链路(逻辑线路):数据链路 = 物理线路+控制协议,也就是加上了一定的控制功能,以保证被传输数据的正确性,不然类似传输过程中0变成了1又无法解决的话就难搞了。实现这些协议的硬件和软件加到物理线路,就构成了数据链路。当采用复用技术时,如频分复用、时分复用和码分复用,一条物理链路上可以有多条数据链路
交换机和路由器的区别
- 交换机。工作在数据链路层,是一种基于MAC地址识别,完成封装转发帧的网络设备,负责的是数据在局域网内部主机间的传递。交换机可以“学习”MAC地址,并把其存放在内部地址表中,通过在数据帧的始发者和目标接收者之间建立临时的交换路径,使数据帧直接由源地址到达目的地址
- 路由器。工作在网络层,基于ip地址完成数据的转发工作,负责的是数据在网络间的传递
ping的工作原理
ping使用的是ICMP协议(Internet control message protocol),发送的原始数据是ICMP报文。ICMP报文不像http、FTP这些常见应用的报文,它不需要在运输层分组形成报文段,而是直接封装在IP包内,所使用IP协议号为1
ping是检测终端与终端之间网络通信是否正常的常用工具
Windows下 ping 命令执行后的一系列过程:
- 应用层:源主机顺序构建4个 ICMP 请求数据包
- 运输层:pass
- 网络层:由 ICMP 协议将 【 ICMP数据包+源主机ip地址+目的ip地址】 直接交给 IP 层,封装成IP数据包。注意: ICMP协议让应用层的原始数据越过了运输层而直接到达网络层进行封装,这也就是说,ICMP数据包无端口号
- 数据链路层:加入 MAC 头和帧尾,封装成帧。如果在源主机的ARP 映射表中存在目的IP对应的 MAC 地址,皆大欢喜;否则需要发送ARP请求向同一网段内的其他主机查询目的IP的MAC地址,获得 MAC地址后,封装成帧,目的地址是目的IP对应的MAC地址,源地址是本机MAC地址
- 物理层:将上面的帧以比特流的形式传送出去。。。
从ping的工作过程可知,主机A ping 主机B,如果A收到了B的一个应答包,说明两台主机之间的去、回通路均正常。也就是说,A B间的双向网络通道是完全正常的,可以从主机A到主机B,也可以从主机B到主机A
这时如果主机B ping 不通主机A,由 【B端发送ICMP包正常 + A B间网络正常】,可以推出可能是包经过网络到达A端后,被A端拒绝,那么就需要检查A端的防火墙等安全策略了
网友评论