1. TCP用了哪些措施保证其可靠性

序列号、确认应答、超时重传

数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明了它下一次需要接收的数据序列号。如果发送发迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是2*RTT(报文段往返时间)+一个偏差值。

窗口(流量)控制与高速重发控制/快速重传(重复确认应答)

TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定要等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值。如果不使用窗口控制,每一个没收到确认应答的数据都要重发。
使用窗口控制,如果数据段1001-2000丢失,后面数据每次传输,确认应答都会不停地发送序号为1001的应答,表示我要接收1001开始的数据,发送端如果收到3次相同应答,就会立刻进行重发;但还有种情况有可能是数据都收到了,但是有的应答丢失了,这种情况不会进行重发,因为发送端知道,如果是数据段丢失,接收端不会放过它的,会疯狂向它提醒…

拥塞控制

如果把窗口定的很大,发送端连续发送大量的数据,可能会造成网络的拥堵,甚至造成网络的瘫痪。所以TCP在为了防止这种情况而进行了拥塞控制。
慢启动:定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到确认应答(经过一个rtt),将拥塞窗口大小*2。

拥塞避免:设置慢启动阈值,一般开始都设为65536。拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是加法增加(每次确认应答/每个rtt,拥塞窗口大小+1),以此来避免拥塞。将报文段的超时重传看做拥塞,则一旦发生超时重传,我们需要先将阈值设为当前窗口大小的一半,并且将窗口大小设为初值1,然后重新进入慢启动过程。

快速重传:快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。(如果当发送端接收到三个重复的确认ACK时,则断定分组丢失,立即重传丢失的报文段,而不必等待重传计时器超时)。采用快重传后可以使整个网络吞吐量提高约20%。

快速恢复 1.当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。请注意:接下去不执行慢开始算法。
2.由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

2. TCP三次握手与四次挥手

三次握手

  1. 客户端主动打开,发送连接请求报文段,将SYN标识位置为1,Sequence Number置为x(TCP规定SYN=1时不能携带数据,x为随机产生的一个值),然后进入SYN_SEND状态
  2. 服务器收到SYN报文段进行确认,将SYN标识位置为1,ACK置为1,Sequence Number置为y,Acknowledgment Number置为x+1,然后进入SYN_RECV状态,这个状态被称为半连接状态
  3. 客户端再进行一次确认,将ACK置为1(此时不用SYN),Sequence Number置为x+1,Acknowledgment Number置为y+1发向服务器,最后客户端与服务器都进入ESTABLISHED状态

四次挥手

  1. 客户端发送一个报文给服务端(没有数据),其中FIN设置为1,Sequence Number置为u,客户端进入FIN_WAIT_1状态
  2. 服务端收到来自客户端的请求,发送一个ACK给客户端,Acknowledge置为u+1,同时发送Sequence Number为v,服务端年进入CLOSE_WAIT状态
  3. 服务端发送一个FIN给客户端,ACK置为1,Sequence置为w,Acknowledge置为u+1,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态
  4. 客户端收到FIN后,进入TIME_WAIT状态,接着发送一个ACK给服务端,Acknowledge置为w+1,Sequence Number置为u+1,最后客户端和服务端都进入CLOSED状态

3. TCP与UDP的区别

  1. TCP是面向连接的传输层协议,即传输数据之前必须先建立好连接。UDP无连接。
  2. TCP是点对点的两点间服务,即一条TCP连接只能有两个端点;UDP支持一对一,一对多,多对一,多对多的交互通信。
  3. TCP是可靠交付:无差错,不丢失,不重复,按序到达。UDP是尽最大努力交付,不保证可靠交付。
  4. TCP有拥塞控制和流量控制保证数据传输的安全性。UDP没有拥塞控制,网络拥塞不会影响源主机的发送效率。
  5. TCP是动态报文长度,即TCP报文长度是根据接收方的窗口大小和当前网络拥塞情况决定的。UDP面向报文,不合并,不拆分,保留上面传下来报文的边界。
  6. TCP首部开销大,首部20个字节。UDP首部开销小,8字节。(源端口,目的端口,数据长度,校验和)
  7. 若通信数据完整性需让位与通信实时性,则应该选用TCP 协议(如文件传输、重要状态的更新等);反之,则使用 UDP 协议(如视频传输、实时通信等)。

4. GET和POST区别

1、get参数通过url传递,post放在request body中。
2、get请求在url中传递的参数是有长度限制的,而post没有。
3、get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。
4、get请求只能进行url编码,而post支持多种编码方式。
5、get请求会浏览器主动cache,而post支持多种编码方式。
6、get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。
7、GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
8、GET产生一个TCP数据包;POST产生两个TCP数据包。

5. 创建SOCKET流程

计算机网络常见面试题目相关推荐

  1. 计算机网络常见面试题目总结,含答案

    0. 写在前面 总导航在此 这些问题是我备考计算机网络过程中,详细总结的常见面试问题和答案.逐个搜索并记录下来,花了很大的精力! 目录 0. 写在前面 1. TCP和UDP的区别 2. OSI七层模型 ...

  2. 计算机专业常见面试题目汇总

    机器学习与深度学习常见面试题(上)-知乎 机器学习与深度学习常见面试题(下)-知乎 计算机考研专业课思维导图-知乎 (31条消息)常见C++笔试面试题整理_ljh0302的专栏-CSDN博客_c++面 ...

  3. 视频教程:Java常见面试题目深度解析!

    视频教程:Java常见面试题目深度解析! Java作为目前比较火的计算机语言之一,连续几年蝉联最受程序员欢迎的计算机语言榜首,因此每年新入职Java程序员也数不胜数.很多java程序员在学成之后,会面 ...

  4. 计算机网络常见面试问题和解析

    计算机网络常见面试问题和解析 1. 网络的几种分层体系结构 2. 建立TCP服务器的各个系统调用 3. socket网络编程有哪些系统调用?其中close是一次就能直接关闭的吗,半关闭状态是怎么产生的 ...

  5. tableau可视化数据分析60讲(二十二)-tableau常见面试题目

    前言 关于tableau的高级部分内容,大家可自行订阅专栏 tableau可视化数据分析高级教程 https://blog.csdn.net/wenyusuran/category_9596753.h ...

  6. 【Java基础】HashMap原理及常见面试题目

    HashMap是Java中最常用的类之一,使用它的时候,有很多小的细节需要大家注意.下面通过他的原理和一些面试题目进行讲解. Java7底层实现 java7中用 HashMap底层算法使用了数组加链表 ...

  7. 计算机组成原理常见面试题目总结,含答案

    0. 写在前面 总导航在此 这些问题是我备考计算机组成原理过程中,详细总结的常见面试问题和答案.逐个搜索并记录下来,花了很大的精力! 目录 0. 写在前面 1. 冯诺依曼体系结构和机器的特点 2. 计 ...

  8. J2SE基础常见面试题目

    </pre>本系列文章收录了一些网友及自己在面试过程中遇到的常见J2SE问题,希望能对参加面试的朋友有所帮助,如果大家有好的题目也可以向我提出,本文将不断地维护更新,感谢. <spa ...

  9. 后端开发常见面试题目

    Java编程基础 语言基础 基础语法 为什么重写 equals 还要重写 hashcode? hashMap中如果key使用自定义类型,要重写hashcode和equals == 和 equals 比 ...

  10. 面试 | 22道机器学习常见面试题目

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|视觉算法分享22道常考的机器学习面试题,给正在准备面试的朋 ...

最新文章

  1. Docker-Compose搭建单体SkyWalking 6.2
  2. 升级到asp.net core 3.1遇到的json异常
  3. 对Linux0.11 中 进程0 和 进程1分析
  4. kafka记录及面试题
  5. 考研失败了,该何去何从?
  6. 国内各大平台的推荐算法,看到360的时候笑喷了……
  7. 客座编辑:刘克,男,博士,国家自然科学基金委员会信息科学部二处(计算机学科)处长。...
  8. [2021] node连接oracle数据库示例[使用oracle官方组件]
  9. 一个广为人知但鲜有人用的技巧:对象池
  10. 15.10. Session/Cookie
  11. IDEA控制台乱码终极解决方案
  12. arcgis api for ios
  13. 圆通快递单css样式
  14. python自学1.2-运算符和表达式
  15. 用Android studio设计贺卡,功能强大的贺卡设计制作软件推荐:Hallmark Card Studio
  16. 使用长角牛演示:防止ARP被攻击的原理和配置----------划水也别忘记学着玩
  17. 六种正确清理C盘的方法,解决你的红色烦恼
  18. app常见功能模块及其使用简单介绍
  19. Could not find artifact javax.comm:comm:jar:2.0.3
  20. 让人们久等了的TCP BBR v2 0快要出炉了

热门文章

  1. 金昌搜索引擎优化网络推广_金昌网站推广,金昌网站推广平台,金昌企业网站推广-奇秀云AI智能推广系统-奇秀网...
  2. ES2015简介和基本语法
  3. python中shuffle是什么意思_python中shuffle()方法的功能详解
  4. 谢烟客---------Linux之用户
  5. 实现页面的图文混排布局(Web作业)
  6. 一台电脑网线连接另一台电脑,通过另一台电脑wifi网络上网
  7. SP2-0734: unknown command beginning lsnrctl st... - rest of line ignored.
  8. 方格分割 (dfs+思维)
  9. Centos7.6上安装水族馆遇到报错BEGIN failed--compilation aborted at /usr/local/bin/asciiquarium line 42.
  10. 计算机在线作业题,精选《计算机原理与结构》在线作业试题