网络数据收发操作

首先服务器在程序启动时就会创建好套接字,并处于等待状态。

客户端则是用户触发特定动作,需要访问服务器的时候创建套接字。

创建套接字后,客户端会向服务器发起连接操作。首先客户端会生成SYN为1的TCP包(包含客户端向服务端发送数据时使用的初始序号)并发送给服务器。当包达到服务器后,服务器会返回一个SYN为1的包(也包含序号,同时也包含确认已收到客户端发过来的包的ACK号)。当这个包到达客户端后,客户端会返回一个确认的ACK号的TCP包。这里连接就完成了。

 

数据收发结束后,会执行断开操作。以服务器先发起断开过程为例,首先服务器发起一个FIN为1的包,然后客户端返回一个表示确认收到的ACK号的包。接下来,客户端会向服务端发送一个FIN为1的包,同时服务器接收到包后,会返回包含ACK号的包。

 

网络数据收发操作

 

 

DNS工作

客户端向DNS发送查询消息,会包含3种信息:

域名

Class(以前用在识别网络上,现在只有互联网,没有其他网络,则固定为IN代表互联网)

记录类型(A时对应IP地址,MX对应邮件服务器)

然后DNS服务器会从域名与ip地址的对照表中查找相应的记录,并返回IP地址。

 

域名的层级(在域名中,靠近右边表示其层级越高)

网络数据收发操作

 

互联网中有数万台DNS服务器,肯定是不能一台一台的去找的。将负责管理下级域的DNS服务器的IP地址注册到它们上级DNS服务器中,然后将上级DNS服务器的IP地址再注册到更上级的DNS服务器中,由此便形成一套DNS服务器网络层级架构。

 

这样的话,就会遇到一个根域DNS服务器,并且任何DNS服务器都要求能够访问到根域DNS服务器。目前分配给根域DNS服务器的IP地址仅有13个,而且这些地址几乎不发生改变。实际上根域DNS服务器的信息已经包含着DNS服务器程序的配置文件中了,因此只要安装了DNS服务器程序,信息便自动配置好了。这样就可以通过任意一台DNS服务器找到根域DNS服务器,从而能够从顶至下找到目标服务器。

具体流程如下图:

网络数据收发操作

  1. 找最近的DNS服务器
  2. 没找到域名对于的IP,于是最近的DNS服务器请求根域DNS服务器
  3. 根域DNS服务器查询到com域的DNS服务器的ip地址,返回给最近的DNS服务器
  4. 最近的DNS服务器查询com域DNS服务器
  5. com域DNS服务器找到baidu域DNS服务器的IP地址,返回给最近的DNS服务器
  6. 最近的DNS服务器查询baidu域DNS服务器
  7. baidu域DNS服务器找到www.baidu.com的域名对于的ip地址,返回给最近的DNS服务器
  8. 最近的DNS服务器将www.baidu.com对应的ip地址返回给客户端
  9. 客户端根据得到的ip地址查询web服务器
  10. Web服务器返回结果。

 

另外DNS服务器有缓存功能,这样就可以先查缓存,缓存没有,再从根域DNS查。

 

 

相关文章: