Tcp/IP协议中,一端要给另一端发送数据,是先进行ARP请求和应答,还是先建立tcp连接?
Tcp/IP协议中,一端要给另一端发送数据,是先进行ARP请求和应答,还是先建立tcp连接?
如果是前者:我ARP请求完之后,得到了MAC地址,就可以直接发送数据了,连TCP连接都不用建立?还是说发送的第一份IP数据报其实就是tcp连接的SYN请求?
如果是后者:那我连MAC地址都不知道,连对方的第二层都到不了,还怎么进行TCP连接?
在看《TCPIP协议详解 卷一》的时候,发现有这么一句话 “当我们看到建立连接的T C P报文段序列时,会发现A R P请求对应于T C P试图发送的初始TCP SYN(同步)段。” 不是很理解这句话,所以对这两者的先后关系产生了疑问
多谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
MAC地址只用于在局域网中,主机与主机,主机与交换机之间数据收发的目的地标识。IP地址和MAC地址的对应关系(ARP查询)只在局域网中有意义,因为数据发送是先在局域网中,然后经过路由器一层层进入广域网,再一层层回到对端的局域网。在IP通信中,如果对方的IP不在当前局域网,那么数据包需要由网关发送给高一层的路由器,由高一层的路由器负责路由转发,所以这个时候发送端只要知道网关的MAC地址就可以了,因为你就算知道对端的MAC地址也没用,你的当前局域网是查不到这个MAC地址的。即使目标主机就在同一个局域网中,在TCP通信过程中,依旧需要依靠IP来进行,不可能直接通过MAC地址,只不过此时,你的网关既负责二层交换,同时也负责IP路由。
你会有这个疑问的原因是你还没有明白OSI七层或者TCP/IP五层中的这个层次关系。
“当我们看到建立连接的TCP报文段序列时,会发现ARP请求对应于TCP试图发送的初始TCP SYN(同步)段。”这句话的意思是,现在假如我们和一台机器还未建立起通讯,假设是个局域网,不需要经过网关,那么过程如下:
TCP确定了目标地址,192.168.1.100.
IP查询ARP表,如果发现192.168.1.100的MAC地址在,那么就把包交给链路层,至此结束。
IP查询ARP表,发现192.168.1.100并不在表中,那么链路层和网络层之间的sap会让ARP发送报文去询问,哪一台MAC地址是具有192.168.1.100的,询问完成,更新ARP表,开始发包,至此结束。
常规状态下ARP表会有老化和更新,单纯讨论TCP与ARP的先后没有意义,但是可以这么说,TCP能够连接是在ARP完备之后的。就好比你出门之前是不是要穿衣服一样,你没穿你就要穿衣服,你穿了就可以直接出门,但是不能说出门就一定要有穿衣服这个动作,只是说出门的时候你的衣服是穿好的,当然你也可以裸奔。