目录
网络模型
OSI七层模型
物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
TCP/IP五层模型
(四层没物理层),从下到上:
对比
封装和分用
封装类似发送快递包裹,需要从内往外打包。分用类似拆快递,需要从外往内拆包
封装过程:本机封装(从上到下)
(1)应用层:浏览器将请求数据(ip)封装为http协议(如果没有带端口号,默认80端口)的数据(ip)
(2)传输层:tcp将前一个封装数据包再次封装为tcp数据包(ip+port)
(3)网络层:ip协议再次封装
(4)数据链路层:以太网技术,携带mac(系统将数据包发送到本机网卡),封装为数据帧
(5)请求端—>发送数据---->局域网主机
不同设备封装的层次可能不同:路由器从网络层封装。
分用过程:接收端处理数据: 分用(从下到上)
(1)数据链路层:操作系统在网卡接收数据,系统解析接收到的数据报(处理数据帧)
(2)网络层:系统处理ip头
(3)传输层:系统处理tcp头(ip+port),知道端口号,知道对应的应用程序是哪个,系统将数据包交给应用程序处理
(4)应用层:应用程序处理数据(根据协议)
五元组
五元组:源IP+源端口+目的IP+目的端口+协议
IP:定位网络中的某一主机,在网络层包装IP地址。 本机IP默认:127.0.0.1
端口号:绑定主机中某一个应用程序,应用程序都是通过在传输层包装端口号发送/接收数据
IP+端口 : 可定位到网络上具体的某应用程序
发送数据:五元组
接受端响应数据:目的IP+目的端口 = 发送数据包中的源IP + 源端口
MAC地址(网卡绑定的物理地址):用来识别数据链路层中相连的节点;
- 长度为48位, 即6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能 会冲突; 也有些网卡支持用户配置mac地址).
IP地址和MAC地址区别:
网络互联场景
从A主机发送FTP命令"下载文件"数据包 ----->主机C
ARP请求数据包:源MAC,目的MAC(广播形式FF:FF:FF….),目的IP
- 查找目的主机MAC地址:ARP协议(建立IP与MAC映射。主机ARP缓存表)
- 1.查找本机ARP缓存表,通过目的IP查找目的MAC
- 2.如找到,就直接发送数据包
- 3.如找不到,主机A广播ARP请求数据包—>所有主机接收到ARP数据包目的IP ---->主机C:发现是请求自己的MAC地址,就返回ARP响应MAC 。 其他主机:通过IP判断出不是请求自己的MAC,直接丢弃数据包
- 发送数据包
局域网:
发送的数据报:源IP(源端口号)+源MAC+目的IP(目的端口号)+目的MAC+协议
发送的过程:
- 判断目的主机与本机在同一网段:网络号(IP前三位网络号,后一位主机号
网络号:IP与子网掩码"按位与")- 在同一网段(走交换机步骤)
- 不在同一网段:通过ARP缓存表查询网关IP对应的MAC
- 1、主机发送数据报:源IP(源端口号)+源MAC+目的IP(目的端口号)+目的MAC(路由器)+协议
- 2、路由器接收数据报:
1)路由表:目的IP 对应设备的 MAC地址
2)数据报的加工(先分用,再重新封装):数据报的以太网帧(数据链路层)里边包含的
源MAC修改为自己(路由器)MAC,目的MAC修改为目的主机(主机4)MAC - 3、按目的MAC发送数据报:发送到主机4
- 4、目的主机解析(分用),响应 (重新封装发送)
广域网
TCP/IP
TCP安全机制:
(1)确认应答机制:序号+确认序号实现
(2)超时重传机制:系统基于TCP协议实现,动态计算报文的最大生存时间MSL,超时时间设置为2MSL。作用:超过超时时间,表示丢包(发送数据报,接收确认数据报)时,需要重新发送数据报(系统中发送缓冲区保存有数据,可以重发)
(3)连接管理机制
(4)流量控制
(5)拥塞控制
TCP性能机制:
(1)滑动窗口
(2)延迟应答
(3)捎带应答
TCP与UDP区别
TCP面向连接,UDP面向非连接即发送数据前不需要建立链接。
面向连接的服务,通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道,在通信过程中,整个连接的情况一直可以被实时地监控和管理。
非面向连接的服务,不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控。
TCP提供可靠的服务(数据传输),UDP无法保证。
TCP面向字节流,UDP面向报文。
TCP数据传输慢,UDP数据传输快。
TCP对应协议
1.FTP:定义了文件传输协议,使用21端口。
2.Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
3.SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
4.POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
5.HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应协议
1.DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
2.SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
3.TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。
TCP三次握手
(建立连接:都是单方向建立)
第一次握手
当客户端向服务器发起连接请求时,客户端会发送同步序列标号SYN到服务器,在这里我们设SYN为x,等待服务器确认,这时客户端的状态为SYN_SENT。
第二次握手
当服务器收到客户端发送的SYN后,服务器要做的是确认客户端发送过来的SYN,在这里服务器发送确认包ACK,这里的ACK为x+1,意思是说“我收到了你发送的SYN了”,同时,服务器也会向客户端发送一个SYN包,这里我们设SYN为y。这时服务器的状态为SYN_RECV。
一句话,服务器端发送SYN和ACK两个包。
第三次握手
客户端收到服务器发送的SYN和ACK包后,需向服务器发送确认包ACK,“我也收到你发送的SYN了,我这就给你发个确认过去,然后我们即能合体了”,这里的ACK为y+1,发送完毕后,客户端和服务器的状态为ESTABLISH,即TCP连接成功。
在三次握手中,客户端和服务器端都发送两个包SYN和ACK,只不过服务器端的两个包是一次性发过来的,客户端的两个包是分两次发送的。
TCP连接时是三次握手,那么两次握手可行吗?
“三次握手"的目的是"为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。
假定出现一种异常情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。
假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送ACK包。这样就会白白浪费资源。而经过三次握手,客户端和服务器都有应有答,这样可以确保TCP正确连接。
TCP四次挥手(断开连接)
当A端和B端要断开连接时,需要四次握手,这里称为四次挥手。
断开连接请求可以由客户端发出,也可以由服务器端发出,在这里我们称A端向B端请求断开连接。
第一次挥手
A端向B端请求断开连接时会向B端发送一个带有FIN标记的报文段,这里的FIN是Finish的意思。
第二次挥手
B端收到A发送的FIN后,B段现在可能现在还有数据没有传完,所以B端并不会马上向A端发送FIN,而是先发送一个确认序号ACK,意思是说“你发的断开连接请求我收到了,但是我现在还有数据没有发完,请稍等一下呗”。
第三次挥手
当B端的事情忙完了,那么此时B端就可以断开连接了,此时B端向A端发送FIN序号,意思是这次可以断开连接了。
第四次挥手
A端收到B端发送的FIN后,会向B端发送确认ACK,然后经过两个MSL时长后断开连接。
MSL是Maximum Segment Lifetime,最大报文段生存时间,2个MSL是报文段发送和接收的最长时间。
为什么TCP连接是3次,挥手却是4次?
在TCP连接中,服务器端的SYN和ACK向客户端发送是一次性发送的,而在断开连接的过程中,B端向A端发送的ACK和FIN是是分两次发送的。因为在B端接收到A端的FIN后,B端可能还有数据要传输,所以先发送ACK,等B端处理完自己的事情后就可以发送FIN断开连接了。
为什么会在第四次挥手后有2个MSL的延时?
MSL是最大报文段生存时间,2个MSL是报文段发送和接收的最长时间。
假定网络不可靠,那么第四次发送的ACK可能丢失,即B端无法收到这个ACK,如果B端收不到这个确认ACK,B端会定时向A端重复发送FIN,直到B端收到A的确认ACK。所以这个2MSL就是用来处理这个可能丢失的ACK的。
滑动窗口(处于发送端)
- 窗口:窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,依赖ACK响应报文中窗口大小字段。比如4段,分别1000字节的数据,窗口大小就是4000字节.
- ACK响应报文中,携带请求下一序号是多少 —>在此序号前的所有数据已收到
发送前四个段的时候, 不需要等待任何ACK, 直接发送; - 滑动窗口:依赖ACK响应报文中的下一序号进行,而下一序号是多少,又依赖接收到的连续报文的最大序号。
- 收到第一个ACK后, 滑动窗口向后移动, 继续发送第五个段的数据; 依次类推;
- 操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答; 只有确认应答过的数据, 才能从缓冲区删掉;
- 接收缓冲区保存有响应ACK数据的信息,可以根据ACK丢包进行重发
这种机制称为“高速重发控制"也叫"快重传"
流量控制
- 接收端:通过TCP协议头中的“窗口大小"字段,动态告诉发送端,发送数据的大小
- 目的:接收端接收能力有限,为了防止接收缓冲区被打满,再接收数据就直接丢弃。使用窗口大小可以告诉发送端发送数据的大小。
拥塞控制
- 当TCP开始启动的时候, 慢启动阈值等于窗口最大值;
- 在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1;少量的丢包, 我们仅仅是触发超时重传; 大量的丢包, 我们就认为网络拥塞;当TCP通信开始后, 网络吞吐量会逐渐上升; 随着网络发生拥堵, 吞吐量会立刻下降;拥塞控制, 归根结底是TCP协议想尽可能快的把数据传输给对方, 但是又要避免给网络造成太大压力的折中方案.
延迟应答机制
- 原理:接收到多个数据报时,不针对每条数据报响应ACK,而是延迟一定时间,这样接收缓冲区时间很快被处理,可用空间就更大,返回的窗口大小就可以设置的更大,使网络吞吐量更大,传输效率更高
- 延迟的依据:1.时间 2.数量 都由系统决定