2.1.1 协议栈的内部结构
- 协议栈可看做两层结构,上层包括TCP、UDP,下层包括IP、ICMP、ARP。
- 浏览器、邮件等一般应用程序收发数据用TCP,DNS查询等收发较短的控制数据时用UDP。
- IP负责发送网络包,ICMP用于告知网络包传送过程中产生的错误以及各种控制信息,ARP用于根据IP地址查询相应的以太网MAC地址。
2.1.2 套接字的实体就是通信控制信息
- 协议栈内部有一块用于存放控制信息的内存空间,用于保存通信相关的过程信息,包括通信对象的IP地址、端口号、通信状态等(例如发送数据后是否收到接收响应),这块内存空间可以看做是套接字的实体。
- 协议栈根据套接字中记录的控制信息来工作。
- netstat命令用于显示套接字信息。
2.1.3 调用socket时的操作
- 创建套接字时,首先分配一个套接字所需的内存空间,然后向其中写入初始状态,然后把代表这个套接字的描述符告知应用程序。
- 应用程序每次只要告知协议栈描述符,协议栈就能通过描述符找到套接字,得到各种通信相关信息。有了描述符,就不需要应用程序每次向协议栈传递各种通信信息。