计算机网络中协议相关的问题(转)

Posted netpig

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络中协议相关的问题(转)相关的知识,希望对你有一定的参考价值。

目录

TCP对应的协议和UDP对应的协议

协议上的各种机器

交换机、路由器的概念,各自的用途,区别

路由器的分组转发算法。

说说静态路由和动态路由有什么区别

传输层协议与网络层协议的区别?

硬件(MAC)地址的概念及作用。

IP、TCP、UDP头部都有哪些东西?

TCP和UDP的区别?

TCP通过哪些措施,保证传输可靠?

面向连接和非面向连接的服务的特点是什么?

为什么 TCP 叫数据流模式? UDP 叫数据报模式?

TFTP与FTP的区别

怎样使用 UDP 实现 TCP 的可靠传输

TCP的三次握手过程?为什么会采用三次握手,二次握手可以吗?

TCP的四次挥手过程,为什么要四次

TIME_WAIT状态的概念及意义。

大写ACK与小写ack的区别

ARP是地址解析协议,简单语言解释一下工作原理。

简述一下ping的原理

TTL是什么,作用是什么,哪些工具会用到它?

计算机网络涉及的各种表

分层协议

OSI分层   (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

TCP/IP分层(4层):网络接口层、网络层、传输层、应用层。

五层协议(5层):   物理层、数据链路层、网络层、传输层、 应用层。

 

每一层的协议如下:

物理层:RJ45、CLOCK、IEEE802.3    (中继器,集线器,网关)

数据链路层:PPP、FR、HDLC、VLAN、MAC   (网桥,交换机)

网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP  (路由器)

传输层:TCP、UDP、SPX

会话层:NFS、SQL、NETBios、RPC

表示层:JPEG、MPEG、ASII

应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS(网关)

 

 

 

 

TCP对应的协议和UDP对应的协议
TCP对应的协议:

(1) FTP:定义了文件传输协议,使用21端口。

(2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。

(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。

(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。

(5) HTTP:是从Web服务器传输超文本到本地浏览器的传送协议,使用80端口。

 

UDP对应的协议:

(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。

(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。

(3) TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

 

 

 

 

协议上的各种机器
Ø 中继器的主要功能是对接收到的信号进行再生整形放大以扩大网络的传输距离。

Ø 集线器在此基础上将所有的节点集中在以它为中心的节点中,可组成星型拓扑结构。

Ø 网桥是数据链路层互联的设备,在网络互联中可起到数据接收、地址过滤与数据转发的作用,可用来实现多个不同网络系统之间的数据交换。

Ø 交换机是一种基于MAC识别,能完成封装转发数据包功能的网络设备。它可以“学习”MAC地址,并把其存放在内部地址表中,当一个数据帧的目的地址在MAC地址表中有映射时,它被转发到连接目的节点的端口而不是所有端口。交换机将局域网分为多个冲突域,每个冲突域都是有独立的宽带,因此大大提高了局域网的带宽。

Ø 路由器用于连接多个逻辑上分开的网络,具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网。

Ø 网关在网络层以上实现网络互连,用于两个高层协议不同的网络互连。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。网关早期的时候就是路由器的别名,但是在现在的网络模型中把它归为应用层设备。主要功能是过滤数据包信息以实现相应的功能

交换机、路由器的概念,各自的用途,区别
交换机(ARP缓存IP对应的MAC地址)数据链路层

    在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机 会“学习”新的地址,并把它添加到内部地址表中。

    交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张MAC表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。

数    据链路层的交换机存储的是mac地址对应的在交换机中的端口,即它可以拿到网络层arp后的mac地址去使用,若没有存储此mac对应的端口,则广播到所有端口

 

路由器(路由和转发)网络层

    路由器(Router)是一种计算机网络设备,提供了路由与转发两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转发。路由器工作在OSI模型的第三层——即网络层,例如IP协议。

路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。

 

交换机与路由器有什么区别?

工作所处的OSI层次不一样,交换机工作在OSI第二层数据链路层,路由器工作在OSI第三层网络层
寻址方式不同:交换机根据MAC地址寻址,路由器根据IP地址寻址
转发速度不同:交换机的转发速度快,路由器转发速度相对较慢。
路由器的分组转发算法。
1)从数据报的首部提取目的主机的IP地址D(小),得出目的网络地址N(大)

2)若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要在经过其他路由器,直接把数据报交付给目的主机(这里包括把目的地址D转换为具体的MAC地址,把数据报封装成MAC帧,在发送此帧);否则就是间接交付。

3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器。

4)若路由表中有达到网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器。

5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器。否则执行6)。

6)报告转发分组出错。

说说静态路由和动态路由有什么区别
静态路由是由管理员手工配置的,适合比较简单的网络或需要做路由特殊控制。而动态路由则是由动态路由协议自动维护的,不需人工干预,适合比较复杂大型的网络。

 

路由器能够自动地建立自己的路由表,并且能够根据实际情况的变化适时地进行调整。动态路由机制的运作依赖路由器的两个基本功能:对路由表的维护;路由器之间适时的路由信息交换。

 

传输层协议与网络层协议的区别?
网络层协议负责的是提供主机间的逻辑通信

传输层协议负责的是提供进程间的逻辑通信

 

硬件(MAC)地址的概念及作用。
概念:MAC地址就是在媒体接入层上使用的地址,也叫物理地址、硬件地址或链路地址,其被固化在适配器的ROM中。可见MAC地址实际上就是适配器地址或适配器标识符。当某台计算机使用某块适配器后,适配器上的标识符就成为该计算机的MAC地址。MAC地址长度为6字节(48比特),由IEEE的注册管理结构RA进行管理分配。

作用:MAC地址是计算机的唯一标识,在数据链路层中,交换机通过识别MAC地址进行数据包的传输。

 

 

IP、TCP、UDP头部都有哪些东西?
IP头部(60字节:20固定、40可变,可以认为首部是20字节)

 

 

 

 

TCP头部

 

 

 

UDP头部

 

 

TCP和UDP的区别?
TCP(Transmission Control Protocol)的概念

TCP是一种面向连接的,提供可靠交付服务和全双工通信的,基于字节流的端到端的传输层通信协议。

 

TCP在传输数据之前必须先建立连接,数据传输结束后要释放连接。

每一条TCP连接只能有2个端点,故TCP不提供广播或多播服务。

TCP提供可靠交付,通过TCP连接传输的数据,无差错、不丢失、不重复、并且按序到达。

TCP是面向字节流的。虽然应用进程和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。TCP并不知道所传输的字节流的含义。

 

UDP(UserDatagram Protocol)的概念

UDP是一种无连接的,尽最大努力交付的,基于报文的端到端的传输层通信协议。

UDP在发送数据之前不需要建立连接

UDP不保证可靠交付,主机不需要建立复杂的连接状态

UDP是面向报文的。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界,即应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。在接收端,UDP一次交付一个完整的报文。

UDP没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低。

UDP支持一对一、一对多、多对一和多对多的交互通信。

UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

 

区别角度

TCP

UDP

是否连接

面向连接(发送数据前需要建立连接)

无连接(发送数据无需连接)

是否丢包重试

实现了数据传输时各种控制功能,可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制

不会进行丢包重试,也不会纠正到达的顺序

模式

流模式(面向字节流)

数据报模式(面向报文)

对应关系

一对一

支持一对一,一对多,多对一和多对多的交互通信

头部开销

最小20字节

只能8字节

可靠性

全双工非常可靠、无差错、不丢失、不重复、且按序到达

不保证可靠交付,不保证顺序到达

拥塞控制

无拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

资源要求

TCP程序结构较复杂,较多

UDP程序结构简单,少

 

 

使用情况

TCP协议适用于对效率要求相对低,但对准确性要求相对高的场景下,或者是有一种连接概念的场景下;而UDP协议适用于对效率要求相对高,对准确性要求相对低的场景。

 

很多文章都说TCP协议可靠,UDP协议不可靠!为什么前者可靠,后者不可靠呢?既然UDP协议不可靠,为什么还要使用它呢?所谓的TCP协议是面向连接的协议,面向连接是什么呢?TCP和UDP都是传输层的协议!从编程的角度看,就是两个模块(模块就是代码的集合,一系列代码的组合提供相应的功能!模块化最终目的就是:分工协作!模块化好处:便于扩展开发以及维护!)。

 

 

在一个TCP连接中,仅有两方进行彼此通信,因此广播和多播不能用于TCP

TCP使用校验和,累积确认和重传机制来保证可靠传输

TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制

 

TCP协议和UDP协议为什么会共存?

1)大家要知道,一种物理线路,单位时间内,能够创建的“虚拟信道”是有限的!

2)使用TCP协议传输数据,当数据从A端传到B端后,B端会发送一个确认包(ACK包)给A端,告知A端数据我已收到!UDP协议就没有这种确认机制!这就是为什么说TCP协议可靠,UDP协议不可靠.

QQ普通会员就是使用的UDP协议进行传输数据!既然UDP协议自身没有确认机制,这个工作可以交给应用层的进程来完成(QQ)!大家使用QQ的时候,感觉出错的几率还是非常小吧!当然,把这个确认工作完全交给QQ自身来做,就直接导致了,QQ软件体积增大!

有些应用,对数据传输可靠性要求非常高,例如大家浏览网页,通过网页注册帐号、转帐等服务,这是不容许出错的,使用TCP协议能把出错的可能性降到最低(当然,网络自身很糟糕,TCP协议也没办法)。但是,提供这种可靠服务,会加大网络带宽的开销,因为“虚拟信道”是持续存在的,同时网络中还会出现大量的ACK和FIN包!

因此,鱼和熊掌不可兼得,需根据实际情况选择传输协议。TCP协议提供了可靠的数据传输,但是其拥塞控制、数据校验、重传机制的网络开销很大,不适合实时通信,所以选择开销很小的UDP协议来传输数据。

 

TCP通过哪些措施,保证传输可靠?
TCP提供一种面向连接的、可靠的字节流服务。

    面向连接:意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。

 

TCP通过下列方式来提供可靠性:

1、应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。(将数据截断为合理的长度,数据块)

 

2、当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 (超时重传)

 

3、当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒 (对于收到的请求,给出确认响应) (之所以推迟,可能是要对包做完整校验)

 

4、TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。 (校验出包有错,丢弃报文段,不给出响应,TCP发送数据端,超时会重发数据)(校验机制)

 

5、既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。 (对失序数据进行重新排序,然后才交给应用层)

 

6、既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。(对于重复数据,能够丢弃重复数据)

 

7、TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。(TCP可以进行流量控制,防止较快主机致使较慢主机的缓冲区溢出)TCP使用的流量控制协议是可变大小的滑动窗口协议。

 

字节流服务:

两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。我们将这称为字节流服务(bytestreamservice)。

 

TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。

 

面向连接和非面向连接的服务的特点是什么?
    面向连接的服务,通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道,在通信过程中,整个连接的情况一直可以被实时地监控和管理。

    非面向连接的服务,不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控。

 

为什么 TCP 叫数据流模式? UDP 叫数据报模式?
    所谓的“流模式”,是指TCP发送端发送几次数据和接收端接收几次数据是没有必然联系的,比如你通过 TCP连接给另一端发送数据,你只调用了一次 write,发送了100个字节,但是对方可以分10次收完,每次10个字节;你也可以调用10次write,每次10个字节,但是对方可以一次就收完。

    原因:这是因为TCP是面向连接的,一个 socket 中收到的数据都是由同一台主机发出,且有序地到达,所以每次读取多少数据都可以。

    所谓的“数据报模式”,是指UDP发送端调用了几次 write,接收端必须用相同次数的 read 读完。UDP是基于报文的,在接收的时候,每次最多只能读取一个报文,报文和报文是不会合并的,如果缓冲区小于报文长度,则多出的部分会被丢弃。

    原因:这是因为UDP是无连接的,只要知道接收端的 IP 和端口,任何主机都可以向接收端发送数据。 这时候,如果一次能读取超过一个报文的数据, 则会乱套。

 

TFTP与FTP的区别
FTP(File Transfer Protocol,文件传输协议)协议在TCP/IP协议族中属于应用层协议,用于在远端服务器和本地客户端之间传输文件,使用TCP端口20和21进行传输。端口20用于传输数据,端口21用于传输控制消息。

TFTP(Trivial File TransferProtocol,简单文件传输协议)也是用于在远端服务器和本地主机之间传输文件的,相对于FTP,TFTP没有复杂的交互存取接口和认证控制,适用于客户端和服务器之间不需要复杂交互的环境。TFTP协议的运行基于UDP协议,使用UDP端口69进行数据传输。

 

基于的传输协议不一样:FTP是基于TCP、TFTP是基于UDP

端口号不一样:FTP是用21.20、TFTP是69

速度和安全方面:FTP在速度方面没有TFTP快,但是FTP安全好

 

怎样使用 UDP 实现 TCP 的可靠传输
要使用 UDP 来构建可靠的面向连接的数据传输,就要实现类似于 TCP 协议的超时重传,有序接收,应答确认,校验,滑动窗口,流量控制等机制,等于说要在传输层的上一层(或者直接在应用层)实现 TCP 协议的可靠数据传输机制,比如使用 UDP 数据包+序列号,UDP 数据包+时间戳等方法,在服务器端进行应答确认机制,这样就会保证不可靠的 UDP 协议进行可靠的数据传输

 

TCP的三次握手过程?为什么会采用三次握手,二次握手可以吗?
答:建立连接的过程是利用客户服务器模式,假设主机A为客户端,主机B为服务器端。

(1)TCP的三次握手过程:主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;主机A再次对主机B的确认进行确认。

(2)采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。

(3)采用两次握手不行,原因就是上面说的实效的连接请求的特殊情况。

 

 

TCP的四次挥手过程,为什么要四次
为什么需要四次挥手?

因为TCP有个半关闭状态,假设A.B要释放连接,那么A发送一个释放连接报文给B,B收到后发送确认,这个时候A不发数据,但是B如果发数据A还是要接收,这叫半关闭。然后B还要发给A连接释放报文,然后A发确认,所以是4次。

 

在tcp连接握手时为何ACK是和SYN一起发送?这里ACK却没有和FIN一起发送呢?

是因为tcp是全双工模式,接收到FIN时意味将没有数据再发来,但是还是可以继续发送数据。

 

 

 

 

 

 

 

TIME_WAIT状态的概念及意义。
1)为了保证客户端发送的最后一个ACK报文段能够到达服务器。这个ACK报文段可能丢失,因而使处在LAST_ACK状态的服务器收不到确认。服务器会超时重传FIN+ACK报文段,客户端就能在2MSL时间内收到这个重传的FIN+ACK报文段,接着客户端重传一次确认,重启计时器。最好,客户端和服务器都正常进入到CLOSED状态。如果客户端在TIME-WAIT状态不等待一段时间,而是再发送完ACK报文后立即释放连接,那么就无法收到服务器重传的FIN+ACK报文段,因而也不会再发送一次确认报文。这样,服务器就无法按照正常步骤进入CLOSED状态。

2)防止已失效的连接请求报文段出现在本连接中。客户端在发送完最后一个ACK确认报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

 

为什么TIME_WAIT状态还需要等2*MSL(Max SegmentLifetime,最大分段生存期)秒之后才能返回到CLOSED状态呢?

答:因为虽然双方都同意关闭连接了,而且握手的4个报文也都发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SENT状态到ESTABLISH状态那样),但是我们必须假想网络是不可靠的,你无法保证你最后发送的ACK报文一定会被对方收到,就是说对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

 

大写ACK与小写ack的区别
大写ACK是TCP头部Flags标志服里面的标志

 

 

TCP头部部分如图:

 

如图,小写ack就是上面的确认号,大写ACK就是下面的标志位

ack占用4个字节=4*8=32bit,ACK占1bit

 

ARP是地址解析协议,简单语言解释一下工作原理。
ARP为网络层协议

1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。

2:当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。

3:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。

4:源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

 

ARP协议的用途:解决同一个局域网内主机或路由器的IP地址和MAC地址的映射问题。

算法:在主机的ARP高速缓存中应存放一个从IP地址到MAC地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。

 

广播发送ARP请求,单播发送ARP响应。

 

ARP表记录在路由器,ip层是第三层,mac层是第二层,低层为高层服务。数据包的传送过程就一个“打包-拆包”的过程。

1、arp表项是把主机的ip地址和mac地址进行对应,在路由器进行路由寻址的时候,首先要看ip包头的内容,找到目标ip地址,然后根据路由表进行转发;

2、若A路由器对ip包头的目标ip地址进行分析后,A路由器根据路由表的信息,找到ip包的下一跳和出接口信息进行转发,发送到下一跳B路由器上,这时候A路由器和下一跳B路由器之间是点对点的通信,或者说:A、B两台路由器必然各有一个接口属于同一网段;

3、A路由器发送ip报文给B,因为属于同一网段,因此,A必须知道B的接口的MAC地址(这就是二层为三层提供传输服务),于是A向B发送ARP请求报文,请求B的对应接口的MAC地址,B收到请求报文后,用arp回应报文答复,告诉A:B的mac地址是多少。

4、A路由器将B的ip地址和mac地址进行绑定,形成arp表,然后在ip报文外封装二层报头:包含了B的mac地址,从相应接口发送出去;

5、B收到后,检查MAC地址,发现目标MAC地址是自己的,于是拆除二层报头,分析ip报头,再次进行和A一样的操作过程。

 

arp表是一个不断学习、更新的过程,每通信一次,arp表中的相应内容要更新一次。

 

简述一下ping的原理
Ping(Packet InterNet Groper)分组网间探测是ICMP的一个重要应用,用来测试两个主机之间的连通性。Ping使用了ICMP回送请求与回送回答报文。Ping是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的TCP或UDP。

ping就是给目标IP地址发送一个 ICMP 回显请求,并要求对方返回一个 ICMP 回显应答来确定两台网络机器是否连通,时延是多少。

实现原理为向目的主机发送4个32字节长的ICMP回送请求报文,若目的主机正常工作并且响应了该ICMP回送请求报文,就将发回ICMP回送回答报文。最后可得出的统计结果为目的IP地址,发送的,收到的和丢失的分组数,及往返时间的最小值、最大值和平均值。

    Ping命令格式为ping hostname 此hostname即为要测试连通性的主机名或它的IP地址。

 

在 ICMP 逐层封装的过程中,需要知道源IP、源MAC地址、目的IP、目的MAC地址,前三者是已知的,只需要获取目的MAC地址即可:

若在同一网段,只需要发送ARP广播;

若不在同一网段,发送ARP广播给交换机,交换机若没有缓存目的IP对应的MAC地址,它会再转发该ARP广播包。

 

Ping工作过程——

    假定主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,都在同一子网内,则当你在主机A上运行“Ping 192.168.1.2”后,都发生了些什么呢?

首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.1.2”一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“192.168.1.2”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并在一个arp映射表中查找出IP地址192.168.1.2所对应的物理地址(也叫MAC地址,熟悉网卡配置的朋友不会陌生,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。

 

    其中映射表由ARP实现。ARP(Address Resolution Protocol)是地址解析协议,是一种将IP地址转化成物理地址的协议。ARP具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据链路层(MAC层,也就是相当于OSI的第二层)的MAC地址。

 

    主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。

 

即先由IP地址,在网络层传输,然后再根据mac地址由数据链路层传送到目的主机

TTL是什么,作用是什么,哪些工具会用到它?
比如:(ping traceroute ifconfig netstat)

TTL(Time To Live)是指生存时间,简单来说,它表示了数据包在网络中的时间,经过一个路由器后TTL就减1,这样TTL最终会减为0,当TTL为0时,则将数据包丢弃,这样也就是因为两个路由器之间可能形成环,如果没有TTL的限制,则数据包将会在这个环上一直死转,由于有了TTL,最终TTL为0后,则将数据包丢弃。

ping发送数据包里面有TTL,但是并非是必须的,即没有TTL也是能正常工作的

traceroute正是因为有了TTL才能正常工作

ifconfig是用来配置网卡信息的,不需要TTL

netstat是用来显示路由表的,也是不需要TTL的

计算机网络涉及的各种表
MAC表/ CAM表(FDB表,2层 交换机):MAC地址——接口/端口,MAC地址表是MAC地址和交换机接口的逻辑关系表,负责二层的数据转发。

 

ARP表(2.5层 路由器):MAC地址——IP地址;

 

路由表(FIB表,3层):路由表是IP地址可达范围的一张表,相当于是网络里的地图,负责三层的数据转发;网段——网关——出接口(网关路由);网段——出接口(直连路由);网络地址(主机路由)。

 

DAI检测表(Dynamic ARP Inspection 牛逼的交换机):动态ARP检测(用于防御ARP欺骗,从网络设备上丢弃欺骗包)

交换机记录每个接口对应的IP地址和MAC,即port<->mac<->ip,生成DAI检测表;(普通交换机只记录port<->mac)
交换机检测每个接口发送过来的ARP回应包,根据DAI表判断是否违规,若违规则丢弃此数据包并对接口进行惩罚。
DHCP侦听表:

 

DNS高速缓存:在应用层存储域名对应的IP地址,即 域名<->IP

 

 
原文:https://blog.csdn.net/qq_35642036/article/details/82768635 

以上是关于计算机网络中协议相关的问题(转)的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP网络协议基础知识集锦[转]

USBRS485串口UDP转MQTT TCP http json网络通信协议对接定制开发

面试问题之计算机网络:OSI七层网络模型及相关协议

(转)从浏览器访问一个地址的过程

OAuth网络协议(转)

[转]linux 网络协议栈——网络设备