TCP/IP协议栈
定义MAC地址(链路层)----定义网络地址,区分网段,子网内寻址,不同子网路由(网络层)----定义端口(传输层)----定义数据格式(应用层)
链路层
网卡地址就是MAC地址,具有全球唯一性,以太网采用广播形式,将数据包发送给子网内的所有主机,子网内每台主机收到数据包后,会和自己的MAC地址进行比较,如果不是就丢弃这个包
- 首部 14字节 目标MAC地址/源MAC地址/类型
- 数据 46~1500字节 一个数据包为一帧,如果数据太长,必须分割成多个帧发送
- 尾部 6字节 数据校验序列,用于确定数据在传输中是否有损坏
网络层
网络层主要工作是:定义网络地址,区分网段,子网内MAC寻址,对不用子网的数据包进行路由
- IP协议
MAC地址只和厂商有关,与所处网络无关,所以无法通过MAC地址知道是否属于同一个子网。因此引入IP协议
前24位是网络地址,后8位为主机地址,如果两个主机在同一个子网内,网络地址一定相同。
为了判断IP中的网络地址,还引入了子网掩码,IP地址和子网掩码通过按位与运算得到网络地址。 - ARP协议 地址解析协议
根据IP地址获取MAC地址,ARP会发送请求数据包,首部包含目标主机的IP地址,链路层再进行包装生成以太数据包,最终广播给子网内的所有主机,每个主机取出首部的IP地址和自己的IP地址进行比较,相同就返回MAC地址 - 路由协议
ARP的MAC寻址仍然局限在同一个子网内,引入路由协议,首先通过IP协议来判断两个主机是否在同一个子网中,如果在同一个子网,就通过ARP查询MAC地址。如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由,网关是子网与子网之间的桥梁,数据会在网关间多次转发,最终发送至目标所在子网中,通过ARP获得目标机器MAC - IP数据包
网络层包装的是IP协议包,首部20字节,包含目标IP和源IP,数据部分65515字节,超过链路层数据最大长度需要分多帧发送
传输层
传输层的主要工作是定义端口,表示应用程序身份,实现端口到端口的通信,TCP协议保证数据传输的可靠性
链路层定义了MAC地址,网络层定义了IP地址,现在数据可以从一台机器传送到另外一台机器了,但是数据其实是由一台机器的程序发送的,也是由另外一台机器上的程序接收的,因此引入UDP协议,为了给每个程序标识身份,UDP定义了端口,这样数据可以从一台机器的程序发送到对应的另一台机器的程序。
- UDP
UDP由首部和数据构成,首部长度8字节,包含目标端口和源端口,数据最大65527字节
由于UDP协议比较简单,没有确认机制,数据包一旦发送,无法确认对方是否收到,所以可靠性差 - TCP
一种面向连接的,基于字节流的通信协议。没发出一个数据包都要确认,如果一个数据包丢失,必须重新发送
TCP由首部和数据构成(同UDP),数据部分长度没有限制,但是为了保证网络的效率,一般都不会超过IP数据包的长度
应用层
应用层主要工作是定义数据格式,并按照对应的格式解析数据
由了以上三种协议,数据已经可以从一个主机的程序传输到另外一个主机的程序上了,但是此时数据只是字节流,不能很好的被程序识别,操作性差。因此,应用层定义了各种各样的协议来规范数据格式