网络地址解析:
访问需要使用不同的协议,例如访问 HTTP 地址时需要使用 HTTP 协议,上传邮件附件需要使用 FTP 协议,不同的请求地址具体参数也不一样,例如Google搜索地址可以分为以下几部分:
访问地址解析
域名解析:
递归:
域名只是方便访问,实际请求还是访问IP地址
域名先会被DNS服务器从右向左划进行切割,划分成不同层级(每个层级相当于索引)后,DNS服务器将请求转发给级别最高的根域名服务器,根域名服务器如果知道域名的IP地址将直接返回给客户端,如果不知道则将请求转发给顶级域名服务器;顶级域名服务器如果知道域名的IP地址将直接返回给客户端,如果不知道则将请求转发给次级域名服务器(二级、三级…),以此类推,直到域名服务器找到IP地址返回给DNS服务器,DNS服务器收到IP地址后再返回给浏览器
域名层级解析
递归流程图解
迭代:
DNS客户端将请求发送给根域名服务器,根域名服务器如果不知道对应的IP地址,会将自身已知的顶级域名服务器返回给DNS客户端,DNS客户端在收到根域名服务器返回的顶级域名服务器后会再将请求转发给顶级域名服务器;如果顶级域名服务器也不知道对应的IP地址,会将自身已知的二级域名服务器返回给客户端,DNS客户端在收到顶级域名服务器返回的二级域名服务器后再将请求转发给三级域名服务器 … 以此类推,直到找到IP地址
迭代流程图解
Socket:
TCP/IP协议:
主要包括应用层、传输层、网络层、链路层、实体层
应用层:HTTP、FTP、SMTP
传输层:TCP、UDP
网络层:IP
链路层:Ethernet
实体层:电信号
含义:
Socket 是与其他机器进行网络通信的端点<br />在 TCP/IP 协议中,可以使用 IP地址和特定的端口用来联系唯一的网络进程,例如应用进程A绑定的是本机192.0.0.111 和 80 端口,则可以生成 Socket A 声明这个IP地址和端口;目标访问进程B绑定的是 187.0.0.222 和 98 端口,则可以生成 Socket B 来声明这个IP地址和端口,Socket A 和 Socket B 之间可以通过IO流方式进行通信<br /> io流在 java.io 包中,包含字节流和字符流,字节流处理的是字节( byte ),字符流处理的是对人类来说可读性强的字符<br /><br />**Socket通信图解**<br /> <br />** 常见IO类的关系图**
发送/返回数据:
传输数据时,需要 Socket、网络应用进程(例如浏览器访问)、网卡驱动
例如网络应用进程A(浏览器)创建 SocketA,Socket A绑定到该网络应用进程的IP地址+端口(1),告诉网卡驱动程序,所有和网络应用进程A相关的输入输出都要绑定在创建的 SocketA(2),网络应用进程A开始进行网络请求时会将数据发送给SocketA(3);网卡驱动程序从Socket A 收到数据(4)后发送到目的地,收到请求的返回结果会返回给当初请求时绑定的Socket(5),应用进程再从Socket获取数据(6)
请求流程图解