TCP/IP 协议和 OSI 7层 参考模型
TCP/IP可以说是OSI 7层 参考模型的简化版,TCP/IP中将OSI7层模型中的应用层,表示层,会话层合为一个应用层
TCP/IP协议分为四层有以下两种情况:
- 应用层 传输控制层 网络层 链路层
- 传输控制层 网络层 链路层 物理层 或者五层
- 应用层 传输控制层 网络层 链路层 物理层
每层的作用简单概括下就是
- 应用层:直接为用户的应用进程提供服务。在因特网中的应用层协议很多,如支持万维网应用的HTTP协议,支持电子邮件的SMTP协议,支持文件传送的FTP协议等等。
- 传输控制层:负责网络连接中的两各主机之间的数据传输。主要使用两种协议:TCP(传输控制协议)和UDP(用户数据包协议)
- 网络层:处理在网络上流动的数据包。规定了通过怎样的路径(所谓的传输路线)到达另一主机,并把数据包传送给另一主机。再主机之间通过多台主机或者网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
- 链路层:处理连接网络的硬件部分。包括控制操作系统,硬件的设备驱动,NIC(网络适配器,即网卡),以及光钎等物理可见部分(还包括连接器等一切传输媒介)。
硬件上的范畴均在链路层的作用范围之内。
5.物理层:为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。
TCP
TCP是面向连接的,可靠的传输协议,会采用采用三次握手确认建立一个连接
三次握手
- 第一次握手:建立连接时,客户端client向服务器server发送一段TCP报文,其中:
- 标记位为SYN,表示“请求建立新连接”;
- 序号为seq= i(i一般为1);
- 随后客户端进入SYN-SENT阶段。
- 第二次握手:服务器server接收到来自客户端client的TCP报文之后,结束LISTEN阶段。并返回一段TCP报文,其中:
- 标志位为SYN和ACK,表示“确认客户端的报文seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”(即告诉客户端,服务器收到了你的数据);
- 序号为seq=y;
- 确认号为ack=i+1,表示收到客户端的序号seq并将其值加1作为自己确认号ack的值;随后服务器端进入SYN-RCVD阶段。
- 第三次握手:客户端client接收到来自服务器server的确认收到数据的TCP报文之后,明确了从客户端client到服务器server的数据传输是正常的,结束SYN-SENT阶段。并返回最后一段TCP报文。其中:
- 标志位为ACK,表示“确认收到服务器端同意连接的信号”(即告诉服务器,我知道你收到我发的数据了);
- 序号为seq=i+1,表示收到服务器端的确认号ack,并将其值作为自己的序号值;
- 确认号为ack=y+1,表示收到服务器端序号seq,并将其值加1作为自己的确认号Ack的值;
- 随后客户端进入ESTABLISHED阶段。
完成三次握手后就可以开始进行数据发送和交换了。
四次挥手
- 第一次挥手:客户端client想要释放连接,向服务器server发送一段TCP报文,其中: - 标记位为FIN,表示“请求释放连接“;
- 序号为seq=m;
- 随后客户端client进入FIN-WAIT-1阶段,即半关闭阶段。并且停止在客户端client到服务器server方向上发送数据,但是客户端client仍然能接收从服务器server传输过来的数据。
- 第二次挥手:服务器server接收到从客户端client发出的TCP报文之后,确认了客户端client想要释放连接,随后服务器server结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文,其中:
- 标记位为ACK,表示“接收到客户端client发送的释放连接的请求”;
- 序号为seq=n;;
- 确认号为ack=m+1,表示是在收到客户端client报文的基础上,将其序号seq值加1作为本段报文确认号ack的值;
- 随后服务器server开始准备释放与客户端client方向上的连接,客户端client收到从服务器server发出的TCP报文之后,确认了服务器server收到了客户端client发出的释放连接请求,随后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段。
- 第三次挥手:服务器server再次向客户端client发出一段TCP报文,其中:
- 标记位为FIN,ACK,表示“已经准备好释放连接了”。注意:这里的ACK并不是确认收到服务器server报文的确认报文。
- 序号为seq=w;
- 确认号为ack=m+1;表示是在收到客户端client报文的基础上,将其序号seq值加1作为本段报文确认号ack的值。
- 随后服务器server结束CLOSE-WAIT阶段,进入LAST-ACK阶段。并且停止在服务器server到客户端client的方向上发送数据,但是服务器server仍然能够接收从客户端client传输过来的数据。
- 客户端client收到从服务器server发出的TCP报文,确认了服务器server已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器server发送一段报文,其中:
- 标记位为ACK,表示“接收到服务器server准备好释放连接的信号”。
- 序号为seq=m+1;表示是在收到了服务器server报文的基础上,将其确认号ack值作为本段报文序号的值。
- 确认号为ack=w+1;表示是在收到了服务器server报文的基础上,将其序号seq值作为本段报文确认号的值。
- 随后客户端开始在TIME-WAIT阶段等待2MSL
服务器server收到从客户端client发出的TCP报文之后结束LAST-ACK阶段,进入CLOSED阶段。由此正式确认关闭服务器server到客户端方向上的连接。
客户端client等待完2MSL之后,结束TIME-WAIT阶段,进入CLOSED阶段,由此完成“四次挥手”。
tcp标志位,有6种标示:
- SYN(synchronous建立联机)
- ACK(acknowledgement 确认)
- PSH(push传送)
- FIN(finish结束)
- RST(reset重置)
- URG(urgent紧急)
- seq(序号,占4个字节,范围[0,4284967296])
socket:ip+port ip+port 每一个socket是独立且隔离的