TCP/IP基础知识

来源:互联网 发布:linux捕获命令输出 编辑:程序博客网 时间:2024/04/28 07:55

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,可以降低网络负荷