TCP/IP协议栈
来源:互联网 发布:惠惠海淘助手淘宝货 编辑:程序博客网 时间:2024/05/02 00:15
用wirshark抓包如下:
用wirshar抓包分析如下:
TCP采用一种名为“带重传功能的肯定确认(positive acknowledge with retransmission)”的技术作为提供可靠数据传输服务的基础。这项技术要求接收方收到数据之后向源站回送确认信息ACK。发送方对发出的每个分组都保存一份记录,在发送下一个分组之前等待确认信息。发送方还在送出分组的同时启动一个定时器,并在定时器的定时期满而确认信息还没有到达的情况下,重发刚才发出的分组。图3-5表示带重传功能的肯定确认协议传输数据的情况,图3-6表示分组丢失引起超时和重传。为了避免由于网络延迟引起迟到的确认和重复的确认,协议规定在确认信息中稍带一个分组的序号,使接收方能正确将分组与确认关联起来。
从图 3-5可以看出,虽然网络具有同时进行双向通信的能力,但由于在接到前一个分组的确认信息之前必须推迟下一个分组的发送,简单的肯定确认协议浪费了大量宝贵的网络带宽。为此, TCP使用滑动窗口的机制来提高网络吞吐量,同时解决端到端的流量控制。
滑动窗口技术是简单的带重传的肯定确认机制的一个更复杂的变形,它允许发送方在等待一个确认信息之前可以发送多个分组。如图 3-7所示,发送方要发送一个分组序列,滑动窗口协议在分组序列中放置一个固定长度的窗口,然后将窗口内的所有分组都发送出去;当发送方收到对窗口内第一个分组的确认信息时,它可以向后滑动并发送下一个分组;随着确认的不断到达,窗口也在不断的向后滑动。
(1)版本 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。关于IPv6,目前还处于草案阶段。
(2)首部长度 占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。
(3)区分服务 占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。
(4)总长度 总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。
(5)标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
(6)标志(flag) 占3位,但目前只有2位有意义。
● 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个
● 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
(7)片偏移 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
(8)生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。
(9)协议 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
(10)首部检验和 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
(11)源IP地址 占32位。
(12)目的IP地址 占32位。
可以看到,但数据提交到网络层的时候,由于数据超过了最大传输单元,就分片了。分成多个包通过IP协议发送个对方。每个数据包最大的字节为MTU - IP头 = 1500 - 20 = 1480。
TCP/IP通常被认为四层协议系统
链路层:通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡
网络层:处理分组在网络中的活动,例如分组的选路(IP、ICMP和IGMP)
运输层:主要为两台主机上的应用程序提供端到端的通信(TCP和UDP)
应用层:Telnet远程登录,FTP文件传输协议,SMTP简单邮件传输协议,SNMP简单网络管理协议
构造互联网最简单的办法就是把两个或多个网络通过路由器进行连接。路由器的好处是为不同类型的物理网络提供连接。
连接网络的另外一个途径是使用网桥。网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网络进行互连。
1.3、TCP/IP的分层
1.4、互联网的地址
五类不同的互联网地址格式:
有三类IP地址:单播地址(目的端为单个主机)、广播地址(目的端为给定网络上的所有主机)、多播地址(目的端为同一组内的所有主机)
各类IP地址的范围:
1.6、封装
每层对收到的数据都要增加一些首部信息(有时还要增加尾部信息)。
通过以太网传输的比特流称作帧(Frame),以太网数据帧的物理特性是其长度必须在46 ~ 1500字节之间。
IP和网络接口层之间传送的数据单元应该是分组,分组既可以是一个IP数据报,也可以是IP数据报的一个片(fragment)。
UDP数据和TCP数据基本一致。唯一不同的是UDP传给IP的信息单元称作UDP数据报,而且UDP的首部长为8字节。
由于TCP、UDP、ICMP、IGMP都要向IP传送数据,因此IP必须生成的IP首部中加入某种标志,以表明数据属于哪一层。为此,IP在首部中存入一个长度为8bit的数值,称为协议域。1表示位ICMP协议,2表示IGMP协议,6表示TCP协议,17表示UDP协议。
运输层协议在生成报文首部时要存入一个应用程序的标识符。TCP和UDP都用一个16bit的端口号来表示不同的应用程序。TCP和UDP把源端口号和目的端口号分别存入报文首部中。
网络接口分别要发送和接受IP、ARP、RARP数据,因此也必须在以太网的帧首部中加入某种形式的标志,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个16bit的帧类型域。
1.7、分用
参考:
http://blog.sina.com.cn/s/blog_493309600100clrw.html
http://www.cnblogs.com/danbo/p/4614957.html
http://blog.csdn.net/crazy__chen/article/details/48792847
- TCP/IP协议栈
- TCP/IP协议栈
- TCP/IP 协议栈
- TCP/IP 协议栈
- TCP/IP协议栈
- TCP/IP协议栈
- TCP/IP协议栈
- TCP-IP协议栈
- TCP/IP协议栈
- TCP/IP协议栈
- TCP/IP 协议 ----- 协议栈
- TCP/IP协议栈 之 TCP协议
- TCP/IP协议栈 之 IP协议
- 2.1 TCP/IP协议栈
- TCP/IP协议栈实现
- 关于TCP/IP协议栈
- tcp/ip协议栈知识
- 常见tcp/ip协议栈
- 根据网友资料写的代码频域时域
- The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar
- JAVA中 enum 类型的定义和使用
- bootstrapfileinput 上传时传递额外参数
- 怎么样加快JavaScript加载和执行效率
- TCP/IP协议栈
- Archlinux 滚动升级失败的解决办法
- ios 解码H264为YUV格式
- 无法将类型为“DAL.LoginDAO”的对象强制转换为类型“IDAL.LoginIDAL
- JavaEE框架Bootstrap HTML5 jQuery SpringMVC maven mybatis
- Spring与Hibernate整合
- C++中const用法浅析
- TCP/IP基本知识
- 算法提高 矩阵相乘