计算机网络
网络分层
物理层
没什么好讲的,用不到以后也不会考
数据链路层
三个主要问题:封装成帧,透明传输,差错检测
封装成帧
在进行数据链路层传输的时候存在一个问题,我们需要对饮数据链路层的协议对应将有效的数据封装成一个帧,封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成一个帧。这个时候我们就需要考虑,我们如何来识别一个帧,所以这里提出了一个帧定界的概念,使用两个控制字符,一个控制字符SOH放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT标识帧的结束。
即在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。首部和尾部就是起到帧定界的作用。
透明传输
因为在帧的有效数据当中,可能出现和帧定界的控制字符一样的字符,为了防止将这些字符当中帧定界的字符,错误的处理帧,所以我们采方法使得数据当中可能出现的控制字符“SOH”和“EOT”在接收端不被解释为控制字符。
方法:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符”ESC”。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。我们把这种方法叫做字节填充法。当然如果转义字符”ESC“也出现在数据当中,那么解决的方法仍然是在转义字符的前面插入一个转义字符,所以,当接受到连续的两个转义字符的时候,就去删除其中前面的一个。
差错检测
数据链路层点对点传输的第三个问题就是差错检测。就是我们所说的比特在传出过程当中可能会产生差错,1可能会变成0,0可能会变成1.这就是比特差错。而这种差错对于我们来说是不希望发生这种状况的,所以为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用差错检测措施。目前广泛运用的是循环冗余检验CRC
。CRC
的基本思想就是将传输的数据当作一个位数很长的数,将这个数除以另外的一个数。得到的余数作为校验数据附加到原数据后面。
网络层
网络层不提供服务质量的承诺,不保证分组交付的时限所传送的分组可能出错,丢失,重复和失序。进程之间通信的可靠性由运输层负责。
ip (Internet Protocol)
网络层最关键的协议
ip 头部
ipv6的优势
- 更大的地址空间(采用 128 位地址)
- 灵活的首部格式
- 改进的选项
- 支持即插即用
- 支持资源的预分配
- IPv6 的首部改为 8 字节对齐。
ARP (Address Resolution Protocol)
地址解析协议
地址解析协议 ARP 把 IP 地址解析为硬件地址。ARP 的高速缓存可以大大减少网络上的通信量。因为这样可以使主机下次再与同样地址的主机通信时,可以直接从高速缓存中找到所需要的硬件地址而不需要再去广播方式发送 ARP 请求分组
ICMP (Internet Control Message Protocol )
网际控制报文协议
ICMP 报文作为 IP 数据报的数据,加上首部后组成 IP 数据报发送出去。使用 ICMP 数据报并不是为了实现可靠传输。ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP 报文的种类有两种 ICMP 差错报告报文和 ICMP 询问报文
传输层
TCP (Transmission Control Protocol)
TCP 共有6个标志位:
urgent point
紧急指针ack
:只有ack为1时ack字段才有效push
rst复位
syn
fin
三次握手
三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
- 第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
- 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
- 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
第二次握手已经传回ACK了,为什么还要传回SYN?
接收端传回发送端所发送的ACK是为了告诉客户端,我接收到的信息确实就是你所发送的信号了,这表明从客户端到服务端的通信是正常的。而回传SYN则是为了建立并确认从服务端到客户端的通信。
四次挥手
为什么要四次挥手
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
TCP 如何保证可靠传输
- 应用数据被分割成
TCP
认为最适合发送的数据块。 TCP
给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。- 校验和:
TCP
将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP
将丢弃这个报文段和不确认收到此报文段。 TCP
的接收端会丢弃重复的数据。- 流量控制:
TCP
连接的每一方都有固定大小的缓冲空间,TCP
的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP
使用的流量控制协议是可变大小的滑动窗口协议。 (TCP
利用滑动窗口实现流量控制) - 拥塞控制: 当网络拥塞时,减少数据的发送。
ARQ
协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。- 超时重传: 当
TCP
发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
ARQ(Automatic Repeat-request)
自动重传请求是OSI模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。ARQ包括停止等待ARQ协议
和连续ARQ协议
。
停止等待ARQ
停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认(回复ACK)。如果过了一段时间(超时时间后),还是没有收到 ACK 确认,说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组。
- 优点: 简单
- 缺点: 信道利用率低,等待时间长
在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认。
- 无差错情况
发送方发送分组,接收方在规定时间内收到,并且回复确认.发送方再次发送。 - 出现差错情况(超时重传):
停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为 自动重传请求 ARQ 。另外在停止等待协议中若收到重复分组,就丢弃该分组,但同时还要发送确认。连续 ARQ 协议 可提高信道利用率。发送维持一个发送窗口,凡位于发送窗口内的分组可连续发送出去,而不需要等待对方确认。接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组位置的所有分组都已经正确收到了。 - 确认丢失和确认迟到
- 确认丢失 :确认消息在传输过程丢失。当A发送M1消息,B收到后,B向A发送了一个M1确认消息,但却在传输过程中丢失。而A并不知道,在超时计时过后,A重传M1消息,B再次收到该消息后采取以下两点措施:1. 丢弃这个重复的M1消息,不向上层交付。 2. 向A发送确认消息。(不会认为已经发送过了,就不再发送。A能重传,就证明B的确认消息丢失)。
- 确认迟到 :确认消息在传输过程中迟到。A发送M1消息,B收到并发送确认。在超时时间内没有收到确认消息,A重传M1消息,B仍然收到并继续发送确认消息(B收到了2份M1)。此时A收到了B第二次发送的确认消息。接着发送其他数据。过了一会,A收到了B第一次发送的对M1的确认消息(A也收到了2份确认消息)。处理如下:1. A收到重复的确认后,直接丢弃。2. B收到重复的M1后,也直接丢弃重复的M1。
连续ARQ
连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。
- 优点: 信道利用率高,容易实现,即使确认丢失,也不必重传。
- 缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。
滑动窗口和流量控制
TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。拥塞控制和连接管理
TCP 发送方维持一个拥塞窗口(cwnd)
的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。
TCP的拥塞控制采用了四种算法,慢开始
、拥塞避免
、快重传
和快恢复
。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理AQM
),以减少网络拥塞的发生。
- 慢开始:慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。
- 拥塞避免:拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1.
- 快重传与快恢复:快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和恢复 (FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。
UDP (User Datagram Protocol)
TCP和UDP的区别和应用场景
tcp
是可靠传输,能够控制流量和阻塞控制,UDP
是不可靠链接,没有阻塞控制TCP
有三次握手,四次挥手,保证链接的准确性- 而
UDP
则是一股脑的都发过去
tcp
面向字节流,面向链接,UDP
面向报文,无链接UDP
对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界,因此应用程序必须选择合适大小的报文
TCP
头部20字节,最大60字节,UDP
的头部8字节,传输过程高效TCP
适合文件传输,UDP
适合实时应用(电话,直播)
UDP
在传送数据之前不需要先建立连接,远地主机在收到 UDP
报文后,不需要给出任何确认。虽然 UDP
不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等。TCP
提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP
不提供广播或多播服务。由于 TCP
要提供可靠的,面向连接的传输服务(TCP
的可靠体现在TCP
在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这一难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP
一般用于文件传输、发送和接收邮件、远程登录等场景。
应用层
DNS (Domain Name System)
域名解析系统
将域名解析成IP地址。
DNS协议可以通过域名查找IP地址,也可以通过IP地址反查域名的服务。
使用UDP
,端口号53
FTP
文件传输协议
TCP 21: 控制端口
TCP 20: 数据端口
HTTP 超文本传输协议
默认使用TCP80端口
HTTPS 使用TCP443端口
WWW:万维网:每个有用的事物,由一个全局“统一资源标识符”URI
标识;这些资源通过HTTP
传送给用户。
访问一个网站大致的过程
电子邮件
电子邮件系统有三个重要组成构件:用户代理、邮件服务器、邮件协议
邮件发送协议:SMTP
邮件读取协议:POP3
和IMAP