从输入URL开始

作者 Zwe1 日期 2018-04-08
从输入URL开始

从输入URL开始

  1. 浏览器向DNS域名服务器发送请求,解析当前域名获取对应的IP地址。
  2. 浏览器获得IP地址后,向服务器发送请求。(三次握手,四次挥手)
  3. 服务器接收到请求后,返回请求相应的内容。
  4. 浏览器接收到内容后,完成渲染

TCP协议

说到关于浏览器的网络通信就不得不提TCP/IP协议簇和著名的三次握手及四次挥手。TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,

TCP协议三次握手

TCP协议是稳定可靠的面向连接协议,需要在传输数据前,先建立稳定的通信链路。三次握手的目的是同步连接双方的序列号和确认号 并交换 TCP窗口大小信息。

真实版

  1. 请求建立链接。客户端进入SYN_SEND状态,等待服务器确认。
  2. 服务器收到SYN报文段。响应客户端,回传响应报文,服务器进入SYN_RECV状态。
  3. 客户端收到服务器确认连接的响应。向服务器发送接收到响应回复的报文,两端都进入ESTABLISHED状态,完成三次握手。

梦幻版

  1. 牛哥,我们聊天吧?(请求建立连接)
  2. 好的,猪妹妹。(同意建立连接)
  3. 既然你同意了,牛哥,那我们开聊吧。(确认建立连接)

三次握手?

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。在谢希仁的《计算机网络》书中举了一个例子,如下:”已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”这就很明白了,防止了服务器端的一直等待而浪费资源。

TCP协议四次挥手

当客户端和服务器之间的数据传输完毕,需要确认断开连接。断开连接的请求既可以由客户端也可由服务端发起。

真实版

  1. 主机1发起结束信号。向主机2发送报文,表达已无数据发送,进入FIN_WAIT_1状态,请求结束连接。
  2. 主机2收到结束连接请求后,确认可关闭连接,向主机1回传结束确认信息。
  3. 主机2向主机1发送报文,请求关闭连接。
  4. 主机1收到主机2发送的确认关闭连接的信号,向主机2发送报文通知主机1可关闭连接。主机2收到主机1的可关闭连接信号,就此关闭连接。主机1等待2ms后依然没有收到回复,表明主机2已正常关闭,主机1随后关闭连接。

梦幻版

  1. 牛哥,我们不聊了吧?(请求结束连接)
  2. 好的,猪妹妹。(收到结束连接请求)
  3. 那猪妹妹,我也没什么要说的了。我们不聊了吧?(同意结束连接)
  4. 好的,那你先走吧。(结束连接)
    牛哥,走了吗?
    我也走了。

四次挥手?

当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2, 它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文 段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN 报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此 就会愉快的中断这次TCP连接。

TCP和UDP的区别

常被问及TCP和UDP有什么区别?这里简单的概括下。

TCP

  1. 面向连接,必须与通信方建立可靠的连接。
  2. 保证数据正确,有序,数据包丢失,会进行重传。
  3. 数据包结构复杂。
  4. 传输速度慢。

UDP

  1. 面向无连接。
  2. 无法处理数据丢失,数据可能乱序。
  3. 数据包结构简单,包头只有8字节。
  4. 传输速度快。