1.TCP三次握手、四次挥手
https://www.cnblogs.com/zmlctt/p/3690998.html
TCP标志位含义:
https://blog.csdn.net/zengrenyuan/article/details/80313449
2.滑动窗口机制
由发送方和接收方在三次握手阶段,互相将自己的最大可接收的数据量告诉对方。也就是自己的数据接收缓冲池的大小。这样对方可以根据已发送的数据量来计算是否可以接着发送。在处理过程中,当接收缓冲池的大小发生变化时,要给对方发送更新窗口大小的通知。这就实现了流量的控制。
https://www.cnblogs.com/luoquan/p/4886345.html
3.拥塞避免机制
拥塞:对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增加而下降。
拥塞控制:防止过多的数据注入到网络中,使得网络中的路由器或链路不致过裁。
拥塞控制方法:
流量控制具体的技术是采用滑动窗口,以便通信双方能够充分利用带宽。流量控制作为接受方管理发送方发送数据的方式,用来防止接受方可用的数据缓存空间的溢出。
流控制是一种局部控制机制,其参与者仅仅是发送方和接收方,它只考虑了接收端的接收能力,而没有考虑到网络的传输能力;
而拥塞控制则注重于整体,其考虑的是整个网络的传输能力,是一种全局控制机制。正因为流控制的这种局限性,从而导致了拥塞崩溃现象的发生。所以引入了另外两个变量,拥塞窗口-->cwnd 和 慢启动阈值--> ssthreshold来实现拥塞控制。
- 慢开始 + 拥塞避免;
慢启动:cwnd = cwnd + 1MSS, cwnd < ssthreshold
拥塞避免:cwnd = cwnd + 1MSS * 1MSS/cwnd, cwnd >= ssthreshold
但当发生ack超时时,认为造成了拥塞,将阈值置为cwnd,然后将cwnd置为1,再次走慢启动的流程。 - 快速重传 + 快速恢复。
快速重传: 当有三个重复ACK到达时,TCP就认为发生了丢包,在重新发送请求的数据包之后:
- 设置ssthresh = cwnd/2, cwnd = ssthreshold + 3MSS;
- 之后若仍有重复ACK到达,cwnd = cwnd + 1 MSS, 发送1MSS(若滑动窗口允许)
- 收到新的ACK后,cwnd = ssthreshold, 以便启动拥塞避免(快速恢复)
http://blog.chinaunix.net/uid-31422160-id-5784645.html
https://www.cnblogs.com/hupp/p/4856134.html
4.TCP协议和UDP协议的区别是什么
- TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。而UDP是无连接的
- TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
- TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
- TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率
- TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。
- TCP面向的是字节流的服务,UDP面向的是报文的服务。
- TCP介绍: TCP提供了一种可靠的面向连接的字节流运输层服务。
- UDP:(User Datagram Protocol),用户数据报协议
5.三次握手建立连接时,发送方再次发送确认的必要性
主要是为了防止已失效的连接请求报文段突然又传到了B,因而产生错误。假定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网络结 点长时间滞留了,一直延迟到连接释放以后的某个时间才到达B,本来这是一个早已失效的报文段。但B收到此失效的连接请求报文段后,就误认为是A又发出一次 新的连接请求,于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了,这样一直等待A发来数据,B的许多 资源就这样白白浪费了。
6.四次挥手释放连接时,等待2MSL的意义
- 第一,为了保证A发送的最有一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN和ACK 报文段的确认。B会超时重传这个FIN和ACK报文段,而A就能在2MSL时间内收到这个重传的ACK+FIN报文段。接着A重传一次确认。
- 第二,就是防止上面提到的已失效的连接请求报文段出现在本连接中,A在发送完最有一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。
7.常见的应用中有哪些是应用TCP协议的,哪些又是应用UDP协议的,为什么它们被如此设计
以下应用一般或必须用udp实现
- 多播的信息一定要用udp实现,因为tcp只支持一对一通信。
- 如果一个应用场景中大多是简短的信息,适合用udp实现,因为udp是基于报文段的,它直接对上层应用的数据封装成报文段,然后丢在网络中,如果信息量太大,会在链路层中被分片,影响传输效率。
- 如果一个应用场景重性能甚于重完整性和安全性,那么适合于udp,比如多媒体应用,缺一两帧不影响用户体验,但是需要流媒体到达的速度快,因此比较适合用udp
- 如果要求快速响应,那么udp听起来比较合适
- 如果又要利用udp的快速响应优点,又想可靠传输,那么只能考上层应用自己制定规则了。
- 常见的使用udp的例子:ICQ,QQ的聊天模块。
8.浏览器中输入:“www.xxx.com” 之后都发生了什么?请详细阐述。
- 由域名→IP地址 寻找IP地址的过程依次经过了浏览器缓存、系统缓存、hosts文件、路由器缓存、 递归搜索根域名服务器。
- 建立TCP/IP连接(三次握手具体过程)
- 由浏览器发送一个HTTP请求
- 经过路由器的转发,通过服务器的防火墙,该HTTP请求到达了服务器
- 服务器处理该HTTP请求,返回一个HTML文件
- 浏览器解析该HTML文件,并且显示在浏览器端
- 这里需要注意:
HTTP协议是一种基于TCP/IP的应用层协议,进行HTTP数据请求必须先建立TCP/IP连接
可以这样理解:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动 机,提供了网络通信的能力。
两个计算机之间的交流无非是两个端口之间的数据通信,具体的数据会以什么样的形式展现是以不同的应用层协议来定义的。
9.常见http状态码
- 1xx(临时响应)
- 2xx(成功)
- 3xx(重定向):表示要完成请求需要进一步操作
- 4xx(错误):表示请求可能出错,妨碍了服务器的处理
- 5xx(服务器错误):表示服务器在尝试处理请求时发生内部错误
- 常见状态码:
200(成功)
304(未修改):自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容
401(未授权):请求要求身份验证
403(禁止):服务器拒绝请求
404(未找到):服务器找不到请求的网页