概述
TCP/IP协议不是一个单个的协议,而是一个协议族。
互联网进行通信时,需要相应的网络协议,TCP/IP 原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。
分层
OSI七层模型:应用层,表示层,会话层,传输层,网络层,物理链路层,物理层。
TCP/IP四层协议模型:应用层,传输层,网络层,链路层。
互联网的地址
互联网上的接口都有一个唯一的Internet地址(IP地址),IP地址长32bit。
IP地址分为五类,并且有不同的格式和范围:
类型 | 范围 |
---|---|
A类 | 0.0.0.0~127.255.255.255 |
B类 | 128.0.0.0~191.255.255.255 |
A类 | 192.0.0.0~223.255.255.255 |
A类 | 224.0.0.0~239.255.255.255 |
A类 | 240.0.0.0~247.255.255.255 |
域名系统
域名系统(DNS)是一个分布式的数据库,用来存储IP地址与主机名之间的映射关系
封装
应用程序用TCP传数据的时候,数据被送入协议栈中。用户数据经由 应用程序,TCP,IP,以太网驱动程序进行层层封装来生成数据报文。
端口号
TCP和UDP使用16bit的端口号来识别应用程序,理论上有2^16(0~65535)个端口号。
查看unix系统下的端口号:grep telnet /etc/services
IP:网际协议
特点
不可靠,无连接
IP首部
普通IP首部由20个字节组成,包含4位版本号,4位首部长度,8位服务类型,16位总长度,16位标识,3位标志,13位片偏移,8位生存时间,8位协议,16位首部检验和,32位源IP之地,32位目的IP地址。
IP路由选择
IP层在内存中有一个路由表,当收到一份数据包并进行发送时,都会对该表进行一次搜索。首先会查看目的IP地址是否为本机的IP地址之一或者IP广播地址,如果是,那么数据表就会被送到由IP首部协议字段所指定的协议模块进行处理,如果不是这些地址,IP层会被设置成路由器的功能,对数据报进行转发。
所有IP路由选择只为数据报传输提供下一站路由器的IP地址,它假定下一站路由器比发送数据报的主机更接近目的,而且下一站路由器与主机是直接相连的。
路由表中的每一项都包含下面这些信息:
- 目的IP地址
- 下一站的IP地址
- 标志
- 为数据报的传输指定一个传输接口
IP路由选择主要完成的功能:
- 搜索本机路由表,寻找能与目的IP地址完全匹配的条目
- 搜索路由表,寻找能与目的网络号想匹配的条目
- 搜索路由表,寻找名为“默认”的条目
UDP:用户数据报协议
概述
UDP是一个简单的面向数据报的运输层协议。
UDP是不可靠的,它把应用程序传给IP层的数据发送出去,但是并不保证他们能够到达目的地。
UDP首部
UDP首部由8字节组成,分别为16位源端口号,16位目的端口号,16位UDP长度,16位UDP检验和。
TCP协议
概述
TCP协议是一个面向连接的协议。
建立和终止连接
在TCP报文中比较重要的字段有:
- 序号(Seq),32bit
- 确认号(Ack),32bit
- 标志位(Flags):共 6 个,即 URG、ACK、PSH、RST、SYN、FIN 等。
建立连接:
- 客户端给服务器发送一段TCP报文,标记位为 SYN,表示“请求建立新连接”;序号为 Seq=x(x 一般为 1);随后客户端进入 SYN-SENT 阶段
- 服务器端接收到来自客户端的 TCP 报文之后,结束 LISTEN 阶段。并返回一段 TCP 报文。标记位为ACK,SYN,Ack=x+1,Seq=y,服务器进入SYN-RCVD状态
- 客户端接收到来自服务器端的确认收到数据的 TCP 报文之后,明确了从客户端到服务器的数据传输是正常的,结束 SYN-SENT 阶段。并返回最后一段 TCP 报文。标志位为ACK,Ack=y+1,随后客户端进入 ESTABLISHED 阶段。
服务器接收到确认信号之后进入ESTABLISHED阶段,建立连接,开始传输数据。
终止连接:
- 客户端发送标志位为FIN,Seq=u,客户端进入FIN_WAIT_1阶段
- 服务器收到终止信号,发送标志位为ACK,Ack=u+1,Seq=v,服务器进入CLOSE_WAIT阶段,客户端收到确认信号,进入FIN_WAIT_2阶段
- 服务器做好了断开连接的准备后,向客户端发送标记位为FIN,ACK,Ack=v+1,Seq=w ,服务器进入LASK_ACK阶段
- 客户端收到服务器准备好的信号后,向服务器发送标记位为ACK,Ack=w+1,Seq=u+1,客户端等待2MSL后关闭连接,服务器收到确认信号后,关闭连接
超时重传
TCP的的超时重传是保证TCP可靠性的一个重要机制。
原理:在发送一个数据以后开启计时器,一定时间内没有收到ACK报文,则重传数据。