1. TCP 报头格式
- 源端口和目的端口,各占两个字节,分别被写入源端口和目的端口;
- 序号,占4个字节,TCP连接中传送的字节流每个字节都按顺序编号;
- 确认号,占4个字节,是期望收到对方下一个报文的第一个数据字节的序号;
- 数据偏移,占4位,它指出TCP报文的数据距离TCP报文段的起始处有多远,即报文首部的长度;
- 保留,占6位,保留今后使用,但目前都为0;
- 紧急URG,当 URG = 1,表明紧急指针字段有效。告诉系统此报文段中有紧急数据;
- 确认ACK,仅当 ACK = 1时,确认号字段才有效。TCP 规定,在连接建立后,所有报文的传输都必须把ACK置1;
- 推送PSH,当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收回对方的响应,这时候就将PSH 置1;
- 复位RST,当 RST = 1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接;
- 同步SYN,在连接建立时用来同步序号。当 SYN = 1,ACK = 0 时,表明是连接请求报文,若同意连接,则响应报文中应该使SYN = 1,ACK = 1;
- 终止FIN,用来释放连接。当FIN = 1, 表明此报文的发送方的数据已经发送完毕,并且要求释放;
- 窗口,占两个字节,指的是通知接收方,发送本报文需要有多大的空间来接收;
- 检验和,占两个字节,校验首部和数据两个部分;
- 紧急指针,占两个字节,指出本报文段中的紧急数据的字节数;
- 选项,长度可变,定义一些其他的可选参数。
2. UDP 报头格式
首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的。
3. TCP/UDP 区别
-
用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。
-
传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。
区别:
TCP 面向连接,可靠,基于字节流;UDP 面向无连接,不可靠,基于数据报。对于连接而言,其实真正的连接是不存在的,TCP 面向连接只不过是三次握手在客户端和服务端之间初始化好了序列号。只要确定序列号和确认号,那客户端和服务端之间发送的消息就有效,就可以正常接收。基于字节流是指,对于读写并没有相对应的次数。而UDP 没有三次握手,且发送数据是只有一个发送和一个接收,基于数据报,因此不可靠。
应用场景:
用哪个协议都不是绝对的,需要看具体的应用场景有什么需求。对于TCP 而言,更加注重的是可靠性,而不是实时性,如果我发送的数据很重要一点错误都不能有,有延迟无所谓的话,那就选择TCP;而UDP 更加注重的是速度快,即实时性,却不要求可靠性,比如直播,那么就应该选择UDP了。
4. TCP 三次握手、四次挥手
最开始的时候,客户端和服务端都是处于CLOSED状态。主动打开连接的是客户端,被动打开连接的是服务端。
- TCP 服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
- TCP 客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这时报文首部中的同步位 SYN = 1,同时选择一个初始序列号 seq = x,此时,TCP客户端进程进入 SYN-SENT (同步已发送)状态。TCP 规定,SYN 报文段(SYN= 1的报文段)不能携带数据,但需要消耗掉一个序号。
- TCP 服务器收到请求报文后,如果同意连接,则发出确认报文:SYN = 1, ACK = 1,确认号是 ack = x+1,同时也要自己初始化一个序列号 seq = y,此时,TCP 的服务器进程进入了 SYN-RCVD (同步收到)状态。这个报文也不能携带数据,但是同样要消耗掉一个序号。
- TCP 客户端收到确认后,还要向服务器给出确认。确认报文的 ACK = 1, ack = y+1,同时自己的序列号为seq = x+1,此时,TCP 连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
- 当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
为什么TCP客户端最后还要发送一次确认呢?
为了防止已经失效的连接请求报文再次传送到服务器,从而产生错误。
如果客户端传送了请求连接报文,但在网络节点中滞留的时间太长了,并没有丢失,而客户端没有收到确认报文,于是重新发送了请求连接报文,并实现了数据的传输,并关闭了连接。此时此前滞留的请求连接,在网络通畅了之后又重新发送到了服务器,而服务器以为是新的请求报文,于是打开了连接,并回复了确认报文给客户端,若此时没有第三次确认,服务器将直接打开链接,这会造成不必要的错误和资源的浪费。而如果采用三次握手,客户端并不会发送确认,服务器端收不到确认也不会打开连接,避免了不必要的浪费。
数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。
- 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN = 1,其序列号为seq = u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
- 服务器收到连接释放报文,发出确认报文,ACK= 1,ack = u+1,并且带上自己的序列号seq = v,此时,服务端就进入了CLOSED-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然接受。这个状态还要持续一段时间,也就是整个CLOSED-WAIT状态持续的时间。
- 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
- 服务器将最后的数据发送完毕后,就向客户端发送链接释放报文,FIN = 1,ack = u+1,由于在半关闭状态,服务器很可能有发送了一些数据,假定此时的序列号为seq = w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
- 客户端收到服务器的连接释放请求后,必须发出确认,ACK= 1,ack = w+1,而自己的序列号是seq = u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2*MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
- 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
为什么客户端最后还要等待2MSL?
MSL(Maximum Segment Lifetime),报文最大生存时间,TCP允许不同的实现可以设置不同的MSL值。
1)保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,服务器在发送了FIN+ACK报文请求断开连接后,若一直没有收到客户端给的回应,则会重新发送一次断开请求报文,而客户端在这个2MSL时间段内就可以收到这个重传的报文,接着重新给出回应,并且会重置2MSL计时器。
2)防止类似于“三次握手”中提到的“已经失效的连接请求报文段”出现在本链接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。
为什了建立连接是三次握手,关闭连接是四次挥手呢?
建立连接的时候,服务器在LISTEN状态下,收到建立连接请求的SYN报文后,吧ACK和SYN放在一个报文里发送给客户端;而关闭连接时,服务器收到对方的FIN报文时,仅仅表示客户端已经不再发送数据了,但是还可以接收数据,而自己也未必把全部数据都发送给客户端,所以服务器此时可以立即关闭,也可以发送未发送完的数据,然后在发送FIN报文给对方来表示同意现在关闭连接,因此,服务器端的ACK和FIN报文一般会分开发送,从而导致多了一次。
如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常设置为2小时,若2小时还没收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
5. TCP 是如何保证数据的可靠性传输的
-
数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;
-
对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;
-
丢弃重复数据:对于重复数据,能够丢弃重复数据;
-
应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;
-
超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;
-
流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。
6. HTTP 协议
HTTP (HyperText Transfer Protocol),超文本传输协议,属于TCP/IP协议族中的应用层协议,用于客户端和服务器之间的通信。
特点:
- 无连接:限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。(但目前已经实现持久连接(HTTP keep-alive)的方法,只要任意一端没有提出断开连接的请求,则一直保持连接;目前也实现了管线化,可以在没收到响应的时候持续发送多个请求)
- 媒体独立:只要客户端和服务器知道如何处理数据内容,任何类型的数据都可以通过HTTP发送。
- 无状态:指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前的信息时它的应答就较快。(cookie技术通过在请求和响应报文中写入cookie信息来控制客户端状态)
7. HTTP 状态码
|
类别 |
原因短语 |
1×× |
(Information)信息性状态码 |
接收的请求正在处理 |
2×× |
(Success)成功状态码 |
请求正常处理完毕 |
3×× |
(Redirection)重定向状态码 |
需要进行附加操作以完成请求 |
4×× |
(Client Error)客户端错误状态码 |
服务器无法处理请求 |
5×× |
(Server Error)服务器错误状态码 |
服务器处理请求出错 |
常用状态码:
- 200 OK
- 301 Moved Permanently 永久性转移
- 302 Found 暂时性转移
- 304 Not Modified 已缓存(客户端发送附带条件的请求,服务器找到资源但不符合条件)
- 400 Bad Request 请求有语法问题
- 403 Forbidden 拒绝请求
- 404 Not Found 访问的页面不存在
- 500 Internal Server Error 服务器内部错误
- 503 Service Unavalible 服务器不可用,稍等
8. POST 和 GET 的区别
GET 和 POST 是我们常用的两种 HTTP 方法,区别主要包括以下五个方面:
- 从功能上讲,GET 一般用来从服务器上获取资源,POST 一般用来更新服务器上的资源;
- 从REST服务角度上说,GET是幂等的,即读取同一个资源,总是得到相同的数据;而 POST 不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET 不会改变服务器上的资源,而 POST 会对服务器资源进行改变;
- 从请求参数形式上看,GET 请求的数据会附在 URL 之后,即将请求数据放在HTTP报文的报头中(一般附在cookie信息中);而 POST 请求会把提交的数据放置在 HTTP 请求报文的实体中;
- 就安全性而言,POST 的安全性要比 GET 高,因为 GET 请求提交的数据会明文出现在 URL 上,而 POST 请求参数则被包装在实体中,相对更安全;
- 从请求的数据大小看,GET 请求的长度受限于浏览器或服务器对 URL 长度的限制,允许发送的数据量比较小,而 POST 请求则是没有大小限制的。
9. DNS 的解析过程
浏览器如何通过域名去查询URL对应的IP(对应服务器地址)呢?
1、浏览器缓存:浏览器会按照一定的频率缓存DNS记录。
2、操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中找。
3、路由缓存:路由器也有DNS缓存。
4、ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。
5、根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)。
10. 打开网页到页面显示之间的过程
(1). 浏览器查询 DNS,获取域名对应的IP地址:具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;
(2). 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;
(3). TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;
(4). 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
(5). 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;
(6). 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。
11. http 和 https 的区别,https 在请求时额外的过程,https 是如何保证数据安全的
- HTTP(超文本传输协议)用于在Web浏览器和网站服务器之间传递信息,是互联网上应用最广泛的一种网络协议,传输简单高效。
- HTTPS 是以安全为目标的 HTTP 通道,由 SSL(安全套接层)+HTTP 构建的协议,可进行加密传输,身份认证。
区别:
- 开销:https 协议需要申请证书,一般免费证书很少,因而需要一定的费用;而 http 则不需要申请证书;
- 资源消耗/安全性:http 是超文本传输协议,信息明文传输,不需要额外的资源消耗;而 https 会进行加密处理,并需要对对方进行认证,因此需要消耗更多的 CPU 和内存资源;但也因此,https 比 http 的安全性更高;
- 端口:http 和https 使用不同的连接方式,用的端口也不一样,http 是80,https 是443;
https 保证数据安全主要表现在一下三个方面:
- 认证用户或服务器,确保数据发送到正确的客户机或服务器;
- 加密数据以防止数据中途被窃取,创建一个安全的传输通道;
- 维护数据的完整性,确保数据在传输过程中不被改变。
12. Session 机制、Cookie机制
Cookie 和 Session 都是客户端与服务器之间保持状态的解决方案,具体来说,cookie 机制采用的是在客户端保持状态的方案,而 seession 机制采用的是在服务器端保持状态的方案。
- cookie 实际上是一小段的文本信息。客户端向服务器发送请求,如果服务器需要记录该用户状态,就使用 response 向客户端浏览器颁发一个cookie信息,而客户端浏览器会把这个cookie信息保存起来,当浏览器在请求该网站时,浏览器就把请求的网址附带该 cookie 信息一同提交给服务器,服务器检查该 cookie,以此来辨认用户状态。服务器还可以根据需要修改 cookie 的内容。
- session 是指会话状态保存在服务器端的方法。客户端向服务器发送请求,如果服务器记录该用户状态,就获取 session 来保存状态,并产生一个 session ID,用来特定标识客户端的身份;客户端再次访问服务器时,服务器就按照 session ID 来检索 session 来获取客户端的状态并使用;如果客户端请求不包含 session ID,则为此客户端创建 session,并生成一个 ID,并将 session ID 在响应中返回给客户端保存。保存这个 session ID 的方式可以采用 cookie 机制,这样在交互过程中浏览器可以自动的按照规则把这个标识返回给服务器,若浏览器禁用 cookie 的话,可以通过 URL 重写机制 将 session ID 传回给服务器。
session 和 cookie 的对比:
- 实现机制:session 的实现常常依赖于 cookie 机制, 通过 cookie 机制回传 session ID;
- 大小限制:cookie 有大小限制,并且浏览器对每个站点也有 cookie 的个数限制;session 没有大小限制,理论上只与服务器的内存大小有关;
- 安全性:cookie 存在安全隐患,通过拦截或本地文件找到 cookie 后可以进行攻击,而session由于保存在服务器端,相对更加安全;
- 服务器资源消耗:session 是保存在服务器上的,会存在一段时间才消失,如果 session 过多会增加服务器的压力。
13. OSI 协议、TCP/IP 协议以及每层对应的协议
TCP/IP与OSI最大的不同在于:OSI 是一个理论上的网络通信模型,而TCP/IP则是实际上的网络通信标准。但是,它们的初衷是一样的,都是为了使得两台计算机能够通信,一方提出请求,一方做出响应。
OSI 模型
层 |
作用 |
协议 |
应用层 |
为用户的应用程序提供网络通信服务 |
FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS |
表示层 |
对数据进行翻译、压缩和解压缩、加密和解密 |
JPEG、MPEG、ASII |
会话层 |
建立、管理和终止会话 |
NFS、SQL、NETBIOS、RPC |
传输层 |
提供端到端的可靠报文传递和错误恢复 |
TCP、UDP、SPX |
网络层 |
将网络地址解析为物理地址,并选择一条通信道路 |
IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(路由器) |
数据链路层 |
将比特组装成帧和点到点的传递 |
PPP、FR、HDLC、VLAN、MAC(网桥,交换机) |
物理层 |
通过媒介传输比特,确定机械及电气规范 |
RJ45、CLOCK、IEEE802.3 (中继器、集线器、网关) |
TCP/IP 模型
层 |
作用 |
协议 |
应用层 |
为用户的应用程序提供网络通信服务 |
FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS |
传输层 |
提供端到端的可靠报文传递和错误恢复 |
TCP、UDP、SPX |
网际层 |
将网络地址解析为物理地址,提供阻塞控制,路由选择(静态路由,动态路由)等 |
IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(路由器) |
网际接口层 |
将比特组装成帧和点到点的传递,并通过物质传递 |
|
14. 地址解析协议 ARP
ARP(地址解析协议)是网络层的协议,实现了由 IP 地址到 MAC (物理地址)的映射。
- 首先,每台主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址的对应关系;
- 当源主机需要将一个数据包发送到目的主机时,会首先检查自己缓存的 ARP 列表中是否存在该 IP 地址对应的 MAC 地址:如果有,就直接将数据包发送到这个 MAC 地址;如果没有,就向本地网段发起一个 ARP 请求的广播包,查询此目的主机对应的 MAC 地址。此 ARP 请求数据包里包括源主机的 IP 地址、硬件地址,以及目的主机的 IP 地址;
- 网络中所有的主机收到这个 ARP 请求后,会检查数据包中的目的 IP 是否和自己的 IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的 MAC 地址和 IP 地址添加到自己的 ARP 列表中,如果 ARP 表中已经存在该 IP 信息。则将其覆盖,然后向源主机发送一个 ARP 响应数据包,告诉对方自己是它需要查找的目的主机,附加 MAC 地址;
- 源主机收到这个 ARP 响应数据包后,将得到目的主机的 IP 地址和 MAC 地址添加到自己的 ARP 列表中,并利用此信息开始数据的传输;如果源主机一直没有收到 ARP 响应数据包,表示 ARP查询失败。
15. IP 地址子网划分
IP 地址是指互联网协议地址,是 IP 协议提供的一种统一的地址格式,它为互联网的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。IP 地址编址方案将 IP 地址空间划分为 A、B、C、D、E五类,其中 A、B、C是基本类,D、E类作为多播和保留使用,属于特殊地址
每个 IP 地址包括两个标识码(ID),即网络 ID 和主机 ID。同一个物理网络上的所有主机都使用同一个网络 ID,在网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机 ID 与其对应。
- A类地址:1字节(8位)网络地址 + 3字节(24位)主机地址,网络地址最高位必须是 ‘0’;A类网络地址数量较少,有126个网络,每个网络可以容纳的主机数达1600多万台;A 类 IP 地址的范围为 1.0.0.0 ~ 127.255.255.255,最后一个是广播地址。此类地址的子网掩码是255.0.0.0,每个网络支持的最大主机数为 256^3-2=16777214 台。
- B类地址:2字节(16位)网络地址 + 2字节(16位)主机地址,网络地址最高位必须是 ‘10’;B类网络地址适用于中等规模的网络,有 16384 个网络,每个网络所容纳的计算机数为6万多台;B 类 IP 地址的范围为:128.0.0.0 ~ 191.255.255.255,最后一个是广播地址。此类地址的子网掩码是255.255.0.0,每个网络支持的最大主机数为 256^2-2=65534 台。
- C类地址:3字节(24位)网络地址 + 1字节(8位)主机地址,网络地址最高位必须是 ‘110’;C类网络地址适用于小规模的局域网络,有 209万余个网络,每个网络所容纳的计算机数为254台;C 类 IP 地址的范围为:192.0.0.0 ~ 223.255.255.255,最后一个是广播地址。此类地址的子网掩码是255.255.255.0,每个网络支持的最大主机数为 256-2=254 台。
- D类地址:多播地址,用于1对多通信,最高位必须是‘1110’;在以太网中国,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的范围是224.0.0.0 ~ 239.255.255.255。
- E类地址:保留地址,最高位必须是‘1111’。
16. 交换机和路由器的区别
- 路由器(Router):连接因特网中各局域网、广域网的设备。在路由器中记录着路由表,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号;发生在网络层。
- 交换机(Switch):一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路,把传输信息送到符合要求的相应路由上;发生在数据链路层。
- 集线器(Hub):指将多条以太网双绞线或光纤集合连接在同一个物理介质下的设备;发生在物理层。
|
路由器 |
交换机 |
工作层次 |
网络层 |
数据链路层 |
转发依据 |
IP 地址 |
MAC 地址 |
功能 |
连接不同的网络 |
连接局域网中的网络 |
宽带影响 |
共享宽带 |
独享宽带 |
路由器是连接不同的网段的,负责将局域网连接到广域网和互联网中, 并找到网络中数据传输最合适的路径。大家通过同一个路由器上网共用一个宽带,上网会相互影响。
- 简单的说,路由器专管入网,交换机只管配送,路由就是给你找路让你上网的,交换机只负责开门,交换机上面要是没有路由是上不了网的。
引申:集线器和交换机的区别
|
交换机 |
集线器 |
工作层次 |
数据链路层 |
物理层 |
带宽影响 |
独享 |
共享 |
数据传输 |
有目的发送 |
广播发送 |
传输模式 |
全双工或半双工 |
半双工 |
- 数据传输:集线器工作的时候,如果局域网中的一台电脑要发送消息,则局域网内的所有电脑都可以接受到这个消息,安全性较差,而且每一次只能有一个发送,只有这个发送完毕其他电脑才能再发送,这称为半双工模式。而交换机有“记忆功能”,它能根据相应的 MAC 地址直接有目的的发送到目标电脑。但是如果向一台新的电脑发送消息,那么传输方式也将是广播,只有找到这台电脑,并记住它的 MAC 地址后,才能直接发送给它。通过交换机连接的电脑可以同时发送消息互不影响,这称为全双工模式,传输速率比集线器大大提高。
- 带宽占用:通过集线器,所有的电脑都共享一个宽带,如果宽带是100M,有5台电脑,则每台电脑只有20M;如果通过交换机,则所有的电脑都是100M。
通过比较可以发现,交换机与集线器相比有很大优势,所以现在基本上都用交换机,集线器已经渐渐被淘汰了。
17. TCP拥塞控制
计算机网络中的带宽、交换结点中的缓存及处理机等都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况就叫做拥塞。拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
注意:拥塞控制和流量控制不同,前者是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素;而后者指的是点对点通信量的控制,是端到端的问题。流量控制要做的是抑制发送端发送数据的速率,以便使接收端来得及接收。
拥塞控制的方法主要有以下四种:
- 慢启动:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。
- 拥塞避免:拥塞避免算法让拥塞窗口缓慢增长,即没经过一个往返时间RTT就把发送方的拥塞窗口 cwnd 加1,而不是加倍,这样拥塞窗口按线性规律缓慢增长。
![计算机网络面试知识点整理_第1张图片](http://img.e-com-net.com/image/info8/71872aadc8e443979be785bce9c2a8df.jpg)
- 快重传:快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
![计算机网络面试知识点整理_第2张图片](http://img.e-com-net.com/image/info8/4703496c6a264faaa5d49c0fe2a409e1.jpg)
- 快恢复:快重传配合使用的还有快恢复算法,当发送方连续收到三个重复确认后,就执行“乘法减小”算法,把 ssthresh门限减半,但是接下去并不执行慢开始算法,因为如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。
![计算机网络面试知识点整理_第3张图片](http://img.e-com-net.com/image/info8/52160201d3cd40c0875186ddf35a32c8.jpg)