如何毁掉一个婴儿?
断了他的奶。
如何毁掉一个年轻人?
断了他的网。
“网络之于年轻人,正如同奶水之于婴儿”
什么是网?什么是域名?什么是IP、Mac地址,端口号?什么是UDP?什么是TCP?今天这篇教程,将带大家学习TCP/IP的知识,“工作中模模糊糊的概念,这次终于理顺了!”
TCP/IP背景介绍
上世纪 70 年代,随着计算机技术的发展,计算机使用者意识到:要想发挥计算机更大的作用,就要将世界各地的计算机连接起来。但是简单的连接是远远不够的,因为计算机之间无法沟通。因此设计一种通用的“语言”来交流是必不可少的,这时 TCP/IP 协议就应运而生了。
TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。
TCP/IP 不是一个协议,而是一个协议族的统称,里面包括了 IP 协议、ICMP 协议、TCP 协议、以及 http、ftp、pop3 协议等。网络中的计算机都采用这套协议族进行互联。
网络协议栈架构
提到网络协议栈结构,最著名的当属 OSI 七层模型,但是 TCP/IP 协议族的结构则稍有不同,它们之间的层次结构有如图对应关系:
可见 TCP/IP 被分为 4 层,每层承担的任务不一样,各层的协议的工作方式也不一样,每层封装上层数据的方式也不一样:
-
(1)应用层:应用程序通过这一层访问网络,常见 FTP、HTTP、DNS 和 TELNET 协议;
-
(2)传输层:TCP 协议和 UDP 协议;
-
(3)网络层:IP 协议,ARP、RARP 协议,ICMP 协议等;
-
(4)网络接口层:是 TCP/IP 协议的基层,负责数据帧的发送和接收。
本教程,就是从底向上分层次对 TCP/IP 的各协议做介绍。
IP 地址
网络上每一个节点都必须有一个独立的 IP 地址,通常使用的 IP 地址是一个 32bit 的数字,被 . 分成 4 组,例如,255.255.255.255 就是一个 IP 地址。有了 IP 地址,用户的计算机就可以发现并连接互联网中的另外一台计算机。
域名
用 12 位数字组成的 IP 地址很难记忆,在实际应用时,用户一般不需要记住 IP 地址,互联网给每个 IP 地址起了一个别名,习惯上称作域名。
域名与计算机的 IP 地址相对应,并把这种对应关系存储在域名服务系统 DNS(Domain Name System) 中,这样用户只需记住域名就可以与指定的计算机进行通信了。
MAC 地址
MAC(Media Access Control)地址,或称为物理地址、硬件地址,用来定义互联网中设备的位置。
在 TCP/IP 层次模型中,网络层管理 IP 地址,链路层则负责 MAC 地址。因此每个网络位置会有一个专属于它的 IP 地址,而每个主机会有一个专属于它 MAC 地址。
端口号
IP 地址是用来发现和查找网络中的地址,但是不同程序如何互相通信呢?这就需要端口号来识别了。如果把 IP 地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是端口采用 16 比特的端口号标识,一个 IP 地址的端口可以有 65536(即:2^16)个之多!
常用协议对应端口号:
-
SSH 22
-
FTP 20 和 21
-
Telnet 23
-
SMTP 25
-
TFTP 69
-
HTTP 80
-
SNMP 161
-
Ping 使用ICMP,无具体端口号
封装和分用
封装:当应用程序发送数据的时候,数据在协议层次当中自顶向下通过每一层,每一层都会对数据增加一些首部或尾部信息,这样的信息称之为协议数据单元(Protocol Data Unit,缩写为PDU),在分层协议系统里,在指定的协议层上传送的数据单元,包含了该层的协议控制信息和用户信息。如下图所示:
-
物理层(一层)PDU指数据位(Bit)
-
数据链路层(二层)PDU指数据帧(Frame)
-
网络层(三层)PDU指数据包(Packet)
-
传输层(四层)PDU指数据段(Segment)
-
第五层以上为数据(data)
RFC
RFC(Request for Comment)文档是所有以太网协议的正式标准,并在其官网上面公布,由 IETF 标准协会制定。大量的 RFC 并不是正式的标准,出版的目的只是为了提供信息。RFC 的篇幅不一,从几页到几百页不等。每一种协议都用一个数字来标识,如 RFC 3720 是 iSCSI 协议的标准,数字越大意味着 RFC 的内容越新或者是对应的协议(标准)出现的比较晚。
其他知识点
-
链路层介绍
-
IP网际协议
-
网络层其它协议
-
传输层:UDP协议
-
传输层:TCP协议
-
应用层协议
完整的教程学习(完全免费),请打开这里:
https://www.shiyanlou.com/courses/98
相关教程推荐:
GO语言模拟实现TCP/IP协议
https://www.shiyanlou.com/courses/1300