TCPIP 详解 —— Traceroute程序 (8)

TCPIP 详解 —— Traceroute程序 (8),第1张

traceroute程序是一个能更深入探索TCP/IP协议的方便可用的工具。

尽管不能够保证从源端发往目的端的两份连续的IP数据包具有相同的路由, 但是大所述情况下是这样的。

Traceroute 程序可以让我们看到族芹察IP数据包从一台主机传到另首穗一台主机经过的路由。

Traceroute 程序可以让我们使用IP源路由选项。

8.2 Traceroute程序的 *** 作

为什么不适用IP记录路由选项(RR)

Traceroute 程序使用ICMP报文和IP首部中的TTL字段(生存周期)。TTL字段是由发送端初始设置8bit字段。推荐的初始值由分配数字的RFC指定,当前值为64. (一些ping程序例子可以看到,发送ICMP回显应答时经常吧TTL设为最大值255)

每个处理数据报的罗油漆都需要把TTL的值减1或者减去数据包的时延超过1秒。 由于大多数路由器转发数据报的时延都小于1秒钟,因此TTL最终成为一个跳站的计数器,所经过的每个路由器都 将其值减1.

8.3 局域网输出

输出的第一行没有标号给出了目的主机名以及它的IP地址, 指出traceroute 程序最大的TTL字段值为30。 40字节的数据报包含20字节IP首部、8字节的UDP首部和12字节的用户数据。( 12个字节的用户数据包每发一个数据报就加1的序列号, 送出TTL的副本以及发送兆茄数据报的时间)

输出的后面两行以TTL开始, 接下来是主机或路由器名以及IP地址。 对于每个TTL值, 发送3份数据报。每接收到一份ICMP报文, 就计算并打印出往返时间。如果在5S钟内没有手打搜3分数据报的任意一份的响应, 则打印一个星号, 并发送下一份数据报。

lz说的应该不是协议,而是实现TCP/IP协议内容的具体代码,如C语言等者好;《用TCP/IP进行网际互联第二卷:设计、实现与内核》(第三版)【Internetworking

With

TCP/IP

Vol

II:Designed,Implementation,and

Internals

Third

Edition】上有C代码实现,但没有中文注释,只有英文注释,我想应戚胡该没高嫌拦有中文注释教材的吧,有也不好找的,反正我没见过,呵呵!

以传输层采用TCP或者UPD、网络层采用IP、链路层采用Ethernet为例。用户数据必须经过应用层协议封装后传递给传输层,传输层封装TCP头部,交给网络层,网络层再封装IP头部,再交给数据链路层,数据链路层封装Ethernet帧头和帧尾,交给物理层,物理层以比特流的形式将数据发送到物理线路上。其TCP/IP中报文的封装过程如图1所示。

TCP为应用程序提供一种面向连接的、可靠的服务。

1.面向连接的传输。

2.最大报文段长度。

3.传输确认机制。

4.首部和数据的校验和。

5.流量控制。

TCP使用IP作为网络协议,TCP数据段被封装在一个IP数据包内。TCP数据段由TCP Head(头部)和TCP Data(数据)组成。

TCP最多有60个字节的首部,如果没有任选字段,正常的长度是20字节。TCP Head如图3表示的一些字段组成,这里列出几个常用的字段。

16位源端口号: TCP会为源应用程序分配一个源端口号。

16位目的端口号: 目的应用程序的端口号。每个TCP段都包含源和目的端口号,用于寻找发端和收端应用程序。这两个值加上IP首部中的源端IP地址和目的端IP地址可以唯一确定一个TCP连接。

32位序列号: 用于标识从TCP发端想TCP收端发送的数据字节流。

32位确认序列号: 确认序列号包含发送确认的一段所期望收到的下一个序号。确认序号为上次成功收到数据序列号加1。

4位首部长度: 表示首部占32bit字的数目。因为TCP首部的最大长度为60字节早知。

16位窗口大小 :表示接收端期望接收的字节,由于该字段为16位,因而窗口大小最大值为65535字节。

16位检验和: 检验和覆盖了整个TCP报文段,包括TCP首部和TCP数据。该值有发端计算和存储并由接收端进行验证。

TCP连接的建立是一个三次握手的过程。圆蠢如图4所示。

1、请求端(通常也称为客户端)发送一个SYN段表示客户期望连接服务器端口,初始序列号为a。

2、服务器发回序列号为b的SYN段作为响应。同时设置确认序号为客户端的序列号加1(a+1)作为对客户端的SYN报文的确认。

3、客户端设置序列号为服务器端的序列号加1(b+1)作为对服务器端SYN报文段的确认。

这三个报文段完成TCP连接的建立。

TCP连接的建立是一个三次握手的过程,而TCP连接的终止则需要经过四次握手,如图5所示。

1、请求端(通常也称为客户端)想终止连接则发送一个FIN段,序列号设置为a。

2、服务器回应一个确认序列号为客户端的序列号加1(a+1)的ACK确陆腔消认段,作为对客户端的FIN报文的确认。

3、服务器端向客户端发送一个FIN终止段(设置序列号为b,确认号为a+1)。

4、客户端返回一个确认报文(设置序列号为b+1)作为响应。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12432651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存