1 简介
TCP/IP(传输控制/网络协议),是网络中最基本的通信协议,他描述了计算机必须遵守的规则,保证计算机之间进行通信。
2 常见协议
TCP/IP协议是一个协议族,是不同协议的大集合。例如http协议也是他的一个子集。
其他常见的协议如下:
- TCP(传输控制协议):用于应用程序到网络之间通信
- UDP(用户数据协议):应用程序之间的简单通信
- IP(网络协议):计算机之间的通信
- HTTP(超文本传输协议):负责web服务器与web浏览器之间的通信
- HTTPS(安全的HTTP):负责web服务器与web浏览器之间的安全通信
- SSL(安全套接字层):SSL协议用于为安全数据传输加密数据
- POP(邮局协议):从邮件服务器下载电子邮件
- IMAP(消息访问协议):用于存储和取回电子邮件
- SMTP(简易邮件传输协议):多用于电子邮件的传输
- MIME(多用于邮件扩展传输):MIME协议使SMPT有能力通过TCP/IP网络传输多媒体文件(声音、视频、二进制数据等)
- FTP(文件传输协议):负责计算机之间的文件传输
- NTP(网络时间协议):用于在计算机之间同步时间
- DHCP(动态主机配置协议):用于向网络中的计算机分配动态IP地址
3 TCP/IP模型
TCP/IP协议族早期是一个四层的体系结构,包括应用层、传输层、网络层、网络接口层。
3.1 应用层
作用:
主要规定向用户提供服务时通信的协议。例如FTP(文件传输协议)、SMTP(邮件传送协议)、DNS(域名解析协议)、Telnet(远程登录协议)等。
3.2 传输层
作用:
对接上层应用层,提供两个计算机之间的数据传输所使用的协议。主要有面向连接的协议TCP和面向无连接的协议UDP。
TCP和UDP主要区别:
- TCP是一种可靠的协议,可以正确处理传输中异常与数据错乱等问题;而UDP是一种不可靠的协议,他无法保证数据的可靠交付
- TCP提供了阻塞控制,用于缓解网络拥堵;UDP不会检查网络拥堵情况,数据包是否到达情况
- UDP的优势是效率比较高,常用于分组数据少、视频、多媒体等领域
3.3 网络层
作用:
如两个计算机之间传输数据需要通过多台计算机或设备,网络层的作用就是为这两个计算机之间的通信规定一条传输路线。也可以理解为数据透明传送。
包含的主要协议有:IP协议(因特网互联协议)、ICMP协议(因特网报文控制协议)
细分的功能有:寻址、路由选择、建立连接、保持、终止等。
3.4 网络接口层
TCP/IP协议族后期参考ISO七层模型,将网络接口层又分为 数据链路层 和 物理层。
3.4.1 数据链路层
作用:
确定网络数据包的形式,规定了在不同的链路上如何传输数据、提供不同的协议和特征(包括物理编止、网络拓扑结构、数据错误检测、数据帧序列、流控等)。
3.4.2 物理层
作用:
是TCP/IP最底层的负责传输的硬件(类似于以太网或电话线路等物理层设备)。
3.5 理解TCP/IP四层模型、五层模型、ISO七层模型
ISO的7层模型:早期推出的一个国际模型标准,但并未被广泛应用。
TCP/IP的4层模型:是目前市场最流行的模型,参考ISO的模型实现。
TCP/IP的5层模型:基于TCP/IP的4层模型将网络接口层进行了抽象拆分成数据链路层和物理层。
对比:
ISO的7层模型是先规定的模型,再有的协议;先定的标准,再进行实践。
而TCP/IP四层模型相反,是先有的协议,再参考ISO模型设计四层模型。
相比于TCP/IP五层模型,ISO模型是将应用层细分为了应用层、表示层、会话层。
应用层:面向具体的应用传输
表示层:将数据转换成合适的、可以理解的语法或语义
会话层:维护网络中的链接状态
4 TCP的三次握手
TCP既是一种可靠性的协议,所以他的可靠的数据传输通到的建立需要三次握手。
第一次握手:客户端需要建立链接时,发送一个确认连接的报文(SYN=1,随机序列号seq=x)。
第二次握手:服务端接收到链接请求的报文时,返回确认报文给客户端(SYN=1,ACK=1,ack=x+1,随机序列号seq=y)。
第三次握手:客户端接收到服务端的确认链接返回的ACK报文后,会发送一次回执请求到服务器(ACK=1,ack=y+1,seq=x+1),表示确认已经收到。
5 TCP的四次挥手
三次握手是为了建立可靠的数据传输通到,而四次挥手则是保证数据都传输完成再关闭连接。
第一次挥手:客户端关闭连接时,发送断开连接的请求给服务器(FIN报文,随机生成的seq=u),且自己处于FIN-WIST状态。
第二次挥手:服务器收到FIN关闭请求后,返回一个确认报文(ACK=1,ack=u+1,随机生成seq),表示已经收到客户端要关闭。
第三次挥手:服务器数据传输完了之后,发送一个FIN报文给客户端(FIN = 1,ACK = 1,ack = u + 1,seq = w),表示服务器要准备关闭连接了。
第四次挥手:客户端收到服务器的FIN报文后,会回复一个ACK报文(ACK = 1,seq = u + 1,ack = w + 1),且进入TIME-WAIT状态。表示回复服务器已经收到,客户端等待2MSL之后关闭连接。