zl程序教程

您现在的位置是:首页 >  其他

当前栏目

TCP/IP基础

2023-09-11 14:14:10 时间

PDU(位,帧,数据包。段)MTU最大传输单元。以太网和IEEE802.3对数据帧的长度都有限制,其最大值分别为1500和1492字节。

假设IP层有一个数据报要传。并且数据的长度比链路层的MTU还大。那么IP层就要进行分片(Fragmentation),把数据报分成若干片,这样每一片都小于MTU。

q当网络上的两台主机互相进行通信时。两台主机之间要经过多个网络,每一个网络的链路层可能有不同的MTU,当中两台通信主机路径中的最小MTU被称作路径MTU。

尽可能避免分片,分片会减少网络传输效率。


以太网帧格式头部有14个字节  6位目的地址  6为源地址  2位类型   用来区分是传给ARP  RARP还是IP网络层进行处理    链路层仅仅识别物理地址或MAC地址  不识别逻辑地址 须要解析 IP->MAC地址   ARP解析    MAC->IP地址    反向地址解析RARP  

ICMP协议用于传递差错信息、时间、回显、网络信息等控制数据。ping程序就是将数据封装成ICMP程序来实现。

ARP协议   地址解析协议    将IP地址转换为MAC地址   上层地址传给下层的时候须要封装  ARP快速缓存中能存放IP地址与MAC地址之间的映射

RARP用于没有硬盘的主机中    想要获取无盘工作站的IP地址  RARPserver存有MAC地址与IP地址的映射   会响应回去。

IP数据报的格式:TTL表示数据报的生存期   最多可经过的路由器的数量,数据报每经过一个路由器,TTL减1。减为0时丢弃,并发送ICMP报文通知源主机,TTL可避免数据报在路由器之间不断循环。

在IP网络中传输的单位称为IP数据包,它包含IP报头与更高层协议的相关数据。IP数据包的报头至少为20个字节,当中包含版本,报头长度,服务类型,数据报总长度,标识,标志。片偏移。生存时间,协议和头部校验和,源,目的IP地址,先项。

引入IP报头字段的目的是为网络实体提供互联机制,IP报头不仅带有数量可观的IP数据包信息,如源和目标IP地址,数据包内容等,并且还为网络实体提供了从源到目标之间传送数据包的处理方法。

看看IP报头中各个字段各代表什么。    版本:版本占用四个比特位。如今我们所接触到的网络中绝大部分都是IPV4网络,所以一般所捕获到的IP报头的版本为4。

    报头长度:表示的IP数据包的包头长度,这个长度不包含数据字段,最小为20个字节,最大为60个字节,当中的40个字节供IP选项使用。    服务类型:一般用于实现QoS的要求。我们如今一般捕获到的数据包中此值为一缺省值。

IP数据包总长度:它描写叙述的是IP数据包中报头和数据包的总长度。因为其占用16个比特位,因此我们能够得出一个IP数据包的最大值为65536。

    标识符:由源主机随机产生的一个号码。用于帮助又一次组合一个被分段的数据包,当一个IP数据包从一个主机传输到另外一个主机时,它一般都须要通过另外一个网络,每个物理网络都有一个最大帧的大小,也就是我们常说的最大传输单元(MTU),它限制了一个物理帧中数据的大小。当主机发送的数据超过了某一设备的MTU时,这时IP就会用一进程来对超过MTU的数据包进行分段,这个进程建立了一个小于MTU的数据报的集合。因此终于IP数据包以合适的大小发送到目标主机。因为数据包分过段,所以目标主机在接收数据包时会新建立一个缓存区来接收分段的数据包,目标主机推断某一数据包是否和其他数据包一样也是经过分段的就是通过推断标识符是否一样。在分段时仅仅有数据会被分段。面报头是复制而作为分段数据的头部。

标志:它是用来标志数据包是否分段,当中包括DF(do not  fragment)和MF(more fragment),当DF的值为1时。则MF的值必为0,DF为1。则说明数据包有分段。相同能够知道当MF为1时,则DF为0。这表示的是数据包没有分段。当然也有可能MF和DF都为0。   片偏移量:接收主机能够使用该字段的值来计算当前分段数据在原始数据报中的原始位置,因为该字段占用13个比特位,所以其最大值为8192。因为该字段的值是以8个字节为一个单位表示的。因此该字段能够表示在原始的数据报中的最远位置能够是65528个字节。举个样例来说吧。当某个数据包的大小为640个字节。如今分成8个大小为80个字节的数据包,这样第一个数据包的偏移量为0,则第二个数据包的偏移量就为10,后面的数据包依此计算可得到最后一个数据包的片偏移量是70。

当然有些时候片偏移量就是0,这表示些数据包没有分段。

生存时间:这个相信大家都非常熟悉,也就是我们在使用PING命令时的TTL,理论上讲,每一个处理此数据报的路由器应该用该字段的值减去它处理的时间,可是实际上,一个路由器处理这种一个数据包并不要一秒钟,可是为了方便。实际运用中还是以一秒钟来计算,这样TTL就变成了跳步数了,而不再是时间的度量。

协议号:这个字段指示IP下一步应当把这个数据包发往更高层的协议,如TCP为6。UDP为17。     报头校验和:该字段的数值仅用来表示IP报头的校验和。

IP报头被视为是由一系列的16位二进制数据流和一个初值为0的校验组成的。对原始报头的全部数值求补就得到校验和因为TTL的值会随着亿能过的网络设备而发生变化,所以每以过一个网络设备,报头校验和都会发生变化。

选项:选项为非固定信息,可变长度,选项最长可达40个字节。这个字段主要用于測试。

网际校验和:IP首部(不含校验和)反码+0x1111(0的反码)=发送端校验和  得到16位序列

  IP首部=IP首部(不含校验和)+发送端校验和

IP首部(不含校验和)反码+发送端校验和  反码=接收端的校验和

q网际校验和,英文全称(Internet Checksum)
q发送方对要发送的数据划分为很多16位字序列(假设数据的字节数为奇数,则在末尾补一字节0凑成偶数。)对这些序列反码求和。便得到校验和。

q假设数据在传输过程中没有发生不论什么差错。那么接收方计算校验和的结果应该为全1。假设结果不是全1(即校验和错误)。
TCP特点:
基于字节流    segment        面向连接    可靠传输   缓冲传输   全双工   流量控制    MSS最长报文大小   每一个连接方通常都在通信的第一个报文段中指明这个选项,它指明本端所能接收的最大长度的报文段。

上层应用缓冲区不超过536个字节  就不须要分片。ACK是确认标记。

q源port号与目的port号
源port号和目的port号,加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接。
q序号
序号表示在这个报文段中的第一个数据字节序号。

q确认号
仅当ACK标志为1时有效。确认号表示期望收到的下一个字节的序号。
q头部长度
4位,TCP头部最多60个字节
q保留位
6位。必须为0
q6个标志位
qURG-紧急指针有效
qACK-确认序号有效
qPSH-接收方应尽快将这个报文段交给应用层
qRST-连接重置
qSYN-同步序号用来发起一个连接
qFIN-表示将要终止一个连接
q窗体大小
通过窗体大小来达到流量控制。

   通告各自接收窗体的大小   还通知了最大段大小  不能超过MSS。滑动窗体协议!


q校验和
对tcp头与数据进行校验。
q紧急指针
是一个正的偏移量,与序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向还有一端发送紧急数据的一种方式。
q选项与填充(选项为4字节整数倍,否则用0填充)
最常见的可选字段是最长报文大小MSS(Maximum Segment Size),每一个连接方通常都在通信的第一个报文段中指明这个选项。

它指明本端所能接收的最大长度的报文段。

该选项假设不设置。默觉得536(20+20+536=576字节的IP数据报)

TCP怎样保证可靠性:
q应用数据被切割成TCP觉得最适合发送的数据块,称为段传递给IP层。

q当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。假设不能及时收到一个确认。将重发这个报文段。
q当TCP收到发自TCP连接还有一端的数据,它将发送一个确认。这个确认不是马上发送,通常将推迟几分之中的一个秒。
qTCP将保持它首部和数据的校验和。

这是一个端到端的校验和,目的是检測数据在传输过程中的不论什么变化。假设收到段的校验和有差错,TCP将丢弃这个报文段而且不确认(导致对方超时重传)

qTCP承载于IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对收到的数据进行又一次排序。

qIP数据报会发生反复,TCP的接收端必须丢弃反复的数据。
qTCP还能提供流量控制。

TCP连接的每一方都有一定大小的缓冲空间。