计算机网络(TCP IP)

  • 1 建立TCP服务器的各个系统调用

    • 建立TCP服务器连接的过程中主要通过以下系统调用序列来获取某些函数,这些系统调用主要包括:socket(),bind(),listen(),accept(),send()和recv(),以及close()。
    • 建立TCP客户端时函数调用主要为:socket(),connect(),read()和recv(),以及close()。
  • 2 继上一题,说明socket网络编程有哪些系统调用?其中close是一次就能直接关闭的吗,半关闭状态是怎么产生的?

    • 当执行close函数时,首先将sender buffer中的数据全部发送出去,并将receive buffer中的数据全部丢弃,最后发送FIN,执行主动关闭。这里的关闭时将读写两个方向的数据传输全部关闭,所以在调用close之后并不能从中读取到数据.
    • 半关闭的定义:
      • TCP提供了连接的一端在结束它的发送后,还能接收来自另一端发来的数据的能力,这就是TCP的半关闭。
      • 当一方关闭发送通道后,仍可接受另一方发送过来的数据,这样的情况叫“半关闭”。(拆除TCP连接是:你关闭你的发送通道,我关闭我的发送通道)。
    • 半关闭的产生
      • 客户端发送FIN,另一端发送对这个FIN的ACK报文段。 此时客户端就处于半关闭。
      • 调用shutdown,shutdown的第二个参数为SHUT_WR时,为半关闭。
  • 3 对路由协议的了解与介绍。内部网关协议IGP包括RIP,OSPF,和外部网关协议EGP和BGP.

  • 4 路由协议所使用的算法。

  • 5 TCP和UDP的区别

    • TCP:
      • 传输过程中数据不会消失
      • 按序传输数据
      • 传输的数据大小没有限制
    • UDP:
      • 强调快速传输而非传输顺序
      • 传输的数据可能丢失也可能损毁
      • 传输的数据大小有限制(64K)
      • 限制每次传输的数据
    • TCP和UDP之间最重要的区别就是流控制。TCP传输速度无法超过UDP,但当每次交换的数据量越大时,TCP的传输速率就越接近UDP的传输速率。
    • TCP比UDP慢的原因主要是以下两点
      • 收发数据前后进行的连接设置和清除设置
      • 收发数据过程中为保证可靠性而添加的流控制
  • 6 TCP和UDP相关的协议与端口号

    • 运行在TCP上的协议有
      • HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。
      • HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
      • FTP(File Transfer Protocol,文件传输协议),由名知义,用于文件传输。
      • POP3(Post Office Protocol, version 3,邮局协议),收邮件用。
      • SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件。
      • TELNET(Teletype over the Network,网络电传),通过一个终端(terminal)登陆到网络
      • SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。
    • 运行在UDP上的协议
      • BOOTP(Boot Protocol,启动协议),应用于无盘设备。
      • NTP(Network Time Protocol,网络时间协议),用于网络同步。
      • DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。
    • 基于TCP和UDP的协议
      • DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作(运行在TCP和UDP协议上)。
      • ECHO(Echo Protocol,回绕协议),用于查错及测量应答时间(运行在TCP和UDP协议上)。
  • 7 TCP(UDP,IP)等首部的认识(http请求报文构成)

  • 8 网页解析的过程与实现方法

  • 9 在浏览器中输入URL后执行的全部过程(如www.baidu.com)

    • 大致可分为两大部分:网络通信和页面渲染
    • 网络通信
      • 在浏览器中输入url
        • 用户输入url,例如http://www.baidu.com。其中http为协议,www.baidu.com为网络地址,及指出需要的资源在那台计算机上。一般网络地址可以为域名或IP地址,此处为域名。使用域名是为了方便记忆,但是为了让计算机理解这个地址还需要把它解析为IP地址。
      • 应用层DNS解析域名
        • 客户端先检查本地是否有对应的IP地址,若找到则返回响应的IP地址。若没找到则请求上级DNS服务器,直至找到或到根节点。
        • DNS中递归查询和迭代查询的区别:
          • 1)用户发起域名请求到dnsA,这时dnsA有这个记录,将结果返回给用户,这个过程是递归查询。
          • 2)用户发起域名请求到dnsA,这时dns没有这个记录,它去向dnsB问有没有这个记录,以此类推,直到把结果返回给用户,这个过程是递归查询。
          • 3)用户发起域名请求到dnsA,这时dnsA没有这个记录,它告诉用户,我没有这个记录,你去问dnsB吧,这个过程是迭代查询。
      • 应用层客户端发送HTTP请求
        • HTTP请求包括请求报头和请求主体两个部分,其中请求报头包含了至关重要的信息,包括请求的方法(GET / POST)、目标url、遵循的协议(http / https / ftp…),返回的信息是否需要缓存,以及客户端是否发送cookie等。
      • 传输层TCP传输报文
        • 位于传输层的TCP协议为传输报文提供可靠的字节流服务。它为了方便传输,将大块的数据分割成以报文段为单位的数据包进行管理,并为它们编号,方便服务器接收时能准确地还原报文信息。TCP协议通过“三次握手”等方法保证传输的安全可靠。
      • 网络层IP协议查询MAC地址
        • IP协议的作用是把TCP分割好的各种数据包传送给接收方。而要保证确实能传到接收方还需要接收方的MAC地址,也就是物理地址。IP地址和MAC地址是一一对应的关系,一个网络设备的IP地址可以更换,但是MAC地址一般是固定不变的。ARP协议可以将IP地址解析成对应的MAC地址。当通信的双方不在同一个局域网时,需要多次中转才能到达最终的目标,在中转的过程中需要通过下一个中转站的MAC地址来搜索下一个中转目标。
      • 数据到达数据链路层
        • 在找到对方的MAC地址后,就将数据发送到数据链路层传输。这时,客户端发送请求的阶段结束
      • 服务器接收数据
        • 接收端的服务器在链路层接收到数据包,再层层向上直到应用层。这过程中包括在运输层通过TCP协议讲分段的数据包重新组成原来的HTTP请求报文。
      • 服务器响应请求
        • 服务接收到客户端发送的HTTP请求后,查找客户端请求的资源,并返回响应报文,响应报文中包括一个重要的信息——状态码。状态码由三位数字组成,其中比较常见的是200 OK表示请求成功。301表示永久重定向,即请求的资源已经永久转移到新的位置。在返回301状态码的同时,响应报文也会附带重定向的url,客户端接收到后将http请求的url做相应的改变再重新发送。404 not found 表示客户端请求的资源找不到。
      • 服务器返回相应文件
        • 请求成功后,服务器会返回相应的HTML文件。接下来就到了页面的渲染阶段了。
    • 页面渲染
      • 现代浏览器渲染页面的过程是这样的:jiexiHTML以构建DOM树 –> 构建渲染树 –> 布局渲染树 –> 绘制渲染树。
      • DOM树是由HTML文件中的标签排列组成,渲染树是在DOM树中加入CSS或HTML中的style样式而形成。渲染树只包含需要显示在页面中的DOM元素,像元素或display属性值为none的元素都不在渲染树中。
      • 在浏览器还没接收到完整的HTML文件时,它就开始渲染页面了,在遇到外部链入的脚本标签或样式标签或图片时,会再次发送HTTP请求重复上述的步骤。在收到CSS文件后会对已经渲染的页面重新渲染,加入它们应有的样式,图片文件加载完立刻显示在相应位置。在这一过程中可能会触发页面的重绘或重排。
  • 10 网络层分片的原因与具体实现

  • 11 TCP的三次握手与四次挥手的详细介绍(TCP连接建立与断开是热门问题)

  • 12 TCP握手以及每一次握手客户端和服务器端处于哪个状态(11种状态)

  • 13 为什么使用三次握手,两次握手可不可以?

    • 不可以,三次握手是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
    • 具体例子:“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”
  • 14 TIME_WAIT的意义(为什么要等于2MSL)

    • TIME_WAIT状态下需要等待2MSL
    • MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间。
    • 意义有二:
      • 保证TCP协议的全双工连接能够可靠关闭
      • 保证这次连接的重复数据段从网络中消失
    • 第一点:如果主机1直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因,导致主机2没有收到主机1最后回复的ACK。那么主机2就会在超时之后继续发送FIN,此时由于主机1已经CLOSED了,就找不到与重发的FIN对应的连接。所以,主机1不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。
    • 第二点:如果主机1直接CLOSED,然后又再向主机2发起一个新连接,我们不能保证这个新连接与刚关闭的连接的端口号是不同的。也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达主机2,由于新连接和老连接的端口号是一样的,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。
  • 15 超时重传机制(不太高频)

  • 16 TCP怎么保证可靠性(面向字节流,超时重传,应答机制,滑动窗口,拥塞控制,校验等)?

  • 17 流量控制的介绍,采用滑动窗口会有什么问题(死锁可能,糊涂窗口综合征)?

  • 18 tcp滑动窗口协议

  • 19 拥塞控制和流量控制的区别

  • 20 TCP拥塞控制,算法名字?(极其重要)

  • 21 http协议与TCP联系

  • 22 http/1.0和http/1.1的区别

  • 23 http的请求方法有哪些?get和post的区别。

    • 请求的方法是POST/GET。post和get请求方式的区别是,get把请求内容放在URL后面,但是URL长度有限制。而post是以表单的形势,适合要输入密码之类的,因为不在URL中显示,所以比较安全。
  • 24 http的状态码

  • 25 http和https的区别,由http升级为https需要做哪些操作

    • https协议需要到ca申请证书,一般免费证书很少,需要交费。
    • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    • http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
    • http的连接很简单,是无状态的。
    • HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
  • 26 https的具体实现,怎么确保安全性

  • 27 http中浏览器一个URL的流程,这个过程中浏览器做了什么,URL包括哪三个部分?

  • 28 一个机器能够使用的端口号上限是多少,为什么?可以改变吗?那如果想要用的端口超过这个限制怎么办?

  • 29 对称密码和非对称密码体系

  • 30 数字证书的了解(高频)

  • 31 客户端为什么信任第三方证书

  • 32 RSA加密算法,MD5原理(MD5不算加密算法)

  • 33 单条记录高并发访问的优化

  • 34 介绍一下ping的过程,分别用到了哪些协议

    • 在主机A上运行“Ping 192.168.0.5”后,都发生了些什么呢?
    • (1)首先,Ping命令会构建一个固定格式的ICMP请求数据包,//构建ICMP的数据包
    • (2)然后由ICMP协议将这个数据包连同地址“192.168.0.5”一起交给IP层协议(和 ICMP一样,实际上是一组后台运行的进程);//ICMP+IP地址(目的主机)
    • (3)IP层协议将以地址“192.168.0.5”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并想办法得到192.168.0.5的MAC地址(物理地址,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),以便交给数据链路层构建一个数据帧。关键就在这里,IP层协议通过机器B的IP地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络内查找这台机器的MAC,如果以前两机有过通信,在A机的ARP缓存表应该有B机IP与其MAC的映射关系,如果没有,就发一个ARP请求广播,得到B机的MAC, 一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
    • 主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。
    • 分别用到了UDP ICMP ARP OSPF 这些协议
  • 35 TCP/IP的分片粘包过程

  • 36 有没有抓过TCP包,描述一下

  • 37 一个ip配置多个域名,靠什么识别?

    • 一个IP可以绑定无数个域名,这个没有限制。
    • IIS 5.0能很好地支持一个IP地址对应多个独立的域名,这可以通过两种方法来实现:
    • ⑴设不同的TCP端口号:你需要分别将各个Web站点的“Web站点”选项中的“TCP端口”指向不同的端口号,再将“主目录”中的路径选不同的目录即可。调用格式如“http://www.abc.com:99”。
    • ⑵设不同的主机头名:你需要分别将各个Web站点的“Web站点→高级→编辑”中的“主机头名”一项填入不同的域名,再将“主目录”中的路径选不同的目录即可。调用格式如“http://www.bbc.com”。
  • 38.tcp和upd粘包、拆包问题。

    • UDP是基于报文发送的,从UDP的帧结构可以看出,在UDP首部采用了16bit来指示UDP数据报文的长度,因此在应用层能很好的将不同的数据报文区分开,从而避免粘包和拆包的问题。而TCP是基于字节流的,虽然应用层和TCP传输层之间的数据交互是大小不等的数据块,但是TCP把这些数据块仅仅看成一连串无结构的字节流,没有边界;另外从TCP的帧结构也可以看出,在TCP的首部没有表示数据长度的字段,基于上面两点,在使用TCP传输数据时,才有粘包或者拆包现象发生的可能。而UDP传输时,则没有。
    • 现在假设客户端向服务端连续发送了两个数据包,用packet1和packet2来表示,那么服务端收到的数据可以分为三种,
      • 第一种情况,接收端正常收到两个数据包,即没有发生拆包和粘包的现象,此种情况不在本文的讨论范围内。
      • 第二种情况,接收端只收到一个数据包,由于TCP是不会出现丢包的,所以这一个数据包中包含了发送端发送的两个数据包的信息,这种现象即为粘包。这种情况由于接收端不知道这两个数据包的界限,所以对于接收端来说很难处理。
      • 第三种情况,这种情况有两种表现形式,如下图。接收端收到了两个数据包,但是这两个数据包要么是不完整的,要么就是多出来一块,这种情况即发生了拆包和粘包。这两种情况如果不加特殊处理,对于接收端同样是不好处理的。
    • 发生TCP粘包或拆包有很多原因
      • 1、要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
      • 2、待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。
      • 3、要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
      • 4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。
    • 解决这个问题的关键在于如何给每个数据包添加边界信息,常用的方法有如下几个:
      • 1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。
      • 2、发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。
      • 3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。
  • 39 服务器攻击(DDos攻击)

    • 分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。
    • 通常,攻击者将攻击程序通过代理程序安装在网络上的各个“肉鸡”上,代理程序收到指令时就发动攻击。
    • 随着网络技术发展,DDOS攻击也在不断进化,攻击成本越来越低,而攻击力度却成倍加大,使得DDOS更加难以防范。比如反射型DDoS攻击就是相对高阶的攻击方式。攻击者并不直接攻击目标服务IP,而是通过伪造被攻击者的IP向全球特殊的服务器发请求报文,这些特殊的服务器会将数倍于请求报文的数据包发送到那个被攻击的IP(目标服务IP)。
    • DDOS攻击让人望而生畏,它可以直接导致网站宕机、服务器瘫痪,对网站乃至企业造成严重损失。而且DDOS很难防范,可以说目前没有根治之法,只能尽量提升自身“抗压能力”来缓解攻击,比如购买高防服务。

你可能感兴趣的:(C语言基础知识,慢慢求职路)