参考阮一峰教程:http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html 浅显易懂还有图,读一遍神清气爽
https://www.jianshu.com/p/4b9d43c0571a
动画说明TCP/IP: https://www.youtube.com/watch?v=HOaIqQAeaik
互联网协议
互联网的核心是一系列协议,总称为“互联网协议”,它们对电脑如何连接和组网做了详尽的规定。
OSI模型(Open System Interconnection model) 七层
每一层都为了完成一种功能,为了实现这些功能,就需要大家都遵守共同的规则,“protocol”
自底向上:
1. 物理层
物理层负责最后将信息编码成电流脉冲或其它信号用于网上传输
2. 数据链路层:
通过物理网络链路提供数据传输,规定了0,1的风暴形式,确定了网络数据包的形式
3. 网络层
负责在源和终点之间建立连接,可理解为怎么确定计算机的位置,ipv4,ipv6?
路由选路,选择本次通信使用的协议(http,ftp等), IP地址在这一层
4. 传输层
向高层提供可靠的端到端的网络数据流服务
每个应用程序都会在网卡注册一个端口号,该层就是端开口到端口的通信
UDP:只发不管别人收不收得到
5. 会话层
为两端通信实体建立连接(自动的网络寻址)
6. 表示层
提供多种功能用于应用层数据编码和转换,以确保一个应用层发出的信息能被另一个系统应用层识别,可解决不同系统之间的通信,比如linux下qq可以和windows下qq通信
怎么编码
7. 应用层
应用软件使用的协议,邮箱使用pop3,smtp,远程登录Telnet,获取ip地址的DHCP,域名解析dns,网页浏览的http协议
这部分协议主要用于规定应用软件如何去进行通信的
常见的应用层协议:
互联网分层结构的好处: 上层的变动完全不影响下层的结构
TCP/IP模型四层模型
1. 应用层: TFTP, HTTP, SNMP, FTP, SMTP, DNS, Telnet
2. 传输层:对应于传输层
TCP协议提供可靠的数据流运输协议(Transmission Control Protocol),UDP协议提供不可靠的用户数据报服务(Use Datagram Protocol)
TCP:三次握手、四次挥手
3. 网间层:对应网络层,本层包含IP协议,RIP(Routing Information Protocol)协议(路由信息协议),负责数据的包装,寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol, ICMP),用来提供网络诊断信息
4. 网络接口层: 网络接口层包括用于协作IP数据在已有网络介质上传输的协议。
它定义像地址解析协议(ARP, Address Resolution Protocol)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口
IP(Internet Protocol, 网际协议)
网间层的主要协议,任务时在源地址和目的地址之间传输数据。IP协议只是尽最大努力来传输数据包,并不保证所有的包都可以传输 到目的地,也不保证数据包的顺序和唯一。
- IP 定义了 TCP/IP 的地址,寻址方法,以及路由规则。现在广泛使用的 IP 协议有 IPv4 和 IPv6 两种:IPv4 使用 32 位二进制整数做地址,一般使用点分十进制方式表示,比如 192.168.0.1。
- IP 地址由两部分组成,即网络号和主机号。故一个完整的 IPv4 地址往往表示 为 192.168.0.1/24 或192.168.0.1/255.255.255.0 这种形式。
- IPv6 是为了解决 IPv4 地址耗尽和其它一些问题而研发的最新版本的 IP。使用 128 位 整数表示地址,通常使用冒号分隔的十六进制来表示,并且可以省略其中一串连续的 0,如:fe80::200:1ff:fe00:1。
TCP(TransmissionControlProtocol,传输控制协议)是一种面向连接的,可靠的, 基于字节流传输的通信协议。TCP 具有端口号的概念,用来标识同一个地址上的不 同应用。
DHCP(DynamicHostConfigrationProtocol,动态主机配置协议)是用于局域 网自动分配 IP 地址和主机配置的协议。可以使局域网的部署更加简单。
DNS(DomainNameSystem,域名系统)是互联网的一项服务,可以简单的将用“.” 分隔的一般会有意义的域名转换成不易记忆的 IP 地址。一般使用 UDP 协议传输, 也可以使用 TCP,默认服务端口号 53。
FTP(FileTransferProtocol,文件传输协议)是用来进行文件传输的标准协议。 FTP 基于 TCP 使用端口号 20 来传输数据,21 来传输控制信息。
SSH(SecureShell,安全Shell),因为传统的网络服务程序比如TELNET本质上都极不安全,明文传说数据和用户信息包括密码,SSH 被开发出来避免这些问题, 它其实是一个协议框架,有大量的扩展冗余能力,并且?供了加密压缩的通道可以 为其他协议使用。
HTTP(HyperTextTransferProtocol,超文本传输协议)是现在广为流行的WEB 网络的基础,HTTPS 是 HTTP 的加密安全版本。协议通过 TCP 传输,HTTP 默认 使用端口 80,HTTPS 使用 443。
阮老师笔记:
1. 协议: 每一层都要完成一种功能,为了实现这些功能,就需要大家都遵守共同的规则 “协议”
每一层都定义了很多协议,这些协议总称为“互联网协议” Internet Protocol Suite
2. 物理层: 把电脑连起来的物理手段,主要规定了网络的一些电气特性,作用是负责传送1,0的电信号
3. 链接层: 单纯0,1没有任何意义,必须规定解读方式,确定了0和1的分组方式,怎么装包packet内容, 以太网协议,Ethernet占据了主导地位,以太网规定,一组电信号构成一个数据包,叫做“帧”(Frame),每一帧分层两个部分:标头(Head)和数据(Data)
标头包含数据包的一些说明项,比如发送者,接受者,数据类型等等;“数据”这是数据包的具体内容;标头的长度,固定为18字节。数据的长度最短为46字节,最长为1500字节。因此,整个帧最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。
MAC地址:
以太网数据的标头中包含了发送者和接受者的信息,以太网规定,链路网络的所有设备,都必须具有“网卡”接口,数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。
每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。
前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。
广播:
一块网卡怎么会知道另一块网卡的MAC地址?
ARP协议: 地址解析协议,Address Resolution Protocol, 根据IP地址获取物理地址的一个TCP/IP协议
以太网采用很原始的方法,它不是把数据包准确送到接收方,而是想本网络内所有计算机发送,让每台计算机自己判断,是否为接收方
就是在一个子网内的所有计算机都会收到数据包,他们读取这个数据包的标头,找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接收这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫做“广播”
4. 网络层:
广播只是在一个子网内实现,如果两个不在同一个子网络的计算机要通信,所以需要网络层,引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络,这套地址就叫做“网络地址”,简称“网址”。
每台计算机有两种地址,一种是MAC地址,另一种是网络地址。MAC地址时绑定在网卡上的,网络地址时管理员分配的,它们没有任何关系。
IP协议:
规定网络地址的协议叫做“IP协议”。目前广泛采用的是IP协议第四版,简称IPV4.
这个地址分成两个部分,前一部分代表网络,后一部分代表主机。在同一个子网内的电脑它们IP地址的网络部分必定是相同的。但是我们无法判断哪些是网络部分,所以由“子网掩码”,如果前24位是网络部分,后8位是主机部分,那么子网掩码是255,。255.255.0
IP协议的作用主要有两个:为每一台电脑分配IP地址,另一个是确定哪些地址在同一个子网络中
IP数据包:
以太网数据包只包含MAC地址,没有IP地址
就把IP地址作为以太网数据包的数据内容,就不需要修改以太网协议
红色的是IP数据包,走到底层链路层,就要套上个MAC地址标头(蓝色)
IP数据包的标头长度为20-60字节,整个数据包的总长度最大为65535字节,所以“数据”部分最长为65515字节,但是以太数据包的“数据部分”最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。
ARP协议:
我们需要一种机制可以从IP地址得到MAC地址,两种情况:第一,两个主机不在同一个子网络中,那么没法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的“网关”(gateway),让网关去处理。
第二种情况:如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所在查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个“广播”地址。他所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者和相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。
总之,有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。
自顶向下而言,先有IP地址,然后广播得到MAC地址
5. 传输层
有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。
但问题是,同一台主机上有许多程序都需要用到网络,当一个数据包从互联网上发来的时候,你怎么知道它是发给哪个程序的,所以我们还需要一个参数,表示这个数据包到底供哪个程序使用,这个参数就叫做“端口”(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特点端口,所以不同的程序就能取到自己所需要的数据。
"端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。
"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。有了它,就可以进行网络应用程序开发了。
UPD协议:
要在数据包中加入端口信息,这就需要新的协议,最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号。
UDP数据包,也是由"标头"和"数据"两部分组成。
"标头"部分主要定义了发出端口和接收端口,"数据"部分就是具体的内容。然后,把整个UDP数据包放入IP数据包的"数据"部分,而前面说过,IP数据包又是放在以太网数据包之中的,所以整个以太网数据包现在变成了下面这样
“越走到底层”,就要在数据包前面套一个底层的协议标头
绿色是UPD协议标头 红色是IP协议标头, 蓝色的是以太网协议标头
UDP数据包非常简单,"标头"部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
TCP协议:
UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。
为了解决这个问题,提高网络可靠性,TCP协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。
因此,TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。
6. 应用层
应用程序收到"传输层"的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。
"应用层"的作用,就是规定应用程序的数据格式。
举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。
这是最高的一层,直接面对用户。它的数据就放在TCP数据包的"数据"部分。因此,现在的以太网的数据包就变成下面这样。
网络通信就是交换数据包。电脑A向电脑B发送一个数据包,后者收到了,回复一个数据包,从而实现两台电脑之间的通信。
如果两台电脑不在同一个子网络,无法通过广播的方式知道对方的MAC地址,必须通过网关(gateway)转发
上图中,1号电脑要向4号电脑发送一个数据包。它先判断4号电脑是否在同一个子网络,结果发现不是(后文介绍判断方法),于是就把这个数据包发到网关A。网关A通过路由协议,发现4号电脑位于子网络B,又把数据包发给网关B,网关B再转发到4号电脑。
1号电脑把数据包发到网关A,必须知道网关A的MAC地址。所以,数据包的目标地址,实际上分成两种情况:
用户的上网设置
静态IP地址
想要上网,需要设置4个参数:
- 本机的IP地址
- 子网掩码
- 网关的IP地址
- DNS的IP地址
如果设置了静态IP地址,那么每次开机,都会被分到同样的IP地址
动态IP地址
计算机开机后,会自动分配到一个IP地址,不用人为设定。它使用的协议叫做 DHCP协议
这个协议规定,每一个子网络中,有一台计算机负责管理本网络的所有IP地址,它叫做"DHCP服务器"。新的计算机加入网络,必须向"DHCP服务器"发送一个"DHCP请求"数据包,申请IP地址和相关的网络参数。
前面说过,如果两台计算机在同一个子网络,必须知道对方的MAC地址和IP地址,才能发送数据包。但是,新加入的计算机不知道这两个地址,怎么发送数据包呢?
DHCP协议做了一些巧妙的规定。
它是应用层协议,建立在UDP协议之上,所以整个数据包是这样的
以太网标头中MAC地址填 FF-FF-FF-FF-FF-FF 表示广播地址
IP标头中设置发出方的IP地址和接收方的IP地址,对于这两者,本机都不知道,所以填发出方为0.0.0.0,接收方填255.255.255.255
UDP标头,设置发出端口和接收端口。这一部分是DHCP协议规定好的,发出方式68端口,接收方是67端口
当看到发出方IP地址时0.0.0.0,接收方是255.255.255.255,DHCP服务器就知道这个包是发给它的
然后DHCP服务器督促这个包的数据内容,分配好IP地址,发送回去一个DHCP响应数据包,IP地址时发出方(DHCP服务器的IP地址)和接收方(255.255.255.255)
DNS协议:
发送数据包,必须要知道对方的IP地址,但是有时候上网只知道网址,比如说www.google.com,不知道IP,这里,DNS协议就可以帮助我们,将这个网址转换成IP地址。已知DNS服务器为8.8.8.8,于是我们向这个地址发送一个DNS数据包(53端口)
然后,DNS服务器做出响应,告诉我们Google的IP地址是172.194.72.105。于是,我们知道了对方的IP地址。
如果两个通讯计算机不在同一个子网络内,那么接收方的MAC地址将是网关的MAC地址
应用层协议:
浏览网页是HTTP协议,它的整个数据包构造如下: