最近在初学《计算机网络(自顶向下方法)》,涉及到不少协议以及其他知识点,因此在这里将它们整理并联系起来帮助记忆理解。
这里以主机A向服务器B发起一个HTTP请求为例:
假设服务器主机名:www.someschool.edu
请求的文件目录:/somedir/page.html
第一步:
主机A希望从服务器B获取一个html文件,因此打算发送一个请求报文给服务器B。但此时主机A只知道服务器的名字,但并不知道服务器的IP地址。
利用DNS目录服务获取IP地址【DNS执行步骤P84】:主机A上的DNS应用客户端利用UDP向本地DNS服务器递归查询服务器IP地址【DNS查询流程图P87图2-18】,本地DNS服务器通过迭代查询一次通过根DNS服务器、TLD DNS服务器、权威DNS服务器最终获取到目标服务器的IP地址,并将其反馈给主机A。
第二步:
既然已经获取到了服务器B的IP地址,就能建立主机A与服务器B之间的TCP连接了,HTTP报文就可以通过TCP连接发送给服务器B。
TCP连接建立【P109 P128】:
首先,主机A新建一个socket,并分配一个源端口号【端口号的范围P126】。这时候已知利用源、目的IP,并分配好源端口号,然后再分配一个目的端口号,以此4个值来标识刚刚新建的socket。
然后,主机A向目标服务器B的“欢迎socket”所对应的12000端口发送TCP连接建立请求的TCP报文段,这个报文段包括了源、目的IP、端口号总共4个值。
在主机A与服务器B的“三次握手”期间,服务器B新建一个socket。和主机A上的socket一样,也利用这4个值对其进行标识。这个socket称为“连接套接字connectionSocket”。
至此,主机A与服务器B之间的一个TCP连接建立完毕,该TCP连接以4个值进行标识。
题外话:一个进程可以有多个线程,线程与socket是一一对应的。
第三步:
TCP连接建立完毕后,就可以发送HTTP报文了【HTTP报文格式P67】。
将写好的HTTP报文打包成TCP报文段(……待续,还没学)
应用进程是如何和socket对应的? 猜测:所有进程有个表,用于统计每个进程对应的所有socket和端口号。将新建的socket以及端口号都记录到对应进程的后面,之后对收到的TCP报文的端口号和socket去查阅这个表,找到对应的进程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)