【Linux】网络基础2

前面我们知道,TCP/IP协议已经将网络划分为五层或者说四层,下面我们就来自顶向下的来介绍一下各层的具体情况以及使用的协议字段。
1、应用层
我们程序员写的一个个实现具体功能的网络程序就是在应用层
前面我们提到了协议的定义,而具体的应用层协议是什么呢?
只要保证在,一段发送时构造的数据,在另一端能够正确解析,就是可以的,这种约定就是应用层协议。
虽然我们说应用层协议是我们程序猿自己定义的,但是已经有人定义出了一些现成的,有非常好用的应用层协议,供我们直接使用,HTTP协议就是一种常用的协议,
关于HTTP协议的相关内容详情间
【Linux】HTTP协议
2、传输层
(1)负责数据能够从发送端传输接收端
再谈端口号:
端口号标识了一个主机上进行通信的不同的应用程序
【Linux】网络基础2
在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”这样一个五元组来标识一个通信(可以通过netstat -n查看)
【Linux】网络基础2
(2)认识知名端口号
有些服务是非常常用的,为了使用方便,人们约定一些常用的服务器,都是使用一下这些固定的端口号:
【1】ssh服务器 ,使用22端口
【2】ftp服务器,使用21端口
【3】telnet服务器,使用23端口
【4】http服务器,使用80端口
【5】https服务器,使用443
执行下面的命令,可以看到知名端口号
【Linux】网络基础2
可以看到上面有很多个端口号,也有很多是我们认识的。
我们自己写一个程序使用端口号时,要避开这些知名端口号
(3)两个问题
【1】一个进程可以bind多个端口号
【2】一个端口号是否可以被多个进程bind
(4)netstat命令
netstat是一个用来查看网络状态的重要工具
语法:netstat[选项]
功能:查看网络状态
常用选项:
【1】n,拒绝显示别名,能显示数字的全部转化成数字
【2】l,仅列出有在Listen(监听)的服务状态
【3】p,显示建立相关链接的程序名
【4】t(tcp)仅显示tcp相关选项
【5】u(udp)仅显示udp相关选项
【6】a(all)显示所有选项,默认不显示LISTEN相关
(5)pidof
在查看服务器的进程id时非常方便
语法:pidof[进程名]
功能:通过进程名,查看进程id
介绍完传输层相关概念之后,就开始来到传输层的协议部分
传输层协议中最常见的就是UDP和TCP了,详情如下:
【Linux】UDP/TCP协议
3、网络层
(1)网络层的功能就是在复杂的网络环境下确定一个合适的路径
(2)网络层的重要协议:
【Linux】IP协议
4、数据链路层
(1)数据链路层的功能:
用于两个设备(同一个数据链路节点)之间进行传递
(2)认识以太网
【1】“以太网”不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络拓扑结构,访问控制方式,传输速率等
【2】例如以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等
【3】以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等
(3)以太网帧格式:
以太网帧格式如下所示:
【Linux】网络基础2
【1】源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的
【2】帧协议类型字段有三种值,分别对应IP、ARP、RARP
【3】帧末尾是CRC校验码
(4)认识MAC地址
【1】MAC地址用来识别数据链路层中相连的节点
【2】长度为48位,及6个字节,一般用16进制数字加上冒号的形式(例如:08:00:27:03:fb:19)
【3】在网卡出厂时就确定了,不能修改,mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置mac地址)
(5)对比理解MAC地址和IP地址
【1】IP地址描述得是路途总体的起点和终点
【2】MAC地址描述的是路途上的每一个区间的起点和终点
(6)认识MTU
【1】MTU相当于发快递时包裹尺寸的限制,这个限制是不同的数据链路对应的物理层,产生的限制
【2】以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包数据包的长度不够46字节,要在后面补填充位。
【3】最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
【4】如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片
【5】不同的数据链路层标准的MTU是不同的
(7)MTU对IP协议的影响
【1】由于数据链路层MTU的限制,对于较大的IP数据包要进行分包
【2】将较大的IP包分成多个小包,并给每个小包打上标签
【3】每个小包IP协议头的16位标识(id)都是相同的
【4】每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0)
【5】到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层
【6】一旦这些小包中任意一个小包丢失,接收端的重组就会失败,但是IP层不会负责重新传输数据
【Linux】网络基础2
【Linux】网络基础2
对上述内容用图示方法来表示。
(8)MTU对UDP协议的影响
让我们回顾一下UDP协议:
【1】一旦UDP携带的数据超过1472(1500-20(IP首部))-8(UDP首部)),那么就会在网络层分成多个IP数据报
【2】这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败,那么这就意味着,如果UDP数据报网络层被分片,整个数据被丢失的概率就大大增加了
(9)MTU对于TCP协议的影响
【1】TCP的一个数据报也不能无限大,还是受制于MTU,TCP的单个数据报的最大消息长度,称为MSS
【2】TCP在建立连接的过程中,通信双方会进行MSS协商
【3】最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)
【4】双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值
【5】然后双方得知对方的MSS值之后,选择较小的作为最终MSS
【6】MSS值就是在TCP首部的40字节变长选项中(kind=2)
(10)MSS和MTU的关系
【Linux】网络基础2
(11)查看硬件地址和MTU
【Linux】网络基础2
(12)再来介绍一下其他常用的一些协议
【Linxu】ARP协议、DNS协议和ICMP协议
5、来介绍几个常用的命令
(1)ping命令
现在cmd下使用:
【Linux】网络基础2
再再Linux下使用
【Linux】网络基础2
注意:这里ping的是域名,而不是url!一个域名可以通过DNS解析成IP地址
【1】ping命令不光能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live生存周期)
【2】ping命令会先发送一个ICMP Echo Request给对端
【3】对端接收到之后,会返回一个ICMP Echo Reply
【Linux】网络基础2
过程如图所示。
(2)一个指的注意的坑
有些面试官可能会问:telnet是23端口,ssh是22端口,那么ping是什么端口?
ping命令基于ICMP,是在网络层,而端口号,是传输层的内容,在ICMP中根本就不关注端口号这样的信息
(3)traceroute命令
【Linux】网络基础2
6、NAT技术
(1)NAT技术背景
在前面我们就讨论了,IPV协议中,IP地址数量不充足的问题,NAT技术当前解决IP地址不够用的主要手段,是路由器的一个重要功能:
【1】NAT能够将私有IP对外通信时转为全局IP,也就是一种将私有IP和全局IP相互转化的技术方法
【2】很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP
【3】全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的
(2)NAT IP转换过程
【Linux】网络基础2
【1】NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37
【2】NAT路由器收到外部的数据时,又会把目标IP从202.244.174.37替换为10.0.0.10
【3】在NAT路由器内部,有一张自动生成的,用于地址转换的表
【4】当10.0.0.1.第一次向163.221.120.9发送数据时就会生成表中的映射关系
(3)NAPT
如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的 IP都是相同的,那么NAT路由器如何判断将这个数据包转发给哪个局域网的主机?
这时候NAPT就来解决这个问题了,使用IP和port建立这个关联关系
【Linux】网络基础2
这种关联关系是由NAT路由器自动维护的。例如在TCP的情况下,建立连接时,就会生成这个表项;在断开连接后,就会删除这个表项
(4)NAT技术的缺陷
由于NAT依赖这个转换这个转换表,所以有诸多限制
【1】无法从NAT外部向内部服务器建立连接
【2】转换表的生和销毁都需要额外开销
【3】通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开
(5)NAT和代理服务器
路由器往往都具有NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程,代理服务器看起来和NAT设备有一点像,客户端向代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器;服务器返回结果后,代理服务器又把结果回传给客户端
【1】从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题,代理服务器则是更加贴近具体应用,比如通过代理服务器进行*,另外像迅游这样的加速器,也是使用代理服务器
【2】从底层实现上讲,NAT是工作在网络层,直接对IP地址进行替换,代理服务器往往工作在应用层
【3】从使用的范围上讲,NAT一般在局域网的出口部署,代理服务器可以在局域网做也可以在广域网做,也可以跨网
【4】从部署位置上看,NAT一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上
【5】代理服务器是一种应用比较广的技术,*:广域网中的代理,负载平衡:局域网中的代理
代理服务器又分为正向代理和反向代理。
下面对TCP/IP分层结构进行总结。
1.数据链路层
【1】数据链路层的作用:两个设备(同一个数据链路节点)之间进行传递数据
【2】以太网是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络拓扑结构,访问控制方式,传输速率等
【3】以太网帧格式
【4】理解mac地址
【5】理解arp协议
【6】理解MTU
2、网络层
【1】网络层的作业:在复杂的网络环境中确定一个合适的路径
【2】理解IP地址,理解IP地址和MAC地址
【3】理解IP协议格式
【4】了解网段划分方法
【5】理解如何解决IP数目不足的问题,掌握网段划分的两种方案,理解私有IP和公网IP
【6】理解网络层的IP地址路由过程,理解一个数据包如何跨越网段到达最终目的地
【7】理解IP数据包分包的原因
【8】了解ICMP协议
【9】了解ICMP协议
【10】了解NAT设备的工作原理
3、传输层
【1】传输层的作用:负责数据能够从发送端传输接收端
【2】理解端口号的概念
【3】认识UDP协议,了解UDP协议的特点
【4】认识TCP协议,理解TCP协议的可靠性理解TCP协议的状态转化
【5】掌握TCP的连接管理,确认应答,超时重传,滑动窗口,流量控制,拥塞控制,延迟应答,捎带应答特性
【6】理解TCP面向字节流,理解粘包问题和解决方案
【7】能够基于UDP实现可靠传输
【8】理解MTU对UDP/TCP的影响
4、应用层
【1】应用层的作用:满足我们日常需求的网络程序,都在应用层
【2】能够根据自己的需求,设计应用层协议
【3】了解HTTP协议
【4】理解DNS的原理和工作流程