2015-10-17 63 views
-1

我爲什麼數據報套接字只需要知道源端口和目的端口困惑,而TCP套接字保持4看重元組:解複用:爲什麼數據報套接字只需要知道源端口和目的端口,但不知道源IP和目的IP?

  • 源端口
  • 源-IP
  • 目標端口
  • 目標-IP

爲什麼我們可以在不知道接收方IP地址的情況下發送一些數據報?

+0

爲什麼您認爲數據報可以在沒有接收方IP地址的情況下發送? – keithmo

+0

你錯了。它確實需要知道源和目標IP地址。 – EJP

回答

1

在無連接/數據報套接字上發送數據時,通常在sendto調用中指定接收方的IP地址。

MSDN來自:

sendto函數通常被用於在一個連接的套接字,以數據報發送到由所識別到參數特定的對等套接字。即使無連接套接字先前已連接到特定地址,to參數也只會覆蓋該特定數據報的目標地址。在面向連接的套接字上,to和tolen參數將被忽略,從而使sendto等同於發送。

根據定義,無連接套接字不會連接到對等體,因此在實際發送數據之前不需要指定接收方的地址。

請注意,在無連接套接字上調用connect實際上是允許的,但不是連接到遠程主機,它只是設置一個默認目標IP地址,然後在該套接字的後續send調用中使用。