通信协议TCP/IP协议栈

注:本文内容来自网友大神,作为学习笔记记录在此。如有雷同,敬请谅解;

首先普及一些基本概念:

IP地址:IPv4 32位的地址,现在常用的是B类或者C类地址

DNS:域名系统。提供主机名(网址)与IP的转换服务。

RFC:tcp/ip协议的标准文档。

端口号(port):TCP,UDP上的逻辑号码;而不是硬件端口。

 

TCP/IP协议栈主要分为四层:应用层、传输层、网络层、数据链路层;每层都有相应的协议;

 

所谓的协议:就是双方进行数据传输的一种格式。整个网络中使用的协议有很多,所幸的是每一种协议都有RFC文档。

先来看看一帧以太网数据包的格式:

 

一、TCP协议

      TCP协议在运输层。面向连接(先建立连接),所以保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)传输协议。

二、UDP协议

      与TCP同级别。无连接,不保证可靠的传输层协议。

三、IP协议

      IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP、IGMP数据都是以IP数据报格式传输。他的特点如下:

  •  不可靠。不能保证IP数据报能成功地到达目的地。IP仅提供最好的传输服务。如果发生某种错误,e.g.某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息给信源端。任何要求的可靠性必须由上层来提供(如TCP)。
  • 无连接。IP并不维护任何关于后续数据报的状态信息。每隔数据报的处理是互相独立的。也说明,IP数据包可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(A,B),他们独立地进行路由选择,可能不同的路线,B可能在A之前到达。

接下来是介绍详细的头部格式:

1. IP报文格式

    IP协议往往被封装在以太网帧中传送。而所有的TCP、UDP、ICMP、IGMP数据都被封装在IP数据报中传送。如图

    下面是IP头部(报头)格式:

  • 版本字段(4bits):当前为IPv4,0100
  • 报头长度(4bits):用于表示报头的长度。0-15,这里指代的单位是32位字(即4个字节),所以表示的最大长度为15*4=60Byte = 480bits。
  • 服务类型(8bits): 1-3bit为优先权子段,现已被忽略;4-7bit:分别代表延迟、吞吐量、可靠性和花费。取值为1分别表示最小时延、最大吞吐量、最高可靠性、最小费用。四个中最多只能有1位为1,对应表示数据报被网络系统传输时怎样处理。可以全为零,表示一般服务。例如:TELNET协议要求最小的延迟,FTP协议数据可能要求最大吞吐量。ICMP协议无特殊要求(4位全为0)。一般而言,主机会忽略这些字段,由动态路由协议根据这些字段的值进行路由决策。
  • 总长度字段(16bits):表示整个数据报的长度(以字节为单位),最大长度为65535字节
  • 标志字段(16bits):用来唯一标识主机发送的每一份数据报。通常每一发一份报文,它的值就+1;
  • 标志位字段(3bits):标志一份数据报是否要求分段。
  • 段偏移字段(13bits):如果一份数据报要求分段的话,此字段指明该段偏移距原始数据报开始的位置。
  • 生存期(8bits):用来设置数据报最多可经过的路由个数。由发送数据的源主机设置,通常为32 64 128 等。每经过一个路由,其值减一到0则丢弃。
  • 协议字段(8bits):指明IP层所封装的上层协议类型,如ICMP(1),IGMP(2),TCP(6),UDP(17)
  • 头部校验和字段(16):内容是根据IP头部计算得到的校验和码。计算方法是:对头部中每个16比特进行二进制反码求和。
  • 源IP地址、目标IP地址字段(各32bits):记录发送IP数据报文的源主机地址和接受IP报文的目标主机地址。

2.IP路由选择

    一般而言,主机通过若干

从整体上回答以下问题:

1.传输层的主要功能是什么?

   分割并重新组装上层(网络层)提供的数据流,为数据流提供端到端的传输服务。

2.传输层如何区分不同应用程序的数据流?

   对传输层而言,它只需知道目标主机上那个服务程序来相应这个数据,而不需要知道服务程序是干什么的。因此,我们只需要能够抽象的表示出来这些应用程序和服务程序即可。我们使用端口好来抽象标识每个网络程序。

   因此:在同一个IP地址行不同的端口号是两个不同的链接。IP地址和端口号用来唯一的确定网络上数据的目的地。

3.传输层有那些协议?

   TCPandUDP分别是 传输控制协议和用户数据报协议

    TCP是一个可靠的面向链接的协议,UDP是不可靠的,无连接的协议

    以打电话和发短信来说明这种关系:

    UDP像是发短信,编辑好发出去:对方能否收到,是否空号,是否丢包都不关心

    TCP像是打电话,首先要确定是否开机,然后确定是否信号,最后需要接听(通信链接)

4.UDP协议的具体内容

   UDP数据包结构如下:

   

   可能出现丢包,乱序、重复、延时等问题。因为它不提供可靠性,它的开销很小。

5. TCP协议具体内容

    有以下特点:

  • 在开始传输前,需要进行三次握手建立链接
  • 可靠性:在传输过程中,通信双方的协议模块继续进行通信
  • 通信结束后,通信双发都会使用改进的三次握手来关闭链接

 

 

 6.TCP的链接是如何建立的(逻辑上)?

    待解决

7.TCP链接开销很大,具体指什么?

   要建立TCP链接,必须进行三次IP数据报的成功传输。

8.TCP三次握手的目的是什么?

  在面向链接的环境中,开始传输数据之前,在两个终端之间必须先建立一个链接。建立链接的过程可以确保通信双方在发送应用程序数据包之前,都已经准备好了传送和接收数据。并且使通信双方统一了初始化序列号。

9.TCP如何提供可靠性

  在传输过程中,通信双发的协议模块继续进行通信,从而保证了传输的可靠性;具体而言:

  •   针对乱序:在通过三次握手进行链接时,序列号别初始化。在传输过程中,TCP继续使用这个序列号来标记发送的每一个数据段,每传送一个数据段,序列号+1。接收方依据序列号重装收到的数据段。
  •  针对丢包:在传输过程中,接收方收到一个数据段后,会用ACK应答码向发送端回复一个IP包进行应答,确认号ACK用来告诉发送端那些数据包已经成功接收,发送方未被应答的报文段提供重传。
  •  针对重复:接收端收到数据段后,查看序列号,如果已经成功接收该数据包,则丢弃后面这个数据段。
  •  针对延时:延时造成的第一个问题就是数据包接收时乱序。当延时严重是,接收端一直未收到数据段,则不会回复ACK,发送端认为丢包,重发。
posted @ 2016-07-06 13:51  Dkma像疯子一样战斗  阅读(1568)  评论(0编辑  收藏  举报