TCP、UDP、IP 协议分析
来源:互联网 发布:js教程pdf 编辑:程序博客网 时间:2024/06/06 05:42
互连网早期的时候,主机间的互连使用的是NCP协议。这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能。为了改善这种缺点,大牛弄出了TCP/IP协议。现在几乎所有的操作系统都实现了TCP/IP协议栈。
TCP/IP协议栈主要分为四层:应用层、传输层、网络层、数据链路层,每层都有相应的协议,如下图
所谓的协议就是双方进行数据传输的一种格式。整个网络中使用的协议有很多,所幸的是每一种协议都有RFC文档。在这里只对IP、TCP、UDP协议头做一个分析。
首先来看看在网络中,一帧以太网数据包的格式:
在Linux操作系统中,当我们想发送数据的时候,我们只需要在上层准备好数据,然后提交给内核协议栈 , 内核协议栈自动添加相应的协议头。
下面我们来看看,每一层添加的协议头具体内容。
一.TCP协议
TCP协议是面向连接、保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)传输层协议。
1.TCP头分析
先来分析一下TCP头的格式以及每一个字段的含义:
(1)端口号[16bit]
我们知道,网络实现的是不同主机的进程间通信。在一个操作系统中,有很多进程,当数据到来时要提交给哪个进程进行处理呢?这就需要用到端口号。在TCP头中,有源端口号(Source Port)和目标端口号(Destination Port)。源端口号标识了发送主机的进程,目标端口号标识接受方主机的进程。
(2)序号[32bit]
序号分为发送序号 TCP源端向 32bit的无符号数,序号到达 1后又从 1,顺序号字段包含由这个主机选择的该连接的初始顺序号 Initial Sequence Number)。
确认序号:包含发送确认的一端所期望收到的下一个顺序号。因此,确认序号应当是上次已成功收到数据字节顺序号加 1时确认序号字段才有效。TCP采用一种名为ACK。发送方对发出的每个分组都保存一份记录,在发送下一个分组之前等待确认信息。发送方还在送出分组的同时启动一个定时器,并在定时器的定时期满而确认信息还没有到达的情况下,重发刚才发出的分组。图 3-5可以看出,虽然网络具有同时进行双向通信的能力,但由于在接到前一个分组的确认信息之前必须推迟下一个分组的发送,简单的肯定确认协议浪费了大量宝贵的网络带宽。为此,IP协议
T C P、I G M P数据都以
不可靠( I P仅提供最好
的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区,T C P)。
I P数据报可以不按发送顺序接收。如果一信源
向相同的信宿发送两个连续的数据报(先是B可能在IPv6,目前还处于草案阶段。1个4字节),因此,当15),首部长度就达到IP分组的首部长度不是0101),这时不使用任何选项。(3)区分服务 占1998年DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。16位,因此数据报的最大长度为IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元”并不是序号,因为MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。2位有意义。● 标志字段中间的一位记为“不能分片DF=0时才允许分片。64位)的整数倍。TTL的单位。每经过一个路由器时,就把TTL值减TTL值为
8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的
IP地址 占
<span lang="EN-US" style='margin: 0px; font-family: "Microsoft Yahei"; font-size: 13.5pt;' 0pt'="" ","serif";="" mso-fareast-font-family:微软雅黑;mso-bidi-font-family:宋体;color:#333333;mso-font-kerning:="">
IP地址 占<span lang="EN-US" style='margin: 0px; font-family: "Microsoft Yahei"; font-size: 13.5pt;' .4pt;mso-font-kerning:0pt'="" ","serif";="" mso-fareast-font-family:微软雅黑;mso-bidi-font-family:宋体;color:#666666;letter-spacing:="">32位。
2.分片解释
分片指的是需要传送的数据大于最大传输单元(MTU)的时候,就需要分成多个包,然后一个个发送给对方。我们在说TCP的时候,说到MSS很多人不能区分它们。通过下面的图,我想就可以完全区分它们了。
个人觉的如果通过TCP协议传输数据,到IP层的时候,可定不需要分片了。只有在通过UDP协议传送大数据的时候,需要分片。
例如:用UDP协议传送10240个字节数据
可以看到,但数据提交到网络层的时候,由于数据超过了最大传输单元,就分片了。分成多个包通过IP协议发送个对方。每个数据包最大的字节为MTU - IP头 = 1500 - 20 = 1480。
四 、以太网头
三部分组成 :源MAC Address | 目的MAC Address | 所使用的协议.
所以在以太网中,数据包的格式有一下几种:
ARP协议是通过IP地址获得对应的MAC地址,称为地址解析协议
RARP协议是通过MAC地址来获得对应的IP地址,称为逆向地址解析协议
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- TCP UDP IP 协议分析
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- TCP\UDP\IP协议分析
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- TCP、UDP、IP 协议分析
- 欢迎使用CSDN-markdown编辑器
- 使用DOM读取XML文件
- 《java并发编程实战》笔记(第8章)
- 使用Pull解析器读取XML文件和生成XML文件
- nova 冷迁移配置nova用户互信
- TCP、UDP、IP 协议分析
- 读写SharedPreferences中的数据
- 【Linux】中TCP的握手与挥手
- [DP优化] POJ 1160 Post Office
- Android之SQlite存储
- Android内容提供者(Content provider)
- TST运行报错解决
- java udp简单例子
- java tcp简单例子