1. 游览器首先解析URL, 然后检查cache, 观察该输入的URL是否在cache中。
如果不在cache中。游览器会要求 OS 根据 URL 去得到相应的IP地址, 不同的操作系统可能有不同的方法,但是简而言之就是,OS 通过 和 DNS 服务器 进行交互 取得 对应的IP 地址。
2. 游览器开始和目标服务器进行TCP连接 - 此时传输的包中不包含数据
TCP连接是通过三次 “握手” 完成的. 为什么需要三次握手?
第一次握手: 客户端发送syn包(syn=j)到服务器, 并进入SYN_SEND状态,等待服务器确认;
第二次握手: 服务器收到syn包, 必须确认客户的SYN (ack=j+1), 同时自己也发送一个SYN包 (syn=k), 即SYN+ACK包, 此时服务器进入SYN_RECV状态;
第三次握手: 客户端收到SYN+ACK包, 并向服务器发送确认包ACK(ack=k+1), 之后服务器和客户端进入ESTABLISHED状态,完成三次握手
3. 客户端和服务端通过TCP连接, 进行数据传输 - 开始真正的数据交流
值得注意的是, TCP连接时使用socket 连接实现的, 当连接完成时, 服务端和客户端使用socket进行通信(Socket 就是一个API来表达TCP协议).连接建立后, 客户端按照HTTP的协议向服务端发送请求(请求中包含什么), 注意, 这个请求是通过传输层的TCP进行传输的, 每次请求和响应都需要建立新的TCP链接(HTTP/1.1中将只建立一次TCP链接而重复的使用它传输一系列的请求和响应,提高效率)
4. 客户端接受到来自服务器的数据
首先浏览器会对响应进行反应, 观察是否是错误码如(404等). 如果正确就对将其放到cache中并进行解码,显示给用户
什么是TCP/IP?
TCP/IP是一组协议组的统称. 主要包括了四个层的协议: 应用层(Application Layer), 传输层(Transport Layer), 网络层(Internet Layer), 链路层(LinkLayer).
应用层: 是用于不同服务器应用之间的数据建立和交流的。 主要包括: SMTP(Simple Mail Transfer Protocol), FTP(File Transfer Protocol), SSH(Secure Shell), HTTP(Hypertext Transfer Protocol), DNS(Domain Name Service)等协议
传输层: 是用于不同服务器之间的数据传输.包括 TCP协议和UDP协议
网络层: 提供路由和寻址的功能, 拥有一定的拥挤控制和流量控制的功能. 主要包括: IP. ARP. RARP. ICMP等
关系如下
HTTP 请求中包含什么?
包含: 请求方法、URI、协议版本以及相关对MIME样式的信息.
为什么需要三次握手?
防止已经失效的连接请求又发送到了服务端,因而产生错误。例如:
client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。
有问题欢迎指出!