TCP/IP学习(二)IP、TCP、UDP协议

来源:互联网 发布:俞书宏 院士 知乎 编辑:程序博客网 时间:2024/06/04 18:28

一、概述

在这里只是简单说明下IP、TCP、UDP数据报报头和各个字段的简单意义,像IP选路、TCP链接的建立和终止等复杂的问题,以后在做总结。首先是大概介绍下各个协议,然后分别的说明协议报头。

1.IP提供一种不可靠、无连接的数据报传送服务。

不可靠:不能保证IP数据报能够成功的到达目的地,如果发生某种错误,如路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃数据报,然后发送ICMP消息报告给信源端。任何要求的可靠性必须由上层来提供。
无连接:IP并不维护任何关于后续数据报的状态信息(下一个数据报的目的IP,下一个的大小等),每个数据报处理都是独立的。所以IP数据报可以不按照发送顺序接收。

2.UDP

UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系。

3.TCP

TCP提供一种面向连接的、可靠的字节流服务。
面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP中,仅有两方进行彼此通信,广播和多播不能用于TCP。
TCP将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据;TCP提供端到端的流量控制,并计算和验证一个强制性的端到端的检验和。

二、IP首部

IP的首部如下图所示,如果没有选项字段,普通的IP首部有20个字节。

下面是用wireshark软件分析的一个IP数据报的截图,对应的显示了个个部分。


版本号有四位,现在有4和6两个版本。
首部长度用一个四比特的字段来表示,最长为60个字节(四个字节对齐,所以最大不是63)。
8位的服务(TOS)字段包括一个3bit优先权字段(现在已经被忽略),4bit的TOS字段,和1bit未用位但是必须置为0。4bit的TOS分别代表最小延时,最大吞吐量,最高可靠性和最小费用。大多数的TCP/IP都不支持TOS特性了。
16位总长度是整个IP数据报的长度,以字节为单位,利用首部长度字段和总长度字段就可以知道IP数据报的数据内容的起始位置和长度。16位最大为65535,当IP数据报分片时,这个字段要改变的。
下面的16位为标识字段,标识字段唯一标识发送的每一份数据报,通常每发送一份报文,它的值就会加1,它在分片重组的时候会用到。3位的标识字段和13为的偏移字段也是与分片有关,以后会在讨论。
TTL设置了数据报可以经过的最多路由器数目,初始值由主机设置,每经过一个路由器处理,它的值就会减1,当该字段为0时会被丢弃,并发送ICMP报文通知源主机。
16位的首部检验字段是根据IP的首部计算校验和码,它不对首部后面的数据进行计算。
剩下的八个字节分别是四个字节的源IP地址和目的地址。
任选项是一个数据报中一个可变长的可选信息,有几个例如记录路径:让每个路由器记下它的IP地址,时间戳:记下IP地址的时间。和一些其它的定义。

三、UDP首部

下面是UDP的首部,比较简单。

其中UDP的校验和覆盖UDP首部和UDP数据,UDP和TCP都有覆盖首部和数据的校验和,但是UDP的校验和是可选的,而TCP的校验和是必须的。可能上面的两点都是为了加快UDP的传输速度。如果发送端没有计算校验和而接收端检测到校验和有差错,那么UDP数据报就要被悄悄地丢弃,不产生任何差错报文,尽管UDP校验和是可选的,但是一般都是使用的。

四、TCP首部

下面是TCP首部和wireshark的TCP包分析结果

 

其中32位的序号用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号来对每个字节进行计算,序号是32位的无符号数,到达2的32次方减一后从0开始。
既然每个字节都被计数,那么确认序号包含发送确认的一端所期望收到的下一个序号,因此确认序号应该是上次已经成功收到数据字节序号加1,只有ACK字段为1时候,确认序号字段才有效。TCP为应用提供全双工的服务,这意味着数据能在两个方向上独立的传输,因此链接的每一端都必须保持每个方向上的传输数据序号。
TCP的六个标识字段分别为:
URG 紧急指针有效(urgent pointer)
ACK 确认序号有效
PSH 接收方应尽快将报文段交给应用层
RST 重建链接
SYN 同步序号用来发起一个连接。
FIN 发端完成发送任务
16位的校验和覆盖了整个TCP报文段:TCP首部和TCP数据,这是一个强制性的字段,一定由发端计算和存储,并由收端进行验证。

 

四、以太网帧格式

6个字节的目的地址,6个字节的源地址,2个字节的类型,然后就是(46~1500)字节的数据,最后有4个字节的CRC循环校验码。其中类型有三种IP数据报,ARP的请求/应答,RARP的请求/应答。