这里写自定义目录标题
参考原文地址:
TCP/IP协议入门(一)–阮一峰 http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
计算机网络协议(三)——UDP、TCP
https://blog.csdn.net/ghw15221836342/article/details/100531810#TCP_55
前言
这是我的个人见解,会有偏差,在读完文章之后,希望能有一些收获:
- 对于计算机网络有简单的了解,知道一些专业术语,如TCP三次握手等等。
- 简单了解TCP / IP协议的基础原理
- 简单了解ARR的工作机制
引言
我们几乎每天都在使用互联网,全球如此多的计算机如何连接在一起,如此庞大的计算机数量,又是怎么准确地互相传递数据,那么接下来就要了解互联网的基本模型
1.1 常见模型
互联网的实现,可以分成4,5,7层等等。每一层都有不同的功能。
目前公认的网络模型有两种,一种是OSI七层模型,另一种是TCP/IP五层模型
从图中可以看出,OSI七层模型和TCP/IP五层模型存在一个对应关系,两者有细节上的不同,但相对来说,TCP/IP模型更为普遍,在模型中越下面的层,越靠近硬件;越上面的层,越靠近用户。
1.2 层的协议
在模型中每一层都是为了实现一种功能,那么为了实现功能,就需要大家遵守共同的规则。大家共同遵守的规则,叫做”协议”(protocol)。在模型中的每一层,都定义了很多“协议”。这些协议的总称,就叫做”互联网协议”(Internet Protocol Suite)。每一层的功能主要就是依赖于每一层的“协议”。
以下以TCP/IP五层模型为介绍
2. 物理层
首先,计算机互联必须依靠硬件的支持,那么物理层就能实现这个功能,它提供计算机通信的物理方法,规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性,为上一层协议的实现提供了传输数据的物理手段。在这一层,协议数据单元是比特(bit)。
简单来说:提供物理通信的条件
3.1 数据链路层
然而单单是0和1的组合,没有任何意义,所以,需要一套规则来规定0,1的传送和读取。比如多少个电信号为一组,每一组信号应该如何标识。
这时候需要就需要“协议”了
3.2 以太网协议
早期,一种叫做“以太网”(Ethernet)的协议,占据了主导地位。它的协议数据单元为帧
它规定一组电信号构成一个数据包,叫做”帧”(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。
“标头”的长度,固定为18字节,”数据”的长度,最短为46字节,最长为1500字节。所以,一个”帧”的大小一般为 64 ~ 1518 个字节。如果数据太大,就必须分割成多个帧发送。
那么为什么“标头”大小是固定的?
因为,桢的大小不是固定的,而固定了“标头”的大小,才能确定“数据”的大小。
在“标头”中,包含了数据包的一些说明项,比如发送者、接受者、数据类型等等,
而“数据”则是数据包的内容。
那么究竟如何识别发送者和接受者?
3.3 MAC地址
以太网规定,数据包必须是从一块网卡,传送到另一块网卡,连入网络的设备都必须具有“网卡”接口
每一个网卡在出厂的时候,都有一个全世界独一无二的MAC地址(长度是48个二进制位,通常用12个十六进制数,比如00-D0-B0-97-DE-76,前6个十六进制数是厂商编号,而后6个是该厂商的网卡流水号)
而MAC地址,就是数据包的发送地址和接收地址。
但是,发送者如何知道接收者的 MAC 地址呢?
3.4 广播
假如计算机A与B和C,D同时连接着,A 要给 B 传送数据,虽然 A 知道了计算机 B 的 MAC 地址,可是要怎么传送数据呢?
ARP协议,可以解决这个问题,但在之后在介绍ARP
因为A向B发送一个数据包,同一个子网络的C,D计算机都会接收这个包。于是它们读取这个包的”标头”,找到接收方的MAC地址,并与自己的MAC地址比较,如果两者相同,就接收这个数据包,否则就丢弃这个包。这种发送方式就叫做“广播”(broadcasting)。
这种方式很像通过广播的形式呼叫某个人一样,如果这个名字是你,你会回应,如果不是你,你不会回应。
但是,这样传输数据并不完善,采用广播方式发送数据包,不仅效率很低,而且接收者也必须是在发送者所在的子网络。也就是说,如果两台计算机不在同一个子网络,广播是不能传输的。
4.1 网络层
“网络层”的作用是引进一套新的地址,使能够区分不同的计算机是否属于同一个子网络。这套地址叫做“网络地址”,简称“网址”。
4.2 IP协议
IP协议即是规定网络地址的协议。它所定义的地址,就被称为IP地址。
IP协议有两种版本,一种是 IPv4,另一种是 IPv6。目前大多数用的是IPv4,网络地址由32个二进制位组成。
习惯上,分成四段的十进制数表示IP地址,0.0.0.0~255.255.255.255
互联网上的每一台计算机,都会被分配到一个IP地址。这个地址分成两个部分,前一部分是网络部分,后一部分是主机部分,网络部分相同的计算机被处于同一个子网,比如,198.17.200.46,假定它的网络部分是前24位(198.17.200),那么198.17.200.22和它处于同一个子网络。
但是网络部分和主机部分所占用的二进制位数是不固定的
4.3 子网掩码
那么就需要“子网掩码”判断两台计算机是否属于同一个子网络了。
子网掩码也是 32 位二进制数,但是它的网络部分全部规定为 1,主机部分全部规定为 0
知道“子网掩码”后,就能判断任意两个IP地址是否处在同一个子网络。
方法是将IP地址和其子网掩码进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较两个AND运算结果是否相同,如果相同,就说明它们在同一个子网络中,否则不在。
4.4 IP数据包
通过IP协议发送的数据,叫做IP数据包,IP数据包也分为"标头"和"数据"两个部分
,“标头”部分主要包括版本、长度、IP地址等,”数据”部分则是IP数据包的内容。
那么IP数据包该如何发送呢?,要在以太网协议中设置一个部分吗?
答案是IP数据包可以直接放进以太网数据包的"数据"部分,也就是说IP地址是以太网的部分“数据”
但是,IP数据包的“标头”部分的长度为20~60字节(byte),整个数据包的总长度最大为65,535字节。所以,一个IP数据包的"数据"部分,最长为65,515字节。然而以太网数据包的"数据"部分,最长只有1500字节。所以,如果IP数据包超过了1500字节,它就需要以几个以太网数据包来分开发送了。
4.5 ARP协议
因为IP数据包是放在以太网数据包里发送的,所以必须同时知道两个地址,1.接收方的MAC地址,2.接收方的IP地址。一般,对方的IP地址是已知的,但是我们不知道MAC地址。
那么ARP机制,能够从IP地址得到MAC地址。
ARP在同一个子网络下发出一个数据包(包含在以太网数据包中),其中包含所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF(12位16进制),表示这是一个"广播"地址,需要接收方做出“回应”。它所在子网络的每一台计算机,都会收到这个数据包,然后他们从中取出IP地址,与自身的IP地址进行比较。如果两者相同,就做出回复,向对方报告自己的MAC地址,否则就丢弃这个数据包。
如果不在同一子网络中,那么ARP也不能找到接收方的MAC地址,只能把数据包传送到两个子网络连接处的“网关”(gateway)。
但是光有这些也不够,因为,一台计算机中有许多程序都需要用到网络,比如浏览器,聊天软件,网络游戏,如何保障网络数据分开传输?接下来就要用到传输层
5.1 传输层
通俗地说,传输层的主要作用是建立通道来分开传输各个网络数据。
而这就需要用到**“端口”**,它是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,然后每个程序就能取到自己所需要的数据包。
“端口”是0到65535之间的一个整数,16位二进制数。0到1023的“端口”会被系统占用,所以只能选用大于1023的端口来进行其他程序的网络传输。应用程序会随机选用一个端口,然后与服务器的相应端口连接。
5.2 UDR
现在,我们必须在数据包中加入端口信息,又需要新的协议。最简单的方法是UDP协议,它的格式几乎就是在数据前面,加上端口号。
UDP数据包与IP数据包,以太网数据包一样,也是由"标头"和"数据"两部分组成。
"标头"部分主要包含发出端口和接收端口,"数据"部分就是内容。然后,把整个UDP数据包放入IP数据包的"数据"部分,而IP数据包又是放在以太网数据包之中的,所以整个以太网数据包变成了下面这样
UDP数据包"标头"部分一共只有8个字节,“标头”部分 + “数据”部分的总长度不超过65,535字节,刚好能放进一个IP数据包。
UDP继承了IP包的特性,UDP协议的优点是比较简单,但是缺点是可靠性差,不保证不丢失,不保证按时到达,也无法知道对方是否收到(类似于短信),而且UDP基于数据,单个发送,单个接收,并且UDP无法根据网络环境调整自己的行为,应用要求发送,就发送。
适用UDP的使用场景
- 需要资源少,丢失数据包容错率较大的应用,在网络情况比较好的内网。
- 不面向连接,可以进行“广播”的应用。
5.3 TCP协议
为了解决UDP可靠性差的问题,TCP协议出现了。TCP协议非常复杂,但可以近似认为它是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,会收不到确认,发送方就知道有必要重发这个数据包了。
1.TCP面向字节流,发送时是发的是一个流
2.TCP可以根据网络环境的好坏来调整自己的行为
3.TCP有传送状态,可以控制传送过程
所以,TCP协议能确保数据不会遗失,但缺点是过程十分复杂。
TCP数据包和UDP数据包一样,都是内嵌在IP数据包的”数据”部分。TCP数据包没有长度限制,但为了保证传送数据的效率,一般TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
5.4 TCP的三次握手
发送方:请求
接收方:应答
发送方:再应答
三次握手除了双方建立连接外,还为了解决TCP包序号的问题
1.刚开始客户端和服务端都处于CLOSED状态,服务端先监听某个端口,处于LISTEN状态1、刚开始客户端和服务端都处于CLOSED状态,服务端先监听某个端口,处于LISTEN状态;
2.客户端主动发起连接请求SYN=1,ACK=0,初始序号为x,之后处于SYN-SENT状态;
3.服务端收到发起的连接请求,如果同意连接就返回SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y,之后处于SYN-RCVD状态;
4.客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,确认号为 y+1,序号为 x+1。之后处于ESTABLISHED状态,因为它一发一收成功了;
5.服务端收到ACK的ACK之后,处于ESTABLISHED状态,因为它也一发一收了。
6.1 应用层
接下来,收到传输层传来的各种数据,但是这些传过来的数据有xml格式的,有java格式的,各种各样的
应用层面对用户,其主要功能是规定应用程序的数据格式。
应用层提供的服务包括文件传输、文件管理以及电子邮件的信息处理
应用层协议的包括:FTP、Telnet、SMTP、、NNTP、IMAP4、HTTPS、SNMP、DNS、、NFS、NCP等。