TCP 首部格式如下:
可以看到 TCP 首部里面是没有 IP 地址相关的字段的。那么当数据包经过网络层的时候,网络层加一个 IP 首部,这个首部中的 IP 地址是从哪来的呢?
答案:
通过 http://www.baidu.com
访问一个域名时,首先通过 DNS 获取到 IP ,之后就可以把 HTTP 的传输工作交给操作系统中的协议栈。应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。Socket 中会用到这个 IP 来与服务器建立 TCP 连接(因为建立连接,肯定得知道服务器的位置)。
网络层中的 IP 可以通过socket中获得。具体的细节请移步看这篇:TCP Socket 编程原理详解 - 拾月凄辰
参考文章:《图解网络v3.0》-小林coding