提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

TCP/IP网络模型分为四层,从上到下分别为应用层、传输层、网络层、数据链路层


提示:以下是本篇文章正文内容,下面案例可供参考

一、数据链路层

在网线光缆等数据传输媒介中,数据是以电信号的形式传输,也就是0-1的电信号表示数据。且包含了物理地址。数据层则是解决物理地址寻址的问题。

以太网协议

以太网协议定义了数据帧,每一帧传输一段数据,如果数据很长,则需要分帧传输。每一个数据帧分为两个部分,head和data(TCP、IP协议也是分为两部分)。

Head部分:包含了发送者、接收者、数据类型等等;

Data部分:包含了传输的具体数据。

其中,Head固定18为字节,Data部分最少46字节,最长1500字节,因此每个数据帧最少为64字节,最长为1518字节。如果数据很长,则会分为几个数据帧传输,接收方接收后再进行整合获取数据。

MAC地址

Head部分中,包含了发送者和接收者信息,这个信息就是MAC地址。

MAC地址:格式为FF-FF-FF-FF-FF-FF,12个十六进制数表示,前6为表示网卡的生产厂商,后6为表示这款网卡的生产序号。(注:以太网协议规定,所有网络的所有设备都必须有网卡接口,数据从一块网卡传入另一块网卡,MAC的地址就是网卡的地址,每块网卡有唯一的MAC地址)

广播

规则有了,地址也有了,接下来就是数据帧怎么送,以太网中发送数据的方式称为广播。以太网发送数据就像送外卖一样,配送员知道地址后,把外卖送到单元楼下,大声喊谁谁谁的外卖到了,单元的人都能听见,一听,不是我的就不拿,是我的就下去取。

广播:对比外卖,以太网送数据时,把数据发送到网络内的总线上,网络内的所有计算机都可以拿到,拿到之后,拆开一看,目标MAC地址不是自身,就丢弃了;目标MAC地址是自身,就收下这个数据包并解析。

二、网络层

1.为什么会有网络层

以太网协议,依靠MAC地址发送数据,每个计算机都有唯一的MAC地址,理论上已经完全ok了,但是如果每个计算机都把自己要发的数据集都放在网络上,然后每个计算机都要解读其他所有计算机的数据包来杀看是不是自己的,那就不用干活了,累都累死了。

网络层,定义了另一种地址,用来定义计算机所在的自网络,就像你所在的市区,就是一个范围。

IP协议

网络层定义的地址就是IP地址,规定网络地址的协议叫做IP协议。

目前广泛使用的是IPV4,但随着世界上计算机数量的增多,逐渐发现32位慢慢不够用了,就有了IPV6。

IP地址

IPV4有32位2进制数表示,通常转化为4段十进制数表示IP地址。从0.0.0.0---255.255.255.255,每台计算机都会有一个IP地址,这个地址分为网络部分和主机部分,每个区域的网络部分和主机部分位数可能不相等。

子网掩码

但是由于每个区域的差别,网络部分和主机部分的位数可能不一样,因此出现了子网掩码,用来判断两个IP是否在同一各网络。比如网络部分有16位,那么255.255.102.111的子网掩码就是255.255.0.0,通过判断两个计算机IP的子网掩码是否相同就可以知道是否处于同一个子网了。

知道了是否处于同一子网有什么用呢?这就是网络层的作用了。如果是同一个网络,就用广播的形式传递数据,如果不是,就把数据交回给路由,由路由传到下一跳。

IP数据包

IP数据包也分为两部分,Head和Data。

Head部分:主要包括版本、长度、IP地址等信息;

Data部分:数据部分

其中,Head部分20-60字节 ,整个IP数据包最大为65535字节,由于以太网数据包Data部分最多1500字节,而IP协议数据包作为了以太协议的Data部分,所以,通常需要分为多个数据帧传输。
与以太协议协同作用,就成为了

 ARP协议

由于IP数据包放在以太网数据包里发送,通过IP寻址,通过MAC地址定位,那么我们怎么能知道目标主机的MAC地址(通常IP地址是已知的,后面解释),所以我们需要用IP地址拿到MAC地址。

  • 两台主机不在同一个子网
    因为有了IP协议,就不会再子网之外进行广播了,所以不太好找到目标MAC地址,但是子网之外的东西网关会解决好的。
  • 两台主机在同一个子网
    可以使用ARP协议,ARP协议发送一个数据包,与IP协议相似,包含于以太数据包中。其中包含了本机IP地址,本机MAC地址目标IP地址,目标MAC地址由于不知道,写的是FF:FF:FF:FF:FF:FF,用来表示这是个广播地址,子网中的计算机都会拿到这个包,然后和自己的IP比较,如果相同,就知道这是个想要我MAC地址的的请求,把自己MAC地址回复。

三、传输层

为什么会有传输层

通俗来讲,还是送外卖,你去到外卖了,你在知道是家里的那个人订的外卖呢,这时候就需要传输层。
传输层:定义是计算机上那个端口的数据,实现端到端的传输。为0-65535之间的一个整数,其中0-1023端口被系统占用,用户只能选择大于1023的端口。
因此,数据的发送寻址方式就变成了:MAC地址+IP地址+端口。主机IP地址+端口,又叫做套接字。
又加了端口这个东西,当然需要在原数据包基础上加东西来放这个端口啊,所以出现了UDP和TCP。

UDP协议

UDP数据包也是由Head和Data两部分组成。
Head部分:定义了发出端口和接收端口;
Data部分:存放了数据。
其中,UDP的Head部分8个字节,总长65535字节,正好可以放进一个IP数据包。
UDP数据包
和以太网协议和IP协议协同作用为:
以太+IP+UDP数据包

TCP协议
为什么有了UDP,还有TCP呢?
因为UDP是不可靠传输,就是A发了一段UDP数据包给B,B有可能收到,也可能因为网络等问题收不到,A也不知道是个啥情况,就默认B收到了,对于一些必须要保证给B的数据,这显然不可行,TCP协议就可以保证在网络无问题时,100%传输,就算出错,A自己也能知道。
TCP协议:TCP数据包中除了数据,有很多其它的字段,这些字段保证了传输的可靠性。保证传输可靠地方式:3词握手,4次挥手。

 

保证可靠传输会用到序列号(seq),确认号(ack),SYN,ACK,FIN
序列号:程序用来标识数据包所用的字段
确认好:用来表示对收到的数据包表示确认收到
SYN:程序请求建立连接的字段
ACK:程序确认收到数据的字段
FIN:程序请求关闭连接的字段

三次握手
主机A,主机B
1.A→B
seq=x,SYN=1
主机A请求建立连接
(注:这一步后,B确认了自己的收报能力)

2.B→A
seq=y,ACK=1,SYN=1,ack=x+1
ACK表示B确认收到A的请求,SYN表示同意建立连接
(注:这一步后,A确认了自己的发报和收报能力,因为发出去的数据有应答,就说明B已经收到了)

3.A→B
seq=x+1,ACK=1,ack=y+1
ACK表示确认B的请求
(注:这一步后,B才最终确认自己的发报能力,因为2发给A的有应答)

3次握手后,表示这个链接是好的,才建立连接,发送数据。

四次挥手

  1. A→B
    seq=x,FIN=1
    A主机的数据发送完了,所以A发送FIN,发起了断开连接的请求

  2. B→A
    seq=y,ACK=1,ack=x+1
    ACK确认收到了A的数据,但是B的数据还没有传完,所以需要等B把数据包传完之后才断开连接
    (注:这一步之后,B接着传输剩下的数据包)

  3. B→A
    FIN=1,ACK=1,seq=z,ack=x+1
    B的数据传完了,所以也发送FIN表示可以断开连接
    (注:这一步之后,B直接断开连接)

  4. A→B
    ACK=1,seq=x+1,ack=z+1
    A表示收到了B的数据,可以断开连接
    (注:这一步之后,A等待B的应答,经过2MSL之后,还没有收到B的回信,因为B已经关闭连接了,所以A确定B已经断开了,A也断开连接。2MSL为报文在网络上最大生存时间,超过这个时间就会被丢弃)

四、应用层

依旧是外卖,找到了谁定的外卖,不同的外卖吃法不一样,有的要用筷子,有的要用勺子。
应用层:制定了数据格式,用于对数据的封装与解读。
举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐