Tcp/IP协议中,一端要给另一端发送数据,是先进行ARP请求和应答,还是先建立tcp连接?

xxdd11223
  • 439

Tcp/IP协议中,一端要给另一端发送数据,是先进行ARP请求和应答,还是先建立tcp连接?

如果是前者:我ARP请求完之后,得到了MAC地址,就可以直接发送数据了,连TCP连接都不用建立?还是说发送的第一份IP数据报其实就是tcp连接的SYN请求?

如果是后者:那我连MAC地址都不知道,连对方的第二层都到不了,还怎么进行TCP连接?

在看《TCPIP协议详解 卷一》的时候,发现有这么一句话 “当我们看到建立连接的T C P报文段序列时,会发现A R P请求对应于T C P试图发送的初始TCP SYN(同步)段。” 不是很理解这句话,所以对这两者的先后关系产生了疑问

多谢!

回复
阅读 3.7k
2 个回答

MAC地址只用于在局域网中,主机与主机,主机与交换机之间数据收发的目的地标识。IP地址和MAC地址的对应关系(ARP查询)只在局域网中有意义,因为数据发送是先在局域网中,然后经过路由器一层层进入广域网,再一层层回到对端的局域网。在IP通信中,如果对方的IP不在当前局域网,那么数据包需要由网关发送给高一层的路由器,由高一层的路由器负责路由转发,所以这个时候发送端只要知道网关的MAC地址就可以了,因为你就算知道对端的MAC地址也没用,你的当前局域网是查不到这个MAC地址的。即使目标主机就在同一个局域网中,在TCP通信过程中,依旧需要依靠IP来进行,不可能直接通过MAC地址,只不过此时,你的网关既负责二层交换,同时也负责IP路由。

你会有这个疑问的原因是你还没有明白OSI七层或者TCP/IP五层中的这个层次关系。
“当我们看到建立连接的TCP报文段序列时,会发现ARP请求对应于TCP试图发送的初始TCP SYN(同步)段。”这句话的意思是,现在假如我们和一台机器还未建立起通讯,假设是个局域网,不需要经过网关,那么过程如下:

  1. TCP确定了目标地址,192.168.1.100.

  2. IP查询ARP表,如果发现192.168.1.100的MAC地址在,那么就把包交给链路层,至此结束。

  3. IP查询ARP表,发现192.168.1.100并不在表中,那么链路层和网络层之间的sap会让ARP发送报文去询问,哪一台MAC地址是具有192.168.1.100的,询问完成,更新ARP表,开始发包,至此结束。

常规状态下ARP表会有老化和更新,单纯讨论TCP与ARP的先后没有意义,但是可以这么说,TCP能够连接是在ARP完备之后的。就好比你出门之前是不是要穿衣服一样,你没穿你就要穿衣服,你穿了就可以直接出门,但是不能说出门就一定要有穿衣服这个动作,只是说出门的时候你的衣服是穿好的,当然你也可以裸奔。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏