![7ac5b349cf3779161b9d6fe6d8ff6e8b.png](https://i-blog.csdnimg.cn/blog_migrate/5a3fd9afc369d1b63512e21798e792d6.jpeg)
本篇涉及名词
- TCP
- IP
- HTTP
- HTTPS
- UDP
- OSI
- Ping
- ICMP
- IGMP
- 三次握手
- 四次握手
- 序列号seq、确认号ack、确认ACK、同步SYN、终止FIN、SYN攻击
- 拥塞控制
- N针协议
- 高可用性
- 粘包
- 心跳
- 长连接
- 流和数据报
- timewait
包含HTTP TCP IP的一些面试题,解答可能不够详细和准确,如有错误,还望指出,仅供参考。
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
TCP、IP、HTTP、UDP的基本定义。
- IP《TCP、IP卷一第三章》
![f2a373af8e0b58905d3047d15e2960bd.png](https://i-blog.csdnimg.cn/blog_migrate/fbcb23cae625c51f6c1181c6dcf73647.jpeg)
- HTTP《图解HTTP》《HTTP权威指南第一章》
![6c05e813c64c5e97f9a68470b34de587.png](https://i-blog.csdnimg.cn/blog_migrate/94224594f5ae2df5ab1916c0b18c1d61.jpeg)
![bd62db7e99866188154995a7da4976ac.png](https://i-blog.csdnimg.cn/blog_migrate/660c58dd3a6b69be58c687ea0fdb3543.jpeg)
- TCP《TCP、IP卷一第十七章》(下面有)
- UDP《TCP、IP卷一第十一章》(下面有)
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
IP地址常识,有几类?
这里注意下,IP地址还分成广播地址,单播地址,多播地址。
![88a3b5f48ed9fa82ff12be81c14a3e10.png](https://i-blog.csdnimg.cn/blog_migrate/0543d3cdf9cac3167cb27b73c68e7909.jpeg)
![f27ab930659d82c812c8db27062cd5d5.png](https://i-blog.csdnimg.cn/blog_migrate/b30dc532427e1cb0204c1ec0b2f71b3e.jpeg)
- 计算最多有多少个A类B类C类网络号?(注意为什么要减去2)
![b5361ff140a9e820c246ac6e823feb63.png](https://i-blog.csdnimg.cn/blog_migrate/43c09041a6f2dd596d54427691ede228.jpeg)
![c5b2fd6a692ce973094d1e507ced653d.png](https://i-blog.csdnimg.cn/blog_migrate/5c5f1a5a6d9f41c0aa40d8b9b592621f.jpeg)
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
TCP/IP的四层模型《图解TCP、ip第1章》
![83c70c76c2cac3aac99f0c444aea5c54.png](https://i-blog.csdnimg.cn/blog_migrate/e8b1019264ac14b420115c9f6c147ecb.jpeg)
对比下OSI七层模型
![a84c924b740a7ea1f6a7cc5c1c925cd6.png](https://i-blog.csdnimg.cn/blog_migrate/edb6af5ca250a6b312265b4abbcdd766.jpeg)
来个终极boss
![d4492cb2f3f922229ef051ff0afdc666.png](https://i-blog.csdnimg.cn/blog_migrate/b7eb074d01bab3e84eb6d6b9acccfaa5.jpeg)
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
HTTP的报文结构?《图解HTTP第三章》
![7cfd99e0529f288aa4b35242d7561f44.png](https://i-blog.csdnimg.cn/blog_migrate/c012e4ddfeaaee23a444cd3a3219f5ce.jpeg)
![98113b2b76d8fedf0fcab37ca5cc77fd.png](https://i-blog.csdnimg.cn/blog_migrate/ff416c596c41b208bc0b8617bf6054e7.jpeg)
请求报文的格式:
![9a6d1f38887cdb28bc36bbba3d2cbd36.png](https://i-blog.csdnimg.cn/blog_migrate/acd0cf11db794528a4f0492dfc110b9c.jpeg)
响应报文的格式:
![27ae8a4452308cc68ebe052d0d4c76b9.png](https://i-blog.csdnimg.cn/blog_migrate/0cc9c343ae597e718d3eeea21749a73f.jpeg)
![6d62c9da3fbf408b0d51985c463ebcb4.png](https://i-blog.csdnimg.cn/blog_migrate/fa7808e761a10655b30d299f23b30d8c.jpeg)
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
HTTP和HTTPs的区别?HTTPS是如何保证安全的?加密过程是怎样?《图解HTTP第七章》《HTTP权威指南第十四章》具体加密过程下次单独写。
![de076fff5dfd1e3bb53eae5081bb8ae1.png](https://i-blog.csdnimg.cn/blog_migrate/71adc5ab9cef34510de4a2a06e104229.jpeg)
![29aabe5661a0b5cc6d5e365bd70a18ff.png](https://i-blog.csdnimg.cn/blog_migrate/5df8916803bf12de35e064ededa0eb32.jpeg)
![42c8d5e6e194a3bd3d4bb18e88005ab7.png](https://i-blog.csdnimg.cn/blog_migrate/5eba67672896c28f219776c666191101.jpeg)
![c15e4acc421053c1890b87b53a05802b.png](https://i-blog.csdnimg.cn/blog_migrate/f127f1c5af5c4ea2ab013eaace66500a.jpeg)
![b94f6a17171012b49e90e52c2b59251a.png](https://i-blog.csdnimg.cn/blog_migrate/19d2e477d20ab4bfc05b29d67bc5d214.jpeg)
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
TCP和UDP的区别?分别适用场景?《图解TCP、ip第6章》
UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等
TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的运输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这一难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。
![e17ee59ce966088a602e4e0bc07d70dc.png](https://i-blog.csdnimg.cn/blog_migrate/71cfb1daf2c303d248f5276fb8da3fe1.jpeg)
![e29042e0093431fc6efcaaae366a0ea8.png](https://i-blog.csdnimg.cn/blog_migrate/bc5f7ac7413448ad9669c44af96fd582.jpeg)
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
Ping ICMP的报文是什么?《TCP、IP卷一第6章》
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
TCP的三次握手和四次握手?《TCP、IP卷一第18章》
建立一个连接需要三次握手,而终止一个连接需要经过四次握手,是由于TCP的半关闭造成的(TCP连接时全双工)。
简单示意图:
![601717f8f0f4277eb3dd3a7c76c1469c.png](https://i-blog.csdnimg.cn/blog_migrate/01f4882a168af2ef8e5d3b21d2988176.jpeg)
- 客户端–发送带有 SYN 标志的数据包–一次握手–服务端
- 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
- 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端
为什么要三次握手
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
第一次握手:Client 什么都不能确认;Server 确认了对方发送正常
第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己接收正常,对方发送正常
第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送接收正常
所以三次握手就能确认双发收发功能都正常,缺一不可。
为什么要传回 SYN
接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。
SYN 是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK(Acknowledgement[汉译:确认字符 ,在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误。 ])消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
传了 SYN,为啥还要传 ACK
双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。
![b838bced92462f728d201c97b5a9d765.png](https://i-blog.csdnimg.cn/blog_migrate/41d5beed7767096aff91d5a01f35293e.jpeg)
断开一个 TCP 连接则需要“四次挥手”:
- 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
- 服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
- 服务器-关闭与客户端的连接,发送一个FIN给客户端
- 客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1
为什么要四次挥手
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
举个例子:
A 和 B 打电话,通话即将结束后,
A 说“我没啥要说的了”,
B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,
A 回答“知道了”,这样通话才算结束。
参考:https://blog.csdn.net/qzcsu/article/details/72861891
![b7d019b9e54d8d1e2ccaf43e08f4f594.png](https://i-blog.csdnimg.cn/blog_migrate/8b7c838de680e552099b4bf5e021582f.jpeg)
![2382ead8a796ae573d233f85e9a18363.png](https://i-blog.csdnimg.cn/blog_migrate/a33559168dd7c67e59a5f050f4c6be79.jpeg)
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
TCP拥塞控制《TCP、IP卷一第11、19、20、21、24、25、29章》(大致了解)
有了TCP的窗口控制,能够连续发生大量数据包,可能会因为其他主机之间的通信导致网络拥堵,在网络拥堵时,如果突然发送一个较大量的数据,极有可能会导致整个网络的瘫痪,TCP为了防止这个现象的出现,在通信一开始就会通过一个叫做慢启动的算法得出的数值,对发送数据量进行控制。
TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。
![6b4316d8209fff24501b9697433f79f4.png](https://i-blog.csdnimg.cn/blog_migrate/a6f08353a60ad76499d74149d64cc69d.jpeg)
![877d48c489e64841fe8a5c9c5a1d1006.png](https://i-blog.csdnimg.cn/blog_migrate/2e165eabd15ea623cc7801ca1d274169.jpeg)
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
TCP滑动窗口和回退N针协议《TCP、IP卷一第20章》《图解TCP、IP第六章》
TCP的传输方式有个缺点:包的往返时间越长通信性能越低,网络的吞吐量会越差。为了解决这个,TCP引入了窗口,及时往返时间较长,也能控制网络性能的下降。用滑动窗口方式并行处理,确认应答不是以个分段,而是以更大的单位进行确认,转发时间就被缩短了。这个机制实现使用了大量的缓冲区。
- TCP 利用滑动窗口实现流量控制的机制。
- 滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。
- TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报,但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个 1 字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。
对比图如下:
![c540a6a82c7e3935657435b277ad771d.png](https://i-blog.csdnimg.cn/blog_migrate/0726410ddd851775fbcc1cd84ebbc2bb.jpeg)
![b334b3a7f1c788f15215b8c20249687a.png](https://i-blog.csdnimg.cn/blog_migrate/5d06fda21d6c98d339ac0cc85a567c2f.jpeg)
![ef6bf06649d4a2b44364f2e50141ebcc.png](https://i-blog.csdnimg.cn/blog_migrate/fff05c24a1a7655e36d7b4daf31c427f.jpeg)
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
有什么办法可保证UDP高可用性?
对高可用性不是很了解,资料看的头晕,等不晕了再看吧
https://blog.csdn.net/admin1973/article/details/71424160
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
TCP粘包如何解决?
https://www.cnblogs.com/crossoverJie/p/9446410.html
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
为什么需要心跳
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
什么是长连接?
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
参考:https://www.cnblogs.com/gotodsp/p/6366163.html
- 流和数据报的区别?
- 进程间通信有几种方式?最快的是哪种?
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
用户在浏览器中输入网址并回车到看到的完整页面,中间经历了哪些?
详情看:Duang~敲个GitHub会发生什么呢?
![6908a13b07229eff54343afa059338c5.png](https://i-blog.csdnimg.cn/blog_migrate/02998f3445151b57ae517ab929c5e834.jpeg)
- Ping一个服务器,ping不通,用哪个命令跟踪路由包?
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
用哪些属性可以唯一确定一条TCP连接?
TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接
- 断开TCP连接时,timewait状态会出现发起分手的一端还是被分手的一端?
![b1a75e156f0456a8d8532f815d94ee08.png](https://i-blog.csdnimg.cn/blog_migrate/98b484a821ae86b18fc7d66af847f3f7.png)
序列号seq、确认号ack、确认ACK、同步SYN、终止FIN、SYN攻击
《TCP、IP卷二第24.7章》《TCP、IP卷一第18、20、24章》《TCP、IP卷二第24章》《TCP、IP卷一第18章》
在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知,这个消息就叫做确认应答(ACK)。确认应答处理、重发控制以及重复控制等功能都可以通过序列号实现,序列号是按顺序给发送数据的每一个字节(8位字节)都标上号码的编号,接收端查询接收数据TCP首部中的序列号和数据的长度,将自己下一步应该接收的序号作为确认应答返送回去。
![e94c9aad8b56ecfcc1140dcc276016ac.png](https://i-blog.csdnimg.cn/blog_migrate/395cb57a516bb82b05de9e97ae6ade78.jpeg)
![4ef578427789db7904bf750fb4f1fe70.png](https://i-blog.csdnimg.cn/blog_migrate/190372571691a9f8cb4dde221991725a.jpeg)
![32878c903ce2803abf271613db771d9e.png](https://i-blog.csdnimg.cn/blog_migrate/3450a00e72939f1286d7fb45323a8fb1.jpeg)
![3afe1f693a43fad5e1422940545797ed.png](https://i-blog.csdnimg.cn/blog_migrate/ce4ddef066ad8f7c76b95170e39380c2.jpeg)
参考资料:
《TCP/IP 详解卷1》
《图解TCP/IP》
《图解HTTP》
《HTTP权威指南》
https://github.com/ZoeSj/JavaGuide
http://www.cnblogs.com/GumpYan/p/5819933.html
![7ccab815e82d494e9fff3db90840d380.gif](https://i-blog.csdnimg.cn/blog_migrate/66db7c612ffd27c925a5071cf9337d7c.gif)
![e47a0928af0f16982147e9eec1ef82a2.png](https://i-blog.csdnimg.cn/blog_migrate/bb5b5a263d88f77e113753e49f4bfd87.jpeg)