计算机网络
计算机网络—B站湖科大视频
网络协议栈 protocol stack

5层网络协议
应用层 HTTP协议(文档的请求传送) 、SMTP协议、FTP协议
运输层
TCP只能点对点全双工通信;UDP支持一对一、一对多、多对一和多对多的交互通信。

UDP是一个面向无连接的协议,数据传输前,源端和终端不建立连接,发送端尽可能快的将数据扔到网络上,接收端从消息队列中读取消息段。UDP协议中,任何一方建立socket后,都可以用sendto发送数据、用recvfrom接收数据,不必关心对方是否存在,是否发送了数据。
首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠。
并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。
再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。
UDP 服务器端不需要调用监听(listen)和接收(accept)客户端连接,而客户端也不需要连接服务器端(connect)。
TCP是面向连接的协议,在收发数据前必须和对方建立可靠的连接,建立连接的3次握手、断开连接的4次挥手,为数据传输打下可靠基础;

网络层
网祭协议IP
数据链路层
基本数据单位为帧
主要协议:以太网协议
网桥和交换机
物理层
激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。物理层记住两个重要的设备名称,中继器(Repeater,也叫放大器)和集线器。
7层ISO OSI模型
应用层
表示层
会话层
运输层
网络层
数据链路层
物理层
传输层
传输层作用
运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)
运输层还要对收到的报文进行差错检测。
运输层需要有两种不同的运输协议,即面向连接的 TCP 和无连接的 UDP
TCP/IP协议
TCP报文结构

传输协议
停止等待协议

停止等待协议的优点是简单,但缺点是信道利用率太低。假定AB之间有一条直通的信道来传送分组。

这里的TD是A发送分组所需要的时间(显然TD = 分组长度 / 数据速率)再假定TA是B发送确认分组所需要的时间(A和B处理分组的时间都忽略不计)那么A在经过TD+RTT+TA时间后才能发送下一个分组,这里的RTT是往返时间,因为只有TD是采用来传输有用的数据(这个数据包括了分组首部,如果可以知道传输更精确的数据的时间,可以计算的更精确),所有信道利用率为

流水线传输

分为:连续ARQ协议和滑动窗口协议
滑动窗口协议比较复杂,是TCP协议的精髓所在,在这里先给出ARQ协议最基本的概念,但不涉及到许多细节问题。

接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。
累积确认有的优点是:容易实现,即使确认丢失也不必重传。缺点是:不能向发送方反映出接收方已经正确收到的所有分组的信息。
TCP流量控制
利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。
A 向 B 发送数据。在连接建立时,�B 告诉 A:“我的接收窗口 rwnd = 400(字节)”。看下TCP首部窗口字段的用处
TCP拥塞控制
在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion)

乘法减小(multiplicative decrease)
“乘法减小“是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前的拥塞窗口值乘以 0.5。
当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。
加法增大(addictive increase)
“加法增大”是指执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个往返时间),就把拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。
快重传,块恢复

TCP有限状态机

网络层
IPv4
分类编址
IP地址最初根据网络前缀使用的地址位数和主机使用的地址位数,分为几个不同种类或类别。A类、B类和C类用于普通网络,D类指定用于IP组播流量,而E类则留出供实验使用。

CIDR编址
基本设置

细节计算

数据链路层
差错检测与纠正
循环冗余校验 Circle Redundancy Check 多项式校验
在标准的以太帧格式中,最后有4个字节长度的冗余位,用于存储CRC校验的值,这个冗余位又常称为帧检验序列FCS(Frame Check Sequence)

生成多项式

下面以一个简单示例来展示CRC的计算过程:以g(x)为CRC-4=X4+X+1为例,此时除数P=10011。假设源数据M为10110011。在发送端将M左移4位,然后除以P。

计算得到的余数就是0100,也就是CRC校验码。将0100附加到原始数据帧10110011后,组成新帧101100110100发送给接收端。接收端接收到该帧后,会用该帧去除以上面选定的除数P,验证余数是否为0,如果为0,则表示数据在传输过程中没有出现差错。

载波监听CSMA
CSMA的基本思想是:要传输的站点首先听一听介质上是否有其他站点在传输(载波侦听)。 如果介质忙,那么必须等待;如果不忙,则传输。冲突之后需要后退并重传。主要有三种形式:1. 1-坚持CSMA 2. 非坚持CSMA 3. p-坚持CSMA.
CSMA/CD带冲突检测的CSMA协议
所谓带冲突检测的CSMA,就是CSMA/CD。这也是实际中使用的协议。它的具体思想是:在发送之前先监听信道。如果介质空闲,则马上传输。如果介质正在忙,则一直监听到信道空闲,立刻传输。如果检测到冲突,那么立刻停止传输,等待一个随机的时间,之后再重复上面的步骤。
如何检测到冲突?测到冲突其实很简单。消息发送的过程中主机进行监听,如果发现信道上面的电平值和自己发送端的电平值不相同,那么它就认为自己发送的时候有别人进行发送,也就是说信道发生了冲突。如图下 哪个端检测到冲突,那个端就发送JAM信号,并且中断自己的信号发送。这样过一段时间其他的发送端都能检测到自己的信号被冲突了,于是都停止发送了。于是各自随机后退,等待一段时间后重启监听和发送的过程。

局域网MAC地址

无论是局域网,还是广域网中的计算机之间的通信,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点。数据包在这些节点之间的移动都是由ARP(Address Resolution Protocol:地址解析协议)负责将IP地址映射到MAC地址上来完成的。Mac地址可以解决IP盗用的安全问题,交换机里面就是根据Mac地址进行发送和接受数据的。
如果一个以太网卡坏了,可以被更换,而无须取得一个新的IP地址。如果一个IP主机从一个网络移到另一个网络,可以给它一个新的IP地址,而无须换一个新的网卡。