Round-Trip Time,从发送方发送数据开始,到发送方收到来自接收方的确认,总共经历的时延。
应用层 :为特定应用程序提供数据传输服务,例如 HTTP、DNS 、FTP等协议。数据单位为报文。
传输层 :为进程提供数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
网络层 :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段封装成数据报。协议:IP、ARP、ICMP。
数据链路层 :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的数据报封装成帧。协议:Ethernet、PPP。
物理层 :考虑的是如何在物理媒体上传输数据比特流。
其中表示层和会话层用途如下:
五层协议没有表示层和会话层,而是将这些功能留给应用程序开发者处理。
简称:物链网输会示用(物联网淑惠试用)
它只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。
TCP/IP 体系结构不严格遵循 OSI 分层概念,应用层可能会直接使用 IP 层或者网络接口层。
在向下的过程中,需要添加下层协议所需要的首部或者尾部,而在向上的过程中不断拆开首部和尾部。
路由器只有下面三层协议,因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要传输层和应用层。
考虑的是如何在物理媒体上传输数据比特流。
将网络层传下来的数据报添加首部和尾部,用于标记帧的开始和结束。
MAC 地址是链路层地址,长度为 6 字节(48 位),用于唯一标识网络适配器(网卡)。
一台主机拥有多少个网络适配器就有多少个 MAC 地址。例如笔记本电脑普遍存在无线网络适配器和有线网络适配器,因此就有两个 MAC 地址。
依靠 MAC 地址 转发数据,交换机内有一张MAC表,里面存放着和它相连的所有设备的MAC地址,它会根据收到的数据帧的首部信息内的目的MAC地址在自己的表中查找,如果有就转发,如果没有就放弃。
IP 地址的编址方式经历了三个历史阶段:
HTTP 中的 IP 有多少位,范围? (32位,每8位用 “.” 隔开)
A 类 IP 地址范围 1.0.0.1 到 127.255.255.254。
B 类 IP 地址范围 128.0.0.1 到 191.255.255.254。
C 类 IP 地址范围 192.0.0.1到 223.255.255.254。
D 类 IP 地址范围 192.0.0.1到 223.255.255.254。
E 类 IP 地址 保留用于将来和实验使用。
“10.” 开头的 IP 是什么? (B类地址)
ARP 实现由 IP 地址得到 MAC 地址。
Address Resolution Protocol.
ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。
Internet Control Message Protocol.
Ping 是 ICMP 的一个重要应用,主要用来测试两台主机是否连通。
Traceroute 是 ICMP 的另一个应用,用来跟踪一个数据报从起点到终点的路径。
专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。
内部网关协议 RIP
内部网关协议 OSPF
外部网关协议 BGP
依靠 IP 地址 转发数据,路由器内有一份路由表,里面有它的寻址信息(就像是一张地图),它收到网络层的数据报后,会根据路由表和选路算法将数据报转发到下一站(可能是路由器、交换机、目的主机)。
交换机:工作在链路层,依靠 MAC 地址 转发数据。
路由器:工作在网络层,依靠 IP 地址 转发数据。
假设你使用电脑访问www.baidu.com
过程大致如下:
首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的。
防止失效的连接请求到达服务器,建立了多余的链接,浪费资源。
防止已失效的请求报文又传送到了服务端,建立了多余的链接,浪费资源。
两次握手只能保证单向连接是畅通的。
又称为 DoS攻击。
攻击者发送SYN,SYN是TCP三次握手中的第一个数据包,当服务器返回ACK,攻击者就不回应ACK,那这个TCP连接就一直处于挂起状态。服务器收不到ACK,就会重复发送ACK给攻击者,这会浪费服务器的资源。攻击者发送大量的这种TCP连接,最后服务可能会死机。
解决方法:设置 SYN cookie
以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。每一个 SYN 的 ACK 中的确认号就是 SYN 的初始序列号 + 1,每一个 FIN 的 ACK 中的确认号就是 FIN 序列号 + 1。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。
客户端——发送带有 FIN 标志的报文——服务端,关闭与服务端的连接 。一次挥手,客户端进入FIN-WAIT-1状态。
服务端——发送带有 ACK 标志的报文——客户端。二次挥手,服务端进入了CLOSE-WAIT状态,客户端进入FIN-WAIT-2状态。
服务端——发送带有 FIN/ACK 标志的报文——客户端,关闭与客户端的连接。三次挥手,服务端进入LAST-ACK状态。
客户端——发送带有 ACK 标志的报文——服务端。四次挥手,客户端进入TIME-WAIT状态,等待 2 MSL(最大报文存活时间)后释放连接。服务端收到客户端的确认后释放连接。
因为需要确保客户端与服务端的数据能够完成传输。
这种状态的含义其实是表示在等待关闭。
TIME-WAIT的作用?
为了解决网络的丢包和网络不稳定所带来的其他问题,确保客户端能在一定的时间范围内,关闭自己的连接。
如何查看TIME-WAIT状态的链接数量?
netstat -anp | grep TIME_WAIT | wc -l # 查看连接数等待time_wait状态连接数。
为什么会TIME-WAIT过多?解决方法是怎样的?
可能原因: 高并发短连接的TCP服务器上,当服务器处理完请求后,立刻正常关闭连接。
**解决:**负载均衡服务器;Web服务器首先关闭来自负载均衡服务器的连接。
校验和
序列号 + 确认应答
超时重传:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段
流量控制
拥塞控制
滑动窗口是发送的请求队列,如果滑动窗口左部的字节的已经发送并且收到了确认位 ACK ,则窗口移动。
流量控制是为了控制发送方的发送速率,保证接收方来得及接收。
**接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。**将窗口字段设置为 0,则发送方不能发送数据。
出现拥塞的条件:如果网络出现拥塞,数据报将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。
拥塞控制:控制发送方的发送速率。
流量控制与拥塞控制的区别:流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。
TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。
设拥塞窗口是 cwnd,慢开始门限是 ssthresh。
发送开始执行慢开始,从发送方只能发送 1 个报文段开始,收到确认之后,翻倍发送报文段:2、4、8 …
每次发送的报文段都翻倍,可能会导致拥塞。设置一个慢开始门限 ssthresh,当 发送的报文段 >= 慢开始门限 时,进入拥塞避免,每次发送的报文段 + 1。
如果出现了超时,则令 慢开始门限 = 发送的报文段 / 2,然后重新执行慢开始。
在发送方,如果收到三个重复的确认,就执行快重传,立即重传下一个报文段。
执行快恢复,令 慢开始门限 = 发送的报文段 / 2 ,令 即将要发送的报文段 = 慢开始门限,此时直接进入拥塞避免。
它像心跳一样每隔一段时间发送一次,以此告诉服务器,客户端还活着。
没有特别规定,一般都是很小的包,或者只包含包头的一个空包。
也称之为 TCP 粘包,但是这种说法是错的,称之为应用层粘包更好。UDP 不会出现粘包的现象。这里的包是数据报的含义。
包的头紧接着前一包的尾。
发送方:使用 Nagle 算法会出现粘包问题。
接收方:接收包到缓存的速度大于应用程序从缓存中读取包的速度,多个包就会被缓存,应用程序就有可能读取到多个首尾相接粘到一起的包。
发送方:关闭 Nagle 算法,使用TCP_NODELAY选项来关闭算法。
接收方:在包头加上包体长度。
DNS(Domain Name Syste),DNS 是一个分布式数据库,实现了 域名 和 IP 地址 的转换。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。
域名具有层次结构,从上到下依次为:根域名、一级域名、二级域名。
域名:www.yifang.com,一般根域名会自动省去。
DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。
大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。
在两种情况下会使用 TCP 进行传输:
本机向本地域名服务器采用递归查询,本地域名服务器向根域名服务器查询采用迭代查询,根域名服务器会告知一级域名服务器的地址,一级域名服务器告知下一步应该向哪个权限域名服务器进行查询,最后权限域名服务器返回 需要查找的 IP 地址。
FTP(File Transfer Protocol)使用 TCP ,传送一个文件需要控制连接和数据连接:
TELNET 使用 TCP ,用于远程主机登录,远程主机的输出会显示到本地主机上。
邮件协议包含发送协议和读取协议。
发送协议: SMTP
读取协议: POP3 和 IMAP。
看看就行
应用 | 应用层协议 | 端口号 | 传输层协议 | 备注 |
---|---|---|---|---|
域名解析 | DNS | 53 | UDP/TCP | 长度超过 512 字节时使用 TCP |
文件传送协议 | FTP | 20/21 | TCP | 控制连接 21,数据连接 20 |
远程终端协议 | TELNET | 23 | TCP | |
超文本传送协议 | HTTP | 80 | TCP |
Web 页面请求过程(输入一个URL到显示页面的流程、HTTP 的连接过程)