2013-06-02 148 views
0

这可能是一个基本的疑问。 当我们在TCP套接字通信的情况下填写客户端源代码时,我们用服务器的目标地址填充套接字地址结构。使用套接字的TCP/IP通信

但是,当数据包从服务器发送回客户端时,服务器如何知道客户端的IP地址?

简而言之,谁将源IP和源端口填入发送方的IP数据包中,以便目标主机能够感受到它?

感谢

回答

0

每个IP报头包含源和目的IP地址,每个TCP报头包含源和目的端口。服务器通过检查客户端发送给它的IP和TCP数据包头来知道客户端IP地址。

操作系统中的网络堆栈填入客户端/源地址。创建客户端套接字时,可以设置自己的源端口,但大多数时候更容易让操作系统为您选择一个未使用的“短暂”端口。如果您在创建客户端套接字时未指定自己的源端口,则操作系统会将其填充到您的TCP标头中。

+0

谢谢..但我怀疑是什么组件的网络堆栈,即哪个协议填充IP数据包中的源IP地址?它是ARP/DHCP/NAT? – arpita

+0

以上都是:-)。 TCP/IP或OSI协议栈中较低层的各种路由协议和设备可以修改TCP或IP协议头,但是客户/源操作系统必须填写初始值,以便数据包可以在前往服务器。 – lreeder