[置顶] 逐步深入TCP/IP协议栈

一、关于应用层用户数据的历程,见下图:


                                                                            TCP/IP数据包的封装


过程:应用层将数据通过协议栈逐层向下传递,其下的每层接到来自上层的数据时,根据每层的协议都要在其数据

的前端添加首部信息进行封装。不同的协议层对数据包有不同的称谓,在传输层叫做数据段,在网络层叫做数据报,

在链路层叫做数据帧。在经过链路层时,数据已经封装成帧并递交给物理层的传输介质上,到达目标主机后,同理每

层协议在逐层剥掉其首部,最后递交给目标主机应用层的数据与源主机发送的数据一致。


注:对于有效数据称之为“有效载荷”,添加的部分称其为“报头”,下层收到来自上层交付的数据时,对于下层来

说并不关心其具体内容,因为站在当前层的角度来看,此时已添加上层报头信息的数据整个都被视为有效载荷,当前

层要做的只是继续封装该数据,即添加自己的报头。而解包的过程亦是如此,每层只负责剥离自己能识别的报头信

息。任何数据报中的报头信息必须包含"上层协议",即要把当前的有效载荷交付给上层的谁谁谁。





二、上图适应两台计算机在同一网段的情况,如果是不同网段,从源主机到目标主机间的数据传输则须经过一个或多

个路由器,以实现数据的跨网络传输。



注:路由器是工作在第三层的网络设备,同时兼有交换机的功能,可以在不同的链路层接口之间转发数据包。因此路由

器需要将进来的数据包拆掉网络层和链路层两层首部并重新封装。





三、以太网帧格式




帧格式其中源地址和目的地址指的是网卡的硬件地址(也就是MAC地址),长度为12个字节(48位),由生产

厂家烧制具有唯一性的地址标识,出厂时既已固化。在centos下利用config命令可以查看MAC地址。帧协议类型包

括了IP、ARP、RARP这三种协议,其类型值分别为0800的IP协议,0806的ARP协议,0835的RARP协议。而后

有效载荷的大小(数据长度),最后是CRC校验码,用于差错校验的。

   注:HWaddr则为MAC地址。



有效数据:以太网帧中的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在

面补填充位。最大值1500称为以太网的最⼤大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从

以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)。ifconfig

命令的输出中也有“MTU:1500”。注意,MTU这个概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。 





四、CSMA/CD(冲突检测载波监听多路访问技术)


以太网协议是一个比较大的概念,其包括了MAC(介质访问控制)协议、IP协议,ARP协议、RARP协议。


在传统的共享以太网中,所有的节点共享传输介质。如何保证传输介质有序、高效地为许多节点提供传输服务,就是

以太网的介质访问控制协议要解决的问题。其底层基于CSMA/CD技术的实现,可以用于判断数据的发送时机。




解释:所谓载波侦听,意思是网络上各个工作站在发送数据前都要侦听总线上有没有数据传输。若有数据传输 (称

总线为忙碌状态),则不发送数据;若无数据传输(称总线为空闲状态),立即发送准备好的数据。所谓多路访问意

思是网络上所有工作站收发数据共同使用同一条总线,且发送数据是广播式的。所谓冲突,意思是若网上有两个或两

个以上工作站同时发送数据,在总线上就会产生信号的混合,两个工作站都同时发送数据,在总线上就会产生信号的

混合,两个工作站都辨别不出真正的数据是什么,这种情况称数据冲突又称碰撞。为了减少冲突发生后的影响。工作

站在发送数据过程中还要不停地检测自己发送的数据,有没有在传输过程中与其它工作站的数据发生冲突,这就是冲

突检测。


★要解决在公共通道上以广播的方式发送数据时的问题(主要是数据碰撞),该技术要做的工作有监听,发送,检

测,冲突处理。

            其过程为发送数据前,先监听总线是否空闲。若总线忙,则不发送。若总线空闲,则把准备好的数据发送到总线上。在发送数

的过程中,工作站边发送边检测总线,是否自己发送的数据有冲突。若无冲突则继续发送直到发完全部数据;若有冲突,则立即

停止发送数据,但是要发送一个加强冲突的JAM信号,以便使网络上所有工作站都知道网上发生了冲突,然后,等待一个预定的随

机时间,且在总线为空闲时,再重新发送未发完的数据。概括来讲就是:先听后发,边发边听,冲突停发,延迟重发(随机的)。



★其优点原理简单,技术性较易,网络中个工作站处于平等的地位,不需要集中控制,没有优先级控制;其缺点是一

旦网络负载较大时,数据的发送时间会增长,其发送效率会急剧下降。




五、ARP协议


作用:在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先

是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获

得目的主机的硬件地址。ARP协议就起到这个作用。


解释:ARP协议原名为“地址解析协议”,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含

标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该

IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。


注:源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如

果链路层是其它类型的网络则有可能是必要的。硬件类型指链路层网络类型,1为以太网,协议类型指要转换的地址类

型,0x0800为IP地址,后面两个地址长度对于以太网地址和IP地址分别为6和4(字节),op字段为1表⽰示ARP请求,op字

段为2表示ARP应答。  




六、RARP协议



RARP协议:原名为“反向地址解析协议”,允许局域网的物理机器从网关服务器的ARP表或者缓存上请求其IP地

址。网络管理员在局域网网关路由器里创建一个表以映射物理地址(MAC)和与其对应的IP地址。当设置一台新的

器时,其RARP客户机程序需要向路由器上的 RARP 服务器请求相应的IP地址。假设在路由表中已经设置了一个记

录,RARP 服务器将会返回 IP 地址给机器,此机器就会存储起来以便日后使用。



产生原因:ARP(地址解析协议)是设备通过自己知道的IP地址来获得自己不知道的物理地址的协议。假如一个设备

不知道它自己的IP地址,但是知道自己的物理地址,设备知道的只是网络接口卡上的物理地址时,又该怎么办呢? 为

决这种情况,就有了与ARP对应的RARP协议。



工作方式:RARP以与ARP相反的方式工作。RARP发出要反向解析的物理地址并希望返回其对应的IP地址,应答包

由能够提供所需信息的RARP服务器发出的IP地址。虽然发送方发出的是广播信息,RARP规定只有RARP服务器

能产生应答。许多网络指定多个RARP服务器,这样做既是为了平衡负载也是为了作为出现问题时的备份。




七、IP协议


先来看看IP数据报的格式,见下图:



注:IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍。对于IPv4 ,4位版本字段是4。4位首部长度

的数值是以4字节为单位的,最小值为5,也就是说首部长度最小是4x5=20字节, 也就是不带任何选项的IP首部,4位能表

示的最大值是15,也就是说首部长度最大是60字节。8位TOS字段有3个位用来指定IP数据报的优先级(目前已经废弃不

用),还有4个位表⽰示可选的服务类型(最小延迟、最大呑吐量、最大可靠性、最小成本),还有一个位总是0。 

      16位总长度是整个数据报(包括IP首部和IP层payload)的字节数。每传⼀一个IP数据报,16位的标识加1,可用于分片

和重新组装数据报。3位标志和13位片偏移用于分片。TTL(Time to live)是这样用的:源主机为数据包设定一个生存时

间,比如64,每过一个路由器就把该值减1,如果减到0就表示路由已经太长了仍然找不到目的主机的网络,就丢弃该包,因

此 这个生存时间的单位不是秒,而是跳(hop)。协议字段指示上层协议是TCP、UDP、ICMP还是IGMP。然后是校验和,

只校验IP首部,数据的校验由更高层协议负责。IPv4的IP地址长度为32位。



关于IP地址对于网络的划分,在此不再介绍,将会在后续博文中予以介绍。


IP与路由:


★路由表:由很多路由条目组成,每个条目都指明去往某个网络的数据包应该经由哪个接口发送,其中最后一条是缺省路

由条目。路由条目路由表中的一行,每个条目主要由目的网络地址、子网掩码、下一跳地址、发送接口四部分组成,如

果要发送的数据包的目的网络地址匹配路由表中的某一行,就按规定的接口发送到下一跳地址。缺省路由条目路由表中

的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规

定的接口发送到下一跳地址。


★路由是从寻找目标网络开始的,对于路由来说其找寻目标网络地址一般有三种可能:1、知道,但当前网段找不到

(送至下一路由);2、不知道,也找不到。(送至默认网关);3、知道,也能在当前网段找到。


★路由如何确定要发送的网络号?

IP数据报中存有目标IP地址,所以当路由获得该地址时,通过与子网掩码的“与”操作,便能得到一个网络号,将其

与路由表中的目标地址(Destination)条目进行逐一比对,如果比对成功则通过该网络号对应的发送接口(Use 

Iface)发出;若未匹配到,则说明不在该局域网络,须将其从eth0的发送接口发出,将其送至默认网关处,再由其路

由表决定下一跳的地址。





八、UDP协议




UDP协议:UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在

OSI模型中,在第四层的传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的

缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数

据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从

问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一

项非常实用和可行的网络传输层协议。


注:UDP协议不面向连接,也不保证传输的可靠性,例如: 发送端的UDP协议层只管把应用层传来的数据封装成段交给

IP协议层就算完成任务了,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。接收

端的UDP协议层只管把收到的数据根据端口号交给相应的应用程序就算完成任务了,如果发送端发来多个数据包并且

在网络上经过不同的路由,到达接收端时顺序已经错乱了,UDP协议层也不保证按发送时的顺序交给应用层。通常接收

端的UDP协议层将收到的数据放在一个固定大小的缓冲区中等待应用程序来提取和处理,如果应用程序提取和处理的

速度很慢,而发送端发送的速度很快,就会丢失数据包,UDP协议层并不报告这种错误。因此,使用UDP协议的应用程序

必须考虑到这些可能的问题并实现适当的解决方案,例如等待应答、超时重发、为数据包编号、流量控制等。一般使用

UDP协议的应用程序实现都比较简单,只是发送一些对可靠性要求不高的消息,而不发送大量的数据。例如,基于UDP的

TFTP协议一般只用 trivial ftp TCP FTP于传送小文件,而基于TCP的协议适用于各种文件的传输。


UDP协议的特点:UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接数据包传输服务。它不提

供报文到达确认、排序、及流量控制等功能。





九、TCP协议


                                                      TCP段格式


TCP协议:应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报

段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由

它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了

传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实

体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验

和函数来检验数据是否有错误;在发送和接收时都要计算校验和


★注:TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信

协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协

议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层

之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流

机制,而是提供不可靠的包交换。


★提起TCP,就不得不提及TCP的三次握手和四次挥手,其过程见下图用例:



★注:三次握手可概括为,请求连接,收到应答,再次请求。                    SYN ----> SYN -------->  ACK。

  四次挥手可概括为,主动请求释放,主端收到应答,对端请求释放,对端收到应答。                   FIN---------

>ACK-------->FIN--------->ACK。


★三次握手完后的数据传输也是基于请求应答模式的,从而很好的解决了丢包问题。

★为何要四次挥手呢?答:四次挥手:连接释放。在创建连接时,发送端和接收端分别建立连接并以相应的数据结构

进行建立维护,在一定程度上两端处于一个对等的关系。当一放释放连接时,并不能保证对端数据是否发送完毕,所

以需要进行释放连接的请求,等待对端确认,所以一来一回,共四次。


可以看出:TCP协议是面向字节流的,是一种流式服务,全双工的。本端发送和接受数据两不误。 







 

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

Linux命令应用大词典 目录 - 2016-07-25 18:07:40

【作者】 於岳 【编辑】 李永涛 【ISBN】 978-7-115-40151-9 【日期】 2015-12 【页数】 703页 【字数】 1123千字 【开本】 16 【定价】 89元 【总数】 本书包含46大类729个命令 按章节分 第1章 登录、退出、关机和重启 章节-页码 命令 介绍 备注 1.1-P1 login 用户登录系统 1.2-P1 logout 退出登录Shell 1.3-P1 nologin 限制用户登录 1.4-P2 exit 退出Shell 1.5-P2 sulogin 单用户登

Dubbo--生态系统安装 - 2016-07-25 18:07:33

dubbo的整套环境主要有几个系统: Zookeeper注册中心安装 管理控制台安装 简易监控中心安装       在 Dubbo官网 中已经讲的很详细。本文主要是为了记录一下自己在安装过程遇到的问题,同时也把安装完成之后的文件包记录 下。       运行环境: tate@ubuntu:~$ uname -aLinux ubuntu 3.19.0-65-generic #73~14.04.1-Ubuntu SMP Wed Jun 29 21:05:22 UTC 2016 x86_64 x86_64 x8
1.使用者与群组以及其他人的概念 假设有一家人,家裡只有三兄弟,分别是王大毛、王二毛与王三毛三个人, 而这个家庭是登记在王大毛的名下的!所以,『王大毛家有三个人,分别是王大毛、王二毛与王三毛』, 而且这三个人都有自己的房间,并且共同拥有一个客厅! 使用者的意义:由于王家三人各自拥有自己的房间,所以, 王二毛虽然可以进入王三毛的房间,但是二毛不能翻三毛的抽屉! 因为抽屉里面面可能有三毛自己私人的东西,例如日记等等的,这是『私人的空间』,所以当然不能让二毛拿!  群组的概念:由于共同拥有客厅,所以王家三兄弟可

理解 glibc malloc - 2016-07-25 17:07:29

本篇文章主要完成了对 《Understanding glibc malloc》 的翻译工作。限于本人翻译水平与专业技术水平(纯粹为了了解内存分配而翻),本文章必定会有很多不足之处,请大家见谅,也欢迎大家的指正! 联系邮箱: 974985526@qq.com 。 堆内存是一个很有意思的领域,这样的问题: 堆内存是如何从内核中分配的? 内存管理效率怎样? 它是由内核、库函数还是应用本身管理的? 堆内存可以开发吗? 我也困惑了很久,但是直到最近我才有时间去了解它。下面就让我来谈谈我的研究成果。开源社区提供了很多
一、别人记得流水账 MAC上装东西总是遇到些问题,这里做个流水帐。希望能对别人有点帮助哈   1、先下载需要的软件包        OCR工具:   Tesseract-OCR3.0.1  source code      tesseract-ocr-3.01.eng.tar.gz  破验证码用英文就够了。        图像处理工具:   Leptonica   1.68        png识别工具:   libpng         jpeg 识别工具 : libjpeg         tif 识
自动化测试框架UFT BASED 自动化测试,一个现在被炒的火热的词;各大公司都在嚷嚷着要上自动化测试的项目,都在招聘各种自动化测试人员。。。 本材料对于编程基础较低初学者,在编写和学习过程中可以接触到很多旁枝侧节的知识,这些都是做好自动化所有需要的知识;对于有一定技术储备。 本框架不能帮你成为高大上的编程大牛,或者自动化测试的行家。但是,它可以引领你迈入自动化测试的领域。 师傅领进门,修行靠个人;一切的一切都还是要靠你自己去多多实践,不是有一句名言么?实践是检验真理的唯一标准! 一、自动化测试基础 手工

springmvc SSM后台框架源码 - 2016-07-25 17:07:55

获取【下载地址】    QQ: 313596790   【免费支持更新】 三大数据库 mysql  oracle  sqlsever    更专业、更强悍、适合不同用户群体 【 新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统 】 A 集成代码生成器 [ 正反双向 (单表、主表、明细表、树形表, 开发利器 ) +快速构建表单 ; QQ:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面、建表sql脚本,处理类,service等完整模块 B 集成阿里巴

ip报头分片 - 2016-07-25 17:07:06

分片介绍:          IP分片是网络上传输IP报文的一种技术手段。IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组         在IP协议中的分片算法主要解决不同物理网络最大传输单元(MTU) 的不同造成的传输问题。分组在传输过程中不断地分片和重组会带来很大的工作量还会增加一些不安全的因素。 为什么需要分片:          每一种物理网络都会规定链路层数据帧的最大长度,称为链路层MTU(Maximum Transmission Unit).IP协议在传输数据包
写在前面的 策略模式 概念 具体实例 比较和理解 总结 写在前面的 上一篇文章我们说到,如果我们需要在原本已经整理好的代码中添加新的内容(包括算法或者功能性模块),我们可以应用简单工厂来实现,比如添加算法(活学活用嘛)、在已有的功能模块中再添加新的功能等。但是,我们在上一篇文章中提到过 开放-封闭原则 ,试想一下,如果我们写出来的代码在应用过程中一直需要不断的调整和增加新的功能,那么每次维护都要打开这个工厂,添加相应的功能或算法之后再重新部署,这样无意间会增加我们的工作量,所以简单工厂在某种意义上就不适用
课程概要:          讲解 Struts2 中数据封装的三种方式以及具体实现原理   一、 Struts2 数据封装机制之属性驱动   我们先来看一下传统的 servlet 是如何处理从页面传递过来的数据的。 首先我们在表单发送了对应的数据到 servlet 中去 form action="%=path%/loginservlet"method="post" 账号:inputtype="text"name="username"/br 密码:inputtype="password"name="pas