互联网协议基本知识
5.应用层:规定应用程序的数据格式,所有应用程序协议构成的
4.传输层:端口之间的交流,Unix系统下主机+端口(scoket)
3.网络层:确定计算机所在的子网络
2.链路层:确定0/1分组方式,一组电信号构成数据包
1.物理层:把电脑连接起来的物理手段,作用负责传送0/1电信号
1.物理层(Physical layer)
电缆、光缆、双绞线、无线电波
2.链路层(Link layer)
2.1-分组协议
代表协议 -- 以太网(Ethernet),每组数据包有两个部分,标头和数据。
- 标头:固定18个字节,数据包说明项、接受者、发送者、数据类型
- 数据:最短46个字节,最长1500个字节,具体的内容
2.2-MAC地址
以太网规定,所有联入互联网的设备都需要“网卡”接口,数据包是从一个网卡传到另一个网卡,网卡地址就是MAC地址。
MAC地址目前固定为48个二进制位,通常用12个十六进制表示,前6位IEEE授权的厂家编号,后6位厂商的网卡流水号。
2.3-广播
以太网把数据包发送给本网络中所有计算机,计算机自己判断是否是接受者,不是丢弃数据包,这种发送方式就是“广播”。
3.网络层(Network layer)
由于计算机无法使用MAC地址判断是否同一个子网络,导致无法确定能否使用广播发送数据包,所以“网络层”出来了,让发送主机找到目标主机。
网络层目的引进一套新的地址:“网络地址”,简称网址。帮助我们确定计算机所在的子网络,所以数据包要经过网址再到MAC地址。
3.1-IP协议
网址的协议,叫做IP协议,IP协议定义的地址称为IP地址。
目前广泛使用的IP协议第四版,建成IPv4。此版本规定,网络地址由32个二进制位组成。
0.0.0.0 ~ 255.255.255.255
IP地址由两部分组成,前一部分是网络,后一部分是主机,通过使用子网掩码(subnet mask)来对应那前多少位是网络部分.
两台计算机可以使用IP地址和子网掩码AND操作,如果结果相同则是同一块子网。
3.2-IP数据包
根据IP协议发送的数据,就叫做IP数据包,也分为标头和数据两部分。
- 标头:20到60字节。版本、长度、IP地址等
- 数据:最长65515字节,但因为以太网数据包限制到1500字节,所以超过就要分割成多个以太数据包。具体内容
IP数据包进入以太网后,会被以太数据包封装到Frame中的数据中。
3.3-ARP协议
详细流程参考图解ARP协议一
- 在网络通信中,主机之间的通讯数据包,从网络层(IP数据包,包含目标/发送的IP地址)-> 链路层(以太数据包,包含目标/发送的MAC地址)时,需要目标的MAC地址
- 一般情况下,网络层中的IP数据包中不会包含目标的MAC地址,所以需要ARP协议来获取目标的MAC地址
ARP(Address Resoluation Protocal)即地址解析协议,用来实现从IP地址到MAC地址的映射,即访问目标IP地址的MAC地址,采用一问一答模式。
ARP协议使用以太网的“广播”功能:将请求包以广播的形式发送给交换机或者WiFi(无线路由器)设备,这些设备再将此数据发送给同一局域网络的其他主机。
ARP的目的是为了协助IP地址获取目标MAC地址,所以应该是IP协议的平等协议,因为IP协议属于网络层,所以ARP也属于网络层。
3.4-网关
网关又称为协议转换器、网间连接器,一般提供一个局域网的网段。
4.传输层(Transport Layer)
使用“端口”(port)来表示具体的进程,端口是网卡的程序的编号。
端口从0到65535之间一个整数,0到1023被系统使用。
4.1-UDP协议
在传输层中,数据包中必须加入端口信息,UDP协议下的UDP数据包,由标头和数据组成,标头加入端口号。
标头只有8个字节,数据包大小不能超过65535(2^16)字节,正好放进一个IP数据包中。
UDP协议,比较简单,容易实现。
UDP数据包,一旦发出,无法确定目标是否收到。
4.2-TCP协议
TCP协议没发送一个数据包,都要确认,如果没有收到确认,需要重发数据包。
TCP保证数据不会遗失,但是过程复杂,实现困难,消耗较多资源。
TCP数据包没有长度限制,但是为了不必要的分割,通常不超过IP数据包的长度。
5.应用层(Application Layer)
应用程序协议(HTTP、Email、WWW、FTP、DHCP等)构成的应用层。
应用层存储在UDP/TCP(传输层)的数据中。
5.1-DNS协议
DNS(Domain Name System)就是根据域名来查IP地址,协助应用层数据,属于应用层。
终端使用dig命令查DNS信息
dig www.baidu.com
dig +short www.baidu.com
6.以太数据包
[以太网标头][IP标头][TCP/UDP标头][应用层数据包]