c++面经汇总(计算机网络2)

请问TCP三次握手是怎样的

首先:客户端发送同步信号SYN = 1、seq = x到服务端
服务端收到之后,SYN= 1,seq = y、ack = x+1到客户端
客户端收到之后,SYN = 1、ack = y+1到服务端,连接建立

TCP握手为什么两次不行,为什么不用四次

首先来分析一下握手的过程

  1. A发送同步信号SYN 与seq序号

  2. B收到后返回ACK确认序号

  3. B收到后返回seq和SYN

  4. A收到后返回ACK
    实际上是通过上面四步走的
    但是23是可以合并的,因此实际上是三次握手,那么如果四次握手的话,会导致连接的速度与效率,如果两次握手呢

  5. A发送同步信号SYN ,seq

  6. B收到后返回SYN+ACK+seq
    看出来了吗,如果只有两次握手,那么A可以知道B与自己的出实序列号一致,也就是说A是可以和B进行通讯的,但是,B无法知道A是否已经收到了自己的信息,无法确认下一条数据是在什么地方开始发送,自然也就不能随便的发送数据,无法通讯,并且由于TCP是全双工通信,这样的话,违背了其设计
    总结
    通过上面的描述,可以得出结论,如果挥手四次,造成连接的速度与效率降低,如果挥手两次,只能完成一方的通讯,因此三次才是最好的选择。

请你来说一下TCP拥塞控制

拥塞控制是通过窗口进行实现的
在发送方会维持一个拥塞窗口的状态变量,其大小取决于网络的拥塞成都,并且他是动态的变化的;
拥塞控制有三步

  1. 慢启动:最开始的时候,窗口设计的大小为1;
  2. 拥塞避免:在慢启动里面,每次收到一个确认就以*2的倍数扩大窗口,如果窗口一直以两倍的方式进行扩大,很快就会导致网络拥堵,所以当窗口的大小更改到系统设定的阙值,当窗口的值达到系统设定的阙值之后,以+1的方式线性扩大窗口,在窗口的大小以内,数据是不同等确认到来之后再发送数据,而是可以直接发送的;并且将超时冲床看作是拥塞,当发送超时重传的时候,将阙值设定为当前窗口的一般,然后将窗口的大小回复至1,重新进入慢启动的过程;
  3. 快速重传:当遇到三次重复的确认应答的时候,代表收到了三个报文段,但是之前有报文段丢失了,所以会对这个丢失的报文段进行立即重传,然后将阙值设定为当前窗口的一半,窗口的大小设定为,慢启动阙值+3的大小;
TCP和UDP的区别与各自使用的场景

TCP与UDP的区别

  1. TCP是面向连接的 ,UDP是无连接的
  2. TCP提供可靠的连接,UDP不提供:TCP通过三次握手来建立连接,通过拥塞控制,超时重传、确认应答来实现可靠交付;UDP只是尽最大努力去保证交付的可靠性
  3. TCP工作效率第,因为其保证传输数据的正确性机制很多,造成了TCP网络开销很大,工作效率低下,UDP传输控制简单,工作效率相对高
  4. TCP传输数据的控制机制多,大幅度的降低了数据传输的实时性,UDP协议简单,数据实时性较高
  5. 服务对象不同:TCP是点对点的服务,UDP支持一对多、多对一、多对多的交互通信;

TCP与UDP的适用场景

  1. 对数据质量要求高,但是对实时性要求不高的,使用TCP如传输文件、发送邮件等
  2. 对数据的实时性要求比较高,但是对传输质量要求低,如视频通话,语音通话等;
请你来说一下TCP三次握手四次挥手的过程

前一篇博客很纤细的讲解了
计算机网络

说一说HTTP协议

概念: HTTP协议定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器,从层次的角度看,HTTP是面向事务的应用层协议,它规定了在浏览器和服务器之间的请求和相应的格式和规则,他是万维网上能够可靠交换文件(包括文本、声音、图像等各种多媒体文件的重要基础)
** HTTP的操作过程:**从协议的执行过程来说,浏览器要访问www服务器时,首先要完成对www服务器的域名解析,一旦获得了服务器的IP地址,浏览器将通过TCP向服务器发送连接建立请求
万维网大致工作过程如下
在这里插入图片描述
每个万维网站点都有一个服务进程,它不断江亭TCP的端口,当监听到连接的请求后,便与浏览器建立连接,当TCP连接建立后,浏览器就向服务器发送请求获取某一web页面的http请求,当服务器收到http的请求后,将构建锁清秋的web页必须的信息,并通过http相应返回给浏览器,浏览器再将信息进行解释,然后将web页显示给用户,最后,TCP连接释放;

根据浏览器和服务器之间的请求和相应交互,必须按照规定的格式最受一定的规则,这些格式和规则就是HTTP,因此HTTP有两类保温:

  1. 请求保温,从Web客户端向Web服务器发送服务请求
  2. 响应保温:从Web服务器对Web客户端请求的回答;

当用户点击鼠标后所发生的事件时间顺序如下

  1. 浏览器首先要分析连接指向页面的URL(http://www.tsinghua.edu.cn/publish/thu2018/index.html);
  2. 浏览器向DNS请求解析www.tsinghua.edu.cn的IP地址
  3. 域名系统DNS解析处清华大学的服务器的IP地址;
  4. 通过IP地址与使客户端与服务器建立TCP连接
  5. 浏览器发送HTTP请求:GET /publish/thu2018/index.html;
  6. 服务器通过HTTP响应把文件index.html发送给浏览器;
  7. TCP连接释放;
  8. 浏览器将文件index.html进行解释,并将Web页显示给用户

协议特点

  1. HTTP协议使无状态的
    同一个客户第二次访问同一个服务器上的页面时,服务器的相应于第一次被访问的相同。因为服务器并不记得曾经访问过的这个用户,也不记得为该用户曾经服务过多少次
  2. HTTP采用TCP作为运输层协议,保证了数据的可靠传输:
    HTTP不必考虑数据在出阿叔过程中被丢弃后又怎样被重传;
  3. HTTP协议时无连接的: 虽然HTTp使用了TCP连接,但是通信双方在交换HTTP保温之前时不需要先建立HTTP连接的
  4. HTTp既可以使用飞驰就连接,也可以使用持久连接

HTTP的报文结构
HTTP是面向文本的,因此在报文中的每个字段都是一些ASCLL码串,并且每个字段的长度都是不确定的,有两类HTTp报文;
5. 请求报文:从客户端向服务器发送的请求报文 图2
6. 相应报文:从服务器到客户端的回答 图3
在这里插入图片描述
HTTP请求报文中常用的几个方法:

  1. GET 请求读取由URL所标记的信息;
  2. HEAD:请求读取由URL所标记的信息的首部;
  3. POST:给服务器添加信息(例如:注释)
  4. CONNECT:用于代理服务器
请你来说一下GET和POST的区别

区别:

  1. 传递方式:get通过地址栏传输,post通过报文传输
  2. 传输长度:get参数有长度限制(受限于url长度),而post没有限制
  3. get产生一个TCP数据包,post产生两个TCP数据包:对于个体来说会将http header和data一起发送出去,服务器响应,而对于post来说,浏览器首先发送header,服务器响应1xxx,然后浏览器再法data,服务器响应2xxx,通俗点讲,如果用在货物传输上,get相当于一次性的把货送到了,而post需要两次,第一个告诉一会有一批货,第二次再发送货
  4. get产生的url是可以被Bookmark(也就是可以被记录的),而post不会
  5. get请求会被浏览器主动cache,erpost不会,除非手动设置
  6. get请求只能进行url编码,而post支持多种编码方式
  7. get请求参数会被完整保留再浏览器的历史记录中,而post中的参数不会被保留
  8. get比post不安全,因为其参数直接暴漏再url上,所以不能用来传输敏感信息
  9. get参数通过url传递,而post放在requestbody中
请你来说一下socket编程中服务器端和客户端主要用到那些函数

基于TCP的socket
在这里插入图片描述
基于UDP的连接
在这里插入图片描述

请你说一下阻塞,非阻塞,同步,异步

阻塞和非阻塞:在调用者等待发生的事情一直没有发生的时候,一个是一直等在原地,并不去执行别的任务,这叫阻塞,反之不等待的话,就叫非阻塞
同步和异步:调用者必须循环去查看事件有没有发生,这种情况是同步,调用者不需要字节去查看时间有没有发生,而是等待着注册在事件上的回调函数通知自己,这种情况是异步

请你说一说TCP/IP数据链路层的交互过程

当数据报到达网络层,准备向数据链路层发送的时候,首先在网络层的arp缓存表中查找目标IP的mac地址,如果查到,就将目标IP的mac地址封装到链路层数据报的报头,如果没有找到,就发起一个广播,所有收到广播的机器会看这个ip是不是自己的,不是则抛弃,是则将自己的mac地址回复给请求的机器

请你来介绍一下udp的connect函数

udp客户端建立了socket后可以直接调用sendto()函数向服务器发送数据,但是需要在sendto()函数的参数中指定目的地址/端口,但是可以调用connect()函数先指明目的地址/端口,然后就可以使用send()函数向目的地址发送数据了,因为此时套接字已经包含目的地址/端口,也就是send()函数已经知道包含目的地址/端口。
udp通讯中的connect()和bind()函数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值