概述TCP/IP协议及其三握四挥
TCP/IP基础
TCP/IP具体含义
从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群
的统称。所谓协议可以把网络协议想象成人与人之间的礼仪行为,不同的场合有不同的礼仪行为,人是实施不同礼仪行为的主体。同样,网络设备是实施网络协议的主体,网络设备通过运行网络协议与其他的网络设备进行交流。同样的道理,你的电脑想要与网络设备交流,也要与网络设备一样运行网络协议,网络协议也是一个软件,是以系统组件的方式安装在你的电脑的操作系统里的。只有通过这些协议的规范别的电脑才能识别你发过去的信息是什么。
按照计算机网络通信的标准是把数据传输过程用OSI模型来表示,也就是有7层分别是:
层次 | 功能 |
---|---|
1.物理层(最底层) | 定义网络的接口标准 |
2.数据链路层 | 定义帧的开始和结束以及实现透明传输,差错校验 |
3.网络层 | 负责选择最佳路径和规划IP地址 |
4.传输层 | 实现可靠传输,流量控制 |
5.会话层 | 实现管理对话和同步 |
6.表示层 | 完成某些特定功能 |
7.应用层(最上层) | 所有能产生流量的程序 |
TCP/IP协议就分别属于传输层和网络层的协议。
数据传输过程
数据传输过程指的是一台电脑发送数据到另一台电脑的过程
具体过程:在应用层首先会把数据传到传输层中,传输层会把一大堆的数据分成一段一段进行传输,能够加快传输的速率,并且在数据前加上TCP头,所以在数据层的数据又可以称为数据段;接着会来到网络层,网络层会给每一段数据加上目标IP地址和源IP地址,在该层数据就被封装成我们常说的IP数据包,并且在原来的基础上也就是(TCP+上层数据)再加上IP头,那么此时的数据格式就变成了IP+TCP+上层数据;然后就会来到数据链路层,此时会在原来的基础上再加上源MAC地址和目标MAC地址,那么此时数据格式就变成以太网首部+IP+TCP+上层数据,这其实就是数据帧了,接着就会来到最底层物理层会把数据转成二进制的形式在网络中发送,发送途中借助集线器(基于物理层)、交换器(基于数据链路层)、路由器(基于网络层)来实现数据发送到对应的目标中,类似于寄快递的过程。
传输过程三次握手和四次挥手
所谓的三握四挥其实就是指的是TCP/IP协议中规范的数据交互方式,在Http、SMTP等应用层协议中使用的传输层协议。
三次握手(建立连接)
-
进行三次握手的原因就是:
防止已失效的连接请求报文突然又传到服务端,从而产生错误。在数据传输的过程中可能产生各种情况比如说:数据延迟,或者发送途中由于其他的原因卡住,这时候如果用户应为长时间没有收到消息,再一次发送请求,客户端如果没有三次握手的机制的话,会直接响应。当二者建立连接传输数据后,之前由于数据延迟的数据再一次来到服务器,此时就会发生错误。
-
具体过程:(客户端两次,服务器端一次)
- 浏览器要先发SYN码,也就是客户端请求和服务器连接
- 服务器接收SYN码再发给客户端SYN+ACK码,也就是说我们可以连接
- 客户端接收到服务器的ACK码,验证ACK是否正确,正确则建立数据连接,双方就可以开始通信
四次挥手(断开连接)
-
进行四次挥手的原因是:
四次挥手的原因是确保服务器响应数据的完整性:因为在客户端发送FIN告知发送完毕的时候,此时客户端还是需要接收服务器返回的数据的,数据还没有传输完成,直到服务器发送FIN表示无数据传输并且客户端告知数据接收完成的时候才可以结束,如果没有这个规范,那就会导致数据还没有接收完成服务器就关闭了连接,从而导致数据不完整。
-
具体过程:(客户端和服务器端各两次)
- 当客户端无数据传输的时候发FIN码告知服务器,发送完毕
- 当服务器接收完毕,告诉客户端ACK码,告诉客户端可以关闭通道
- 服务器发送完毕也会发送FIN码(表示它也没有数据要发送了),告诉浏览器数据发送完毕
- 客户端接收完毕(ACK码)同样发送ACK码告知服务器数据接收完,可关闭
需要说明的信息:
- ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
- SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。
- FIN (finish):完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
补充一点理解:
客户端输入URL地址,DNS就会解析域名得到服务器的IP地址,服务器在对应的端口监听客户端的请求,端口通过TCP/IP协议建连接。这也是为什么在数据交互的时候我们称之为路由端口,路由就是用来接收请求响应数据的,路由是基于TCP/IP连接,网络层又有TCP/IP协议,所以说路由器基于网络层实现。
网友评论