一、网络协议

系列文章目录

进程间的通信方式之一--socket通信



一、网络协议

现在Internet使用的主流协议族是TCP/IP协议族,它是一个分层、多协议的通信体系。

为了使各种不同的计算机之间可以实现互联,ARPANet指定了一套计算机通信协议,即TCP/IP协议族,他们对电脑如何连接和组网,做出了详尽的规定。

Ⅰ、TCP/IP协议族体系结构以及主要协议

在这里插入图片描述
在这里插入图片描述
TCP/IP协议族是一个四层系统,自底向上分别是数据链路层、网络层、传输层和应用层。

Ⅱ、物理层

通过光缆、电缆、双绞线、无线电波等方式将电脑连接起来的物理手段,即物理层。它规定了网络的一些电气特性,作用是负责传送 0 和 1 的电信号。

Ⅲ、数据链路层

  • 单纯的 0 和 1 没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义?这就是“链接层”的功能,它在“物理层”的上方,确定了 0 和 1 的分组方式。
  • 数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介(比如以太网、令牌环等)上的传输

1. 以太网协议

  1. 早期的时候,每家公司都有自己的电信号分组方式。逐渐地,一种叫做“**以太网(Ethernet)”**的协议,占据了主导地位。以太网规定,一组电信号构成一个数据包,叫做“帧”(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)

在这里插入图片描述

  • 标头” 包含数据包的一些说明项,比如发送者、接收者、数据类型等;
  • 数据” 则是数据包的具体内容。
  1. 以太网数据包的“标头”,包含了发送者和接收者的信息。以太网规定,连入网络的所有设备,都必须具有“网卡接口”。数据包必须是从一块网卡,传送到另一块网卡。通过网卡能够使不同的计算机之间连接,从而完成数据通信等功能。网卡的地址,就是数据包的发送地址和接收地址,这叫做 MAC 地址

在这里插入图片描述
MAC地址,用于标识网络设备,类似于身份证号。每块网卡出厂的时候,都有一个全世界独一无二的 MAC 地址(理论上全球唯一),长度是 48 个二进制位,通常用 12 个十六进制数表示。

  1. 以太网数据包必须知道接收方的MAC地址,然后才能发送。再有了MAC地址之后,以太网采用 广播 的方式,向本网络内所有计算机发送数据包,让每台计算机自己判断,是否为接收方。

在这里插入图片描述
有了数据包的定义、网卡的MAC地址、广播的发送方式,“数据链路层”就可以在多台计算机之间传送数据。

2. ARP(Address Resolve Protocol, 地址解析协议)协议和RARP(逆地址解析协议)协议

数据链路层两个常用的协议是ARP协议和RARP协议,它们实现了IP地址和MAC地址之间的相互转换。

在这里插入图片描述

  • 网络层使用IP地址寻址一台机器,而数据链路层使用MAC地址寻址一台机器,因此网络层必须先将目标机器的IP地址转化为其MAC地址,才能使用数据链路层提供的服务,这就是ARP协议的用途。
    当两台主机在同一子网络才能通过ARP获取MAC地址,否则只能将数据包传送到两个子网络连接处的“网关”,让网关去处理。

  • RARP协议 仅用于网络上的某些无盘工作站,由于缺乏存储设备,其无法记住自己的IP地址,但可以利用MAC地址来查询自身的IP地址。

Ⅲ、网络层

网络层实现主机之间数据包的选路和转发。

1. 网络层的由来

以太网协议,依靠MAC地址发送数据。理论上,仅依靠 MAC 地址,北京的网卡就可以找到深圳的网卡了,技术上是可行的。
但是,以太网采用广播的方式向本网络中所有计算机发送数据包,不仅效率低,而且局限在发送者所在的子网络。
互联网是无数子网络共同组成的一个巨型网络,很像想象北京和深圳的电脑会在同一个子网络,这几乎是不可能的。
因此,必须找到一种方法,能够区分哪些 MAC 地址属于同一个子网络
如果是同一个子网络,就采用广播方式发送,否则就采用“路由”方式发送。
遗憾的是,MAC 地址本身无法做到这一点。它只与厂商有关,与所处网络无关。
这就导致了“网络层”的诞生。它的作用是引进“网络地址”,使得我们能够区分不同的计算机是否属于同一个子网络

2. IP协议

规定网络地址的协议,叫做IP协议(Internet Protocol, 因特网协议),IP协议为每一台计算机分配IP地址并确定哪些地址是在同一自网络。IP协议根据数据包的目的IP地址来决定如何投递它,如果数据包不能直接发送欸目标主机,那么IP协议就为它寻找一个合适的下一跳 (next hop) 的路由器,并将数据包交付给该路由器来转发。多次重复这一过程,数据包最终到达目标主机,或者由于发送失败而被丢弃。

在这里插入图片描述
互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成两个部分,网络地址+主机地址

那么如何从IP地址,判断两台计算机是否属于同一个网络呢?这就需要“子网掩码 (subnet mask)–网络部分为1,主机部分为0”

  • IP 地址和子网掩码中 1 相与“&”即可得到子网 ID
  • IP 地址和子网掩码中 0 相或 “|”,即可得到主机 ID
  • 两个IP地址分别与子网掩码进行AND运算,如果结果一样,它们就在同一个子网络

3. IP数据包

根据IP协议发送的数据,就叫做IP数据包。IP数据包也分为“标头”和“数据”两个部分。

IP数据包格式
所以以太网数据包就变成了下面的形式。“标头”部分主要包括版本、长度、IP地址等信息;“数据”部分则是IP数据包的内容。
在这里插入图片描述
IP 数据包的“标头”部分的长度为 20 到 60 字节,整个数据包的总长度最大为 65,535字节。因此,理论上,一个 IP 数据包的“数据”部分,最长为 65,515字节。前面说过,以太网数据包的“数据”部分,最长只有 1500 字节。因此,如果 IP 数据包超过了 1500 字节,它就需要分割成几个以太网数据包,分开发送了。

4. ICMP协议

ICMP协议(Internet Control Message Protocol,因特网控制报文协议),它是IP协议的重要补充,主要用于检测网络连接

 ICMP报文格式
图中,8位类型字段用于区分报文类型,它将ICMP报文分为两大类:

  • 差错报文:用来回应网络错误,比如 目标不可到达(类型值为3) 和 重定向(类型值为5);
  • 查询报文:用来查询网络信息,比如 ping程序 就是使用ICMP报文 查看目标是否可到达(类型值为8)。

有的ICMP报文还使用8位代码字段来进一步细分不同的条件,比如重定向报文使用代码值0表示对网络重定向,代码值1表示对主机重定向。

ICMP报文使用16位校验和对整个报文(包括头部和内容部分)进行循环冗余校验,以验证报文在传输过程中是否损坏,

Ⅳ、传输层

“传输层”的功能就是为两台主机上的应用程序建立“端到端”的通信。与“网络层”使用的逐跳通信方式不同,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程。

1. 传输层的由来

有了MAC地址和IP地址,我们可以在互联网上任意两台主机上建立通信。
但同一台主机上有许多程序都需要用到网络,所以我们还需要一个参数,表示数据包到底供哪个程序(进程)使用。
这个参数就是“端口 ( Port )”,它其实是每一个使用网卡的程序的编号,每个数据包都发到主机的特定端口,然后与服务器的相应端口联系。

2. 套接字

在这里插入图片描述
“网络层”的功能是建立“主机到主机”的通信,只要确定主机和端口,就能实现程序之间的交流。
因此,UNIX系统把 主机+端口,叫做“套接字 (Socket)”,通过它就可以进行网络应用程序开发。

3. TCP协议和UDP协议

TCP协议(Transmission Control Protocol,传输控制协议)为应用层提供可靠的、面向连接的和基于流(stream)的服务。
TCP协议使用超时重传、数据确认等方式来确保数据包被正确地发送至目的端,因此TCP服务是可靠的。

在这里插入图片描述

UDP协议(User Datagram Protocol,用户数据报协议),就是在数据包中加入端口信息。
UDP数据包,也由“标头”和“数据”两部分组成。标头,即定义的发送端口和接收端口;数据,即具体的内容。

在这里插入图片描述

Ⅴ、应用层

“应用层”的作用,就是规定应用程序的数据格式。 应用程序收到“传输层”的数据,接下来需要进行解读,由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则无法解读。

在这里插入图片描述

举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等。
那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了“应用层”。


参考文献:

  1. Linux网络编程——网络协议入门:https://blog.csdn.net/lianghe_work/article/details/45169815;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值