前言
这篇博客博主将详细地介绍有关网络知识的一些相关概念,坐好板凳发车啦~
一相关知识
1.1IP地址
IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单来说,IP地址用于定位主机的网络地址。
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:
01100100.00000100.00000101.00000110。
1.2端口号
在网络通信中,IP地址用于标识主机网络地址,端口号可以表示主机发送数据、接收数据的进程。
简单来说:端口号用于定位主机中的进程。
端口号是0~65535范围内的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网
络数据。
1.3协议
协议,是网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定,规则。如怎么样建立连接、怎么样互相识别等。只有遵循这个约定,计算机才能相互通信交流。
协议(protocol)最终体现为在网络上传输的数据包的格式。
五元组
在TCP/IP协议中,用五元组来标识一个网络通信:
1.源IP:标识源主机;
2.源端口号:标识源主机中该次通信发送数据的进程;
3.目的IP:识别目的主机;
4.目的端口号:标识目的主机中该次通信接收数据的进程;
5.协议号:标识发送进程和接收进程双方约定的数据格式。
1.4协议分层
对于网络协议来说,往往分成几个层次来进行定义。
好处:类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接;
在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务);
对于使用方来说:并不关心提供方是如何实现的,只需要使用接口即可
对于提供方来说:利用封装的特性,隐藏了实现的细节,只需要开放接口即可。
OSI七层协议
应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
其中,应用层,表示层,会话层在应用程序上进行,传输层和网络层在操作系统上进行,数据链路
层和物理层在设备驱动程序与网络接口上进行。
TCP/IP五层(或四层)模型
1.5封装与分用
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。
1.6两台主机之间的网络通信过程
两台主机通信有两种情况:1.在同一网段中 2.不在同一网段中
(1.)在同一网段的通信过程
主机在应用层上的操作:
TCP/IP协议上tcp的端口对应的各种应用程序,客户机要访问某个应用程序就会要求打开主机的这个固定的端口。而客户机自己会打开一个大于1024的随机端口用来跟对方的主机进行通信。用户使用应用程序编辑信息,一个单一的会话,实际上就是一个主机应用层之间的逻辑的软件连接。
主机在传输层的操作:
对数据分段(Segment),添加TCP报头(包含源端口,目的端口,顺序号,确认序列号等)
分段的原因:
(A):可同时多个应用程序发送数据。
(B):数据包过大产生错误时,还需重新传送,即占带快又占时间,小数据包对数据流影响就小很多。
(C):各种网络传输介质有其最大的传输单元限制,不允许在网络上出现巨大的数据包。
主机在网络层的操作:
当传输层为数据分段添加了TCP头之后,将数据下发给网络层处理。网络层会为传输层传来的数据包添加IP报头(包含源IP地址,目的IP地址)封装成数据包
主机在数链路层的操作:
数据链路层在数据包的前面封装上数据帧头,在数据包的后面封装上校验位,从而把数据包封装成数据帧。(添加源MAC地址和目的MAC地址,如果主机不知道目标MAC地址则想交换机发送ARP广播从而得到目标MAC地址)
主机对物理层的操作:
将从逻辑链路层发送过来数据帧转换成能在物理线路上传输的电子信号,传递给网络上的转发设备交换机,由交换机进行处理。
交换机对数据帧的处理:
交换机接收到数据流后根据发送过来的数据帧的MAC地址查找目的主机,将数据发送给目的主机。转发过程不改变数据帧结构。
目的主机接收到数据帧的操作:
当目的主机接收到数据帧后对比目的MAC,如是发送给自己的,则拆去数据帧头,发往网络层,网络层对比目的IP,如相同则拆包发往传输层,传输层再对比目的端口,确认相同则拆去数据段交给应用程进行数据组装。
(2.)位于不同网段上的两台主机之间的通信过程
主机A上的工作:
由于主机A和主机B并不在同一个网段,主机A是不可能通过ARP解析到主机B的MAC地址的,同时,主机A也是一个没有路由能力的网络节点,所以主机A是不可能依靠自己的力量把数据发送到主机B上去的。主机A必须依靠网络中的路由器将数据包路由到相应的目的网络。
主机A网络配置:配置自己IP和子网掩码 同时配置网关(谁为主机提供访问其他网段的可能,默认网关就填谁的IP地址。‘路由器、代理服务器’)
[DNS:DNS提供目的地址的域名解析,如在局域网的不同网段内,可填本局域网内的DNS服务器。如果访问INTERNET外网的域名,则填写ISP的DNS服务器。]
填写了默认网关之后,主机A通过ARP解析,就可以知道路由器A的MAC地址。当主机A要向主机B发送文件时,就可以通过路由器A将数据包发送到目的地。
例: 主机A发送数据到其他网段的B主机过程。
1.主机A应用层数据到传输层被分段,打上TCP头(含源端口,目的端口),再向下发给网络层,打上IP地址(含源IP,目的IP),再向下发送给数据链路层,打上数据帧(含源MAC,目的MAC),由于不知道目的MAC,则在MAC上打上于网关(路由器接口)的MAC地址,发往路由器A。
2.路由器A收到消息后,重新封装数据帧(得知发送到B主机需要经过路由器B),于是修改源MAC地址为路由器A的MAC地址,目标地址为B的MAC地址,(路由器A进行NAT地址转换)
3.路由器B收到路由器A的信息,核对地址,检查IP,修改MAC,源MAC改为路由器B的MAC,(假如主机B在路由器B的子网中)目标MAC填写主机B的MAC,即下一步将信息发送给主机B。
4.主机B接收到数据后对数据拆帧、包,TCP头,检查其目的地址与校验,重新整合这些数据流之后,将这个数据流传递给应用层处理。
总结:
对于处于同一交换机的lan来说,进行通信,需要知道目标的ip和mac地址,通过发生广播数据包(一般2层目标mac地址为FFFFFFFF,3层目标ip就为目标ip),会像处于同一lan的所有ip进行比较,找到目标ip后向源发送一个单播包,这样就知道了目标ip的mac地址,但是如果ip不在一个网段或者同一个lan,这时通过arp广播,是不行的,需要路由器转发,这就需要配置源ip的网卡以及掩码,网关(网关需要配置成路由器接口的ip),这样数据包的目的mac就填充成了路由器接口的mac,发生数据包到路由器,然后路由器拆包,检查2层mac地址,发现目标mac为自己的mac,欣喜若狂,然后拆掉3层检查ip,发现目标ip不是自己,然后拿着目标ip的网络号和路由表中的表项进行比较,找到最优的(最长匹配原则),若未找到就丢弃服务器托管,并给源返回一个icmp错误,如果找到,重新封包(目标mac为下一跳ip对应的mac地址),把数据发生下一跳地址,当数据包到后,总是进行拆包,先检查2层mac地址是否为自己的,如果是,再拆掉3层ip头,检查目标ip是否为自己的,如果是,再拆4层,检查目标端口号是否在监听或者等待数据中,如果是,就把拆掉的应用数据发生给当前端口对应的进程,若未找到对应的端口,则会设置rst错误
注意:1.数据通信是双向的,比如ping ,既可以发生数据又可以接收数据
2.对于路由器接口直连的网络,直接就在路由表中生成,其他的需要配置,(一般配置就是比如华为 ip route-static 源ip 掩码 下一跳地址),既要路由表配置目标ip的路由,让其可以到达目的地,也要配置回来的,就是源ip对应的路由,让其可以返回一个回应,这才是一个能够ping通的关键
arp -a查看路由表
tracert 查看到达目标ip经过多少路由,多少跳
尾语
这篇博客到这里就结束啦,希望可以给大家带来帮助~~
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 【开源训练数据集1】神经语言程式(NLP)项目的15 个开源训练数据集
一个聊天机器人需要大量的训练数据,以便在无需人工干预的情况下快速解决用户服务器托管网的询问。然而,聊天机器人开发的主要瓶颈是获取现实的、面向任务的对话数据来训练这些基于机器学习的系统。 我们整理了训练聊天机器人所需的对话数据集,包括问答数据、客户支持数据、对话…