osi七层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
TCP/IP参考模型:应用层,传输层,网络层,网络接口层
其对应关系如下:
七层参考模型虽然规定的非常细致与完善,但在实际中得不到广泛的应用,原因就是他过于复杂,但他是以后许多协议的基础,而TCP/IP参考模型从一开始就遵循简单明确的设计思路,他将七层简化成四层,更有利于实现。TCP/IP各层的作用:
网络接口层:负责将二进制数据流转换成数据帧,并进行数据帧的发送与接收,数据帧是独立的网络传输单元
网络层:将数据帧封装成ip数据包,并进行必要的路由算法
传输层:负责端与端之间的通信会话的连接与建立。传输协议的选择根据数据的传输方式而定
应用层:负责应用程序的网络访问,通过端口号可以区分不同的进程
*************************************************
TCP/IP协议
从名字看只包含了两种协议,但TCP/IP是一个庞大的协议族,包含了各个层次上的不同协议:
ARP:用于获得同一物理网络的硬件主机地址
MPLS:多协议标签协议,是很有前景的下一代的网络地址
IP:负责在主机和网络之间寻址和路由数据包
ICMP:用于发送有关数据包的传送错误的协议
IGMP:被IP主机用来向本地多路广播路由器报告主机组成员的协议
TCP:为应用程序提供可靠的通信连接,适合于一次传输大批的数据的情况,并要求得到响应的应用程序
UDP:提供了无连接通信,且不对数据包的传送进行可靠性保证,适合一次传送少量的数据,可靠性由应用层来负责
1.TCP
由于TCP上一层就是应用层,所以TCP实现了一个程序与另一个程序的通信,应用程序通过打开一个socket来使用TCP服务,通过ip的源/目的可以唯一的区分网络中的两台主机,通过socket端口号可以识别不同的程序的通信
(1)TCP三次握手
看到这个三次握手我就头疼,到底是个什么玩意儿,TCP通过三次握手进行初始化,三次握手的目的是使数据段的发送和接收同步,告诉其他主机其一次可以接收的数据量,并建立起虚连接
下面是简单的描述三次握手
- 初始化主机通过一个同步标志置位的数据段发出会话要求
- 接收主机通过发送具有以下项目的数据段表示回复:同步标志置位,即将发送的数据段的起始字节的顺序号,应答并带有收到的下一个数据段的字节顺序号
- 请求主机再回送一个数据段,并带有确认顺序号和确认号
下面是个简单的TCP/IP流程图
tcp实体采用的基本协议是滑动窗口协议,当发送方发送一个数据报时,他会启动定时器,当数据报到达目的地址后,接收方会TCP实体会回送一个数据报,会包含一个确认序号,他表示希望接收到的下一个数据报的顺序号,如果超时,发送方就会重新发送这个数据报
(2)TCP数据报格式
下面解释一下各个字段的意思:
- 源/目的端口号:16位长,表示远端和本地的端口号
- 序号:表示发送数据报的顺序号
- 确认号:表示希望接收的下一个数据报的顺序号
- 6位未用
- ACK:ack置1表示确认号是合法的,如果ACK为0,表示数据报不包含确认信息,确认字段被省略
- PSH:表示带有PUSH的数据,接收方数据包一到就发送给程序,不用等到缓冲区满了才发送给程序
- RES:用于复位由于主机崩溃或其它原因出现的错误,还可以用于拒绝非法的数据报或者拒绝连接请求
- SYN:用于建立连接
- FIN:用于释放连接
- 窗口大小:窗口大小字段表示在确认了字节之后还可以发送多少个字节
- 检验和:为了提高可靠性,他检验头部,数据,和伪TCP头部之和
- 可选项:包括TCP载荷,滑动窗口比例以及选择重发数据报等选项
(3)UDP
UDP比较简单,他是一种无连接的协议,无需需要TCP那样需要三次握手来建立起连接,一个UDP应用可以同时作为应用的客户或者服务器方,UDP不需要建立一个明确的连接,所以UDP比TCP简单
其数据格式如下:
UDP长度:包括头部和数据部分,因为头部是固定的,所以主要用来计算数据部分的长度
(4)协议的选择,主要有三个方面
- 数据可靠性高的用TCP,如验证,密码字段
- 实时性:由于TCP需要三次握手,重传等会降低实时性,在对实时性要求不高的系统中如VOIP,视频监控等中UDP可以发挥很好的作用
- 网络可靠性:在不好的网络中广域网,使用TCP可以降低错误的发生,在好的网络中如局域网可以使用UDP,可以降低网络负荷