客户端:像这种通过发送请求获取服务器资源的Web浏览器等就叫做客户端。
Web浏览器作为客户端,一个为服务器,Web浏览器通过指定的访问地址获取服务器上的资源,服务器使用HTTP协议的通信返回到Web浏览器。
什么是HTTP协议呢?
HTTP叫做超文本传输协议,它是TCP/IP协议的一个应用层协议,用于定义Web浏览器与Web服务器之间的交换数据的过程。
客户端连上web服务器后,若想获得web服务器中的某个web资源,需要遵循一定的通讯格式,HTTP协议用于定义客户端和web服务器端通讯的格式。
HTML:HyperText Markup Language
超文本标记语言
HTTP:HyperText Transfer Protocol
超文本传输协议
URL:Uniform Resource Locator
统一资源定位符
TCP/IP 的分层管理
TCP/IP协议族按层次分别为 应用层,传输层,网络层,数据链路层,物理层。可以按照不同的模型分4层或者是7层。
将TCP/IP分为5层,越靠下越接近硬件。
- 应用层,应用程序收到传输层的数据后,接下来就是要进行解读,解读必须要先规定好格式,而应用层就是规定应用程序的数据格式,主要协议有HTTP等。
- 传输层,该层为两台主机上的应用程序提供端到端的通信,传输层有两个传输协议为TCP(传输控制协议)和UDP(用户数据报协议),TCP是一个可靠的面向连接的协议,UDP是不可靠或者说无连接的协议。
- 网络层,决定如何将数据从发送方到接收方,是建立主机到主机的通信。
- 数据链路层,控制网络层与物理层之间的通信,主要功能是保证物理线路上进行可靠的数据传递。
- 物理层,该层负责物理传输,与链路有关,也与传输的介质有关。
我们按照4层来说明,TCP/IP协议族按层次分别分为以下:应用层,传输层,网络层,数据链路层。
- 应用层,应用层决定了向用户提供应用服务时通信的活动,如FTP,文件传输协议和DNS服务,HTTP协议处于应用层。
- 传输层,传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输,有TCP传输控制协议和UDP用户数据报协议。
- 网络层,用来处理在网络上流动的数据包,规定哪条传输路线将数据包传送到对方计算机。
- 链路层,用来处理连接网络的硬件部分,包含操作系统,硬件的设备驱动,NIC等。
利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信
发送端会从应用层往下走,即应用层(HTTP客户端),传输层(TCP),网络层(IP),链路层(网络),而接收端则是从链路层往上走的。
发送端在层与层之间进行传输的时候,每经过一层必须被打上该层所属的首部信息,反之,接收端在接收数据时,每经过一层,就会把对应的首部去掉,这种把信息包装起来的做法叫做“封装”。
传输层,TCP/UDP
传输控制协议和用户数据报协议,重点再说一次,TCP是一种可靠的面向连接的协议,而UDP不是可靠的,或说是无连接的协议。
- TCP的可靠性是强的,它是可靠的,连接性,是面向连接的,报文,是面向字节流的,效率是,传输效率低,双工性,全双工,流量控制是滑动窗口,拥塞控制是慢开始,拥塞避免,快重传,快恢复的,传输速度是慢的,应用场景是对效率要求低,对准确性要求高或者要求有连接的场景。
- UDP的不是可靠的,无连接的,面向报文的,传输效率高的,一对一,一对多,多对一,多对多,流量控制,无,拥塞控制,无,但是传输速度是快的,应用场景是对效率要求高,对准确性要求低的。
三次握手过程:
- 第一次握手是在建立连接,客户端发送连接请求报文段,把标有SYN的数据包发给服务器端即为接收端。
- 第二次握手是服务器端即接收端收到客户端的SYN的报文段,同时发送标有SYN/ACK的数据包。
- 第三次握手是客户端收到服务器端的SYN/ACK的数据包后,向服务器端发送标有ACK的数据包。
TCP有6种状态表示:
SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急)
TCP三次握手:
握手过程中使用了TCP的标志,SYN和ACK。
初始化状态:客户端处于close关闭状态,服务器处于Listen监听状态。
- 第一次握手:客户端发送请求报文将 SYN=1 同步序列号和初始化 seq=x发送给服务端,服务端从初始化状态,创建连接,等待客户端,确认接收后的状态为SYN_Receive。这个时候客户端处于等待状态为SYN_Send。
- 第二次握手,服务器接收到报文后(SYN=1,seq=x)收到请求后请求报文变为同步序列号SYN=1,初始化序列号seq=y,确认号ACK=1,ack=x+1,服务器为SYN_Receive状态,发送端的状态为:SYN_Send。
- 第三次握手,客户端收到服务端的数据包(收到响应后),然后发送同步序列号ack=y+1和数据包的序列号seq=x+1和ACK=1确认包作为应答(第三次握手:ACK=1,seq=x+1,ack=y+1),客户端和服务端变化为established状态。
发送三封信息给女朋友,这三次握手主要是为了验证我这边和女朋友那边的发送/收信能力是没有问题的,证明连接是通的,可以正式发送信息。
- 第一次握手,我发送信息,女朋友收到了,此时女朋友就知道,我发送信息的能力和她自己的收信能力是没问题的。
- 第二次握手,女朋友发送信息,我收到了,此时我明白,我的发送信息和接收信息是没有问题的,还是要进行第三次握手的,如果没有我的回音,女朋友还不知道自己的发送信息功能是否没有问题的。
- 第三次握手,我发送信息,女朋友收到了,此时女朋友也确认了,我们两者之间的发送和收信都是没有问题的。
DNS服务
DNS服务和HTTP协议一样位于应用层。
提供域名到IP地址之间的解析服务。DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。
四次挥手
第一次挥手
客户端设置seq和 ACK ,向服务器发送一个 FIN=1报文段。此时,(第一次挥手,FIN=1,seq=u)客户端进入 FIN_WAIT 状态,表示客户端没有数据要发送给服务端了。
第二次挥手
服务端收到了客户端发送的 FIN 报文段,向客户端回了一个 ACK 报文段。
第三次挥手
服务端向客户端发送FIN 报文段,请求关闭连接,同时服务端进入 LAST_ACK 状态。
第四次挥手
客户端收到服务端发送的 FIN 报文段后,向服务端发送 ACK 报文段,然后客户端进入 TIME_WAIT 状态。服务端收到客户端的 ACK 报文段以后,就关闭连接。此时,客户端等待 2MSL(指一个片段在网络中最大的存活时间)后依然没有收到回复,则说明服务端已经正常关闭,这样客户端就可以关闭连接了。
参考博客
程序员小灰): 连肝7个晚上,总结了计算机网络的知识点!