网上关于tcp/ip/ arp ppp等小结_0

1、OSI模型

    关于OSI七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、和物理层。七层模型与各个层中应用给的协议如下图所示。

TCP/IP/ARP/ICMP首部分析
那么数据在各层中,使用什么协议我们通过下图列出一些常用的协议,以及对于其在各个层不同协议的判断。

TCP/IP/ARP/ICMP首部分析

几个常用的协议的功能我们通过一个形象的说法来展现

    IP:I want to send data to 127.127.127.127

    UDP:I want to send a datagram(数据报) on the port N

    TCP:I want to send data in a reliable(可信的) way on the port N

    ARP:who knows 127.127.127.127's MAC address?

    RARP: who knows 21.21.12.21's IP address?

    ICMP:I send or receive queries(问题) or error message

    DHCP/BOOTP:I want to get an IP address

    DNS:what is the IP address of www.st.com?

    从网络上传来的数据。我们一层层扒去它的外层(各种协议做的封装),得到真正我们需要的数据。发送网络上的数据也是在添加完各种协议头(封装),才开始发送到网络上,下面我们来看一下网络上数据包的IP--TCP结构。以便我们更好的分析解析出真正的数据。

--------------------------------------------------------------------------------------------------------------------

我们以从以太网接收数据为例进行讲解。

2、各协议首部

  2.1 以太网首部

    我们从以太网收到数据首先看到的是以太网首部,它共有14个字节。它的结构为

TCP/IP/ARP/ICMP首部分析

    目标MAC地址:6字节,将要接收网络数据包的MAC地址。如果MAC地址中第一个字节的最低有效位为0,则该地址是单播地址;如果MAC地址中的第一个字节的最低位有效位为1,则该地址是组播目标地址,带有组播目标地址的数据包将被送达一组选定的以太网节点;如果目标地址字段是保留的组播地址FF-FF-FF-FF-FF-FF,则该数据包是广播数据包,它将被发送至共享该网络的每个节点。

    源MAC地址:6字节,将这个数据包发送到网络上的MAC地址。

    协议类型:两字节字段,定义其后数据包属于何种协议。0800表示IP协议,0806表示ARP协议,8035表示RARP协议。另外,如果该字段被填充的数值小于等于05DCh(1500),则该字段为长度字段,指定数据字段中非填充数据的长度。

    注:MAC是网卡的硬件地址,在出厂时固化,它由两部分构成,前三字节称为组织唯一标识符(OUI),OUI有ICCC分配。后三字节由购买该OUI的公司定义的地址字节。以太网尾部为4字节CRC校验(帧校验序列(FCS)).如果帧长小于64字节,则要求"填充",以使这个帧的长度达到64字节。

---------------------------------

  2.2 IP(网络协议)首部

    接下来是IP首部,它共有20个字节,它的结构为

TCP/IP/ARP/ICMP首部分析

    版本:4位版本号,目前应用最广泛的是4(1000),即IPv4;

    头长:4位首部的长度,它以4字节为单位,最小值为5,即首部长度最小为20字节。我们上图给出的就是20字节头长,不带任何选项 的IP首部,首部的最大长度为4*15=60字节

    服务类型:8 位TOS 字段有3 个位用来指定IP 数据报的优先级(目前已经废弃不用),还有4 个位表示可选的服务类型(最小延迟、最大呑吐量、最大可靠性、最小成本),还有一个位总是0。

    包裹总长:当前数据包的总长度(包括IP首部与IP数据)

    重组标识:发送主机赋予的标识,每传一个IP数据报,16位标识加1,可用于分片和重新组装数据报。

    标志:3位标志,

        1位保留;

        1位为不分段位:0表示允许数据包分段,1为不允许;

        1位为更多段位:0表示数据包后面没有包,该包为最后包,1表示数据包后有更多包

    段偏移量:13位段偏移量与更多段位组合,帮助接收方组合分段的报文

    生存时间:PING命令看到的TTL就是这个。每过一个路由器就把该值减1,如果减到0 就表示路由已经太长了仍然找不到目的主机的网络,就丢弃该包,因此这个生存时间的单位不是秒,而是跳(hop)

    协议代码:使用该包裹的上层协议。TCP是6,ICMP是1,IGMP是2,UDP是17;

    头校验和:16位IP首部的校验和。

    32位源IP地址与32位目的IP地址。

---------------------------------

  2.3 TCP(传输控制协议)首部

    最后是TCP首部,它共有20个字节,它的结构为

TCP/IP/ARP/ICMP首部分析

    2字节的源端口和2字节的目的端口:用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。有时,一个IP地址和一个端口号也称为一个插口或套接字(socket) 。这个术语出现在最早的TCP规范(RFC793)中,后来它也作为表示伯克利版的编程接口 。插口或套接字对(socket pair)(包含客户IP地址、客户端口号、服务器 IP地址和服务器端口号的四元组 )可唯一确定互联网络中每个TCP连接的双方。

    数据序号:TCP为发送的每一个字节都编写一个号码,这里存储当前数据包的第一字节的序号如果将字节流看作在两个应用程序间的单向流动,则 TCP用序号对每个字节进行计数。

    确认序号:TCP告诉接受者希望它下次接收到数据包的第一字节序号。

    偏移:4位偏移,类似IP表明数据包头有多少个32位;

    6个标志比特:

U:URG紧急比特。当URG=1时,表明此报文端有紧急数据应尽快传送;

A:ACK确认比特。只有当ACK=1时,确认字段才有效,(TCP三次握手);

P:PSH用于通知用户一个更高的数据吞吐量被需要,如果可能数据必须以更高的速率通信;

R:RST复位比特。表明TCP连接过程中出现严重错误必须释放连接,然后重新建立连接(TCP三次握手);

S:SYN同步比特。表明这是一个连接请求或连接接收报文;

F:FIN终止比特。表明此报文段的发送端的数据已发送完毕,并要求释放连接。

    窗口字段:用于控制对方发送的数据量,单位为字节。TCP连接的一段根据设置的缓冲空间大小确定自己接收窗口大小,然后通知对方以确定对方的发送窗口的上限;

    包校验和:包括首部与数据两部分,在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。

    紧急指针:指出在本报文段中的紧急数据的最后一个字节的序号。

---------------------------------

  2.4 ARP(地址解析协议)首部

    对于ARP和RARP包,在以太网首部之后直接就是ARP或RARP首部,它共有28字节,它的结构为

TCP/IP/ARP/ICMP首部分析

    硬件类型:表示硬件地址类型,它的值为1即表示以太网地址。

    协议类型:表示要映射的协议地址类型。它的值为0x0800即表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同,这是有意设计的。

    硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。

    操作类型指出四种操作类型,它们是 ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4) 。这个字段必需的,因为ARP请求和RARP应答的帧类型字段值是相同的。

    接下来内容就是重复的MAC与IP地址。

    对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的 ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为 2,最后把它发送回去。

---------------------------------

  2.5 UDP(用户数据报协议)首部

    对于UDP包,在IP首部后面跟随的是UDP首部。UDP首部共8个字节,它的结构是

TCP/IP/ARP/ICMP首部分析

    UDP长度:包含头部和数据部分。

    校验和:覆盖UDP首部和UDP数据。

    注:UDP数据报和TCP段都包含一个12字节长的伪首部,它是为了计算检验和而设置的,伪首部包含IP首部中的一些字段。TCP有超时重传机制,UDP没有。

    关于UDP伪首部的问题请看这位博友的帖子:TCP&UDP伪首部详解

---------------------------------

  2.6 ICMP(网络控制报文协议)首部

    ICMP在TCP/IP协议中是IP属于同一层,它是封装在IP数据中的。关于ICMP首部共有8字节,它的结构是

TCP/IP/ARP/ICMP首部分析

    类型:8位的报文类型,用来标识报文

    代码:8位的代码用来提供有关类型的进一步信息。

    校验和:16位校验和,只覆盖ICMP报文

    以上4个字节是ICMP报文中不变的,针对不同ICMP功能后面的有所不同

    标识符:用于表示本ICMP进程

    序列号:用于判断回射应答数据包

TCP/IP/ARP/ICMP首部分析

--------------------------------------------------------------------------------------------------------------------

3、常见ICMP报文

    1)响应报文(类型8或0,代码0)

    我们日常用的PING就是响应请求(8)和应答(0)一台主机向一个节点发送一个类型为8的ICMP报文,若无异常,则返回类型为0的ICMP报文,说明这台主机存在

---------------------------------

    2)时间戳报文(类型13和14)

    请求13和应答14,用于测试两台机器之间数据报来去一次的传输时间(网络上的主机一般是独立的,每台机器都有自己的当前时间。时间戳请求与应答用来查询目的主机系统当前的时间。返回值是自午夜开始到现在的毫秒数,通过这个数值来协调时间的统一。事实上因为延时,这个值是不准确的,通常采取多次测量求平均值的办法。)

--------------------------------------------------------------------------------------------------------------------

4、关于MAC、IP与端口

    MAC在局域网内必须唯一,否则将于其它主机冲突导致连接不成功。

IP与MAC一样,在局域网内要保持唯一,不能与其它主机的IP地址冲突。开发板的IP与我们电脑的IP要保持在同一网段内,即IP地址的前三段要保持一致,后面不同。

关于具体数据包操作请看下一篇博文STM32以太网程序解析一

--------------------------------------------------------------------------------------------------------------------

5、浅谈IP地址、MAC地址和地址解析协议(ARP)之间的关系 

ARP地址解析协议(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。OSI模型把网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。

RARP协议(Reverse Address Resolution Protocol)反向地址转换协议。反向地址转换协议就是将局域网中某个主机的物理地址转换为IP地址,比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。

 

假设有两台主机,本地主机A和目标主机B要进行通信。

TCP/IP/ARP/ICMP首部分析

1)ARP映射IP地址和MAC地址的过程

图1-1是TCP/IP协议族的分层结构,数据包经常通过以太网发送,在发送数据包的过程中先封装IP的帧头信息然后再封装链路层的MAC地址,最后是以太网的帧头信息。以太网的帧头包括:目标地址、源地址、帧的类型,以太网设备的地址是48位的,它不识别32位的IP地址(IPV4)只识别MAC地址。因为以太网只识别设备的MAC地址,那么问题就来了,源地址我们是知道的就是主机A的MAC地址,那目标的MAC地址呢?我们可能知道也可能不知道。怎样得到目标的MAC地址呢?地址解析协议会完成IP地址和MAC地址之间的映射,得到主机B的MAC地址,这是地址解析协议的绝活。

首先主机A根据路由表的内容确定B主机的IP地址,然后在本主机上查询ARP缓存的ARP表看看有没有和B主机IP地址对应的MAC地址的历史记录,如果有就添加到以太网帧头的目标地址。如果在ARP表中没有与B主机IP对应的MAC地址,主机A就会向本地网络中的所有主机广播发送ARP请求帧(包含B主机的IP地址,A主机的IP地址和MAC地址),接收到ARP请求的各主机将收到的请求帧中的目标IP地址比较,如果与自己的IP地址不匹配丢弃ARP请求,如果B主机匹配B主机将自己的IP地址和MAC地址回复给发送请求的A主机,同时B主机在ARP表中更新或者记录主机A的IP地址和MAC地址。

A主机在收到数据时首先判断帧的类型,从图1-1中可以看到收到的数据可能是IP数据也可能是ARP数据。如果收到的是IP数据就会按IP的数据帧格式进行解算,如果收到的是ARP数据帧再判断是响应帧还是请求帧,如果是响应帧A主机就会更新本地的ARP表,若是请求帧就会把A主机的IP地址和MAC地址回复给发送请求的主机。

---------------------------------

2)ARP帧的格式

      ARP的请求帧和响应帧有相同的格式,ARP请求帧的以太网目标地址为广播地址:FF:FF:FF:FF:FF:FF

TCP/IP/ARP/ICMP首部分析

硬件类型:ARP协议在何种网络上实现,以太网的硬件类型为1。

协议类型:使用ARP或RARP的协议类型,IPV4的值为0x0800。

硬件地址长度:物理地址长度,以太网为6

协议地址长度:协议地址长度,IPV4为4

操作代码:定义报文的类型,1为ARP请求,2为ARP应答,3为RARP请求,4为RARP应答。

发送方MAC地址:发送方的MAC地址

发送方IP地址: 发送送的IP地址

目标方MAC地址:目标方的MAC地址,当ARP是请求帧时此地址不填充。

目标放IP地址:目标方的IP地址。

 

       因为以太网数据帧最小为46个字节,ARP帧只有28个字节所以会在ARP帧的末尾再填充18个字节的PAD数据。

--------------------------------------------------------------------------------------------------------------------

6、参考资料

http://blog.csdn.net/a827415225/article/details/51945222

-------------------------------------------------------------------------------------------------------------------

 

PPP工作于第2层,TCP/IP工作于3-7层

PPP(Point to Point Protocol)点对点协议
  它是用于串行接口的两台计算机的通信协议,是为通过电话线连接计算机和服务器而彼此通信而制定的协议。网络服务提供商可以提供您点对点连接,这样提供商的服务器就可以响应您的请求,将您的请求接收并发送到网络上,然后将网络上的响应送回。PPP是使用IP协议,有时它被认为是TCP/IP协议族的一员。PPP协议可用于不同介质上包括双绞线,光纤和卫星传输的全双工协议,它使用HDLC进行包的装入。PPP协议既可以处理同步通信也可以处理异步通信,可以允许多个用户共享一个线路,又可发进行SLIP协议所没有的差错控制。
TCP/IP(Transmission Control Protocol/Internet Protocol)传输控制协议/Internet协议
   TCP/IP协议起源于美国国防高级研究计划局。提供可靠数据传输的协议称为传输控制协议TCP,好比货物装箱单,保证数据在传输过程中不会丢失;提供无连接数据报服务的协议称为网络协议IP,好比收发货人的地址和姓名,保证数据到达指定的地点。TCP/IP协议是互联网上广泛使用的一种协议,使用TCP/IP协议的因特网等网络提供的主要服务有:电子邮件、文件传送、远程登录、网络文件系统、电视会议系统和万维网。它是Interent的基础,它提供了在广域网内的路由功能,而且使Internet上的不同主机可以互联。从概念上,它可以映射到四层:网络接口层,这一层负责在线路上传输帧并从线路上接收帧;Internet层,这一层中包括了IP协议,IP协议生成Internet数据报,进行必要的路由算法,IP协议实际上可以分为四部分:ARP,ICMP,IGMP和IP;再上向就是传输层,这一层负责管理计算机间的会话,这一层包括两个协议TCP和UDP,由应用程序的要求不同可以使用不同的协议进行通信;最后一层是应用层,就是我们熟悉的FTP,DNS,TELNET等。熟悉TCP/IP是熟悉Internet的必由之路。

UDP(User Datagram Protocol)用户数据报协议
  它是定义用来在互连网络环境中提供包交换的计算机通信的协议,此协议默认认为网路协议(IP)是其下层协议。UDP是TCP的另外一种方法,象TCP一样,UDP使用IP协议来获得数据单元(叫做数据报),不象TCP的是,它不提供包(数据报)的分组和组装服务。而且,它还不提供对包的排序,这意味着,程序程序必须自己确定信息是否完全地正确地到达目的地。如果网络程序要加快处理速度,那使用UPD就比TCP要好。UDP提供两种不由IP层提供的服务,它提供端口号来区别不同用户的请求,而且可以提供奇偶校验。在OSI模式中,UDP和TCP一样处于第四层,传输层。


可以说PPP是一种连接方式,TCP、UDP是传送数据的方式

参考来自 https://yq.aliyun.com/ziliao/364865

猜你喜欢

转载自blog.csdn.net/steel0205/article/details/83340454
arp
今日推荐