计算机网络基础知识
互联网的本质就是一些列的网络协议。
一台电脑,虽然硬件齐全,但是想要和其他电脑进行信息交换,还得通过联网来进行。
那么问题就来了?何为"网"?其实,计算机通信和人与人之间交流类似,比如你想和一个英国人进行交流,那么前提是你得懂英文。如果你不懂英文,他说的你不懂,你说的他不懂。这样交流又有何意义呢?因此,人与人之间交流的障碍,我们可以通过协商,确认一种大家都认可的标准,按照这个标准,就可以进行交流。计算机与此类似,也需要制定一系列的标准,才能让其他计算机听懂你所传递的信息,这种标准就是我们所说的协议。
互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。
网络层次的划分
每层常见的物理设备
OSI五层模型
- 物理层(Physical Layer)
主要功能:通过物理介质来传输比特流。
主要解决问题:(1)物理层要尽可能地屏蔽掉物理设备和传输媒体,通信手段的不同,使数据链路层感觉不到这些差异,只考虑完成本层的协议和服务。
主要协议解析
- TCP协议
TCP每发送一个报文段,就启动一个定时器,如果在定时器超时之后还没有收到ACK确认,就重传该报文。如图所示,数据包由A的缓冲区发往B,B在收到数据包以后,回发一个ACK确认包给A,之后A将该数据包从缓冲区释放。因此,该数据包会一直缓存在A的缓冲区,直到一个ACK确认为止。
在TCP/IP协议中,TCP协议提供可靠的面向连接的服务;三次握手(建立连接)和四次挥手(关闭连接);使用滑动窗口机制进行流量控制;
图1 三次握手建立TCP连接的各状态
(1)第一次握手:建立连接时,客户端A发送SYN包[SYN=1,seq=x]到服务器B,并进入SYN_SEND状态,等待服务器B确认。
(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN,同时自己也发送一个SYN包,即SYN+ACK包[SYN=1,ACK=1,seq=y,ack=x+1],此时服务器B进入SYN_RECV状态。
(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK[ACK=1,seq=x+1,ack=y+1],此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据。
三次握手完成后,客户端和服务器就建立了TCP连接。这时可以调用accept函数获得此连接。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP 窗口大小信息。在socket编程中,客户端执行connect()时,将会触发三次握手。
四次挥手的详细图解
TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。TCP要保证在所有可能的情况下使得所有的数据都能够被投递,当你关闭一个socket时,主动关闭一端的socket将进入TIME_WAIT状态,而被动关闭一方则转入CLOSED状态 ,这能够保证所有的数据都被传输。
图2 四次挥手关闭TCP连接的各状态
(1)首先A B端的TCP进程都处于established状态, 当A的应用程序传送完报文段,就会去主动关闭连接。A会停止发送报文段(但是还会接收),并向B发送[FIN = 1,seq=u]数据,之后进入FIN-WAIT-1状态;
(2)B接收到A发送的请求之后,会通知应用进程,A已经不再发送数据,同时B会向A发送ACK确认数据[ACK=1,seq=v,ack=u+1 ],B进入CLOSE-WAIT状态,A接收到B发送的数据之后,A进入FIN-WAIT-2状态;此时A到B方的连接已经关闭了(即半连接状态)。
(3)当B的应用进程发现自己也没有数据需要传送,B应用进程就会发出被动关闭的请求,B此时向A发送[FIN=1,ACK=1,seq=w,ack=u+1]数据,并且进入LAST-ACK状态;
(4)A接收到B发送的数据之后,向B发送ACK确认数据[ACK =1,seq=u+1,ack=w+1],进入TIME-WAIT状态,等待2MSL之后正常关闭连接进入CLOSED状态;B接收到A发送的确认之后进入CLOSED状态。B到A方的连接关闭!至此,TCP连接才真正全部关闭!