超时重发:当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
流量控制:TCP 连接的每一方都有固定大小的缓冲空间。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP 使用的流量控制协议是可变大小的滑动窗口协议。
什么是 TCP 拥堵?
计算机网络中的带宽、交换结点中的缓存及处理机等都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况就叫做拥塞。?? 怎么解决 TCP 拥堵?
通过拥塞控制来解决。拥堵控制,就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。注意,拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。拥塞控制的方法主要有以下四种:
1、慢开始。2、拥塞避免。3、快重传。4、快恢复。1)慢开始
不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。2)拥塞避免
拥塞避免算法,让拥塞窗口缓慢增长,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1 ,而不是加倍,这样拥塞窗口按线性规律缓慢增长。
3)快重传
快重传,要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时捎带确认。
快重传算法规定,发送方只要一连收到三个重复确认,就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
4)快恢复
快重传配合使用的还有快恢复算法,当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把 ssthresh 门限减半。
但是接下去并不执行慢开始算法:因为如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。
所以此时不执行慢开始算法,而是将 cwnd 设置为 ssthresh 的大小,然后执行拥塞避免算法。
UDP
UDP 是什么?
UDP(User Data Protocol,用户数据报协议),是与 TCP 相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。主要特点如下:
UDP 是无连接的。
UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面有许多参数)。
UDP 是面向报文的。
UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。对实时应用很有用,如 直播,实时视频会议等UDP 支持一对一、一对多、多对一和多对多的交互通信。
UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。
UDP 对应的应用层协议?
DNS :用于域名解析服务,将域名地址转换为 IP 地址。DNS 用的是 53 号端口。
SNMP :简单网络管理协议,使用 161 号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
TFTP(Trivial File Transfer Protocol):简单文件传输协议,该协议在熟知端口 69 上使用 UDP 服务。
【重要】TCP 与 UDP 的区别
这个问题,上面在介绍 TCP 和 UDP 都提到了,就是做了整合哈。
TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol) 协议属于传输层协议,它们之间的区别包括:
TCP 是面向连接的;UDP 是无连接的。TCP 是可靠的;UDP 是不可靠的。
TCP 只支持点对点通信;UDP 支持一对一、一对多、多对一、多对多的通信模式。TCP 是面向字节流的;UDP 是面向报文的。
TCP 有拥塞控制机制;UDP 没有拥塞控制,适合媒体通信。
TCP 首部开销(20 个字节),比 UDP 的首部开销(8 个字节)要大。?? 为什么 TCP 叫数据流模式? UDP 叫数据报模式?
所谓的“流模式”,是指TCP 发送端发送几次数据和接收端接收几次数据是没有必然联系的。
比如你通过 TCP 连接给另一端发送数据,你只调用了一次 write ,发送了 100 个字节,但是对方可以分 10次收完,每次 10 个字节;你也可以调用 10 次 write ,每次 10 个字节,但是对方可以一次就收完。原因:这是因为 TCP 是面向连接的,一个 Socket 中收到的数据都是由同一台主机发出,且有序地到达,所以每次读取多少数据都可以。
所谓的“数据报模式”,是指 UDP 发送端调用了几次 write ,接收端必须用相同次数的 read 读完。
UDP 是基于报文的,在接收的时候,每次最多只能读取一个报文,报文和报文是不会合并的,如果缓冲区小于报文长度,则多出的部分会被丢弃。
原因:这是因为 UDP 是无连接的,只要知道接收端的 IP 和端口,任何主机都可以向接收端发送数据。这时候,如果一次能读取超过一个报文的数据,则会乱套。
UDP 报文的格式
16 位 * 4 = 64 位 = 8 字节。
DNS
DNS 是什么?
域名解析,www.xxx.com 转换成 IP ,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。
DNS 协议运行在 UDP 协议之上,使用端口号 53 。
主机解析域名的顺序?
1. 浏览器缓存
2. 找本机的 hosts 文件3. 路由缓存
4. 找 DNS 服务器(本地域名、顶级域名、根域名)
迭代查询递归查询DNS 使用什么协议?
参见 《DNS使用的是 TCP 协议还是 UDP 协议》 文章。既使用 TCP 又使用 UDP 。
区域传送时使用 TCP 协议。
辅域名服务器会定时(一般时 3 小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用 TCP 而不是 UDP ,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。TCP 是一种可靠的连接,保证了数据的准确性。
域名解析时使用 UDP 协议。
客户端向 DNS 服务器查询域名,一般返回的内容都不超过 512 字节,用 UDP 传输即可。UDP 报文的最大长度为 512 字节。
不用经过 TCP 三次握手,这样 DNS 服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向 DNS 服务器查询的时候使用 TCP ,但事实上,很多 DNS 服务器进行配置的时候,仅支持UDP 查询包。
HTTP
HTTP 是什么?
HTTP 协议,是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World WideWeb )服务器传输超文本到本地浏览器的传送协议。主要特点如下:
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、HEAD、POST 等等。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。
数据格式灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由Content-Type 加以标记。无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。主要指的是不使用 Keep-Alive 机制的情况下。
无状态:HTTP 协议是无状态协议。无状态,是指协议对于事务处理没有记忆能力。无状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
无状态,所以更容易做服务的扩容,支撑更大的访问量。支持 B/S 及 C/S 模式。
计算机网络面试题 - 图文
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)